src/Controller/Front/ProductController.php line 525

Open in your IDE?
  1. <?php
  2. namespace App\Controller\Front;
  3. use App\Entity\Avis;
  4. use App\Entity\Pack;
  5. use App\Entity\User;
  6. use App\Entity\Ticket;
  7. use App\Form\AvisType;
  8. use App\Services\File;
  9. use App\Services\Mail;
  10. use App\Entity\Chambre;
  11. use App\Entity\Company;
  12. use App\Entity\Product;
  13. use App\Entity\Category;
  14. use App\Entity\Security;
  15. use App\Services\Filter;
  16. use App\Entity\Equipment;
  17. use App\Entity\Messaging;
  18. use App\Entity\LangueHote;
  19. use App\Entity\LitsChambre;
  20. use App\Entity\SalleDeBain;
  21. use App\Entity\SubCategory;
  22. use App\Entity\ActivityType;
  23. use App\Entity\ImageComment;
  24. use App\Entity\Caracteristic;
  25. use App\Entity\ProductOption;
  26. use App\Entity\ContactProduct;
  27. use App\Entity\PlanningCompany;
  28. use App\Entity\TypeHebergement;
  29. use App\Entity\TypeParticipant;
  30. use App\Form\TicketProductType;
  31. use App\Entity\TypeLocalisation;
  32. use App\Form\ContactProductType;
  33. use App\Traits\FilterPriceTrait;
  34. use App\Entity\MobilierExterieur;
  35. use Symfony\Component\Mime\Email;
  36. use App\Entity\EquipementsCuisine;
  37. use App\Repository\AvisRepository;
  38. use App\Entity\AccessoiresDeChambre;
  39. use App\Repository\TicketRepository;
  40. use App\Repository\CompanyRepository;
  41. use App\Repository\ProductRepository;
  42. use App\Repository\CategoryRepository;
  43. use App\Repository\LocationRepository;
  44. use App\Repository\SecurityRepository;
  45. use App\Repository\WishListRepository;
  46. use App\Entity\TransporteurWeightPrice;
  47. use App\Repository\EquipmentRepository;
  48. use App\Repository\AdminPromoRepository;
  49. use App\Repository\DepartmentRepository;
  50. use App\Repository\LangueHoteRepository;
  51. use Doctrine\ORM\EntityManagerInterface;
  52. use App\Repository\ReservationRepository;
  53. use App\Repository\SubCategoryRepository;
  54. use App\Repository\CaracteristicRepository;
  55. use App\Repository\ProductOptionRepository;
  56. use Knp\Component\Pager\PaginatorInterface;
  57. use App\Repository\TypePrestationRepository;
  58. use App\Repository\PlanningCompanyRepository;
  59. use App\Repository\TypeHebergementRepository;
  60. use Symfony\Component\HttpFoundation\Request;
  61. use Symfony\Component\Mailer\MailerInterface;
  62. use App\Repository\TypeLocalisationRepository;
  63. use Symfony\Component\HttpFoundation\Response;
  64. use App\Repository\OptionHebergementRepository;
  65. use Symfony\Component\Routing\Annotation\Route;
  66. use Symfony\Component\HttpFoundation\JsonResponse;
  67. use App\Repository\CaracteristiqueVehiculeRepository;
  68. use App\Repository\TransporteurWeightPriceRepository;
  69. use App\Services\StripeConnectService;
  70. use DateTime;
  71. use Symfony\Contracts\HttpClient\HttpClientInterface;
  72. use Symfony\Component\HttpFoundation\Session\SessionInterface;
  73. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  74. use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter;
  75. use Symfony\Bundle\MakerBundle\Str;
  76. use Symfony\Component\Serializer\SerializerInterface;
  77. class ProductController extends AbstractController
  78. {
  79.     use FilterPriceTrait;
  80.     /**
  81.      * @var EntityManagerInterface
  82.      */
  83.     private $em;
  84.     /**
  85.      * @var HttpClientInterface
  86.      */
  87.     private $client;
  88.     public function __construct(EntityManagerInterface $emHttpClientInterface $client)
  89.     {
  90.         $this->em $em;
  91.         $this->client $client;
  92.     }
  93.     /**
  94.      * @Route("/recherche/{page}", defaults={"page"=1}, requirements={"page"="\d+"}, name="front_product_search")
  95.      */
  96.     public function searchFilter(
  97.         int $page
  98.         Request $request
  99.         DepartmentRepository $departmentRepository
  100.         CategoryRepository $categoryRepository
  101.         ProductRepository $productRepository
  102.         PaginatorInterface $paginator
  103.         SessionInterface $session
  104.         LocationRepository $locationRepository
  105.         ReservationRepository $reservationRepository,
  106.         AdminPromoRepository $adminPRomoRepository
  107.     )
  108.     {
  109.         if ($request->isMethod('POST')) {
  110.             if (
  111.                 $request->get('keyword') || $request->get('type') || $request->get('department_filter') || $request->get('department_filter') || $request->get('city_filter') || $request->get('minprice_filter') ||
  112.                 $request->get('maxprice_filter') || $request->get('category') || $request->get('weddingdate') || $request->get('nb_guest') || $request->get('weddingdate_start') || $request->get('weddingdate_end')
  113.             ) {
  114.                 $parameters = [
  115.                     'department' => $request->get('department_filter') !== '' $request->get('department_filter') : null,
  116.                     'city' => $request->get('city_filter') !== '' $request->get('city_filter') : null,
  117.                     'categoryMaster' => $request->get('category_master') !== '' $request->get('category_master') : null,
  118.                     'min_price' => $request->get('minprice_filter') !== '' $request->get('minprice_filter') : null,
  119.                     'max_price' => $request->get('maxprice_filter') !== '' $request->get('maxprice_filter') : null,
  120.                     'weddingdate' => $request->get('weddingdate') !== '' $request->get('weddingdate') : null,
  121.                     'weddingdate_start' => $request->get('weddingdate_start') !== ''$request->get('weddingdate_start') : null,
  122.                     'weddingdate_end' => $request->get('weddingdate_end') !== ''$request->get('weddingdate_end') : null,
  123.                     'category' => !empty($request->get('category')) ? $request->get('category') : null,
  124.                     'nbGuest' => !empty($request->get('nb_guest')) ? $request->get('nb_guest') : null,
  125.                     'type' => !empty($request->get('type')) ? $request->get('type') : null,
  126.                     'keyword' => !empty($request->get('keyword')) ? $request->get('keyword') : null,
  127.                 ];
  128.                 $session->set('department'$request->get('department_filter'));
  129.                 $session->set('city'$request->get('city_filter'));
  130.                 $session->set('min_price'$request->get('minprice_filter'));
  131.                 $session->set('max_price'$request->get('maxprice_filter'));
  132.                 $session->set('category'$request->get('category'));
  133.                 $session->set('weddingdate'$request->get('weddingdate'));
  134.                 $session->set('weddingdate_start'$request->get('weddingdate_start'));
  135.                 $session->set('weddingdate_end'$request->get('weddingdate_end'));
  136.                 $session->set('nbGuest'$request->get('nb_guest'));
  137.                 $session->set('type'$request->get('type'));
  138.                 $session->set('keyword'$request->get('keyword'));
  139.                 // For displaying names
  140.                 if ($parameters['department'] && $parameters['department'] !== 'Lieu') {
  141.                     $department $departmentRepository->find($parameters['department']);
  142.                     $session->set('departmentName'$department->getName());
  143.                 }
  144.                 $categoryBackground null;
  145.                 if ($parameters['categoryMaster'] && !is_array($parameters['categoryMaster'])) {
  146.                     $category $categoryRepository->find($parameters['categoryMaster']);
  147.                     if ($category) {
  148.                         $categoryBackground $category;
  149.                         $session->set('categoryName'$category->getName());
  150.                     }
  151.                 }
  152.                 $products $productRepository->searchProduct($parameters);
  153.                 if ($parameters['weddingdate']) {
  154.                     $dateSearch str_replace('/''-'$parameters['weddingdate']);
  155.                     $datetime = new \DateTime($dateSearch);
  156.                     $datetime->format('Y-m-d');
  157.                 }
  158.             
  159.                 if ($parameters['weddingdate_start'] && $parameters['weddingdate_end']) {
  160.                     $dateStartSearch str_replace('/''-'$parameters['weddingdate_start']);
  161.                     $dateEndSearch str_replace('/''-'$parameters['weddingdate_end']);
  162.                     $dateStart = new \DateTime($dateStartSearch);
  163.                     $dateEnd = new \DateTime($dateEndSearch);
  164.                 }
  165.                 // Calcul count services / products
  166.                 $countService 0;
  167.                 $countProducts 0;
  168.                 /** @var Product $product */
  169.                 foreach ($products as $key => $product) {
  170.                     $isService $product->getSubCategories()->filter(
  171.                         function ($entry) use ($countService$countProducts) {
  172.                             return $entry->getIsService();
  173.                         }
  174.                     );
  175.                     if ($isService) {
  176.                         $countService $countService 1;
  177.                     } else {
  178.                         $countProducts $countProducts 1;
  179.                     }
  180.                     if ($parameters['weddingdate']) {
  181.                         /** @var PlanningCompany $planning */
  182.                         foreach ($product->getCompany()->getPlanningCompanies() as $planning) {
  183.                             if ($planning->getDateStamp() == $datetime->getTimestamp()) {
  184.                                 unset($products[$key]);
  185.                             }
  186.                         }
  187.                     }
  188.                     if ($parameters['weddingdate_start'] && $parameters['weddingdate_end']) {
  189.                         /** @var PlanningCompany $planning */
  190.                         foreach ($product->getCompany()->getPlanningCompanies() as $planning) {
  191.                             $planningDate = new \DateTime();
  192.                             $planningDate->setTimestamp($planning->getDateStamp());
  193.                             if (
  194.                                 ($planningDate >= $dateStart && $planningDate <= $dateEnd)
  195.                             ) {
  196.                                 unset($products[$key]);
  197.                             }
  198.                         }
  199.                     }
  200.                     if ($product->getTypePrestation()) {
  201.                         if ($product->getTypePrestation()->getLabel() == 'location') {
  202.                             $prodEnLocation $locationRepository->getLocationByProduit($product);
  203.                             foreach ($prodEnLocation as $lp) {
  204.                                 if ($parameters['weddingdate']) {
  205.                                     if (($datetime->getTimestamp() >= $lp->getStartAt()->getTimestamp()) && ($datetime->getTimestamp() <= $lp->getEndAt()->getTimestamp())) {
  206.                                         unset($products[$key]);
  207.                                     }
  208.                                 }
  209.                                 if ($parameters['weddingdate_start'] && $parameters['weddingdate_end']) {
  210.                                     if (($dateStart->getTimestamp() >= $lp->getStartAt()->getTimestamp()) && ($dateEnd->getTimestamp() <= $lp->getEndAt()->getTimestamp())) {
  211.                                         unset($products[$key]);
  212.                                     }
  213.                                 }
  214.                             }
  215.                         } else {
  216.                             $prodEnReservation $reservationRepository->getreservationByProduit($product);
  217.                             foreach ($prodEnReservation as $reserv) {
  218.                                 if ($parameters['weddingdate']) {
  219.                                     if ($datetime->getTimestamp() == $reserv->getReservationPlannedAt()->getTimestamp()) {
  220.                                         unset($products[$key]);
  221.                                     }
  222.                                 }
  223.                                 if ($parameters['weddingdate_start'] && $parameters['weddingdate_end']) {
  224.                                     if (($reserv->getReservationPlannedAt()->getTimestamp() >= $dateStart->getTimestamp()) && 
  225.                                         ($reserv->getReservationPlannedAt()->getTimestamp() <= $dateEnd->getTimestamp())) {
  226.                                         unset($products[$key]);
  227.                                     }
  228.                                 }
  229.                             }
  230.                         }
  231.                     }
  232.                 }
  233.                 $pagination $paginator->paginate(
  234.                     $products,
  235.                     $page/*page number*/
  236.                     15 /*limit per page*/
  237.                 );
  238.                 $today = new \DateTimeImmutable();
  239.                 $isPromoAdmin $adminPRomoRepository->findOneByPeriod($today);
  240.                 return $this->render('front/product/listSearch.html.twig', [
  241.                     'products' => $pagination,
  242.                     'countProducts' => $countProducts,
  243.                     'countServices' => $countService,
  244.                     'categoryBackground' => $categoryBackground,
  245.                     'isPromoAdmin' => $isPromoAdmin
  246.                 ]);
  247.             }
  248.         } else {
  249.             $parameters = [
  250.                 'department' => $session->get('department'),
  251.                 'city' => $session->get('city'),
  252.                 'min_price' => $session->get('min_price'),
  253.                 'max_price' => $session->get('max_price'),
  254.                 'weddingdate' => $session->get('weddingdate'),
  255.                 'weddingdate_start' => $session->get('weddingdate_start'),
  256.                 'weddingdate_end' => $session->get('weddingdate_end'),
  257.                 'category' => $session->get('category'),
  258.                 'nbGuest' => $session->get('nbGuest'),
  259.                 'type' => $session->get('type'),
  260.                 'keyword' => $session->get('keyword')
  261.             ];
  262.             $products $productRepository->searchProduct($parameters);
  263.             $pagination $paginator->paginate(
  264.                 $products,
  265.                 $page/*page number*/
  266.                 15 /*limit per page*/
  267.             );
  268.             $categoryBackground null;
  269.             if (isset($parameters['categoryMaster']) && !is_array($parameters['categoryMaster'])) {
  270.                 $category $categoryRepository->find($parameters['categoryMaster']);
  271.                 if ($category) {
  272.                     $categoryBackground $category;
  273.                     $session->set('categoryName'$category->getName());
  274.                 }
  275.             }
  276.             $countService 0;
  277.             $countProducts 0;
  278.             if ($parameters['weddingdate']) {
  279.                 $dateSearch str_replace('/''-'$parameters['weddingdate']);
  280.                 $datetime = new \DateTime($dateSearch);
  281.                 $datetime->format('Y-m-d');
  282.             }
  283.         
  284.             if ($parameters['weddingdate_start'] && $parameters['weddingdate_end']) {
  285.                 $dateStart \DateTime::createFromFormat('d/m/Y'$parameters['weddingdate_start'])->format('Y-m-d');
  286.                 $dateEnd \DateTime::createFromFormat('d/m/Y'$parameters['weddingdate_end'])->format('Y-m-d');
  287.             }
  288.             /** @var Product $product */
  289.             foreach ($products as $key => $product) {
  290.                 $isService $product->getSubCategories()->filter(
  291.                     function ($entry) use ($countService$countProducts) {
  292.                         return $entry->getIsService();
  293.                     }
  294.                 );
  295.                 if ($isService) {
  296.                     $countService $countService 1;
  297.                 } else {
  298.                     $countProducts $countProducts 1;
  299.                 }
  300.                 if ($parameters['weddingdate']) {
  301.                     /** @var PlanningCompany $planning */
  302.                     foreach ($product->getCompany()->getPlanningCompanies() as $planning) {
  303.                         if ($planning->getDateStamp() == $datetime->getTimestamp()) {
  304.                             unset($products[$key]);
  305.                         }
  306.                     }
  307.                 }
  308.                 if ($parameters['weddingdate_start'] && $parameters['weddingdate_end']) {
  309.                     /** @var PlanningCompany $planning */
  310.                     foreach ($product->getCompany()->getPlanningCompanies() as $planning) {
  311.                         $planningDate = new \DateTime();
  312.                         $planningDate->setTimestamp($planning->getDateStamp());
  313.         
  314.                         if ($planningDate >= new \DateTime($dateStart) && $planningDate <= new \DateTime($dateEnd)) {
  315.                             unset($products[$key]);
  316.                         }
  317.                     }
  318.                 }
  319.             }
  320.             // dd($pagination); // error source
  321.             return $this->render('front/product/listSearch.html.twig', [
  322.                 'products' => $pagination,
  323.                 'countProducts' => $countProducts,
  324.                 'countServices' => $countService,
  325.                 'categoryBackground' => $categoryBackground
  326.             ]);
  327.         }
  328.         $session->remove('department');
  329.         $session->remove('city');
  330.         $session->remove('min_price');
  331.         $session->remove('max_price');
  332.         $session->remove('category');
  333.         //$session->remove('weddingdate');
  334.         $session->remove('nbGuest');
  335.         $session->remove('departmentName');
  336.         $session->remove('categoryName');
  337.         return $this->redirectToRoute('front_product_products');
  338.     }
  339.     /**
  340.      * @Route("/services/categorie/{slug}/{page}", defaults={"page"=1}, requirements={"page"="\d+"}, name="front_product_category_slug")
  341.      */
  342.     public function listByCategory(SubCategoryRepository $subCatRint $pageCategory $categoryProductRepository $productRepositoryPaginatorInterface $paginator$slug)
  343.     {
  344.         $subCategory = new SubCategory;
  345.         $subCategory->setSubCategorySlug('string');
  346.         $products $productRepository->productsByCategory($category);
  347.         if (sizeof($subCatR->getSubCategoriesByCategory($category->getId())) > 0) {
  348.             $subCate $subCatR->getSubCategoriesByCategory($category->getId())[0]['id'];
  349.             $subCategory $subCatR->find($subCate);
  350.         }
  351.         $pagination $paginator->paginate(
  352.             $products,
  353.             $page/*page number*/
  354.             15 /*limit per page*/
  355.         );
  356.         return $this->render('front/product/list.html.twig', [
  357.             'products' => $pagination,
  358.             'subcategory' => $subCategory,
  359.             'countProducts' => count($products)
  360.         ]);
  361.     }
  362.     /**
  363.      * @Route("/services/evenements/{subCategorySlug}/{page}", defaults={"page"=1}, requirements={"page"="\d+"}, name="front_product_category_events")
  364.      */
  365.     public function listByCategoryEvent(SubCategory $subCategoryint $pageProductRepository $productRepositoryPaginatorInterface $paginator)
  366.     {
  367.         $products $productRepository->productsByCategoryMaster($subCategory);
  368.         $pagination $paginator->paginate(
  369.             $products,
  370.             $page/*page number*/
  371.             15 /*limit per page*/
  372.         );
  373.         return $this->render('front/product/list.html.twig', [
  374.             'products' => $pagination,
  375.             'subcategory' => $subCategory,
  376.             'countProducts' => count($products)
  377.         ]);
  378.     }
  379.     /**
  380.      * @Route("/services/ordre/{slug}/{page}", defaults={"page"=1}, requirements={"page"="\d+"}, name="front_product_category")
  381.      */
  382.     public function orderByCategory(string $slugint $pageProductRepository $productRepositoryPaginatorInterface $paginator)
  383.     {
  384.         if ($slug === 'note') {
  385.             $products $productRepository->orderByNotes();
  386.         } elseif ($slug === 'reserved') {
  387.             $products $productRepository->orderByCommands();
  388.         }
  389.         $pagination $paginator->paginate(
  390.             $products,
  391.             $page/*page number*/
  392.             15 /*limit per page*/
  393.         );
  394.         $subCategory = new SubCategory;
  395.         $subCategory->setSubCategorySlug('string');
  396.         return $this->render('front/product/list.html.twig', [
  397.             'products' => $pagination,
  398.             'countProducts' => count($products),
  399.             'subcategory' => $subCategory
  400.         ]);
  401.     }
  402.     /**
  403.      * @Route("/services/sous-categorie/{subCategorySlug}/{page}", defaults={"page"=1}, requirements={"page"="\d+"}, name="front_product_subcategory")
  404.      */
  405.     public function listBySubCategory(int $pageSubCategory $subCategoryProductRepository $productRepositoryPaginatorInterface $paginator)
  406.     {
  407.         $products $productRepository->productsBySubCategory($subCategory);
  408.         $pagination $paginator->paginate(
  409.             $products,
  410.             $page/*page number*/
  411.             15 /*limit per page*/
  412.         );
  413.         return $this->render('front/product/list.html.twig', [
  414.             'products' => $pagination,
  415.             'countProducts' => count($products),
  416.             'subcategory' => $subCategory
  417.         ]);
  418.     }
  419.     /**
  420.      * @Route("/services/{page}", defaults={"page"=1}, requirements={"page"="\d+"}, name="front_product_products")
  421.      */
  422.     public function products(
  423.         int $page,
  424.         ProductRepository $productRepository,
  425.         PaginatorInterface $paginator,
  426.         SessionInterface $session,
  427.         AdminPromoRepository $adminPRomoRepository
  428.     ) {
  429.         $session->remove('department');
  430.         $session->remove('min_price');
  431.         $session->remove('max_price');
  432.         $session->remove('category');
  433.         $products $productRepository->findAllServices();
  434.         // dd($products);
  435.         $pagination $paginator->paginate(
  436.             $products,
  437.             $page/*page number*/
  438.             15 /*limit per page*/
  439.         );
  440.         $today = new \DateTimeImmutable();
  441.         $isPromoAdmin $adminPRomoRepository->findOneByPeriod($today);
  442.         return $this->render('front/product/listSearch.html.twig', [
  443.             'products' => $pagination,
  444.             'countProducts' => count($products),
  445.             'isPromoAdmin' => $isPromoAdmin
  446.         ]);
  447.     }
  448.     /**
  449.      * @Route("/service/{slug}/{subCategorySlug}/{product_id}/{productSlug}", name="front_product_single", requirements={"productSlug"=".+"})
  450.      * @ParamConverter("product", options={"id" = "product_id"})
  451.      */
  452.     public function productSingle(
  453.         TicketRepository $ticketRepository,
  454.         $slug,
  455.         Request $request,
  456.         Product $product,
  457.         SessionInterface $session,
  458.         WishListRepository $wishListRepository,
  459.         ProductRepository $productRepository,
  460.         AvisRepository $avisRepository,
  461.         // User $user,
  462.         Mail $mail,
  463.         File $file,
  464.         PlanningCompanyRepository $planningCompanyRepository,
  465.         LocationRepository $locationrepo,
  466.         CaracteristiqueVehiculeRepository $caracteristiqueVehiculeRepo,
  467.         AdminPromoRepository $adminPRomoRepository,
  468.         StripeConnectService $stripeConnectService
  469.     ) {
  470.         $date '';
  471.         if($session->get('weddingdate') != null) {
  472.             $date $session->get('weddingdate');
  473.         }
  474.         $category $slug;
  475.         $ticket = new Ticket();
  476.         $formTicket $this->createForm(TicketProductType::class, $ticket, ['company' => $this->getUser()])->handleRequest($request);
  477.         
  478.         if ($formTicket->isSubmitted() && $formTicket->isValid()) {
  479.             if (!$this->getUser()) {
  480.                 $session->set('chatInCurse'true);
  481.                 return $this->redirectToRoute('app_login');
  482.             }
  483.             if ($this->getUser() != null) {
  484.                 $ticket->setNumero(strtoupper(uniqid()))
  485.                     ->setSubject('contact prestataire')
  486.                     ->setProduct($product)
  487.                     ->setCreatedBy($this->getUser());
  488.             } else {
  489.                 $session->set('chatInCurse'true);
  490.                 return $this->redirectToRoute('app_login');
  491.             }
  492.             $messaging = new Messaging();
  493.             $messaging->setText($request->request->get('ticket_product')['messagings']['text']);
  494.             $messaging->setTicket($ticket);
  495.             $messaging->setMessageUser($this->getUser());
  496.             $ticket->addMessaging($messaging);
  497.             $this->em->persist($ticket);
  498.             $this->em->persist($messaging);
  499.             $this->em->flush();
  500.             return $this->redirectToRoute('front_client_space_tickets');
  501.         }
  502.         // else if($this->getUser() == null) {
  503.         //     echo '<message class="alert alert-danger">Vous devez vous connecter</message>';
  504.         //     return $this->redirectToRoute('app_login');
  505.         // }
  506.         if ($session->get('products')) {
  507.             $productExistInSession false;
  508.             foreach ($session->get('products') as $productSession) {
  509.                 if (array_search($product->getId(), $productSession)) {
  510.                     $productExistInSession true;
  511.                 }
  512.             }
  513.         } else {
  514.             $productExistInSession false;
  515.         }
  516.         $avis = new Avis();
  517.         $form $this->createForm(AvisType::class, $avis)->handleRequest($request);
  518.         $lastProducts $productRepository->getOtherProductsCompanyNotSingle($product->getCompany(), $product);
  519.         if ($form->isSubmitted() && $form->isValid()) {
  520.             $avis->setProduct($product);
  521.             $avis->setClient($this->getUser());
  522.             $newGlobalNote = ($avis->getCommunication() + $avis->getPrice() + $avis->getConformDescription() + $avis->getFiability() + $avis->getServiceQuality() + $avis->getSpeed()) / 6;
  523.             $avis->setGlobalNote($newGlobalNote);
  524.             $this->em->persist($avis);
  525.             $this->em->flush();
  526.             if ($request->files->get('avis') !== null) {
  527.                 foreach ($request->files->get('avis')['imageComments'] as $image) {
  528.                     foreach ($image as $img) {
  529.                         if ($img !== null) {
  530.                             $commentimage $avisRepository->findById(['id' => $avis->getId()]);
  531.                             $imagecomment = new ImageComment();
  532.                             $filename $file->uploadImageComment($img);
  533.                             $imagecomment->setAvis($avis);
  534.                             $imagecomment->setUrl($filename);
  535.                             $this->em->persist($imagecomment);
  536.                         }
  537.                     }
  538.                 }
  539.                 $this->em->flush();
  540.             }
  541.             $this->addFlash('success''Merci pour votre avis !');
  542.             return $this->redirectToRoute('front_product_single', [
  543.                 // 'slug' => $product->getSubCategory()->getCategory()->getSlug(),
  544.                 'slug' => $product->getSubCategories()->toArray()[0]->getCategories()->toArray()[0]->getSlug(),
  545.                 'subCategorySlug' => $product->getSubCategories()->toArray()[0]->getSubCategorySlug(),
  546.                 'product_id' => $product->getId(),
  547.                 'productSlug' => $product->getProductSlug()
  548.             ]);
  549.         }
  550.         $contactProduct = new ContactProduct();
  551.         $formContactProduct $this->createForm(ContactProductType::class, $contactProduct)->handleRequest($request);
  552.         if ($formContactProduct->isSubmitted() && $formContactProduct->isValid()) {
  553.             $contactProduct->setProduct($product);
  554.             $this->em->persist($contactProduct);
  555.             $this->em->flush();
  556.             $mail->contactProvider($product->getCompany(), $contactProduct);
  557.             return $this->json([
  558.                 'status' => 'ok',
  559.                 'message' => 'Message envoyé !'
  560.             ]);
  561.         }
  562.         $productComments $avisRepository->getCommentsByArticle($product);
  563.         $productAvis $avisRepository->findBy(['product' => $product]);
  564.         $globalNote = ['totalNote' => 0'count' => 0];
  565.         $qualityService = ['totalNote' => 0'count' => 0];
  566.         $fiablity = ['totalNote' => 0'count' => 0];
  567.         $price = ['totalNote' => 0'count' => 0];
  568.         $speed = ['totalNote' => 0'count' => 0];
  569.         $conformDescription = ['totalNote' => 0'count' => 0];
  570.         $communication = ['totalNote' => 0'count' => 0];
  571.         foreach ($productAvis as $avis) {
  572.             $globalNote['totalNote'] = $globalNote['totalNote'] + $avis->getGlobalNote();
  573.             $globalNote['count'] = $globalNote['count'] + 1;
  574.             $qualityService['totalNote'] = $qualityService['totalNote'] + $avis->getServiceQuality();
  575.             $qualityService['count'] = $qualityService['count'] + 1;
  576.             $fiablity['totalNote'] = $fiablity['totalNote'] + $avis->getFiability();
  577.             $fiablity['count'] = $fiablity['count'] + 1;
  578.             $price['totalNote'] = $price['totalNote'] + $avis->getPrice();
  579.             $price['count'] = $price['count'] + 1;
  580.             $speed['totalNote'] = $speed['totalNote'] + $avis->getSpeed();
  581.             $speed['count'] = $speed['count'] + 1;
  582.             $conformDescription['totalNote'] = $conformDescription['totalNote'] + $avis->getConformDescription();
  583.             $conformDescription['count'] = $conformDescription['count'] + 1;
  584.             $communication['totalNote'] = $communication['totalNote'] + $avis->getCommunication();
  585.             $communication['count'] = $communication['count'] + 1;
  586.         }
  587.         $caracteristiqueVId $product->getCaracteristiqueVehicule() ? $product->getCaracteristiqueVehicule()->getId() : null;
  588.         if($caracteristiqueVId){
  589.             $caracteristiqueVehicules$caracteristiqueVehiculeRepo->findOneBy(['id'=>$caracteristiqueVId]);
  590.             $caracteristiqueVehiculesDatas = [
  591.                 'isAirConditioned'=>$caracteristiqueVehicules->getIsAirConditioned() ?: null,
  592.                 'doorCount'=>$caracteristiqueVehicules->getDoorCount()?: null,
  593.                 'seatCount'=>$caracteristiqueVehicules->getSeatCount()?: null,
  594.                 'speedLimit'=>$caracteristiqueVehicules->getSpeedLimit()?: null,
  595.                 'gearboxType'=>$caracteristiqueVehicules->getGearboxType()?$caracteristiqueVehicules->getGearboxType()->getType(): null,
  596.                 'fuelType'=>$caracteristiqueVehicules->getFuelType()? $caracteristiqueVehicules->getFuelType()->getFuel() : null
  597.             ];
  598.         }elseif(!$caracteristiqueVId){
  599.             $caracteristiqueVehiculesDatas = [
  600.                 'isAirConditioned'=>null,
  601.                 'doorCount'=>null,
  602.                 'seatCount'=>null,
  603.                 'speedLimit'=>null,
  604.                 'gearboxType'=>null,
  605.                 'fuelType'=>null
  606.             ];
  607.         }
  608.         
  609.         $today = new \DateTimeImmutable();
  610.         $isPromoAdmin $adminPRomoRepository->findOneByPeriod($today);
  611.         $company $product->getCompany();
  612.         $companyStripeConnectId $company->getStripeAccountId();
  613.         $companyStripeConnectAccount null;
  614.         
  615.         if ($companyStripeConnectId) {
  616.             $companyStripeConnectAccount $stripeConnectService->getAccount($companyStripeConnectId);
  617.         }
  618.         return $this->render('front/product/single.html.twig', [
  619.             'plannings' => $planningCompanyRepository->findBy(['company' => $product->getCompany()]),
  620.             'planningClients' => $locationrepo->getLocationByCompany($product->getCompany()),
  621.             'product' => $product,
  622.             'otherProducts' => $lastProducts,
  623.             'category' => $category,
  624.             'btnForm' => $productExistInSession,
  625.             'isWish' => $wishListRepository->findOneBy(['user' => $this->getUser(), 'product' => $product]),
  626.             'formComment' => $form->createView(),
  627.             'formTicket' => $formTicket->createView(),
  628.             'formContact' => $formContactProduct->createView(),
  629.             'productAvis' => $productComments,
  630.             'notes' => [
  631.                 'globalNote' => $globalNote,
  632.                 'qualityService' => $qualityService,
  633.                 'price' => $price,
  634.                 'speed' => $speed,
  635.                 'conformDescription' => $conformDescription,
  636.                 'communication' => $communication,
  637.             ],
  638.             'caracteristiques'=> $caracteristiqueVehiculesDatas,
  639.             'isPromoAdmin' => $isPromoAdmin,
  640.             'dateSearch' => $date,
  641.             'companyStripeConnectAccount' => $companyStripeConnectAccount
  642.         ]);
  643.     }
  644.     /**
  645.      *@Route("/sendMessageAbout/{product_id}/{productSlug}", name="connection-test")
  646.      *@ParamConverter("product", options={"id" = "product_id"})
  647.      */
  648.     public function connectionTest(
  649.         SessionInterface $session
  650.     ) {
  651.         if ($this->getUser() == NULL) {
  652.             $session->set('chatInCurse'true);
  653.             return $this->redirectToRoute('app_login');
  654.         }
  655.     }
  656.     /**
  657.      * @Route("/ajout-produit/{id}", name="front_product_add_product_basket")
  658.      */
  659.     public function addProductBasket(Product $productRequest $requestSessionInterface $sessionSubCategoryRepository $subrepoProductOptionRepository $prodOptionrepo)
  660.     {
  661.         // dd(json_decode($request->get('groupOption')));
  662.         // dd($product->getProductOptions()->toArray());
  663.         $options $product->getProductOptions()->toArray();
  664.         // dd($options[1]);
  665.         // foreach ($request->get('qtyOption') as $key => $value) {
  666.         //     echo $value . "<br>";
  667.         // }
  668.         foreach ($options as $key => $value) {
  669.             // dd($value->getPQte());
  670.             if (isset($request->get('qtyOption')[$value->getId()]) && $request->get('qtyOption')[$value->getId()] > $value->getPQte()) {
  671.                 // return $this->json([
  672.                 //     'message' => 'error',
  673.                 //     'response' => 'Quantité option non disponible'
  674.                 // ]);
  675.             }
  676.         }
  677.         if (!$request->get('quantity')) {
  678.             return $this->json([
  679.                 'message' => 'error',
  680.                 'response' => 'Quantité incorrecte'
  681.             ]);
  682.         }
  683.         if ($request->get('quantity') > $product->getQuantity()) {
  684.             return $this->json([
  685.                 'message' => 'error',
  686.                 'response' => 'Quantité non disponible'
  687.             ]);
  688.         }
  689.         // $archivoption="";
  690.         if ($session->get('products')) {
  691.             $allProducts $session->get('products');
  692.             $productExistInSession false;
  693.             foreach ($session->get('products') as $key => $productSession) {
  694.                 // if (!empty($productSession['options_fairepar'])) {
  695.                 //     $archivoption =$productSession['options_fairepar'];
  696.                 // }
  697.                 if (array_search($product->getId(), $productSession)) {
  698.                     $productExistInSession true;
  699.                     unset($allProducts[$key]);
  700.                     $session->set('products'$allProducts);
  701.                 }
  702.             }
  703.         } else {
  704.             $productExistInSession false;
  705.         }
  706.         if ($productExistInSession) {
  707.             return $this->json([
  708.                 'message' => 'ok',
  709.                 'response' => 'removed'
  710.             ]);
  711.         }
  712.         $sub $subrepo->getSubcategoryByProduit($product);
  713.         if ($sub[0]->getSubCategorySlug() == "faire-part") {
  714.             $tabOption = [];
  715.             $tabId = [];
  716.             if (!empty($request->get('options'))) {
  717.                 foreach ($request->get('options') as $key => $value) {
  718.                     $tabId[] = $key;
  719.                 }
  720.             }
  721.             if (!empty($request->get('idoptions'))) {
  722.                 $idoption $request->get('idoptions');
  723.                 $tabId explode(','$idoption);
  724.             }
  725.             for ($f 0$f sizeof($tabId); $f++) {
  726.                 $existe1 false;
  727.                 if (!empty($request->get('tail'))) {
  728.                     for ($i 0$i json_decode($request->get('tail')); $i++) {
  729.                         if (json_decode($request->get('OpId_' $i))->idoption == $tabId[$f]) {
  730.                             $existe1 true;
  731.                             $tabOption["option_" $f]["idoption"] = json_decode($request->get('OpId_' $i))->idoption json_decode($request->get('OpId_' $i))->idoption null;
  732.                             $tabOption["option_" $f]["nomoption"] = json_decode($request->get('OpId_' $i))->nomoption json_decode($request->get('OpId_' $i))->nomoption null;
  733.                             $tabOption["option_" $f]["imageoption"] = json_decode($request->get('OpId_' $i))->imageoption json_decode($request->get('OpId_' $i))->imageoption null;
  734.                             $tabOption["option_" $f]["color"] = json_decode($request->get('OpId_' $i))->color json_decode($request->get('OpId_' $i))->color null;
  735.                             $tabOption["option_" $f]["form"] = json_decode($request->get('OpId_' $i))->form json_decode($request->get('OpId_' $i))->form null;
  736.                             $tabOption["option_" $f]["finition"] = json_decode($request->get('OpId_' $i))->finition json_decode($request->get('OpId_' $i))->finition null;
  737.                             $tabOption["option_" $f]["papier"] = json_decode($request->get('OpId_' $i))->papier json_decode($request->get('OpId_' $i))->papier null;
  738.                             $tabOption["option_" $f]["etiquette"] = json_decode($request->get('OpId_' $i))->etiquette json_decode($request->get('OpId_' $i))->etiquette null;
  739.                             $tabOption["option_" $f]["ruban"] = json_decode($request->get('OpId_' $i))->ruban json_decode($request->get('OpId_' $i))->ruban null;
  740.                             if (json_decode($request->get('OpId_' $i))->quantite != null && json_decode($request->get('OpId_' $i))->quantite != "Échantillon (0,00 €)") {
  741.                                 $tabOption["option_" $f]["quantite"] = json_decode($request->get('OpId_' $i))->quantite ? (int)explode(" "json_decode($request->get('OpId_' $i))->quantite)[0] : null;
  742.                                 $tabOption["option_" $f]["price"] = json_decode($request->get('OpId_' $i))->quantite ? (int)explode(" "json_decode($request->get('OpId_' $i))->quantite)[2] : null;
  743.                             } else {
  744.                                 $tabOption["option_" $f]["quantite"] = 1;
  745.                                 $tabOption["option_" $f]["price"] = 0.00;
  746.                             }
  747.                         }
  748.                     }
  749.                 }
  750.                 if (!$existe1) {
  751.                     foreach ($prodOptionrepo->findProduitOptionchecked($tabId[$f]) as $optionsProd) {
  752.                         $tabOption["option_" $f]["idoption"] = $optionsProd->getId() ? $optionsProd->getId() : null;
  753.                         $tabOption["option_" $f]["nomoption"] = $optionsProd->getName() ? $optionsProd->getName() : null;
  754.                         $tabOption["option_" $f]["imageoption"] = $optionsProd->getImage1() ? $optionsProd->getImage1() : null;
  755.                         $tabOption["option_" $f]["color"] = $optionsProd->getColorsOption() ? $optionsProd->getColorsOption()[0] : null;
  756.                         $tabOption["option_" $f]["form"] = $optionsProd->getFormat() ? $optionsProd->getFormat()[0] : null;
  757.                         $tabOption["option_" $f]["finition"] = $optionsProd->getFinition() ? $optionsProd->getFinition()[0] : null;
  758.                         $tabOption["option_" $f]["papier"] = $optionsProd->getPapier() ? $optionsProd->getPapier()[0] : null;
  759.                         $tabOption["option_" $f]["etiquette"] = $optionsProd->getEtiquette() ? $optionsProd->getEtiquette()[0] : null;
  760.                         $tabOption["option_" $f]["ruban"] = $optionsProd->getRuban() ? $optionsProd->getRuban()[0] : null;
  761.                         $tabOption["option_" $f]["quantite"] = 1;
  762.                         $tabOption["option_" $f]["price"] = 0.00;
  763.                     }
  764.                 }
  765.             }
  766.             $product = [
  767.                 'productId' => $product->getId(),
  768.                 'quantity' => $request->get('quantity'),
  769.                 'size' => $request->get('size') ? $request->get('size') : null,
  770.                 'sizeRing' => $request->get('size_ring') ? $request->get('size_ring') : null,
  771.                 'nbGuest' => $request->get('nb_guest') ? $request->get('nb_guest') : null,
  772.                 'color' => $request->get('color') ? $request->get('color') : null,
  773.                 'options' => null,
  774.                 'options_fairepar' => $tabOption $tabOption null,
  775.                 'qtyOption' => $request->get('qtyOption') ? $request->get('qtyOption') : null
  776.             ];
  777.         } else {
  778.             $options = [];
  779.             // for ($g=0; $g < sizeof(json_decode($request->get('groupOption'))); $g++) { 
  780.             //     $options[]=json_decode($request->get('groupOption'))[g]['idoption'];
  781.             // }
  782.             $groupsOption json_decode($request->get('groupOption'));
  783.             if (empty($groupsOption) || $groupsOption == null) {
  784.             } else {
  785.                 foreach ($groupsOption as $key => $gropOption) {
  786.                     foreach ($gropOption->labelo as $key => $lab) {
  787.                         $options[$gropOption->idoption][] = [
  788.                             "valeur" => explode("#_#"$lab)[0],
  789.                             "prix" => explode("#_#"$lab)[1],
  790.                             "qte" => $gropOption->qte[$key]
  791.                         ];
  792.                     }
  793.                     // $options[]=$valer_prix; 
  794.                     // $options[]=$gropOption; 
  795.                     // $options[$gropOption->idoption]=$gropOption->labelo;
  796.                     // $options[$gropOption->idoption]['qte']=$gropOption->qte;
  797.                 }
  798.             }
  799.             // dd($options);
  800.             $product = [
  801.                 'productId' => $product->getId(),
  802.                 'quantity' => $request->get('quantity'),
  803.                 'size' => $request->get('size') ? $request->get('size') : null,
  804.                 'sizeRing' => $request->get('size_ring') ? $request->get('size_ring') : null,
  805.                 'nbGuest' => $request->get('nb_guest') ? $request->get('nb_guest') : null,
  806.                 'color' => $request->get('color') ? $request->get('color') : null,
  807.                 // 'options' => $request->get('options') ? $request->get('options') : null,
  808.                 // 'qtyOption' => $request->get('qtyOption') ? $request->get('qtyOption') : null
  809.                 'options' => $options
  810.             ];
  811.         }
  812.         //    dd($product);
  813.         if ($session->get('products')) {
  814.             $products $session->get('products');
  815.             array_push($products$product);
  816.             $session->set('products'$products);
  817.         } else {
  818.             $session->set('products', [$product]);
  819.         }
  820.         if (!empty($tabOption)) {
  821.             $session->set('archive'$tabOption);
  822.         }
  823.         return $this->json([
  824.             'message' => 'ok',
  825.             'response' => 'added'
  826.         ]);
  827.     }
  828.     /**
  829.      * @Route("/ajout-pack/{id}", name="front_product_add_pack_basket")
  830.      */
  831.     public function addPackToBasket(Pack $packSessionInterface $sessionRequest $request)
  832.     {
  833.         if (!$session->get('packs')) {
  834.             $session->set('packs'$pack->getId());
  835.         } else {
  836.             $session->remove('packs');
  837.             return $this->json([
  838.                 'message' => "ok",
  839.                 'response' => 'removed'
  840.             ]);
  841.         }
  842.         return $this->json([
  843.             'message' => 'ok',
  844.             'response' => 'added'
  845.         ]);
  846.     }
  847.     /**
  848.      * @Route("/get-subcategory", name="front_company_get_subcategory")
  849.      */
  850.     public function getSubCategory(
  851.         Request $request,
  852.         SubCategoryRepository $subCategoryRepository,
  853.         TypeLocalisationRepository $typLocalRep,
  854.         TypeHebergementRepository $typHebRep,
  855.         LangueHoteRepository $langHoteRep,
  856.         EquipmentRepository $equipmRep,
  857.         SecurityRepository $secureRep,
  858.         CaracteristicRepository $caracteristicRep
  859.     ) {
  860.         $typLocalisations $typLocalRep->findAll();
  861.         $typeHebergements $typHebRep->findAll();
  862.         $securities $secureRep->findAll();
  863.         $hoteLanguages $langHoteRep->findAll();
  864.         $equipments $equipmRep->findAll();
  865.         $caracteristics $caracteristicRep->findAll();
  866.         // Activités liées aux activités
  867.         // $activities = $subCategoryRepository->findCategoryBySubCategorySlug('activites');
  868.         $activities $this->em->getRepository(ActivityType::class)->findAll();
  869.         if ($request->get('data')) {
  870.             $idCategories json_decode($request->get('data'));
  871.             $isClothing false;
  872.             $isColor false;
  873.             $isClothingRing false;
  874.             $isNbGuest false;
  875.             $isService false;
  876.             $isVehicle false;
  877.             $slugs = [];
  878.             $slug '';
  879.             $categoryHebergement $this->em->getRepository(Category::class)->findOneBy(['slug' => 'hebergements']);
  880.             $subCategoryHebergements $categoryHebergement->getSubCategories()->toArray();
  881.             $subCategorySlugHebergement = [];
  882.             foreach ($subCategoryHebergements as $subCategoryHebergement) {
  883.                 $subCategorySlugHebergement[] = $subCategoryHebergement->getSubCategorySlug();
  884.             }
  885.             if ($idCategories->idCategory) {
  886.                 foreach ($idCategories as $idCategory) {
  887.                     foreach ($idCategory as $idcat) {
  888.                         $subCategory $subCategoryRepository->find($idcat);
  889.                         $slugs[] = $subCategory->getSubCategorySlug();
  890.                         $slug $subCategory->getSubCategorySlug();
  891.                         $isClothing $subCategory->getIsClothing() ? true $isClothing;
  892.                         $isColor $subCategory->getIsColor() ? true $isColor;
  893.                         $isClothingRing $subCategory->getIsClothingRing() ? true $isClothingRing;
  894.                         $isNbGuest $subCategory->getIsNbGuest() ? true $isNbGuest;
  895.                         $isService $subCategory->getIsService() ? true $isService;
  896.                         $isVehicle $subCategory->getIsVehicle() ? true $isVehicle;
  897.                     }
  898.                 }
  899.             }
  900.             //    dd($isColor,$isFomat,$isFinition);
  901.             return $this->json([
  902.                 'subCategSlugs' => $slugs,
  903.                 'subCategSlug' => $slug,
  904.                 'isClothing' => $isClothing,
  905.                 'isColor' => $isColor,
  906.                 'isNbGuest' => $isNbGuest,
  907.                 'isClothingRing' => $isClothingRing,
  908.                 'isService' => $isService,
  909.                 'isVehicle' => $isVehicle,
  910.                 'subCategorySlugHebergement' => $subCategorySlugHebergement,
  911.                 'isHebergementHTML' => $this->render('front/html/choix_type_hebergement.html.twig', [
  912.                     'typLocalisations' => $typLocalisations,
  913.                     'typeHebergements' => $typeHebergements,
  914.                     'securities' => $securities,
  915.                     'hoteLanguages' => $hoteLanguages,
  916.                     'equipments' => $equipments,
  917.                     'caracteristics' => $caracteristics
  918.                 ]),
  919.                 'isClothingHTML' => $this->render('front/html/clothing.html.twig'),
  920.                 'isColorHTML' => $this->render('front/html/colors.html.twig'),
  921.                 'isNbGuestHTML' => $this->render('front/html/quantity.html.twig'),
  922.                 'isClothingRingHTML' => $this->render('front/html/clothing_ring.html.twig'),
  923.                 'isActivitesHTML' => $this->render('front/html/choix_type_activite.html.twig', [
  924.                     'activities' => $activities
  925.                 ])
  926.             ]);
  927.         }
  928.     }
  929.     /**
  930.      * @Route("/get-subcategory-hebergement", name="front_company_get_subcategory_hebergement")
  931.      */
  932.     public function getSubCategoryHebergement(
  933.         Request $request,
  934.         SubCategoryRepository $subCategoryRepository,
  935.         TypeLocalisationRepository $typLocalRep,
  936.         TypeHebergementRepository $typHebRep,
  937.         LangueHoteRepository $langHoteRep,
  938.         EquipmentRepository $equipmRep,
  939.         SecurityRepository $secureRep,
  940.         CaracteristicRepository $caracteristicRep
  941.     ) {
  942.         $typLocalisations $typLocalRep->findAll();
  943.         $typeHebergements $typHebRep->findAll();
  944.         $securities $secureRep->findAll();
  945.         $hoteLanguages $langHoteRep->findAll();
  946.         $equipments $equipmRep->findAll();
  947.         $caracteristics $caracteristicRep->findAll();
  948.         if ($request->get('data')) {
  949.             $idCategories json_decode($request->get('data'));
  950.             $isClothing false;
  951.             $isColor false;
  952.             $isClothingRing false;
  953.             $isNbGuest false;
  954.             $isService false;
  955.             $slugs = [];
  956.             $slug '';
  957.             $categoryHebergement $this->em->getRepository(Category::class)->findOneBy(['slug' => 'hebergement']);
  958.             $subCategoryHebergements $categoryHebergement->getSubCategories()->toArray();
  959.             foreach ($subCategoryHebergements as $subCategoryHebergement) {
  960.                 $subCategorySlugHebergement[] = $subCategoryHebergement->getSubCategorySlug();
  961.             }
  962.             if ($idCategories->idCategory) {
  963.                 foreach ($idCategories as $idCategory) {
  964.                     foreach ($idCategory as $idcat) {
  965.                         $subCategory $subCategoryRepository->find($idcat);
  966.                         $slugs[] = $subCategory->getSubCategorySlug();
  967.                         $slug $subCategory->getSubCategorySlug();
  968.                         $isClothing $subCategory->getIsClothing() ? true $isClothing;
  969.                         $isColor $subCategory->getIsColor() ? true $isColor;
  970.                         $isClothingRing $subCategory->getIsClothingRing() ? true $isClothingRing;
  971.                         $isNbGuest $subCategory->getIsNbGuest() ? true $isNbGuest;
  972.                         $isService $subCategory->getIsService() ? true $isService;
  973.                     }
  974.                 }
  975.             }
  976.             //    dd($isColor,$isFomat,$isFinition);
  977.             return $this->json([
  978.                 'subCategSlugs' => $slugs,
  979.                 'subCategSlug' => $slug,
  980.                 'isClothing' => $isClothing,
  981.                 'isColor' => $isColor,
  982.                 'isNbGuest' => $isNbGuest,
  983.                 'isClothingRing' => $isClothingRing,
  984.                 'isService' => $isService,
  985.                 'subCategorySlugHebergement' => $subCategorySlugHebergement,
  986.                 'isHebergementHTML' => $this->render('front/html/optionHebergement.html.twig', [
  987.                     'typLocalisations' => $typLocalisations,
  988.                     'typeHebergements' => $typeHebergements,
  989.                     'securities' => $securities,
  990.                     'hoteLanguages' => $hoteLanguages,
  991.                     'equipments' => $equipments,
  992.                     'caracteristics' => $caracteristics
  993.                 ]),
  994.                 'isClothingHTML' => $this->render('front/html/clothing.html.twig'),
  995.                 'isColorHTML' => $this->render('front/html/colors.html.twig'),
  996.                 'isNbGuestHTML' => $this->render('front/html/quantity.html.twig'),
  997.                 'isClothingRingHTML' => $this->render('front/html/clothing_ring.html.twig')
  998.             ]);
  999.         }
  1000.     }
  1001.     /**
  1002.      * @Route("/get-subCategoryAdded", name="front_company_get_subCategoryAdded")
  1003.      */
  1004.     public function subCategoryAdded(Request $requestSubCategoryRepository $subCategRepCategoryRepository $categRep)
  1005.     {
  1006.         $subCategSelected = [];
  1007.         $slugSubCateg = [];
  1008.         if ($request->get('data')) {
  1009.             $subCategAdded json_decode($request->get('data'));
  1010.             if ($subCategAdded) {
  1011.                 foreach ($subCategAdded as $idSubCateg) {
  1012.                     $subCategSelected[] = $subCategRep->find($idSubCateg);
  1013.                 }
  1014.             }
  1015.         }
  1016.         if ($subCategSelected) {
  1017.             foreach ($subCategSelected as $subCateg) {
  1018.                 $slugSubCateg[] = $subCateg->getSubCategorySlug();
  1019.             }
  1020.         }
  1021.         $criteres['slug'] = 'hebergements';
  1022.         $subCategHebergm $categRep->findByCriteres($criteres)[0]->getSubCategories()->toArray();
  1023.         foreach ($subCategHebergm as $subHebg) {
  1024.             $allSubCategHeberg[] = $subHebg->getSubCategorySlug();
  1025.         }
  1026.         return $this->json([
  1027.             'subCategSelected' => $slugSubCateg,
  1028.             'allSubCategHeberg' => $allSubCategHeberg
  1029.         ]);
  1030.     }
  1031.     /**
  1032.      * @Route("/get-typeLocalisationAdded", name="front_company_get_typeLocalisationAdded")
  1033.      */
  1034.     public function typeLocalisationAdded(Request $requestTypeLocalisationRepository $typLocalRep)
  1035.     {
  1036.         $typeLocalisationSelected = [];
  1037.         if ($request->get('data')) {
  1038.             $typeLocalisationAdded json_decode($request->get('data'));
  1039.             if ($typeLocalisationAdded) {
  1040.                 foreach ($typeLocalisationAdded as $idTypeLocal) {
  1041.                     $typeLocalisationSelected[] = $typLocalRep->find($idTypeLocal);
  1042.                 }
  1043.             }
  1044.         }
  1045.         return $this->json([
  1046.             'typeLocalisationSelected' => $typeLocalisationSelected
  1047.         ]);
  1048.     }
  1049.     /**
  1050.      * @Route("/get-subcategory-fairepart", name="front_company_get_subcategory-fairepart")
  1051.      */
  1052.     public function getSubCatFairepart(Request $requestSubCategoryRepository $subCategoryRepositoryFilter $filtre)
  1053.     {
  1054.         if ($request->get('data')) {
  1055.             $idCategories json_decode($request->get('data'));
  1056.             $isFairepart false;
  1057.             if ($idCategories->idCategory) {
  1058.                 foreach ($idCategories as $idCategory) {
  1059.                     foreach ($idCategory as $idcat) {
  1060.                         $subCategory $subCategoryRepository->find($idcat);
  1061.                         $isFairepart $subCategory->getIsFairepart() ? true $isFairepart;
  1062.                     }
  1063.                 }
  1064.             }
  1065.             return $this->json([
  1066.                 'isFairepart' =>  $isFairepart,
  1067.                 'couleurs' => $filtre->listecouleurs()
  1068.             ]);
  1069.         }
  1070.     }
  1071.     /**
  1072.      * @Route("/get-typeHebergementAdded", name="front_company_get_typeHebergementAdded")
  1073.      */
  1074.     public function typeHebergementAdded(Request $requestTypeHebergementRepository $typHebgRep)
  1075.     {
  1076.         $typLocalisations $this->em->getRepository(TypeLocalisation::class)->findAll();
  1077.         $typeHebergements $this->em->getRepository(TypeHebergement::class)->findAll();
  1078.         $securities $this->em->getRepository(Security::class)->findAll();
  1079.         $hoteLanguages $this->em->getRepository(LangueHote::class)->findAll();
  1080.         $equipments $this->em->getRepository(Equipment::class)->findAll();
  1081.         $caracteristics $this->em->getRepository(Caracteristic::class)->findAll();
  1082.         $equipementsCuisine $this->em->getRepository(EquipementsCuisine::class)->findAll();
  1083.         $salleDeBain $this->em->getRepository(SalleDeBain::class)->findAll();
  1084.         $accessoiresDeChambre $this->em->getRepository(AccessoiresDeChambre::class)->findAll();
  1085.         $mobilierExterieur $this->em->getRepository(MobilierExterieur::class)->findAll();
  1086.         $typHebergSelected = [];
  1087.         if ($request->get('data')) {
  1088.             $typeHebergementAdded json_decode($request->get('data'));
  1089.             if ($typeHebergementAdded) {
  1090.                 $typHebergSelected $typHebgRep->find($typeHebergementAdded[0]);
  1091.             }
  1092.             $typeHebergement $typHebergSelected->getSlugTypeHebergm();
  1093.         }
  1094.         if ($typeHebergement == "hotel") {
  1095.             $type $this->render('front/html/typeHebergement/HotelHebergement.html.twig', [
  1096.                 'typLocalisations' => $typLocalisations,
  1097.                 'securities' => $securities,
  1098.                 'hoteLanguages' => $hoteLanguages,
  1099.                 'equipments' => $equipments,
  1100.                 'caracteristics' => $caracteristics,
  1101.                 'equipementsCuisine' => $equipementsCuisine,
  1102.                 'salleDeBain' => $salleDeBain,
  1103.                 'accessoiresDeChambre' => $accessoiresDeChambre,
  1104.                 'mobilierExterieur' => $mobilierExterieur
  1105.             ]);
  1106.         } else if ($typeHebergement == "appartement") {
  1107.             $type $this->render('front/html/typeHebergement/appartement.html.twig', [
  1108.                 'typLocalisations' => $typLocalisations,
  1109.                 'securities' => $securities,
  1110.                 'hoteLanguages' => $hoteLanguages,
  1111.                 'equipments' => $equipments,
  1112.                 'caracteristics' => $caracteristics,
  1113.                 'equipementsCuisine' => $equipementsCuisine,
  1114.                 'salleDeBain' => $salleDeBain,
  1115.                 'accessoiresDeChambre' => $accessoiresDeChambre,
  1116.                 'mobilierExterieur' => $mobilierExterieur
  1117.             ]);
  1118.         } else if ($typeHebergement == "maison" || $typeHebergement == "villa" || $typeHebergement == "camping" || $typeHebergement == "bateau" || $typeHebergement == "chalet") {
  1119.             $type $this->render('front/html/typeHebergement/maisonHebergement.html.twig', [
  1120.                 'typLocalisations' => $typLocalisations,
  1121.                 'securities' => $securities,
  1122.                 'hoteLanguages' => $hoteLanguages,
  1123.                 'equipments' => $equipments,
  1124.                 'caracteristics' => $caracteristics,
  1125.                 'equipementsCuisine' => $equipementsCuisine,
  1126.                 'salleDeBain' => $salleDeBain,
  1127.                 'accessoiresDeChambre' => $accessoiresDeChambre,
  1128.                 'mobilierExterieur' => $mobilierExterieur
  1129.             ]);
  1130.         }
  1131.         return $this->json([
  1132.             'typHebergSelected' => $typHebergSelected,
  1133.             'isHebergementHTML' => $type
  1134.         ]);
  1135.     }
  1136.     /**
  1137.      * @Route("/get-languagesAdded", name="front_company_get_languagesAdded")
  1138.      */
  1139.     public function languagesAdded(Request $requestLangueHoteRepository $langHoteRep)
  1140.     {
  1141.         $selectLanguage = [];
  1142.         if ($request->get('data')) {
  1143.             $languagesAdded json_decode($request->get('data'));
  1144.             if ($languagesAdded) {
  1145.                 foreach ($languagesAdded as $idLangue) {
  1146.                     $selectLanguage[] = $langHoteRep->find($idLangue);
  1147.                 }
  1148.             }
  1149.         }
  1150.         return $this->json([
  1151.             'selectLanguage' => $selectLanguage
  1152.         ]);
  1153.     }
  1154.     /**
  1155.      * @Route("/get-equipementsAdded", name="front_company_get_equipementsAdded")
  1156.      */
  1157.     public function equipemenstAdded(Request $requestEquipmentRepository $equipmRep)
  1158.     {
  1159.         $selectedEquipement = [];
  1160.         if ($request->get('data')) {
  1161.             $equipemenstAdded json_decode($request->get('data'));
  1162.             if (!empty($equipemenstAdded)) {
  1163.                 foreach ($equipemenstAdded as $idEqupm) {
  1164.                     $selectedEquipement[] = $equipmRep->find($idEqupm);
  1165.                 }
  1166.             }
  1167.         }
  1168.         return $this->json([
  1169.             'selectedEquipement' => $selectedEquipement
  1170.         ]);
  1171.     }
  1172.     /**
  1173.      * @Route("/get-securitiesAdded", name="front_company_get_securitiesAdded")
  1174.      */
  1175.     function securitiesAdded(Request $requestSecurityRepository $secureRep)
  1176.     {
  1177.         $selectedSecurities = [];
  1178.         if ($request->get('data')) {
  1179.             $securitiesAdded json_decode($request->get('data'));
  1180.             if (!empty($securitiesAdded)) {
  1181.                 foreach ($securitiesAdded as $idSecure) {
  1182.                     $selectedSecurities[] = $secureRep->find($idSecure);
  1183.                 }
  1184.             }
  1185.         }
  1186.         return $this->json([
  1187.             'selectedSecurities' => $selectedSecurities
  1188.         ]);
  1189.     }
  1190.     /**
  1191.      * @Route("/get-caracteristicAdded", name="front_company_get_availableCaracteristic")
  1192.      */
  1193.     public function caracteristicAdded(Request $requestCaracteristicRepository $caractikRep)
  1194.     {
  1195.         $caracteristicSelected = [];
  1196.         if ($request->get('data')) {
  1197.             $caracteristicAdded json_decode(($request->get('data')));
  1198.             if (!empty($caracteristicAdded)) {
  1199.                 foreach ($caracteristicAdded as $idCaracteristic) {
  1200.                     $caracteristicSelected[] = $caractikRep->find($idCaracteristic);
  1201.                 }
  1202.             }
  1203.         }
  1204.         return $this->json([
  1205.             'caracteristicSelected' => $caracteristicSelected
  1206.         ]);
  1207.     }
  1208.     /**
  1209.      * @Route("/get-type-prestation", name="front_company_get_typePrestation")
  1210.      */
  1211.     public function type_prestation(Request $requestTypePrestationRepository $typePrestationRepository)
  1212.     {
  1213.         if ($request->get('data')) {
  1214.             $idtypePrests json_decode($request->get('data'));
  1215.             // dd( $idtypePrests->idtypPrest);
  1216.             $id 1;
  1217.             $type $typePrestationRepository->find($idtypePrests->idtypPrest);
  1218.             $data['status'] = 200;
  1219.             $data['data'] = $type;
  1220.             return $this->json($data200, [], [
  1221.                 "groups" => "location:read"
  1222.             ]);
  1223.         } else {
  1224.             return $this->json([
  1225.                 'status' => 400
  1226.             ]);
  1227.         }
  1228.     }
  1229.     /**
  1230.      * @Route("/delete/{roomOption}/roomOption", name="front_company_delete_roomOption")
  1231.      */
  1232.     public function deleteRoomOption(Chambre $roomOption)
  1233.     {
  1234.         $entityManager $this->getDoctrine()->getManager();
  1235.         $entityManager->remove($roomOption);
  1236.         $entityManager->flush();
  1237.         return $this->json([
  1238.             'status' => 200
  1239.         ]);
  1240.     }
  1241.     /**
  1242.      * @Route("/get-litChambreData", name="front_company_get_litChambreData")
  1243.      */
  1244.     public function getLitChambreData()
  1245.     {
  1246.         $litsChambres $this->em->getRepository(LitsChambre::class)->findAll();
  1247.         $typeParticipants $this->em->getRepository(TypeParticipant::class)->findAll();
  1248.         $data['status'] = 200;
  1249.         $data['data'] = $litsChambres;
  1250.         foreach ($litsChambres as $litsChambre) {
  1251.             $slug[] = $litsChambre->getSlug();
  1252.             $type[] = $litsChambre->getType();
  1253.         }
  1254.         foreach ($typeParticipants as $typeParticipant) {
  1255.             $typeParticipantSlug[] = $typeParticipant->getSlugTypeParticipant();
  1256.             $typeParticipantType[] = $typeParticipant->getTypeParticipant();
  1257.         }
  1258.         $typeDeParticipants = array();
  1259.         for ($i 0$i count($typeParticipantSlug); $i++) {
  1260.             $typeDeParticipants[] = array(
  1261.                 'slug' => $typeParticipantSlug[$i],
  1262.                 'type' => $typeParticipantType[$i]
  1263.             );
  1264.         }
  1265.         return $this->json([
  1266.             // "groups" => "location:read",
  1267.             "slugs" => $slug,
  1268.             "types" => $type,
  1269.             "typeDeParticipants" => $typeDeParticipants
  1270.         ]);
  1271.     }
  1272.     /**
  1273.      * @Route("/transporteur/calcul-cout", name="front_front_product_calcul_transporteur", methods={"POST"})
  1274.      */
  1275.     public function getTransporteursPrice(Request $requestTransporteurWeightPriceRepository $transporteurWeightPriceRepository)
  1276.     {
  1277.         $data json_decode($request->get('data'));
  1278.         if ($data->weightProduct) {
  1279.             $transporteursWeight $transporteurWeightPriceRepository->getTransporteursPriceByWeight($data->weightProduct);
  1280.             return $this->json([
  1281.                 'transporteurs' => $this->render('front/html/form_transporteurs.html.twig', ['transporteursWeight' => $transporteursWeight])
  1282.             ]);
  1283.         }
  1284.     }
  1285.     /**
  1286.      * @Route("/transporteur/getable", name="front_front_transporteur_getable", methods={"POST"})
  1287.      */
  1288.     public function getCompanyTransporteursPrice(Request $requestTransporteurWeightPriceRepository $transporteurWeightPriceRepository)
  1289.     {
  1290.         $data json_decode($request->get('data'));
  1291.         if ($data->weightProduct) {
  1292.             //$transporteursWeight = $transporteurWeightPriceRepository->getTransporteursPriceByWeight($data->weightProduct);
  1293.             $transporteursWeight $transporteurWeightPriceRepository->getActiveTransporteursPriceByWeight($data->weightProduct);
  1294.             return $this->json([
  1295.                 'transporteurs' => $this->render('front/html/form_transporteurs.html.twig', ['transporteursWeight' => $transporteursWeight])
  1296.             ]);
  1297.         }
  1298.     }
  1299.     /**
  1300.      * @Route("option/{id}", name="Options")
  1301.      */
  1302.     public function Option(ProductOption $prodOption)
  1303.     {
  1304.         $data['options'] = $prodOption;
  1305.         // dd($data);
  1306.         return $this->json($data200, [], ['groups' => 'post:read']);
  1307.     }
  1308.     /**
  1309.      * @Route("tousoption/{id}", name="productOption")
  1310.      */
  1311.     public function prodOption(ProductOptionRepository $optiorepoProduct $productSessionInterface $session)
  1312.     {
  1313.         $optionProd $optiorepo->findProduitOptionByProduit($product);
  1314.         // dd($optionProd);
  1315.         $data['options'] = $optionProd;
  1316.         if ($session->get('products')) {
  1317.             $data['opt_pre'] = $session->get('archive');
  1318.         }
  1319.         return $this->json($data200, [], ['groups' => 'post:read']);
  1320.     }
  1321.     /**
  1322.      * @Route("tous-options-product/{id}", name="option_product")
  1323.      */
  1324.     public function option_produit(ProductOptionRepository $optiorepoProduct $productSessionInterface $session)
  1325.     {
  1326.         $optionProd $optiorepo->findProduitOptionByProduit($product);
  1327.         // dd($session->get('products'));
  1328.         // if ($session->get('products')) {
  1329.         //     $data['group_pre']=$session->get('archive');
  1330.         // }
  1331.         $optiongropeMVew =  $this->render('front/product/cart/optionHtml/row.html.twig', [
  1332.             'optiongroups' => $optionProd
  1333.         ]);
  1334.         return $this->json($optiongropeMVew->getContent());
  1335.     }
  1336.     /**
  1337.      * @Route("tous-options-groups/{id}", name="options_groups")
  1338.      */
  1339.     public function ajout_options_groups(ProductOptionRepository $optiorepoProduct $productSessionInterface $session)
  1340.     {
  1341.         $optionProd $optiorepo->findProduitOptionByProduit($product);
  1342.         // dd($product);
  1343.         if ($session->get('products')) {
  1344.             $pre_commande = [];
  1345.             foreach ($session->get('products') as $cle => $productOption) {
  1346.                 $pre_commande $productOption['options'];
  1347.                 // foreach ($productOption['options'] as $idopt => $valueOptions) {
  1348.                 //     //    $pre_commande[$idopt.'_'.$key]= $valueOption;
  1349.                 //     foreach ($valueOptions as $key => $valueOption) {
  1350.                 //         $pre_commande[$idopt][$key]=$valueOption['valeur'];
  1351.                 //     }
  1352.                 // }
  1353.             }
  1354.         }
  1355.         // dd( $pre_commande,$optionProd);
  1356.         $optiongropeMVewm =  $this->render('front/command/modifgroupbasket/modifGroup.html.twig', [
  1357.             'optiongroups' => $optionProd,
  1358.             'dansPanier' => $pre_commande,
  1359.             'produit' => $product
  1360.         ]);
  1361.         return $this->json($optiongropeMVewm->getContent());
  1362.     }
  1363.     /**
  1364.      * @Route("/hebergement/filtre{page}", defaults={"page"=1}, requirements={"page"="\d+"}, name="heb_filtre", methods={"POST"})
  1365.      */
  1366.     public function filtreHeberge(int $pageRequest $requestProductRepository $hebCaracteristicRepository $hebCarPaginatorInterface $paginatorLocationRepository $locationRepository)
  1367.     {
  1368.         // dd($request); 
  1369.         if ($request->isMethod('POST')) {
  1370.             $parameters = [
  1371.                 'prix' => $request->get('prix') ? $request->get('prix') : null,
  1372.                 'avis' => $request->get('avis') ? $request->get('avis') : null,
  1373.                 'nbrAdulte' => $request->get('nbrAdulte') ? $request->get('nbrAdulte') : null,
  1374.                 'nbrEnfant' => $request->get('nbrEnfant') ? $request->get('nbrEnfant') : null,
  1375.                 'nbrBebe' => $request->get('nbrBebe') ? $request->get('nbrBebe') : null,
  1376.                 'nbrEnfant' => $request->get('nbrEnfant') ? $request->get('nbrEnfant') : null,
  1377.                 'equipements' => $request->get('equipements') ? $request->get('equipements') : null,
  1378.                 'caracteristics' => $request->get('caracteristique') ? $request->get('caracteristique') : null,
  1379.                 'typeLocalisations' => $request->get('localisation') ? $request->get('localisation') : null,
  1380.                 'securities' => $request->get('securite') ? $request->get('securite') : null,
  1381.                 'langueHotes' => $request->get('langue') ? $request->get('langue') : null,
  1382.             ];
  1383.             // $products = $productRepository->searchProductCompany($parameters, $this->getUser());
  1384.             $products $heb->Hebergement($parameters);
  1385.         } else {
  1386.             $products $heb->findBy(['company' => $this->getUser()], ['id' => 'DESC']);
  1387.         }
  1388.         $pagination $paginator->paginate(
  1389.             $products,
  1390.             $page/*page number*/
  1391.             15 /*limit per page*/
  1392.         );
  1393.         $countService 0;
  1394.         $countProducts 0;
  1395.         foreach ($products as $key => $product) {
  1396.             $isService $product->getSubCategories()->filter(
  1397.                 function ($entry) use ($countService$countProducts) {
  1398.                     return $entry->getIsService();
  1399.                 }
  1400.             );
  1401.             if ($isService) {
  1402.                 $countService $countService 1;
  1403.             } else {
  1404.                 $countProducts $countProducts 1;
  1405.             }
  1406.         }
  1407.         // dd($products[0]->getSubCategories()->toArray());
  1408.         $categoryBackground null;
  1409.         $result $this->render('front/product/recherceHebergement.html.twig', [
  1410.             'products' => $pagination,
  1411.             'countProducts' => $countProducts,
  1412.             'countServices' => $countService,
  1413.             'categoryBackground' => $categoryBackground
  1414.         ]);
  1415.         return $this->json($result->getContent());
  1416.     }
  1417.     /**
  1418.      * @Route("/get-commune", methods={"GET"}, name="get_commune")
  1419.      */
  1420.     public function getCommune(Request $requestDepartmentRepository $departmentRepository): JsonResponse
  1421.     {
  1422.         try {
  1423.             $page $request->query->getInt('page'1);
  1424.             $limit $request->query->getInt('limit'50);
  1425.             $searchTerm $request->query->get('q''');  // Terme de recherche
  1426.             $communes = [];
  1427.             $departments = [];
  1428.             if ($request->query->get('departments')) {
  1429.                 $departments is_array($request->query->get('departments')) ? $request->query->get('departments') : []; // Liste des codes de départements
  1430.             }
  1431.             if (count($departments) > 0) {
  1432.                 foreach ($departments as $department) {
  1433.                     $departmentEntity $departmentRepository->find($department);
  1434.                     $url 'https://geo.api.gouv.fr/departements/' $departmentEntity->getNumero() . '/communes?fields=nom,code&format=json';
  1435.                     $response $this->client->request('GET'$url);
  1436.                     $departmentCommunes $response->toArray();
  1437.                     $communes array_merge($communes$departmentCommunes);
  1438.                 }
  1439.             } else {
  1440.                 $url 'https://geo.api.gouv.fr/communes?fields=nom,code&format=json';
  1441.                 $response $this->client->request('GET'$url);
  1442.                 $communes $response->toArray();
  1443.             }
  1444.             // Filtrer les communes par le terme de recherche (si renseigné)
  1445.             if (!empty($searchTerm)) {
  1446.                 $communes array_filter($communes, function ($commune) use ($searchTerm) {
  1447.                     return stripos($commune['nom'], $searchTerm) !== false;
  1448.                 });
  1449.             }
  1450.             // Pagination manuelle
  1451.             $offset = ($page 1) * $limit;
  1452.             $paginatedCommunes array_slice($communes$offset$limit);
  1453.             $communeData array_map(function ($commune) {
  1454.                 return [
  1455.                     'id' => $commune['code'],
  1456.                     'text' => $commune['nom']
  1457.                 ];
  1458.             }, $paginatedCommunes);
  1459.             return new JsonResponse($communeDataJsonResponse::HTTP_OK);
  1460.         } catch (\Exception $e) {
  1461.             return new JsonResponse(['error' => 'Impossible de récupérer les communes''exception' => $e->getMessage()], JsonResponse::HTTP_BAD_REQUEST);
  1462.         } 
  1463.     }
  1464.     /**
  1465.      * @Route("/get-annonce-subcategory", name="get_annonce_subcategory", methods={"POST"})
  1466.      */
  1467.     public function getAnnonceSubcategory(Request $requestSubCategoryRepository $subCategoryRepositoryCategoryRepository $categoryRepositorySerializerInterface $serializer): JsonResponse {
  1468.         $data json_decode($request->get('data_object'));
  1469.         $subcategories = [];
  1470.         $activiteShoppingCategory $categoryRepository->findOneBy(['slug' => 'activites-shopping']);
  1471.         
  1472.         if ($data->id_type) {
  1473.             $subcategories $subCategoryRepository->getSubCategoriesByAnnonceType($data->id_type$activiteShoppingCategory);
  1474.         }
  1475.         // Serialize to JSON
  1476.         $json $serializer->serialize($subcategories'json', [
  1477.             'groups' => ["subcategory:read"], // optional, if you use serialization groups
  1478.         ]);
  1479.         return new JsonResponse($jsonJsonResponse::HTTP_OK);     
  1480.     }
  1481. }