src/Controller/FicheProduitController.php line 39

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\Contact;
  4. use App\Entity\Produit\Produit;
  5. use App\Entity\Address\BillingAddress;
  6. use App\Form\CatalogueType;
  7. use App\Form\ContactType;
  8. use App\Form\Order\OrderDevisFormType;
  9. use App\Form\Order\OrderFormType;
  10. use App\Manager\OrderManager;
  11. use App\Services\ContactService as Service;
  12. use Doctrine\ORM\EntityManagerInterface;
  13. use App\Entity\Order\{OrderOrderLineOptionOrderLineColorOrderLineGarantieOrderLineFinition};
  14. use App\Form\Cart\AddToCartType;
  15. use App\Manager\CartManager;
  16. use App\Repository\{CouleurRepositoryCategorieRepositoryOptionRepositoryGarantieRepositoryFinitionRepository};
  17. use App\Repository\ProduitRelatedVersionRepository;
  18. use App\Repository\ProduitRepository;
  19. use App\Services\NoteCheckService;
  20. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  21. use Symfony\Component\HttpFoundation\JsonResponse;
  22. use Symfony\Component\HttpFoundation\Request;
  23. use Symfony\Component\HttpFoundation\Response;
  24. use Symfony\Component\Routing\Annotation\Route;
  25. use Symfony\Contracts\Translation\TranslatorInterface;
  26. class FicheProduitController extends AbstractController
  27. {
  28.     /**
  29.      * @Route("/fiche-produit/{id_categorie}-categorie/{id_product}", name="app_fiche_produit")
  30.      */
  31.     public function index(Request $requestTranslatorInterface $translatorOrderManager $orderManagerProduitRepository $produitRepositoryCategorieRepository $categorieRepositoryService $serviceProduitRelatedVersionRepository $produitRelatedVersionRepositoryNoteCheckService $noteCheckServiceCartManager $cartManagerOptionRepository $optionRepositoryGarantieRepository $garantieRepositoryCouleurRepository $couleurRepositoryFinitionRepository $finitionRepository$id_product=null$id_categorie=null): Response
  32.     {
  33.         $session $request->getSession();
  34.         $session->remove("ficheProductDataSelect");
  35.         $product $produitRepository->find($id_product);
  36.         $nbrImageProduct count($product->getImageProduits());
  37.         $restShowInModal = ($nbrImageProduct 4) > ? ($nbrImageProduct 4) : 0;
  38.         $allParentCategorie $categorieRepository->findByNoChild();
  39.         $currentParentCategorie $categorieRepository->find($id_categorie);
  40.         $relation $product->getProduitRelatedVersions();
  41.         $caracteristiques null;
  42.         if ($relation){
  43.             $caracteristiques $relation[0];
  44.         }
  45. //        $productFinitions = $produitRelatedVersionRepository->findProductRelatedVersionsWithFinitions($id_product);
  46.         $productFinitions $produitRepository->findAllFinitionProductOfOneProduct($id_product);
  47. //        dd($productFinitions);
  48.         $note $noteCheckService->getNote($product->getAvisClients());
  49.         $form $this->createForm(AddToCartType::class);
  50.         $form->handleRequest($request);
  51.          if ($form->isSubmitted() && $form->isValid()) {
  52.             $datas $request->request->all();
  53.             $item $form->getData();
  54.             $item->setProduit($product);
  55.             if ($item->getQuantity()==|| $item->getQuantity()==null){
  56.                 $item->setQuantity(1);
  57.             }
  58.             if(array_key_exists('options'$datas)){
  59.                 $options $datas['options'];
  60.                 foreach($options as $opt_id){
  61.                     if(!empty($opt_id)){
  62.                         $opt $optionRepository->findOneById($opt_id);
  63.                         $item_opt = new OrderLineOption();
  64.                         $item_opt->setPriceTtc($opt->getPriceTtc());
  65.                         $item_opt->setPriceHt($opt->getPriceHt());
  66.                         $item_opt->setDescription($opt->getName());
  67.                         $item_opt->setOpt($opt);
  68.                         $item->addOrderLineOption($item_opt);
  69.                     }
  70.                 }
  71.             }
  72.             if(array_key_exists('garantie'$datas)){
  73.                 $garanties $datas['garantie'];
  74.                 foreach($garanties as $garantie_id){
  75.                     if(!empty($garantie_id)){
  76.                         $garantie $garantieRepository->findOneById($garantie_id);
  77.                         $item_garantie = new OrderLineGarantie();
  78.                         $item_garantie->setPriceTtc($garantie->getPriceTtc());
  79.                         $item_garantie->setPriceHt($garantie->getPriceHt());
  80.                         $item_garantie->setDescription($garantie->getName());
  81.                         $item_garantie->setGarantie($garantie);
  82.                         $item->addOrderLineGaranty($item_garantie);
  83.                     }
  84.                 }
  85.             }
  86.             
  87.             $color $request->request->get('color');
  88.             if(!empty($color)){
  89.                 $color $couleurRepository->findOneById($color);
  90.                 $item_color = new OrderLineColor();
  91.                 $item_color->setColor($color);
  92.                 $item_color->setPriceTtc($color->getPriceTtc());
  93.                 $item_color->setPriceHt($color->getPriceHt());
  94.                 $item_color->setDescription($color->getName());
  95.                 $item->setOrderLineColor($item_color);
  96.             }
  97.             $finition $request->request->get('finition');
  98.             if(!empty($finition)){
  99.                 $finition $finitionRepository->findOneById($finition);
  100.                 $item_finition = new OrderLineFinition();
  101.                 $item_finition->setFinition($finition);
  102.                 $item_finition->setPriceTtc($finition->getPriceTtc());
  103.                 $item_finition->setPriceHt($finition->getPriceHt());
  104.                 $item_finition->setDescription($finition->getName());
  105.                 $item->setOrderLineFinition($item_finition);
  106.             }
  107.         
  108.             $cart $cartManager->getCurrentCart();
  109.             $cart
  110.                 ->addOrderLine($item)
  111.                 ->setUpdatedAt(new \DateTime());
  112.             $cartManager->save($cart);
  113.             return $this->redirectToRoute('app.cart.list');
  114.         }
  115.         $order = new Order();
  116.         $formOrder $this->createForm(OrderDevisFormType::class, $order);
  117.         $formOrder->handleRequest($request);
  118.         if ($formOrder->isSubmitted() && $formOrder->isValid()) {
  119.             $billingAddress = new BillingAddress();
  120.             $shippingAddress $order->getShippingAddress();
  121.     
  122.             if(!empty($shippingAddress)){
  123.                 $billingAddress->setFirstname($shippingAddress->getFirstname());
  124.                 $billingAddress->setLastname1($shippingAddress->getLastname1());
  125.                 $billingAddress->setLastname2($shippingAddress->getLastname2());
  126.                 $billingAddress->setStreet($shippingAddress->getStreet());
  127.                 $billingAddress->setCity($shippingAddress->getCity());
  128.                 $billingAddress->setState($shippingAddress->getState());
  129.                 $billingAddress->setPostalCode($shippingAddress->getPostalCode());
  130.                 $billingAddress->setCountry($shippingAddress->getCountry());
  131.                 $billingAddress->setPhone($shippingAddress->getPhone());
  132.                 $order->setBillingAddress($billingAddress);
  133.             }
  134.             $order->setCreatedAt(new \DateTime());
  135.             $order->setUpdatedAt(new \DateTime());
  136.             $order->setTypeCommand(1);
  137.             $order->setState(2);
  138.             $datas $request->request->all();
  139.             $orderManager->generateNumberDevis($order);
  140.             $orderManager->generateSlug($order);
  141.             $orderManager->saveOrder($order$datas);
  142.             $this->addFlash("success"$translator->trans("change_save"));
  143.             return $this->redirectToRoute('fiche_produit_show_devis', ["slug"=>$order->getSlug()]);
  144.         }
  145.         $contact = new Contact();
  146.         $contactForm $this->createForm(CatalogueType::class, $contact);
  147.         $contactForm->handleRequest($request);
  148.         if ($contactForm->isSubmitted() && $contactForm->isValid()) {
  149.             try {
  150.                 $contact->setCreatedAt(new \DateTime());
  151.                 $contact->setType(Contact::TYPE_CATALOGUE);
  152.                 $contact->setMessage("Télécharger le catalogue");
  153.                 $em $this->getDoctrine()->getManager();
  154.                 $em->persist($contact);
  155.                 $em->flush();
  156.                 $service->notifyResponsible($contact$this->getParameter('contact_form.subject'), $this->getParameter('app_mailer_name'));
  157.                 $this->addFlash(
  158.                     'success',
  159.                     'Message envoyé !'
  160.                 );
  161.             } catch (\Throwable $th) {
  162.                 $this->addFlash(
  163.                     'warning',
  164.                     'Erreur d\'envoie !'
  165.                 );
  166.             }
  167.         }
  168.         return $this->render('fiche_produit/index.html.twig', [
  169.             'controller_name' => 'FicheProduitController',
  170.             'produit' => $product,
  171.             'restCountShowInModal' => $restShowInModal,
  172.             'categori_parent' => $allParentCategorie,
  173.             'categorie_parent_current' => $id_categorie,
  174.             'current_parent_categorie' => $currentParentCategorie,
  175.             'caracteristique_init' => $caracteristiques,
  176.             'product_finitions' => $productFinitions,
  177.             'note_product' => $note,
  178.             'form' => $form->createView(),
  179.             'formMobile' => $form->createView(),
  180.             'form_order' => $formOrder->createView(),
  181.             'catalogueForm' => $contactForm->createView(),
  182.             'catalogueMobileForm' => $contactForm->createView(),
  183.         ]);
  184.     }
  185.   
  186.     /**
  187.      * @Route("/fiche-produit/portail-{id_categorie}-{name_categorie}/{id_produit}", name="app_fiche_produit_portail_luxe")
  188.      */
  189.     public function portailLuxe(CategorieRepository $categorieRepositoryProduitRepository $produitRepository$id_categorie=null$name_categorie=null$id_produit=null): Response
  190.     {
  191.         $product $produitRepository->find($id_produit);
  192.         $allParentCategorie $categorieRepository->findByNoChild();
  193.         $currentParentCategorie $categorieRepository->find($id_categorie);
  194.         return $this->render('fiche_produit/portail/index.html.twig', [
  195.             'controller_name' => 'FicheProduitController',
  196.             'produit' => $product,
  197.             'categori_parent' => $allParentCategorie,
  198.             'categorie_parent_current' => $id_categorie,
  199.             'current_parent_categorie' => $currentParentCategorie,
  200.         ]);
  201.     }
  202.     /**
  203.      * @Route("/fiche-produit/produit-{id_produit}/get-by-finition/{id_finition}", name="app_fiche_produit_get_by_finition")
  204.      */
  205.     public function getCaracteristiqueOfProductByFinition(Request $requestProduitRepository $produitRepositoryProduitRelatedVersionRepository $produitRelatedVersionRepository,$id_produit=null$id_finition=null){
  206. //        $caracteristic = $produitRelatedVersionRepository->findBy(["produit"=>$id_produit,"finition"=>$id_finition]);
  207.         $caracteristic $produitRepository->find(["id"=>$id_produit])->getProduitRelatedVersions()->toArray();
  208.         $caracter = [];
  209.         $session $request->getSession();
  210.         $filtersFicheProduct $session->get('ficheProductDataSelect', []);
  211.         if (count($filtersFicheProduct) > 0){
  212.             for ($i=0$i<count($filtersFicheProduct); $i++){
  213.                 if ($filtersFicheProduct[$i]["idProduit"] == $id_produit){
  214.                     if ($caracteristic[0]){
  215.                         $filtersFicheProduct[$i]["idCaracteristique"] = $caracteristic[0]->getId();
  216.                         $filtersFicheProduct[$i]["idFinition"] = $id_finition;
  217.                     }
  218.                 }
  219.             }
  220.             $session->set("ficheProductDataSelect"$filtersFicheProduct);
  221.         }else{
  222.             if ($caracteristic[0]){
  223.                 $newCaracteristiques = [
  224.                     [
  225.                         "idProduit" => $id_produit,
  226.                         "idCaracteristique" => $caracteristic[0]->getId(),
  227.                         "idFinition" => $id_finition
  228.                     ]
  229.                 ];
  230.                 $session->set("ficheProductDataSelect"$newCaracteristiques);
  231.             }
  232.         }
  233.         if ($caracteristic[0]){
  234.             $caracter["placeAssise"] = $caracteristic[0]->getPlacesAssis()." places assises";
  235.             $caracter["placeAllonge"] = $caracteristic[0]->getPlacesAllonge()." places allongées ";
  236.             $caracter["cascade"] = $caracteristic[0]->getCascadeLed() ? "Cascade Inox" "Aucun";
  237.             $caracter["nuage"] = $caracteristic[0]->isNuageLedSole() ? "Nuage au sol" "Aucun";
  238.             $caracter["ledPeripherique"] = $caracteristic[0]->getLedChromaPeripherique() ? $caracteristic[0]->getLedChromaPeripherique()." Leds de périphérie" "Aucune Leds de périphérie";
  239.             //$caracter["coque"] = $caracteristic[0]->getCoque();
  240.         }
  241.         return new JsonResponse($caracter);
  242.     }
  243.     /**
  244.      * @Route("/fiche-produit/produit-{id_produit}/get-by-color/{id_color}", name="app_fiche_produit_get_by_color")
  245.      */
  246.     public function getSelectOptionColor(Request $request$id_produit=null$id_color=null){
  247.         $session $request->getSession();
  248.         $filtersFicheProduct $session->get('ficheProductDataSelect', []);
  249. //        dd($filtersFicheProduct);
  250.         if (count($filtersFicheProduct) > 0){
  251.             for ($i=0$i<count($filtersFicheProduct); $i++){
  252.                 if ($filtersFicheProduct[$i]["idProduit"] == $id_produit){
  253.                     $filtersFicheProduct[$i]["idColor"] = $id_color;
  254.                 }
  255.             }
  256.             $session->set("ficheProductDataSelect"$filtersFicheProduct);
  257.         }else{
  258.             $newColor = [
  259.                 [
  260.                     "idProduit"=>$id_produit,
  261.                     "idColor" => $id_color
  262.                 ]
  263.             ];
  264.             $session->set("ficheProductDataSelect"$newColor);
  265.         }
  266. //        dd($session->get('ficheProductDataSelect', []));
  267.         return new JsonResponse([]);
  268.     }
  269.     /**
  270.      * @Route("/fiche-produit/produit/get-by-color/type-color/show-image", name="app_fiche_produit_get_by_color_show_images")
  271.      */
  272.     public function getImageBySelectedColor(Request $requestProduitRepository $produitRepository){
  273.         $idProduit $request->request->get("idProduit");
  274.         $prod $produitRepository->find($idProduit);
  275.         $idColor $request->request->get("idColor");
  276.         $typeColor $request->request->get("typeColor");
  277.         $isMobil $request->request->get("isMobil");
  278.         $allImagesProduct $prod->getImageProduits()->toArray();
  279.         $initImageId $allImagesProduct[0]->getId();
  280.         $showInitImage false;
  281.         $priceShow 0;
  282.         for ($i=0$i<count($allImagesProduct); $i++){
  283.             $prodImage $allImagesProduct[$i];
  284.             if ($prodImage->getColor()->getId() == $idColor && $prodImage->getColor()->getType() == $typeColor){
  285.                 if ($prodImage->getId() == $initImageId){
  286. //                    $showInitImage = true; si on ajout l'image principale en premier.
  287.                     $showInitImage false;
  288.                 }
  289.                 $priceShow $prodImage->getColor()->getPriceTtc();
  290.             }
  291.         }
  292.         $priceProduct = ($prod->getPriceTtc() ? $prod->getPriceTtc() : 0) + ($priceShow $priceShow 0);
  293.         if ($isMobil==1){
  294.             $templateImage $this->renderView("fiche_produit/_partial/_produitMobil.html.twig", ["produit"=>$prod"idColor"=>$idColor"typeColor"=>$typeColor"showInitImage"=>$showInitImage"priceProduct"=>number_format($priceProduct2'.''')]);
  295.         }else{
  296.             $templateImage $this->renderView("fiche_produit/_partial/_produit.html.twig", ["produit"=>$prod"idColor"=>$idColor"typeColor"=>$typeColor"showInitImage"=>$showInitImage"priceProduct"=>number_format($priceProduct2'.''')]);
  297.         }
  298.         return new Response($templateImage);
  299.     }
  300. }