src/Controller/ProfessionnalController.php line 54

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Service\StatisticManagement;
  4. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  5. use Symfony\Component\Routing\Annotation\Route;
  6. use App\Entity\CompagnyInfo;
  7. use App\Repository\CompagnyInfoRepository;
  8. use Symfony\Component\HttpFoundation\Response;
  9. use App\Repository\GalleryPhotoRepository;
  10. use App\Repository\GalleryVideoRepository;
  11. use App\Entity\GalleryPhoto;
  12. use App\Data\SearchData;
  13. use App\Form\SearchForm;
  14. use Symfony\Component\HttpFoundation\Request;
  15. use Symfony\Component\HttpFoundation\JsonResponse;
  16. use App\Repository\PackageCompagnyRepository;
  17. use App\Repository\DomainActivityRepository;
  18. use App\Repository\DistrictRepository;
  19. use App\Entity\PackageCompagny;
  20. #[Route('/siteProfessionnal')]
  21. class ProfessionnalController extends AbstractController
  22. {
  23.     private CompagnyInfoRepository $compagnyInfoRepository;
  24.     private DomainActivityRepository $domainActivityRepository;
  25.     private DistrictRepository $districtRepository;
  26.     private GalleryPhotoRepository $galleryPhotoRepository;
  27.     private GalleryVideoRepository $galleryVideoRepository;
  28.     private PackageCompagnyRepository $packageCompagnyRepository;
  29.     private StatisticManagement $statisticManagement;
  30.     public function __construct(
  31.         CompagnyInfoRepository $compagnyInfoRepository,
  32.         DomainActivityRepository $domainActivityRepository,
  33.         DistrictRepository $districtRepository,
  34.         GalleryPhotoRepository $galleryPhotoRepository,
  35.         GalleryVideoRepository $galleryVideoRepository,
  36.         PackageCompagnyRepository $packageCompagnyRepository,
  37.         StatisticManagement $statisticManagement
  38.     ) {
  39.         $this->compagnyInfoRepository $compagnyInfoRepository;
  40.         $this->domainActivityRepository $domainActivityRepository;
  41.         $this->districtRepository $districtRepository;
  42.         $this->galleryPhotoRepository $galleryPhotoRepository;
  43.         $this->galleryVideoRepository $galleryVideoRepository;
  44.         $this->packageCompagnyRepository $packageCompagnyRepository;
  45.         $this->statisticManagement $statisticManagement;
  46.     }
  47.     #[Route('/'name'siteProfessionnal')]
  48.     public function index(Request $request): JsonResponse|Response
  49.     {
  50.         $data = new SearchData();
  51.         //on récupérer le numéro de page de la request ou bien on renseigne la premiére page par défaut
  52.         $data->page $request->get('page'1);
  53.         $formData $this->createForm(SearchForm::class, $data);
  54.         $formData->handleRequest($request);
  55.         [$min$max] = $this->compagnyInfoRepository->findMinMax($data);
  56.         $min = ($min != null) ? $min 0;
  57.         $max = ($max != null) ? $max 10000;
  58.         if ($request->get('ajax')) {
  59.             return new JsonResponse([
  60.                                         'content' => $this->renderView(
  61.                                             'clientWeb/professionnalSearch/_professionnalContent.html.twig',
  62.                                             [
  63.                                                 'objectUserArray' => $this->compagnyInfoRepository->findByCompagnySearch(
  64.                                                     $data
  65.                                                 ),
  66.                                             ]
  67.                                         ),
  68.                                         'sorting' => $this->renderView(
  69.                                             'clientWeb/professionnalSearch/_professionnalSorting.html.twig',
  70.                                             [
  71.                                                 'objectUserArray' => $this->compagnyInfoRepository->findByCompagnySearch(
  72.                                                     $data
  73.                                                 ),
  74.                                             ]
  75.                                         ),
  76.                                         'pagination' => $this->renderView(
  77.                                             'clientWeb/professionnalSearch/_professionnalPagination.html.twig',
  78.                                             [
  79.                                                 'objectUserArray' => $this->compagnyInfoRepository->findByCompagnySearch(
  80.                                                     $data
  81.                                                 ),
  82.                                             ]
  83.                                         ),
  84.                                         'min' => $min,
  85.                                         'max' => $max,
  86.                                     ]);
  87.         }
  88.         /**
  89.          * ici on récupère dans un tableau le total de prestataire pour chaque région
  90.          * @var array $dataDistrictArray
  91.          */
  92.         $dataDistrictArray = [];
  93.         $districtArray $this->districtRepository->findAll();
  94.         foreach ($districtArray as $district) {
  95.             $dataDistrictArray[$district->getDistrictName()] = $this->districtRepository->countCompagnyByDistrict(
  96.                 $district
  97.             );
  98.         }
  99.         return $this->render('clientWeb/professionnal.html.twig', [
  100.             'objectUserArray' => $this->compagnyInfoRepository->findByCompagnySearch($data),
  101.             'formSearchData' => $formData->createView(),
  102.             'min' => $min,
  103.             'max' => $max,
  104.             'domainActivityCollection' => $this->domainActivityRepository->findAll(),
  105.             'arrayByDistrict' => $dataDistrictArray,
  106.         ]);
  107.     }
  108.     #[Route('/profil/viewClient/{id}'name'viewProfessionnalPresentation')]
  109.     public function viewDetailProfessionnal(CompagnyInfo $compagny): Response
  110.     {
  111.         return $this->render('clientWeb/listProfessionnal/profilPresentation.html.twig', [
  112.             'compagny' => $compagny,
  113.         ]);
  114.     }
  115.     /**
  116.      * @deprecated
  117.      */
  118.     #[Route('/profil/viewProfessionnalGalleryPhoto/{id}'name'viewProfessionnalGalleryPhoto'methods: ['GET'])]
  119.     public function viewProfessionnalGalleryPhoto(
  120.         CompagnyInfo $compagny
  121.     ): Response {
  122.         $listGalleryVideo null;
  123.         $listGallery $this->galleryPhotoRepository->findBy([
  124.                                                                  'userProperty' => $compagny->getUser(),
  125.                                                              ]);
  126.         $listPhoto = new GalleryPhoto();
  127.         foreach ($listGallery as $gallery) {
  128.             foreach ($gallery->getPhotos() as $photo) {
  129.                 $listPhoto->addPhoto($photo);
  130.             }
  131.         }
  132.         return $this->render('clientWeb/listProfessionnal/profilPresentation.html.twig', [
  133.             'compagny' => $compagny,
  134.             'galleryPhoto' => $listGallery,
  135.             'galleryVideo' => $listGalleryVideo,
  136.         ]);
  137.     }
  138.     /**
  139.      * @deprecated
  140.      */
  141.     #[Route('/profil/viewProfessionnalGalleryVideo/{id}'name'viewProfessionnalGalleryVideo')]
  142.     public function viewProfessionnalGalleryVideo(
  143.         CompagnyInfo $compagny
  144.     ): Response {
  145.         $listGalleryPhoto null;
  146.         $listGallery $this->galleryVideoRepository->findBy([
  147.                                                                  'userProperty' => $compagny->getUser(),
  148.                                                              ]);
  149.         return $this->render('clientWeb/listProfessionnal/profilPresentation.html.twig', [
  150.             'compagny' => $compagny,
  151.             'galleryVideo' => $listGallery,
  152.             'galleryPhoto' => $listGalleryPhoto,
  153.         ]);
  154.     }
  155.     #[Route('/profil/viewProfessionnalGalleryEvent/{id}'name'viewProfessionnalGalleryEvent')]
  156.     public function viewProfessionnalGalleryEvent(CompagnyInfo $compagny): Response
  157.     {
  158.         return $this->json(['code' => 200'message' => 'ok event'], 200);
  159.     }
  160.     #[Route('/listePackage/indexProfessionnalPackage/{id}'name'indexProfessionnalPackage')]
  161.     public function indexProfessionnalPackage(
  162.         CompagnyInfo $compagny,
  163.         Request $request
  164.     ): JsonResponse|Response {
  165.         //on definit le nombre d'élément par page
  166.         $limit 12;
  167.         //on récupére le numéro de page + param de requete
  168.         $page = (int)$request->query->get('page'1);
  169.         $filterMin $request->get('min');
  170.         $filterMax $request->get('max');
  171.         $filterMinPers $request->get('minPersFilter');
  172.         $filterMaxPers $request->get('maxPersFilter');
  173.         $filterWithLimitPers $request->get('withPackage');
  174.         $filterEmptyLimitPers $request->get('emptyPackage');
  175.         $filterString $request->get('namePackage');
  176.         //on récupére les package de compagny en fonction du filtre
  177.         $package $this->packageCompagnyRepository->getPaginatedPackages(
  178.             $compagny,
  179.             $page,
  180.             $limit,
  181.             $filterMin,
  182.             $filterMax,
  183.             $filterMinPers,
  184.             $filterMaxPers,
  185.             $filterWithLimitPers,
  186.             $filterEmptyLimitPers,
  187.             $filterString
  188.         );
  189.         //on récupére le nombre total de pack
  190.         $totalPackage $this->packageCompagnyRepository->getTotalPackages(
  191.             $compagny,
  192.             $filterMin,
  193.             $filterMax,
  194.             $filterMinPers,
  195.             $filterMaxPers,
  196.             $filterWithLimitPers,
  197.             $filterEmptyLimitPers,
  198.             $filterString
  199.         );
  200.         //on recupere le min et max price, et le min et max personne
  201.         [$min$max] = $this->packageCompagnyRepository->findMinMaxPackage($compagny);
  202.         [$minPersFilter$maxPersFilter] = $this->packageCompagnyRepository->findMinMaxPerson($compagny);
  203.         //on verifie si requete ajax
  204.         if ($request->get('ajax')) {
  205.             return new JsonResponse([
  206.                                         'content' => $this->renderView(
  207.                                             'clientWeb/packageSearch/_packageContent.html.twig',
  208.                                             [
  209.                                                 'package' => $package,
  210.                                                 'compagny' => $compagny,
  211.                                             ]
  212.                                         ),
  213.                                         'pagination' => $this->renderView(
  214.                                             'clientWeb/packageSearch/_packagePagination.html.twig',
  215.                                             [
  216.                                                 'limit' => $limit,
  217.                                                 'page' => $page,
  218.                                                 'totalPackage' => $totalPackage
  219.                                             ]
  220.                                         ),
  221.                                         'min' => $min,
  222.                                         'max' => $max,
  223.                                         'minPersFilter' => $minPersFilter,
  224.                                         'maxPersFilter' => $maxPersFilter,
  225.                                     ]);
  226.         }
  227.         $this->statisticManagement->addClic($compagny);
  228.         return $this->render('clientWeb/packageSearch/listePackage.html.twig', [
  229.             'package' => $package,
  230.             'min' => $min,
  231.             'max' => $max,
  232.             'minPersFilter' => $minPersFilter,
  233.             'maxPersFilter' => $maxPersFilter,
  234.             'compagny' => $compagny,
  235.             'limit' => $limit,
  236.             'page' => $page,
  237.             'totalPackage' => $totalPackage
  238.         ]);
  239.     }
  240.     #[Route('/listePackage/viewProfessionnalPackage/{compagny}/package/{package}'name'viewProfessionnalPackage')]
  241.     public function viewProfessionnalPackage(CompagnyInfo $compagnyPackageCompagny $package): Response
  242.     {
  243.         return $this->render('clientWeb/packageSearch/_viewDetailPackage.html.twig', [
  244.             'package' => $package,
  245.             'compagny' => $compagny,
  246.         ]);
  247.     }
  248. }