src/Controller/CustomProductController.php line 51

  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\Order;
  4. use App\Entity\Product;
  5. use App\Enum\NotificationContent;
  6. use App\Form\AdressType;
  7. use App\Form\CustomProductAddFileType;
  8. use App\Form\CustomProductStepTwoType;
  9. use App\Form\CustomProductType;
  10. use App\Form\CustomProdutStepAdressType;
  11. use App\Repository\AcierOptionsRepository;
  12. use App\Repository\AdressRepository;
  13. use App\Repository\AluminiumOptionsRepository;
  14. use App\Repository\InoxOptionsRepository;
  15. use App\Repository\NotificationsRepository;
  16. use App\Repository\OptionsRepository;
  17. use App\Repository\TexteFirstPageRepository;
  18. use App\Service\SaveFile;
  19. use App\Service\SendEmailNotification;
  20. use DateInterval;
  21. use DateTimeImmutable;
  22. use Doctrine\ORM\EntityManagerInterface;
  23. use Sensio\Bundle\FrameworkExtraBundle\Configuration\Security;
  24. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  25. use Symfony\Component\Form\Extension\Core\Type\CollectionType;
  26. use Symfony\Component\Form\Extension\Core\Type\SubmitType;
  27. use Symfony\Component\HttpFoundation\JsonResponse;
  28. use Symfony\Component\HttpFoundation\Request;
  29. use Symfony\Component\HttpFoundation\RequestStack;
  30. use Symfony\Component\HttpFoundation\Response;
  31. use Symfony\Component\Mailer\MailerInterface;
  32. use Symfony\Component\Mime\Address;
  33. use Symfony\Component\Mime\Email;
  34. use Symfony\Component\Mime\Part\DataPart;
  35. use Symfony\Component\Mime\Part\Multipart\FormDataPart;
  36. use Symfony\Component\Routing\Annotation\Route;
  37. use Symfony\Contracts\HttpClient\HttpClientInterface;
  38. class CustomProductController extends AbstractController
  39. {
  40.     private $requestStack;
  41.     public function __construct(RequestStack $requestStack)
  42.     {
  43.         $this->requestStack $requestStack;
  44.     }
  45.     #[Route('/custom-product'name'custom_product')]
  46.     public function index(Request $requestEntityManagerInterface $managerNotificationsRepository $notificationRepoTexteFirstPageRepository $tfprSaveFile $saveFile): Response
  47.     {
  48.         $this->denyAccessUnlessGranted('ROLE_USER');
  49.         $customProduct $this->createForm(CustomProductType::class);
  50.         $customProduct->handleRequest($request);
  51.         $user $this->getUser();
  52.         // dd($request->request->all());
  53.         if ($customProduct->isSubmitted() && $customProduct->isValid()) {
  54.             $data $customProduct->getData();
  55.             $order = new Order();
  56.             $order->setName($data["devis_name"]);
  57.             $order->setUserOf($user);
  58.             $manager->persist($order);
  59.             $manager->flush();
  60.             $resultSaveFile $saveFile->addFilesToOrder($data['fileIdentifiant'], $order);
  61.             if ($resultSaveFile) {
  62.                 return $this->redirectToRoute('custom_product_2', array('id' => $order->getID()));
  63.             } else {
  64.                 $this->addFlash('error''Veuillez ajouter un fichier au minimum pour continuer');
  65.                 return $this->redirectToRoute('custom_product');
  66.             }
  67.         }
  68.         return $this->render('custom_product/index.html.twig', [
  69.             'customProductForm' => $customProduct->createView(),
  70.             'textFirstPage' => $tfpr->find(1),
  71.             'notifications' => $notificationRepo->getNotifications($user),
  72.             'fileIdentifiant' => uniqid() . uniqid()
  73.         ]);
  74.     }
  75.     #[Route('/custom-product/upload-image/{id}'name'custom_product_uploadImage'methods: ['POST'])]
  76.     public function uploadImage(string $idRequest $requestEntityManagerInterface $managerSaveFile $saveFile): JsonResponse
  77.     {
  78.         $this->denyAccessUnlessGranted('ROLE_USER');
  79.         if ($request->files->get('file')) {
  80.             foreach ($request->files->get('file') as $value) {
  81.                 $saveFile->addTempFile($value$id);
  82.             }
  83.         }
  84.         return new JsonResponse('Ok');
  85.     }
  86.     public function metalOptions($values)
  87.     {
  88.         $toReturn = [];
  89.         foreach ($values as $value) {
  90.             $toReturn[] = [$value->getName(), array($value->getEpaisseur(), $value->getEpaisseurSupDix()), $value->getRadName()];
  91.         }
  92.         return $toReturn;
  93.     }
  94.     #[Route('/custom-product-2/get-data'name'custom_product_2_data')]
  95.     public function dataStep2(AcierOptionsRepository $acierOptionsRepositoryAluminiumOptionsRepository $aluminiumOptionsRepositoryInoxOptionsRepository $inoxOptionsRepositoryOptionsRepository $optionsRepository): Response
  96.     {
  97.         $matiere_reference_acier $this->metalOptions($acierOptionsRepository->findAll());
  98.         $matiere_reference_aluminium $this->metalOptions($aluminiumOptionsRepository->findAll());
  99.         $matiere_reference_inox $this->metalOptions($inoxOptionsRepository->findAll());
  100.         $matiereType $optionsRepository->findOneBy(['name' => 'matiereType']);
  101.         $gravure $optionsRepository->findOneBy(['name' => 'gravure']);
  102.         $laminage_brossage $optionsRepository->findOneBy(['name' => 'sens_de_brossage']);
  103.         $destinationPiece $optionsRepository->findOneBy(['name' => 'destination_piece']);
  104.         $pieceAspect $optionsRepository->findOneBy(['name' => 'piece_aspect']);
  105.         $thermoRef $optionsRepository->findOneBy(['name' => 'thermoRef']);
  106.         $thmermoFace $optionsRepository->findOneBy(['name' => 'thermoFace']);
  107.         $matiereModele $optionsRepository->findOneBy(['name' => 'matiereModele']);
  108.         $matiereEpaisseur $optionsRepository->findOneBy(['name' => 'matiereEpaisseur']);
  109.         $pdfTech $optionsRepository->findOneBy(['name' => 'pdfTech']);
  110.         $toReturn = [$matiere_reference_acier$matiere_reference_aluminium$matiere_reference_inox, (array)$matiereType, (array)$gravure, (array)$laminage_brossage, (array)$destinationPiece, (array)$pieceAspect, (array)$thermoRef, (array)$thmermoFace, (array)$matiereModele, (array)$matiereEpaisseur, (array)$pdfTech];
  111.         return new Response(json_encode($toReturn));
  112.     }
  113.     #[Route('/custom-product-2/add/{id}'name'custom_product_2_add')]
  114.     public function addStep2(Order $orderEntityManagerInterface $managerSaveFile $saveFileRequest $request): JsonResponse
  115.     {
  116.         $toReturn = [];
  117.         for ($i 0$i count($request->files->get('file')); $i++) {
  118.             $file $saveFile->saveInPublic($request->files->get('file')[$i], $order'plan');
  119.             $product = new Product();
  120.             $product->setRelateOrder($order);
  121.             $product->addFile($file);
  122.             $manager->persist($product);
  123.             $manager->flush();
  124.             $toReturn[] = [$product->getId(), $file->getOriginalName()];
  125.         }
  126.         return new JsonResponse($toReturn);
  127.     }
  128.     #[Route('/custom-product-2/remove/{id}'name'custom_product_2_remove')]
  129.     public function removeStep2(Product $productEntityManagerInterface $managerSaveFile $saveFile): Response
  130.     {
  131.         $order $product->getRelateOrder();
  132.         $order->removeProduct($product);
  133.         $plan $product->getFiles()[0];
  134.         $dateOrder $order->getCreatedAt();
  135.         $year $dateOrder->format('Y');
  136.         $month $dateOrder->format('m');
  137.         $file_path '/public/uploads/' $year "/" $month '/' $order->getId() . '/' $plan->getFileName();
  138.         $saveFile->removeFile($file_path);
  139.         $manager->remove($product);
  140.         $manager->flush();
  141.         $manager->persist($order);
  142.         $manager->flush();
  143.         return new Response('Order deleted');
  144.     }
  145.     #[Security("is_granted('ROLE_USER') and (user === order.getUserOf() or is_granted('ROLE_ADMIN'))")]
  146.     #[Route('/custom-product-2/{id}'name'custom_product_2')]
  147.     public function step2(Order $orderRequest $requestEntityManagerInterface $managerNotificationsRepository $notificationRepoSaveFile $saveFileAcierOptionsRepository $acierOptionsRepositoryInoxOptionsRepository $inoxOptionsRepositoryAluminiumOptionsRepository $aluminiumOptionsRepository): Response
  148.     {
  149.         $this->denyAccessUnlessGranted('ROLE_USER');
  150.         $isAdmin $this->isGranted('ROLE_ADMIN');
  151.         if (($this->getUser() !== $order->getUserOf()) && !$isAdmin) {
  152.             return $this->redirectToRoute('home');
  153.         }
  154.         $products $order->getProducts();
  155.         foreach ($products as $value) {
  156.             switch ($value->getMatiereType()) {
  157.                 case 'Acier':
  158.                     $value->setMatiereReferenceAcier($acierOptionsRepository->findOneBy(['RadName' => $value->getMatiereReference()]));
  159.                     break;
  160.                 case 'Aluminium':
  161.                     $value->setMatiereReferenceAlu($aluminiumOptionsRepository->findOneBy(['RadName' => $value->getMatiereReference()]));
  162.                     break;
  163.                 case 'Inox':
  164.                     $value->setMatiereReferenceInox($inoxOptionsRepository->findOneBy(['RadName' => $value->getMatiereReference()]));
  165.                     break;
  166.                 default:
  167.                     $value->setMatiereReferenceAcier($acierOptionsRepository->findOneBy(['RadName' => $value->getMatiereReference()]));
  168.                     break;
  169.             }
  170.         }
  171.         $session $request->getSession();
  172.         $session->set('order-id'$order->getId());
  173.         $addProductForm $this->createForm(CustomProductAddFileType::class);
  174.         $addProductForm->handleRequest($request);
  175.         $customProduct $this->createFormBuilder()
  176.             ->add('products'CollectionType::class, [
  177.                 'entry_type' => CustomProductStepTwoType::class,
  178.                 'allow_add' => true,
  179.                 'data' => $products,
  180.             ])
  181.             ->add('submit'SubmitType::class, [
  182.                 'attr' => [
  183.                     'class' => 'btn custom_product_submit_button'
  184.                 ]
  185.             ])
  186.             ->getForm();
  187.         $customProduct->handleRequest($request);
  188.         $filesTitle = [];
  189.         foreach ($products as $value) {
  190.             $file $value->getFiles();
  191.             $filesTitle[] = [$file[0]->getOriginalName(), $value->getId(), $value->getMatiereEpaisseur()];
  192.         }
  193.         if ($addProductForm->isSubmitted() && $addProductForm->isValid()) {
  194.             $data $addProductForm->getData();
  195.             foreach ($request->files->get("custom_product_add_file")["file"] as $value) {
  196.                 $file $saveFile->saveInPublic($value$order'plan');
  197.                 $product = new Product();
  198.                 $product->setRelateOrder($order);
  199.                 $product->addFile($file);
  200.                 $manager->persist($product);
  201.                 $manager->flush();
  202.             }
  203.             return $this->redirectToRoute('custom_product_2', array('id' => $order->getID()));
  204.         }
  205.         if ($customProduct->isSubmitted() && $customProduct->isValid()) {
  206.             $data $customProduct->getData();
  207.             $allProducts $data['products'];
  208.             // dd($allProducts->getValues());
  209.             foreach ($allProducts as $value) {
  210.                 $matiereType $value->getMatiereType();
  211.                 switch ($matiereType) {
  212.                     case 'Aluminium':
  213.                         $value->setMatiereReference($value->getMatiereReferenceAlu()->getRadName());
  214.                         break;
  215.                     case 'Inox':
  216.                         $value->setMatiereReference($value->getMatiereReferenceInox()->getRadName());
  217.                         break;
  218.                     case 'Acier':
  219.                         $value->setMatiereReference($value->getMatiereReferenceAcier()->getRadName());
  220.                         break;
  221.                     default:
  222.                         # code...
  223.                         break;
  224.                 }
  225.                 $manager->persist($value);
  226.             }
  227.             $order->setStatus('step2');
  228.             $manager->persist($order);
  229.             $manager->flush();
  230.             return $this->redirectToRoute('custom_product_3', array('id' => $order->getId()));
  231.         }
  232.         return $this->render('custom_product/step2.html.twig', [
  233.             'customProductForm' => $customProduct->createView(),
  234.             'addProductForm' => $addProductForm->createView(),
  235.             'devis' => $order,
  236.             'filesTitle' => $filesTitle,
  237.             'notifications' => $notificationRepo->getNotifications($order->getUserOf()),
  238.         ]);
  239.     }
  240.     #[Security("is_granted('ROLE_USER') and (user === order.getUserOf() or is_granted('ROLE_ADMIN'))")]
  241.     #[Route('/custom-product-3/{id}'name'custom_product_3')]
  242.     public function step3(Order $orderRequest $requestEntityManagerInterface $managerNotificationsRepository $notificationRepoAdressRepository $adressRepositoryOptionsRepository $optionsRepository): Response
  243.     {
  244.         $this->denyAccessUnlessGranted('ROLE_USER');
  245.         $isAdmin $this->isGranted('ROLE_ADMIN');
  246.         if (($this->getUser() !== $order->getUserOf()) && !$isAdmin) {
  247.             return $this->redirectToRoute('home');
  248.         }
  249.         $user $this->getUser();
  250.         $session $request->getSession();
  251.         $session->set('order-id'$order->getId());
  252.         $urgence $optionsRepository->findOneBy(['name' => 'urgence'])->getInfoBulle();
  253.         if ($user) {
  254.             $userAdress $adressRepository->findBy(['atUser' => $user]);
  255.             $formAdress $this->createForm(AdressType::class);
  256.             $selectAdress $this->createForm(CustomProdutStepAdressType::class);
  257.             $formAdress->handleRequest($request);
  258.             $selectAdress->handleRequest($request);
  259.             if ($selectAdress->isSubmitted() && $selectAdress->isValid()) {
  260.                 $data $selectAdress->getData();
  261.                 if ($data['adress'] && $data['adressFacturation']) {
  262.                     $order->setAdress($data['adress']);
  263.                     $order->setFacturationAdress($data['adressFacturation']);
  264.                     $order->setIsUrgence($data['isUrgence']);
  265.                     $order->setStatus('step3');
  266.                     $order->setUserOf($user);
  267.                     $manager->persist($order);
  268.                     $manager->flush();
  269.                     return $this->redirectToRoute('custom_product_4', array('id' => $order->getId()));
  270.                 } else {
  271.                     $this->addFlash(
  272.                         'error',
  273.                         'Vous devez ajouter une adresse pour passer continuer en cliquant sur le bouton ajouter une adresse en haut à droite'
  274.                     );
  275.                     return $this->redirectToRoute('custom_product_3', array('id' => $order->getId()));
  276.                 }
  277.             }
  278.             if ($formAdress->isSubmitted() && $formAdress->isValid()) {
  279.                 $adress $formAdress->getData();
  280.                 $adress->setAtUser($user);
  281.                 $manager->persist($adress);
  282.                 $manager->flush();
  283.                 $this->addFlash(
  284.                     'success',
  285.                     'Vous avez bien modifié votre profil'
  286.                 );
  287.                 return $this->redirectToRoute('custom_product_3', array('id' => $order->getId()));
  288.             }
  289.             return $this->render('custom_product/step3.html.twig', [
  290.                 'formAdress' => $formAdress->createView(),
  291.                 'selectAdress' => $selectAdress->createView(),
  292.                 'userAdress' => $userAdress,
  293.                 'devis' => $order,
  294.                 'notifications' => $notificationRepo->getNotifications($order->getUserOf()),
  295.                 'urgenceTips' => $urgence,
  296.             ]);
  297.         } else {
  298.             $session $this->requestStack->getSession();
  299.             $session->set('redirection_url''custom_product_3');
  300.             return $this->redirectToRoute('app_login');
  301.         }
  302.     }
  303.     #[Security("is_granted('ROLE_USER') and user === order.getUserOf()")]
  304.     #[Route('/custom-product-4/{id}'name'custom_product_4')]
  305.     public function step4(Order $orderHttpClientInterface $clientEntityManagerInterface $manager,  NotificationsRepository $notificationRepoMailerInterface $mailer): Response
  306.     {
  307.         $this->denyAccessUnlessGranted('ROLE_USER');
  308.         $isAdmin $this->isGranted('ROLE_ADMIN');
  309.         if (($this->getUser() !== $order->getUserOf()) && !$isAdmin) {
  310.             return $this->redirectToRoute('home');
  311.         }
  312.         if ($order->getStatus() === 'send_to_radan') {
  313.             return $this->render('custom_product/step4.html.twig', [
  314.                 'devis' => $order,
  315.                 'notifications' => $notificationRepo->getNotifications($order->getUserOf()),
  316.             ]);
  317.         } elseif ($order->getStatus() === 'step3' || $order->getStatus() === 'waitToLongForDevis') {
  318.             $products $order->getProducts();
  319.             $user $order->getUserOf();
  320.             $adressLivraison $order->getAdress();
  321.             $csvFile $order->getCsvFile();
  322.             $fileName uniqid();
  323.             $dateOrder $order->getCreatedAt();
  324.             $year $dateOrder->format('Y');
  325.             $month $dateOrder->format('m');
  326.             $myfile fopen($this->getParameter('kernel.project_dir') . '/public/uploads/' $year "/" .  $month '/' $order->getId() . '/' $fileName '.csv'"w") or die("Unable to open file!");
  327.             fprintf($myfilechr(0xEF) . chr(0xBB) . chr(0xBF));
  328.             $txt "Id;CustomerId;CustomerName;VatNumber;CustomerAdressLine1;CustomerAdressLine2;CustomerAdressLine3;Postcode;City;State;Country;Civility;FirstName;LastName;Mail;Phone;CadFilePath;MaterialName;Thickness;Quantity;NestOrientation;PartOperations;QuoteOperations;QuoteComment;PartComment\n";
  329.             fwrite($myfile$txt);
  330.             foreach ($products as $product) {
  331.                 $file $product->getFiles();
  332.                 $fileN $file[0]->getFileName();
  333.                 $txt $product->getId() . ";" $user->getId() . ";" $user->getFirstName() . " " $user->getLastName() . ";;" $adressLivraison->getAdressOne() . ";" $adressLivraison->getAdressTwo() . ";;" $adressLivraison->getCp() . ";" $adressLivraison->getCity() . ";;" $adressLivraison->getCountry() . ";;" $user->getFirstName() . ";" $user->getLastName() . ";" $user->getEmail() . ";" $adressLivraison->getPhone() . ";\\\pc-webquote\Radan\Configuration_Data\Webshop\Cad\\" $fileName "\\" $fileN ";" $product->getMatiereReference() . ";" $product->getMatiereEpaisseur() . ";" $product->getQuantity() . ";" $product->getSensDeBrossage() . ";Matiere,Laser" . ($order->getIsUrgence() ? ', Urgence' '') . ($product->getThermoFace() === "null" '' ", " $product->getThermoFace()) . ";;f;" 'Destination: ' $product->getDestinationPiece() . ", Gravure: " $product->getGravure() . ", Commentaire:" $product->getComments() . ", RAL thermolaquage:" $product->getthermoRef() . ", Piece d'aspect:" . ($product->getPieceAspect() ? 'oui' 'non') . "\n";
  334.                 fwrite($myfile$txt);
  335.             }
  336.             fclose($myfile);
  337.             $order->setCsvFile($fileName '.csv');
  338.             $order->setStatus('send_to_radan');
  339.             $manager->persist($order);
  340.             $manager->flush();
  341.             $csvFile $fileName '.csv';
  342.             $file3d = [];
  343.             // Transfert de fichier
  344.             foreach ($products as $value) {
  345.                 $f $value->getFiles();
  346.                 foreach ($f as $value) {
  347.                     $formData = new FormDataPart(['files' => DataPart::fromPath($this->getParameter('kernel.project_dir') . '/public/uploads/' $year "/" .  $month '/' $order->getId() . '/' $value->getFileName())]);
  348.                     try {
  349.                         $client->request('POST''http://' $_ENV['RADQUOTEIP'] . ':80/uploadFile', [
  350.                             'headers' => $formData->getPreparedHeaders()->toArray(),
  351.                             'body' => $formData->bodyToIterable(),
  352.                         ]);
  353.                         array_push($file3d$value->getFileName());
  354.                     } catch (\Exception $e) {
  355.                         $email = (new Email())
  356.                             ->from(new Address('metalead@preprod.my-site-web.com''Problème Metalead'))
  357.                             ->to('julien@bim-digital.com')
  358.                             ->priority(Email::PRIORITY_HIGH)
  359.                             ->subject('ERREUR API METALEAD')
  360.                             ->text('Attention l api de Metalead a un problème, veuillez vérifier son état');
  361.                         $mailer->send($email);
  362.                         $this->addFlash('error''Oups, nous avons eu un soucis, veuillez réessayer dans quelques minutes');
  363.                         return $this->redirectToRoute('custom_product_3', ['id' => $order->getId()]);
  364.                     }
  365.                 }
  366.             }
  367.             $formData = new FormDataPart([
  368.                 'files' => DataPart::fromPath($this->getParameter('kernel.project_dir') . '/public/uploads/' $year "/" .  $month '/' $order->getId() . '/' $csvFile),
  369.                 'orderId' => strval($order->getId()),
  370.                 'filesName' => $file3d
  371.             ]);
  372.             try {
  373.                 $client->request('POST''http://' $_ENV['RADQUOTEIP'] . ':80/uploadCsv', [
  374.                     'headers' => $formData->getPreparedHeaders()->toArray(),
  375.                     'body' => $formData->bodyToIterable(),
  376.                 ]);
  377.             } catch (\Exception $e) {
  378.                 $email = (new Email())
  379.                     ->from(new Address('metalead@preprod.my-site-web.com''Problème Metalead'))
  380.                     ->to('julien@bim-digital.com')
  381.                     ->priority(Email::PRIORITY_HIGH)
  382.                     ->subject('ERREUR API METALEAD')
  383.                     ->text('Attention l api de Metalead a un problème, veuillez vérifier son état');
  384.                 $mailer->send($email);
  385.                 $this->addFlash('error''Oups, nous avons eu un soucis, veuillez réessayer dans quelques minutes');
  386.                 return $this->redirectToRoute('custom_product_3', ['id' => $order->getId()]);
  387.             }
  388.             return $this->render('custom_product/step4.html.twig', [
  389.                 'devis' => $order,
  390.                 'notifications' => $notificationRepo->getNotifications($order->getUserOf()),
  391.             ]);
  392.         } else if ($order->getStatus() == "backFromRQ") {
  393.             return $this->redirectToRoute('custom_product_5', array('id' => $order->getID()));
  394.         } else if ($order->getStatus() == "ErrorSendingRQ") {
  395.             return $this->redirectToRoute('custom_product_5', array('id' => $order->getID()));
  396.         } else {
  397.             return $this->redirectToRoute('devis_list');
  398.         }
  399.     }
  400.     #[Security("is_granted('ROLE_USER') and user === order.getUserOf() or is_granted('ROLE_ADMIN')")]
  401.     #[Route('/custom-product-5/{id}'name'custom_product_5')]
  402.     public function step5(Order $orderEntityManagerInterface $manager,  NotificationsRepository $notificationRepo): Response
  403.     {
  404.         $this->denyAccessUnlessGranted('ROLE_USER');
  405.         $isAdmin $this->isGranted('ROLE_ADMIN');
  406.         if (($this->getUser() !== $order->getUserOf()) && !$isAdmin) {
  407.             return $this->redirectToRoute('home');
  408.         }
  409.         if ($order->getStatus() !== 'backFromRQ' or $order->getStatus() !== 'ErrorSendingRQ') {
  410.             $this->redirectToRoute('devis_list');
  411.         }
  412.         $isPayable true;
  413.         if ($order->getStatus() === 'backFromRQ' or $order->getStatus() === 'orderCanceled') {
  414.             $dateOrder $order->getCreatedAt();
  415.             $year $dateOrder->format('Y');
  416.             $month $dateOrder->format('m');
  417.     
  418.             if ($order->getDevisDate() && ($order->getDevisDate()->add(new DateInterval('P2D')) < new \DateTimeImmutable())) {
  419.                 $order->setStatus('waitToLongForDevis');
  420.                 $manager->persist($order);
  421.                 $manager->flush();
  422.             }
  423.             $pdf '/uploads/' $year "/" .  $month '/' $order->getId() . '/' $order->getPdfFromRQ()->getFileName();
  424.             $isPayable = !($order->getPriceHT() < 500 && $order->getAdress()->getCountry() === "Suisse");
  425.             if (!$isPayable) {
  426.                 $order->setStatus('orderCanceled');
  427.                 $manager->persist($order);
  428.                 $manager->flush();
  429.                 $message "Pour une commande en suisse, le montant minimum est de 500€, il n'est donc pas possible de poursuivre cet achat";
  430.             }
  431.         } else {
  432.             $dateOrder $order->getCreatedAt();
  433.             $year $dateOrder->format('Y');
  434.             $month $dateOrder->format('m');
  435.     
  436.             $pdf '/uploads/' $year "/" .  $month '/' $order->getId() . '/erroFile.txt';
  437.             $isPayable false;
  438.         }
  439.         return $this->render('custom_product/step5.html.twig', [
  440.             'pdfFromRq' => $pdf,
  441.             'devis' => $order,
  442.             'isPayable' => $isPayable,
  443.             'message' => $message,
  444.             'notifications' => $notificationRepo->getNotifications($order->getUserOf()),
  445.         ]);
  446.     }
  447.     #[Security("is_granted('ROLE_USER') and user === order.getUserOf()")]
  448.     #[Route('/get-status/{id}'name'custom_product_get_status'methods: ['GET'])]
  449.     public function getStatus(Order $order): JsonResponse
  450.     {
  451.         return new JsonResponse(['status' => $order->getStatus()]);
  452.     }
  453.     #[Route('/returnOfFile/{id}'name'custom_product_returnFile')]
  454.     public function returnOfFiles(Order $orderRequest $requestEntityManagerInterface $managerSaveFile $saveFileSendEmailNotification $notif)
  455.     {
  456.         if ($request->request->get('error') && $request->request->get('error') === "502") {
  457.             $saveFile->saveErrorFile($order$request->request->get('errorContent'));
  458.             $order->setStatus('ErrorSendingRQ');
  459.             $manager->flush();
  460.             $notif->sendBoth(NotificationContent::NOTFINISH$order);
  461.             return new Response('Ok pas good'200, array(
  462.                 'Content-Type' => 'application/json'
  463.             ));
  464.         } else {
  465.             foreach ($request->files->all() as $value) {
  466.                 $file $saveFile->saveInPublic($value$order'backFromRQ');
  467.                 if (substr($file->getFileName(), -3) === 'pdf') {
  468.                     $order->setPdfFromRQ($file);
  469.                 } else {
  470.                     $order->setCsvFromRQ($file);
  471.                 }
  472.             }
  473.             $order->setStatus('backFromRQ');
  474.             $order->setDevisDate(new DateTimeImmutable());
  475.             $manager->persist($order);
  476.             $manager->flush();
  477.             $csv $order->getCsvFromRQ()->getFileName();
  478.             $dateOrder $order->getCreatedAt();
  479.             $year $dateOrder->format('Y');
  480.             $month $dateOrder->format('m');
  481.             $path $this->getParameter('kernel.project_dir') . '/public/uploads/' $year "/" .  $month '/' $order->getId() . '/' $csv;
  482.             $handle fopen($path"r"); // open in readonly mode
  483.             $i 0;
  484.             $priceT 0;
  485.             while (($row fgetcsv($handle0';')) !== false) {
  486.                 if ($i 0) {
  487.                     $priceT += $row[14] * $row[5];
  488.                     foreach ($order->getProducts() as $value) {
  489.                         if ($value->getId() == $row[0]) {
  490.                             $value->setUnitPrice($row[14]);
  491.                             $manager->persist($value);
  492.                             $manager->flush();
  493.                         }
  494.                     }
  495.                 }
  496.                 $i++;
  497.             }
  498.             fclose($handle);
  499.             $order->setPriceHT($priceT);
  500.             $manager->persist($order);
  501.             $notif->sendBoth(NotificationContent::FINISH$order);
  502.             return new Response('Ok c est good'200, array(
  503.                 'Content-Type' => 'application/json'
  504.             ));
  505.         }
  506.     }
  507. }