src/Controller/Front/CheckoutController.php line 112

Open in your IDE?
  1. <?php
  2. namespace App\Controller\Front;
  3. use App\Entity\AbonnementPro;
  4. use App\Entity\Adresse;
  5. use App\Entity\Carrier;
  6. use App\Entity\Cart;
  7. use App\Entity\Customer;
  8. use App\Entity\LanguageCountry;
  9. use App\Entity\Orders;
  10. use App\Entity\Stats;
  11. use App\Entity\StuartOrder;
  12. use App\Form\AdresseType;
  13. use App\Services\AvisVerifiesService;
  14. use App\Services\CartService;
  15. use App\Services\CheckoutService;
  16. use App\Services\CodePromos;
  17. use App\Services\DelivreeService;
  18. use App\Services\StuartService;
  19. use App\Services\Exaprint;
  20. use App\Services\FactureService;
  21. use App\Services\Notifications;
  22. use App\Services\ReferalCandyService;
  23. use App\Services\Sms;
  24. use App\Services\StripeConnect;
  25. use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
  26. use Symfony\Component\HttpFoundation\RedirectResponse;
  27. use Symfony\Component\Routing\Annotation\Route;
  28. use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
  29. use Twig\Environment;
  30. use Symfony\Component\HttpFoundation\Response;
  31. use Symfony\Component\HttpFoundation\Request;
  32. use Sensio\Bundle\FrameworkExtraBundle\Configuration\IsGranted;
  33. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  34. use Doctrine\ORM\EntityManagerInterface;
  35. use Symfony\Contracts\Translation\TranslatorInterface;
  36. use Symfony\Component\HttpFoundation\Session\SessionInterface;
  37. use Symfony\Component\Security\Http\Authentication\AuthenticationUtils;
  38. use App\Services\OrderService;
  39. use Stripe\Charge;
  40. use Stripe\Stripe;
  41. use App\Services\SendCloudApi;
  42. class CheckoutController extends AbstractController
  43. {
  44.     private $em;
  45.     private $session;
  46.     private $trans;
  47.     private $cart_service;
  48.     private $authenticationUtils;
  49.     private $checkout_service;
  50.     private $order_service;
  51.     private $codePromo_service;
  52.     private $facture_service;
  53.     private $notifications;
  54.     private $apiKeyStripe 'sk_test_muPBfpJVwU0rJ22HYXsrRfMq00KPuYsnpR';
  55.     private $delivreeService;
  56.     private $stuartService;
  57.     private $stripeConnectService;
  58.     private $service_sms;
  59.     private $avisVerifiesService;
  60.     private $candyService;
  61.     public function __construct(
  62.         DelivreeService $delivreeService,
  63.         StuartService $stuartService,
  64.         Notifications $notifications,
  65.         FactureService $facture_service,
  66.         CodePromos $codePromo_service,
  67.         OrderService $order_service,
  68.         CheckoutService $checkout_service,
  69.         CartService $cart_service,
  70.         SessionInterface $session,
  71.         TranslatorInterface $trans,
  72.         EntityManagerInterface $em,
  73.         AuthenticationUtils $authenticationUtils,
  74.         StripeConnect $stripeConnect,
  75.         Sms $service_sms,
  76.         SendCloudApi $apiCloudSend,
  77.         AvisVerifiesService $avisVerifiesService,
  78.         Exaprint $exaprint,
  79.         ReferalCandyService $candyService,
  80.         ParameterBagInterface $params
  81.     ) {
  82.         $this->em $em;
  83.         $this->trans $trans;
  84.         $this->session $session;
  85.         $this->cart_service $cart_service;
  86.         $this->checkout_service $checkout_service;
  87.         $this->authenticationUtils $authenticationUtils;
  88.         $this->order_service $order_service;
  89.         $this->codePromo_service $codePromo_service;
  90.         $this->facture_service $facture_service;
  91.         $this->notifications $notifications;
  92.         $this->delivreeService $delivreeService;
  93.         $this->stuartService $stuartService;
  94.         $this->stripeConnectService =  $stripeConnect;
  95.         $this->service_sms =  $service_sms;
  96.          $this->apiCloudSend $apiCloudSend;
  97.          $this->avisVerifiesService $avisVerifiesService;
  98.          $this->candyService $candyService;
  99.          $this->exaprint $exaprint;
  100.          $this->params $params;
  101.     }
  102.  
  103.     /**
  104.      * @Route("/checkout", name="checkout")
  105.      */
  106.     public function index(Request $request): Response
  107.     {
  108.         // check paiement succeeded if erreur
  109.         if ($this->session->get('payment_intent_id')) {
  110.             $peimentIntentObject $this->stripeConnectService->checkPayment($this->session->get('payment_intent_id'));
  111.             if ($peimentIntentObject && $peimentIntentObject->status == 'succeeded') {
  112.                 $charge $this->session->get('charge');
  113.                 $id_order $this->session->get('id_order');
  114.                 $order $this->em->getRepository(Orders::class)->find($id_order);
  115.                 if($order) {
  116.                     $fees $this->stripeConnectService->getFeeTransaction($this->session->get('payment_intent_id'));
  117.                     $order->setPrixFees($fees);
  118.                     $order->setChargeStripeId($charge);
  119.                     $order->setIsValid(true);
  120.                     $this->em->persist($order);
  121.                     $this->em->flush();
  122.                 }
  123.                 return $this->redirectToRoute('checkout_verifie', ['tk_or' => $this->session->get('tk_or')]);
  124.             }
  125.         }
  126.         $cart $this->cart_service->getCartCurrent();
  127.         if (!$cart || (count($cart->getCartDetail()) == && !$cart->getAbonnementProCart() && count($cart->getDistributionCart())== 0)) {
  128.             return $this->redirectToRoute('accueil');
  129.         }
  130.         if($this->cart_service->isProductPoste($cart->getId())){
  131.             return $this->redirectToRoute('checkout_poste');
  132.         }
  133.         //check cartDetail dont have adresse if multilivraison
  134.         $this->cart_service->addAdresseInCartMultiLivraisonIfNotExist($cart$cart->getId():0);
  135.         //check option liseuse selected
  136.         if(!empty($this->cart_service->checkOptionSelectReluire())){
  137.             return $this->redirectToRoute('liseuse');
  138.         }
  139.         //check cartDetail dont have adresse if multilivraison
  140.         $this->cart_service->addAdresseInCartMultiLivraisonIfNotExist($cart->getId());
  141.         //check option liseuse selected
  142.         if(!empty($this->cart_service->checkOptionSelectReluire())){
  143.             return $this->redirectToRoute('liseuse');
  144.         }
  145.         $tokenPaymentIntent null;
  146.         $this->checkout_service->addCustomerAndAdresseToUser(); // if logged and not customer
  147.         $cart $this->checkout_service->addCustomerAndAdresseToCartIfLogged($cart); // add to cart if logged
  148.         //check abonnementPro
  149.         $user $this->getUser();
  150.         $abonnementPro $this->cart_service->checkAbonnementToCartOrOrder($user,$cart->getId());
  151.         $abonnementProCart $this->cart_service->checkAbonenementProAddCart($cart->getId());
  152.         if($cart->getPrixTtc() > 0) {
  153.             if($this->cart_service->checkIsAbonnementProCart($cart->getId())){
  154. //                $prixTtc = $abonnementProCart['prixTtc'];
  155.                 $prixTtc 0;
  156.                 $tokenPaymentIntent $this->stripeConnectService->getOrCreatePaymentIntent(($cart->getPrixTtc() - $prixTtc) * 100);
  157.             }else{
  158.                 $tokenPaymentIntent $this->stripeConnectService->getOrCreatePaymentIntent($cart->getPrixTtc() * 100);
  159.             }
  160.         }else if($cart->getAbonnementProCart()){
  161.             $tokenPaymentIntent $this->stripeConnectService->getOrCreatePaymentIntent($cart->getPrixTtc() * 100);
  162.         }
  163.         $resultAbo $this->cart_service->checkB2bUser($this->getUser());
  164.         $abonnement $resultAbo['abonnement'];
  165.         $isAbonnementProInCart $resultAbo['isAbonnementProInCart'];
  166.         if($abonnement['is_abonnemen_pro'] || $isAbonnementProInCart){
  167.             if($abonnement['is_abonnemen_pro']){
  168.                 $customer $this->em->getRepository(Customer::class)->findOneBy(['user' => $this->getUser()->getId()]);
  169.                 if ($customer && $customer->getRolAbo() == Customer::role_abo_comptabilite) {
  170.                     $template 'front/b2b/access_denied.html.twig';
  171.                 }else{
  172.                     $template 'front/b2b/checkout/index.html.twig';
  173.                 }
  174.             }else{
  175.                 $template 'front/b2b/checkout/index.html.twig';
  176.             }
  177.         }else{
  178.             $template 'front/checkout/index.html.twig';
  179.         }
  180.         return $this->render($template, array(
  181.             'cart' => $cart,
  182.             'token_payment' => $tokenPaymentIntent,
  183.             'last_username' => $this->authenticationUtils->getLastUsername(),
  184.             'error' => $this->authenticationUtils->getLastAuthenticationError(),
  185.             'abonnementPro' => $abonnementPro,
  186.             'abonnementProCart' => $abonnementProCart,
  187.             'checkConsommation' => $this->cart_service->checkConsommation($user,$cart),
  188.             'abonnementOrder' =>  $this->cart_service->checkAbonenementPro($user)
  189.         ));
  190.     }
  191.     /**
  192.      * @Route("/add-code-promo/{codePromoName}", name="add_code_promo_cart",options={"expose"=true})
  193.      */
  194.     public function addCodePromo(Request $request$codePromoName): Response
  195.     {
  196.         $cart $this->cart_service->getCartCurrent();
  197.         $data $this->codePromo_service->getCodePromo($cart$codePromoName);
  198.         $this->cart_service->updatePriceCart($cart); // update price
  199.         $response = new Response();
  200.         $response->setContent(json_encode($data));
  201.         $response->setStatusCode(200);
  202.         return $response;
  203.     }
  204.     /**
  205.      * @Route("/remove-code-promo/{id}", name="remove_code_promo_cart",options={"expose"=true})
  206.      */
  207.     public function removeCodePromo(Request $request$id): Response
  208.     {
  209.         $cart $this->cart_service->getCartCurrent();
  210.         $data $this->codePromo_service->removeCodePromo($cart$id);
  211.         $this->cart_service->updatePriceCart($cart); // update price
  212.         $response = new Response();
  213.         $response->setContent(json_encode($data));
  214.         $response->setStatusCode(200);
  215.         return $response;
  216.     }
  217.     /**
  218.      * @Route("/block-livraison", name="block_livraison",options={"expose"=true})
  219.      */
  220.     public function blockLivraison(Request $request): Response
  221.     {
  222.         $cart $this->cart_service->getCartCurrent();
  223.         $dataRequest $request->request->all();
  224.         if (isset($dataRequest['postalcode'])) {
  225.             $data['lat'] = $dataRequest['lat'];
  226.             $data['longi'] = $dataRequest['longi'];
  227.             $data['postalcode'] = $dataRequest['postalcode'];
  228.             $data['CountryLiv'] = $dataRequest['CountryLiv'];
  229.             $data['CountryCodeLiv'] = isset($dataRequest['CountryCodeLiv']) ? $dataRequest['CountryCodeLiv'] : 'Fr';
  230.             $data['adresse'] = $dataRequest['addresseLiv'];
  231.         } else {
  232.             return $this->render('front/checkout/blockLivraison.html.twig', array('latLongiRequired' => 1));
  233.         }
  234.         if($cart->getVersionCarrier() == Cart::VERSION_CARRIER_NEW){
  235.             $dataLivrason $this->checkout_service->getModeLivraisonMultiple($cart$data);
  236.         }else{
  237.             $this->cart_service->removeCarrierToCart($cart) ;
  238.             $dataLivrason $this->checkout_service->getModeLivraison($cart$data);
  239.         }
  240.         return $this->render('front/checkout/blockLivraison.html.twig'$dataLivrason);
  241.     }
  242.     /**
  243.      * @Route("/block-livraison-multiple", name="block_livraison_multiple",options={"expose"=true})
  244.      */
  245.     public function blockLivraisonMultiple(Request $request): Response
  246.     {
  247.         $cart $this->cart_service->getCartCurrent();
  248.         $dataRequest $request->request->all();
  249.         if (isset($dataRequest['postalcode'])) {
  250.             $data['lat'] = $dataRequest['lat'];
  251.             $data['longi'] = $dataRequest['longi'];
  252.             $data['postalcode'] = $dataRequest['postalcode'];
  253.             $data['CountryLiv'] = $dataRequest['CountryLiv'];
  254.             $data['CountryCodeLiv'] = isset($dataRequest['CountryCodeLiv']) ? $dataRequest['CountryCodeLiv'] : 'Fr';
  255.             $data['adresse'] = $dataRequest['addresseLiv'];
  256.         } else {
  257.             return $this->render('front/checkout/blockLivraison.html.twig', array('latLongiRequired' => 1));
  258.         }
  259.         if($cart && $cart->getVersionCarrier() == Cart::VERSION_CARRIER_NEW){
  260.             $dataLivrason $this->checkout_service->getModeLivraisonMultiple($cart$data);
  261.         }else{
  262.             $this->cart_service->removeCarrierToCart($cart) ;
  263.             $dataLivrason $this->checkout_service->getModeLivraison($cart$data);
  264.         }
  265.         return $this->render('front/checkout/blockLivraison.html.twig'$dataLivrason);
  266.     }
  267.     /**
  268.      * @Route("/block-livraison-mobile-multiple", name="block_livraison_mobile_multiple",options={"expose"=true})
  269.      */
  270.     public function blockLivraisonMobileMultiple(Request $request): Response
  271.     {
  272.         $cart $this->cart_service->getCartCurrent();
  273.         $dataRequest $request->request->all();
  274.         if (isset($dataRequest['postalcode'])) {
  275.             $data['lat'] = $dataRequest['lat'];
  276.             $data['longi'] = $dataRequest['longi'];
  277.             $data['postalcode'] = $dataRequest['postalcode'];
  278.             $data['CountryLiv'] = $dataRequest['CountryLiv'];
  279.             $data['CountryCodeLiv'] = isset($dataRequest['CountryCodeLiv']) ? $dataRequest['CountryCodeLiv'] : 'Fr';
  280.             $data['adresse'] = $dataRequest['addresseLiv'];
  281.         } else {
  282.             return $this->render('front/checkout/blockLivraisonMobile.html.twig', array('latLongiRequired' => 1));
  283.         }
  284.         if($cart && $cart->getVersionCarrier() == Cart::VERSION_CARRIER_NEW){
  285.             $dataLivrason $this->checkout_service->getModeLivraisonMultiple($cart$data);
  286.         }else{
  287.             $this->cart_service->removeCarrierToCart($cart) ;
  288.             $dataLivrason $this->checkout_service->getModeLivraison($cart$data);
  289.         }
  290.         return $this->render('front/checkout/blockLivraisonMobile.html.twig'$dataLivrason);
  291.     }
  292.     /**
  293.      * @Route("/block-recap-multiple", name="block_recap_multiple",options={"expose"=true})
  294.      */
  295.     public function blockRecapMultiple(Request $request): Response
  296.     {
  297.         $cart $this->cart_service->getCartCurrent();
  298.         $dataRequest $request->request->all();
  299.         if (isset($dataRequest['postalcode'])) {
  300.             $data['lat'] = $dataRequest['lat'];
  301.             $data['longi'] = $dataRequest['longi'];
  302.             $data['postalcode'] = $dataRequest['postalcode'];
  303.             $data['CountryLiv'] = $dataRequest['CountryLiv'];
  304.             $data['adresse'] = $dataRequest['addresseLiv'];
  305.         } else {
  306.             return $this->render('front/checkout/blockLivraison.html.twig', array('latLongiRequired' => 1));
  307.         }
  308.         if($cart && $cart->getVersionCarrier() == Cart::VERSION_CARRIER_NEW){
  309.             $dataLivrason $this->checkout_service->getModeLivraisonMultiple($cart$data);
  310.         }else{
  311.             $this->cart_service->removeCarrierToCart($cart) ;
  312.             $dataLivrason $this->checkout_service->getModeLivraison($cart$data);
  313.         }
  314.         return $this->render('front/checkout/blockRecap.html.twig'$dataLivrason);
  315.     }
  316.     /**
  317.      * @Route("/add-carrier/{id}", name="add_carrier",options={"expose"=true})
  318.      */
  319.     public function addCarrier(Request $request$id): Response
  320.     {
  321.         $cart $this->cart_service->getCartCurrent();
  322.         $idsCartDetail $request->get('idsCartDetail');
  323.         $idImprimeurCartDetail $request->get('idImprimeurCartDetail');
  324.         $idAdresse $request->get('idAdresse');
  325.         $abonnementPro false;
  326.         if($cart) {
  327.             if( $cart->getVersionCarrier() == Cart::VERSION_CARRIER_NEW && $id == 0){
  328.                 $this->cart_service->removeCarrierToCart($cart) ;
  329.             }
  330.             if($idsCartDetail && $cart->getVersionCarrier() == Cart::VERSION_CARRIER_NEW){
  331.                 $cart $this->cart_service->addCarrierMutipleToCart($cart->getId(), $id,$idsCartDetail,$idImprimeurCartDetail,$idAdresse);
  332.             }else {
  333.                 $cart $this->cart_service->addCarrierToCart($cart->getId(), $id);
  334.             }
  335.             //check abonnementPro
  336.             $user $this->getUser();
  337.             $abonnementPro $this->cart_service->checkAbonnementToCartOrOrder($user$cart->getId());
  338.         }
  339.         $blockPrice $this->render('front/checkout/blockPanierTotalMultiple.html.twig', [
  340.             'cart' => $cart,
  341.             'abonnementPro' => $abonnementPro
  342.         ]);
  343.         return $blockPrice;
  344.     }
  345.     /**
  346.      * @Route("/get-date-estime", name="get_date_estime_livraison_national",options={"expose"=true})
  347.      */
  348.     public function getDateEstimeLivraisonNational(Request $request): Response
  349.     {
  350.         $date $this->cart_service->checkdateLivraisonNational();
  351.         $jour '';
  352.         $mois '';
  353.         switch ($date->format('D')){
  354.             case 'Mon':
  355.                 $jour 'Lundi';
  356.                 break;
  357.             case 'Tue':
  358.                 $jour 'Mardi';
  359.                 break;
  360.             case 'Wed':
  361.                 $jour 'Mercredi';
  362.                 break;
  363.             case 'Thu':
  364.                 $jour 'Jeudi';
  365.                 break;
  366.             case 'Fri':
  367.                 $jour 'Vendredi';
  368.                 break;
  369.             case 'Sat':
  370.                 $jour 'Samedi';
  371.                 break;
  372.             case 'Sun':
  373.                 $jour 'Dimanche';
  374.                 break;
  375.         }
  376.         switch ($date->format('m')){
  377.             case '01':
  378.                 $mois 'Janvier';
  379.                 break;
  380.             case '02':
  381.                 $mois 'Février';
  382.                 break;
  383.             case '03':
  384.                 $mois 'Mars';
  385.                 break;
  386.             case '04':
  387.                 $mois 'Avril';
  388.                 break;
  389.             case '05':
  390.                 $mois 'Mai';
  391.                 break;
  392.             case '06':
  393.                 $mois 'Juin';
  394.                 break;
  395.             case '07':
  396.                 $mois 'Juillet';
  397.                 break;
  398.             case '08':
  399.                 $mois 'Août';
  400.                 break;
  401.             case '09':
  402.                 $mois 'Septembre';
  403.                 break;
  404.             case '10':
  405.                 $mois 'Octobre';
  406.                 break;
  407.             case '11':
  408.                 $mois 'Novembre';
  409.                 break;
  410.             case '12':
  411.                 $mois 'Décembre';
  412.                 break;
  413.         }
  414.         $response = new Response();
  415.         $response->setContent($jour.' '.$date->format('d').' '.$mois);
  416.         return $response;
  417.     }
  418.     /**
  419.      * @Route("/add-carrier-livraison-national/{id}-{typeLivraisonNational}", name="add_carrier_livraisonNational",options={"expose"=true})
  420.      */
  421.     public function addCarrierLivraisonNational(Request $request$id,$typeLivraisonNational): Response
  422.     {
  423.         $cart $this->cart_service->getCartCurrent();
  424.         $idsCartDetail $request->get('idsCartDetail');
  425.         $idImprimeurCartDetail $request->get('idImprimeurCartDetail');
  426.         $idAdresse $request->get('idAdresse');
  427.         if($idsCartDetail && $cart->getVersionCarrier() == Cart::VERSION_CARRIER_NEW){
  428.             $cart $this->cart_service->addCarrierMultipleLivraionNationalToCart($cart->getId(), $id$typeLivraisonNational,$idsCartDetail,$idImprimeurCartDetail,$idAdresse);
  429.         }else {
  430.             $cart $this->cart_service->addCarrierLivraionNationalToCart($cart->getId(), $id$typeLivraisonNational);
  431.         }
  432.         //check abonnementPro
  433.         $user $this->getUser();
  434.         $abonnementPro $this->cart_service->checkAbonnementToCartOrOrder($user,$cart->getId());
  435.         $blockPrice $this->render('front/checkout/blockPanierTotalMultiple.html.twig', [
  436.             'cart' => $cart,
  437.             'abonnementPro' => $abonnementPro
  438.         ]);
  439.         return $blockPrice;
  440.     }
  441.     /**
  442.      * @Route("/add-carrier-livraison-30min/{id}-{id_imprimeur}", name="add_carrier_livraison30min",options={"expose"=true})
  443.      */
  444.     public function addCarrierLivraison30min(Request $request$id,$id_imprimeur): Response
  445.     {
  446.         $cart $this->cart_service->getCartCurrent();
  447.         $data $request->request->all();
  448.         $idsCartDetail $request->get('idsCartDetail');
  449.         $idImprimeurCartDetail $request->get('idImprimeurCartDetail');
  450.         $idAdresse $request->get('idAdresse');
  451.         if($idsCartDetail && $cart->getVersionCarrier() == Cart::VERSION_CARRIER_NEW) {
  452.             $cart $this->cart_service->addCarrierMultipleLivraion30minToCart($cart->getId(), $id$id_imprimeur$data,$idsCartDetail,$idImprimeurCartDetail,$idAdresse);
  453.         }else{
  454.             $cart $this->cart_service->addCarrierLivraion30minToCart($cart->getId(), $id$id_imprimeur$data);
  455.         }
  456.         //check abonnementPro
  457.         $user $this->getUser();
  458.         $abonnementPro $this->cart_service->checkAbonnementToCartOrOrder($user,$cart->getId());
  459.         $blockPrice $this->render('front/checkout/blockPanierTotalMultiple.html.twig', [
  460.             'cart' => $cart,
  461.             'abonnementPro' => $abonnementPro
  462.         ]);
  463.         return $blockPrice;
  464.     }
  465.     /**
  466.      * @Route("/add-carrier-livraison-30min-date/", name="add_carrier_livraison30min_date",options={"expose"=true})
  467.      */
  468.     public function addCarrierLivraison30minDate(Request $request): Response
  469.     {
  470.         $cart $this->cart_service->getCartCurrent();
  471.         $idsCartDetail $request->get('idsCartDetail');
  472.         $date_choix $request->get('date_choix');
  473.         $idAdresse $request->get('idAdresse');
  474.         $this->cart_service->addCarrierLivraison30minDate($cart->getId(),$idsCartDetail,$date_choix,$idAdresse);
  475.         $response = new Response();
  476.         $response->setContent(1);
  477.         $response->setStatusCode(200);
  478.         return $response;
  479.     }
  480.     /**
  481.      * @Route("/add-carrier-livraison-30min-datetime/", name="add_carrier_livraison30min_datetime",options={"expose"=true})
  482.      */
  483.     public function addCarrierLivraison30minDatetime(Request $request): Response
  484.     {
  485.         $cart $this->cart_service->getCartCurrent();
  486.         $idsCartDetail $request->get('idsCartDetail');
  487.         $date_choix $request->get('date_choix');
  488.         $time $request->get('time');
  489.         $idAdresse $request->get('idAdresse');
  490.         $this->cart_service->addCarrierLivraison30minDatetime($cart->getId(),$idsCartDetail,$date_choix,$time,$idAdresse);
  491.         $response = new Response();
  492.         $response->setContent(1);
  493.         $response->setStatusCode(200);
  494.         return $response;
  495.     }
  496.     /**
  497.      * @Route("/add-carrier-idServicePointNationInput/{id}", name="add_carrier_idServicePointNationInput",options={"expose"=true})
  498.      */
  499.     public function addCarrieridServicePointNationInput(Request $request$id): Response
  500.     {
  501.         $cart $this->cart_service->getCartCurrent();
  502.         $idsCartDetail $request->get('idsCartDetail');
  503.         $servicePointObject $request->get('servicePointObject');
  504.         $idAdresse $request->get('idAdresse');
  505.         if($idsCartDetail && $cart->getVersionCarrier() == Cart::VERSION_CARRIER_NEW) {
  506.              $this->cart_service->addCarrierMultiplePointNationInput($cart->getId(), $id$idsCartDetail,$servicePointObject,$idAdresse);
  507.         }
  508.         $response = new Response();
  509.         $response->setContent(1);
  510.         $response->setStatusCode(200);
  511.         return $response;
  512.     }
  513.     /**
  514.      * @Route("/checkout-panier", name="checkout_panier")
  515.      */
  516.     public function panierBlock(Request $request): Response
  517.     {
  518.         $cart $this->cart_service->getCartCurrent();
  519.         //check abonnementPro
  520.         $user $this->getUser();
  521.         $abonnementPro $this->cart_service->checkAbonnementToCartOrOrder($user,$cart->getId());
  522.         return $this->render('front/checkout/blockPanier.html.twig', array(
  523.             'cart' => $cart,
  524.             'abonnementPro' => $abonnementPro
  525.         ));
  526.     }
  527.     /**
  528.      * @Route("/checkout-panier-multiple", name="checkout_panier_multiple",options={"expose"=true})
  529.      */
  530.     public function panierBlockMultiple(Request $request): Response
  531.     {
  532.         $cart $this->cart_service->getCartCurrent();
  533.         //check abonnementPro
  534.         $user $this->getUser();
  535.         $abonnementPro $this->cart_service->checkAbonnementToCartOrOrder($user,$cart->getId());
  536.         return $this->render('front/checkout/blockPanierMultiple.html.twig', array(
  537.             'cart' => $cart,
  538.             'abonnementPro' => $abonnementPro
  539.         ));
  540.     }
  541.     /**
  542.      * @Route("/checkout-panier-multiple-mobile", name="checkout_panier_multiple_mobile",options={"expose"=true})
  543.      */
  544.     public function panierBlockMultipleMobile(Request $request): Response
  545.     {
  546.         $cart $this->cart_service->getCartCurrent();
  547.         //check abonnementPro
  548.         $user $this->getUser();
  549.         $abonnementPro $this->cart_service->checkAbonnementToCartOrOrder($user,$cart->getId());
  550.         return $this->render('front/checkout/blockPanierMultipleMobile.html.twig', array(
  551.             'cart' => $cart,
  552.             'abonnementPro' => $abonnementPro
  553.         ));
  554.     }
  555.     /**
  556.      * @Route("/get-total-pay-checkout", name="get_total_pay_checkout" ,options={"expose"=true})
  557.      */
  558.     public function getTotalPayCheckout(Request $request): Response
  559.     {
  560.         $cart $this->cart_service->getCartCurrent();
  561.         $prixTotalTtc 0;
  562.         if($cart){
  563.             $prixTotalTtc =  number_format((float)$cart->getPrixTtc(),2).' €';
  564.         }
  565.         $response = new Response();
  566.         $response->setContent($prixTotalTtc);
  567.         $response->setStatusCode(200);
  568.         return $response;
  569.     }
  570.     /**
  571.      * @Route("/get-total-pay-checkout-number-stipe", name="get_total_pay_checkout_number_stipe" ,options={"expose"=true})
  572.      */
  573.     public function getTotalPayCheckoutNumberStripe(Request $request): Response
  574.     {
  575.         $cart $this->cart_service->getCartCurrent();
  576.         $prixTotalTtc 0;
  577.         if($cart){
  578.             $prixTotalTtc =  $cart->getPrixTtc() * 100;
  579.             $nb explode('.'$prixTotalTtc);
  580.             $prixTotalTtc $nb[0];
  581.         }
  582.         $response = new Response();
  583.         $response->setContent($prixTotalTtc);
  584.         $response->setStatusCode(200);
  585.         return $response;
  586.     }
  587.     /**
  588.      * @Route("/get-prix-economie-checkout", name="get_prix_economie_checkout" ,options={"expose"=true})
  589.      */
  590.     public function getPrixEconomieCheckout(Request $request): Response
  591.     {
  592.         $cart $this->cart_service->getCartCurrent();
  593.         $rep = [];
  594.         $rep['prixEconomie'] = '0 €';
  595.         $rep['pourcentageEconomie'] = '0%';
  596.         if($cart){
  597.             $user $this->getUser();
  598.             $priceAbo $this->cart_service->gePriceCartWithAbonnementProAbonnementPro::TYPE_PRO,$cart);
  599.             $prixEconomie =  (float)$cart->getPrixTtc() - $priceAbo['prixTtcTotal'] ;
  600.             $pourcentageEconomie = ($prixEconomie / (float)$cart->getPrixTtc()) * 100 ;
  601.             $rep['prixEconomie'] = number_format($prixEconomie,2).' €';
  602.             $rep['pourcentageEconomie'] = number_format($pourcentageEconomie,2).'%';
  603.         }
  604.         $response = new Response();
  605.         $response->setContent(json_encode($rep));
  606.         $response->setStatusCode(200);
  607.         return $response;
  608.     }
  609.     /**
  610.      * @Route("/checkout-post-form", name="checkout_post_form")
  611.      */
  612.     public function postFormCheckout(Request $request){
  613.         if($request->isMethod('post')){
  614.             $rep = array(
  615.                 'erreur' => '',
  616.                 'redirect' => $this->generateUrl('checkout_verifie'),
  617.                 'success' => false,
  618.                 'paid' => false
  619.             );
  620.             $data $this->checkout_service->postForm($request);
  621.             if(isset($data['erreur'])){
  622.                 $rep['erreur'] = $data['erreur'];
  623.             }
  624.             else{
  625.                 $cart $this->cart_service->getCartCurrent();
  626.                 if($cart) {
  627.                     if (is_null($cart->getCarrier()) && count($cart->getCartDetail()) > && $cart->getVersionCarrier() != Cart::VERSION_CARRIER_NEW) {
  628.                         $rep['erreur'] = 'Erreur mode livraison !';
  629.                     }
  630.                     else{
  631.                         $paymentIntentId $this->session->get('payment_intent_id');
  632.                         $cart->setCustomer($data['customer']);
  633.                         $cart->setAdresseLivraison($data['adresseLiv']);
  634.                         $cart->setAdresseFacturation($data['adresseFac']);
  635. //                    $cart->setCarrier($data['carrierData']['carrier']);
  636.                         if($cart->getVersionCarrier() == Cart::VERSION_CARRIER_NEW){
  637.                             $cart->setImprimeur(null);
  638.                             $cart->setDateStart(null);
  639.                             $cart->setDateEnd(null);
  640.                             $cart->setCarrier(null);
  641.                             $cart->setTypeLivraisonNational(null);
  642.                             $cart->setIdServicePointLivraison(null);
  643.                         }else {
  644.                             if (count($cart->getCartDetail()) > 0) {
  645.                                 $cart->setImprimeur($data['carrierData']['imprimeur']);
  646.                                 $cart->setDateStart($data['carrierData']['dateStart']);
  647.                                 $cart->setDateEnd($data['carrierData']['dateEnd']);
  648.                                 $cart->setTypeLivraisonNational($data['carrierData']['typeLivraionNation']);
  649.                                 $cart->setIdServicePointLivraison($data['carrierData']['idServicePointNation']);
  650.                             } else {
  651.                                 $cart->setImprimeur(null);
  652.                                 $cart->setDateStart(null);
  653.                                 $cart->setDateEnd(null);
  654.                                 $cart->setCarrier(null);
  655.                             }
  656.                         }
  657.                         $cart->setCommentaire($data['commentaire']);
  658.                         if ($request->request->get('saveCard')) $cart->setIsSaveCard(true);
  659.                         $this->em->persist($cart);
  660.                         $this->em->flush();
  661.                         $carrierDataCheck $this->stuartService->checkMissionByCart($cart); //check carrier 30 min
  662.                         if(isset($carrierDataCheck['erreur'])){
  663.                             $rep['erreur'] = $carrierDataCheck['erreur'];
  664.                             $response = new Response();
  665.                             $response->setContent(json_encode($rep));
  666.                             $response->setStatusCode(200);
  667.                             return $response;
  668.                         }
  669.                         if ($paymentIntentId) {
  670.                             $peimentIntentObject $this->stripeConnectService->checkPayment($paymentIntentId);
  671.                             if ($peimentIntentObject && $peimentIntentObject->status == 'succeeded') {
  672.                                 $rep['paid'] = true;
  673.                                 $rep['success'] = true;
  674.                                 $rep['order_id'] = $this->session->get('id_order');
  675.                                 $rep['tk_or'] =  $this->session->get('tk_or');
  676.                             }else {
  677.                                 // if payment without registered card Abonnement (paiement la prochaine échéance)
  678.                                 if ($request->request->get('paimentChoiceAbonnement') == 'stripeChoiceSaveAbonnement') {
  679.                                     $token rand(10000000009999999999);
  680.                                     $idOrder $this->order_service->createOrder($cart$paymentIntentId);
  681.                                     $this->session->set('charge'$paymentIntentId);
  682.                                     $this->session->set('id_order'$idOrder);
  683.                                     $this->session->set('tk_or'$token);
  684.                                     $this->session->set('isStripeChoiceSaveAbonnement'$idOrder);
  685.                                     $rep['success'] = true;
  686.                                     $rep['order_id'] = $idOrder;
  687.                                     $rep['tk_or'] = $token;
  688.                                 }
  689.                                 // if payment without registered card Abonnement (paiement la prochaine échéance)
  690.                                 else if ($request->request->get('paimentChoiceAbonnementWallet') == 'stripeChoiceSaveAbonnementWallet') {
  691.                                     $resultWallet $this->cart_service->checkWalletB2bCart($cart);
  692.                                     if($resultWallet){
  693.                                         $token rand(10000000009999999999);
  694.                                         $idOrder $this->order_service->createOrder($cart$paymentIntentId,true);
  695.                                         $this->session->set('charge'$paymentIntentId);
  696.                                         $this->session->set('id_order'$idOrder);
  697.                                         $this->session->set('tk_or'$token);
  698.                                         $rep['success'] = true;
  699.                                         $rep['order_id'] = $idOrder;
  700.                                         $rep['tk_or'] = $token;
  701.                                     }else{
  702.                                         $rep['erreur'] = 'Erreur portefeuille !';
  703.                                     }
  704.                                 }
  705.                                 // if payment with registered card
  706.                                 else if ($request->request->get('paimentChoice') == 'stripeChoiceSave') {
  707.                                     if ($this->cart_service->checkIsAbonnementProCart($cart->getId())) {
  708.                                         $abonnementProCart $this->cart_service->checkAbonenementProAddCart($cart->getId());
  709. //                                        $prixTtc = $abonnementProCart['prixTtc'];
  710.                                         $prixTtc 0;
  711.                                         $payment $this->stripeConnectService->createPaymentIntentWidhRegisterCard(($cart->getPrixTtc() - $prixTtc) * 100);
  712.                                     } else {
  713.                                         $payment $this->stripeConnectService->createPaymentIntentWidhRegisterCard($cart->getPrixTtc() * 100);
  714.                                     }
  715.                                     if (!$payment['success'] && !$payment['is_authentication']) {
  716.                                         $rep['erreur'] = $payment['msg'];
  717.                                     } else {
  718.                                         $paymentIntent $payment['intent'];
  719.                                         $token rand(10000000009999999999);
  720.                                         $idOrder $this->order_service->createOrder($cart$paymentIntent->id);
  721.                                         $this->stripeConnectService->updatePaymentIntentAfterOrder($paymentIntent->id$idOrder);
  722.                                         $this->session->set('charge'$paymentIntent->id);
  723.                                         $this->session->set('id_order'$idOrder);
  724.                                         $this->session->set('tk_or'$token);
  725.                                         $rep['success'] = true;
  726.                                         $rep['order_id'] = $idOrder;
  727.                                         $rep['is_authentication'] = $payment['is_authentication'];
  728.                                         $rep['intent'] = $payment['intent'];
  729.                                         $rep['tk_or'] = $token;
  730.                                     }
  731.                                     // if payment without registered card
  732.                                 } else if ($request->request->get('paimentChoice') == 'stripeChoice') {
  733.                                     // add order
  734.                                     $token rand(10000000009999999999);
  735.                                     $idOrder $this->order_service->createOrder($cart$paymentIntentId);
  736.                                     $this->stripeConnectService->updatePaymentIntentAfterOrder($paymentIntentId$idOrder);
  737.                                     $this->session->set('charge'$paymentIntentId);
  738.                                     $this->session->set('id_order'$idOrder);
  739.                                     $this->session->set('tk_or'$token);
  740.                                     $rep['success'] = true;
  741.                                     $rep['order_id'] = $idOrder;
  742.                                     $rep['tk_or'] = $token;
  743.                                 } else if ($request->request->get('paimentChoice') == 'paypalChoice') {
  744.                                     // add order
  745.                                     $token rand(10000000009999999999);
  746.                                     $idOrder $this->order_service->createOrder($cart$paymentIntentId);
  747.                                     $this->stripeConnectService->updatePaymentIntentPaypalAfterOrder($paymentIntentId$idOrder);
  748.                                     $this->session->set('charge'$paymentIntentId);
  749.                                     $this->session->set('id_order'$idOrder);
  750.                                     $this->session->set('tk_or'$token);
  751.                                     $rep['success'] = true;
  752.                                     $rep['order_id'] = $idOrder;
  753.                                     $rep['tk_or'] = $token;
  754.                                     $rep['charge'] = $paymentIntentId;
  755.                                 } else if ($request->request->get('paimentChoice') == 'googlePayChoice') {
  756.                                     // add order
  757.                                     $token rand(10000000009999999999);
  758.                                     $idOrder $this->order_service->createOrder($cart$paymentIntentId);
  759.                                     $this->stripeConnectService->updatePaymentIntentGooglePayAfterOrder($paymentIntentId$idOrder);
  760.                                     $this->session->set('charge'$paymentIntentId);
  761.                                     $this->session->set('id_order'$idOrder);
  762.                                     $this->session->set('tk_or'$token);
  763.                                     $rep['success'] = true;
  764.                                     $rep['order_id'] = $idOrder;
  765.                                     $rep['tk_or'] = $token;
  766.                                     $rep['charge'] = $paymentIntentId;
  767.                                 } else if ($request->request->get('paimentChoice') == 'klarnaChoice') {
  768.                                     // add order
  769.                                     $token rand(10000000009999999999);
  770.                                     $idOrder $this->order_service->createOrder($cart$paymentIntentId);
  771.                                     $this->stripeConnectService->updatePaymentIntentKlarnaAfterOrder($paymentIntentId$idOrder);
  772.                                     $this->session->set('charge'$paymentIntentId);
  773.                                     $this->session->set('id_order'$idOrder);
  774.                                     $this->session->set('tk_or'$token);
  775.                                     $rep['success'] = true;
  776.                                     $rep['order_id'] = $idOrder;
  777.                                     $rep['tk_or'] = $token;
  778.                                     $rep['charge'] = $paymentIntentId;
  779.                                 }else if ($request->request->get('paimentChoice') == 'stripeChoiceSepa') {
  780.                                     // add order
  781.                                     $token rand(10000000009999999999);
  782.                                     $idOrder $this->order_service->createOrder($cart$paymentIntentId);
  783.                                     $this->stripeConnectService->updatePaymentIntentSepaAfterOrder($paymentIntentId$idOrder);
  784.                                     $this->session->set('charge'$paymentIntentId);
  785.                                     $this->session->set('id_order'$idOrder);
  786.                                     $this->session->set('tk_or'$token);
  787.                                     $rep['success'] = true;
  788.                                     $rep['order_id'] = $idOrder;
  789.                                     $rep['tk_or'] = $token;
  790.                                 } else {
  791.                                     $rep['erreur'] = 'Il faut choisir un mode de paiement !';
  792.                                 }
  793.                             }
  794.                         } else {
  795.                             $rep['erreur'] = 'Erreur de paiement';
  796.                         }
  797.                     }
  798.                 }
  799.                 else {
  800.                     $rep['erreur'] = 'Erreur ! votre panier est vide';
  801.                 }
  802.             }
  803.             $response = new Response();
  804.             $response->setContent(json_encode($rep));
  805.             $response->setStatusCode(200);
  806.             return $response;
  807.         }
  808.         die();
  809.     }
  810.     /**
  811.      * @Route("/valide-order-intent/{idPayment}", name="valide_order_by_payment_intent" ,options={"expose"=true})
  812.      */
  813.     public function valideOrder(Request $request,$idPayment): Response
  814.     {
  815.         $peimentIntentObject $this->stripeConnectService->checkPayment($idPayment);
  816.         if ($peimentIntentObject && $peimentIntentObject->status == 'succeeded') {
  817.             $id_order $this->session->get('id_order');
  818.             $order $this->em->getRepository(Orders::class)->find($id_order);
  819.             if ($order) {
  820.                 $order->setChargeStripeId($idPayment);
  821.                 $order->setIsValid(true);
  822.                 $status $this->em->getRepository(Stats::class)->findOneBy(array('statusNbr'=>Stats::ENCOURT));
  823.                 $order->setStatus($status);
  824.                 $this->em->persist($order);
  825.                 $this->em->flush();
  826.             }
  827.         }elseif($peimentIntentObject && $peimentIntentObject->status == 'processing' && $peimentIntentObject->payment_method_types[0] == 'sepa_debit' ){
  828.             $id_order $this->session->get('id_order');
  829.             $order $this->em->getRepository(Orders::class)->find($id_order);
  830.             if ($order) {
  831.                 $order->setChargeStripeId($idPayment);
  832.                 $order->setIsValid(true);
  833.                 $status $this->em->getRepository(Stats::class)->findOneBy(array('statusNbr'=>Stats::ENCOURT));
  834.                 $order->setStatus($status);
  835.                 $this->em->persist($order);
  836.                 $this->em->flush();
  837.             }
  838.         }
  839.         $response = new Response();
  840.         $response->setContent(1);
  841.         $response->setStatusCode(200);
  842.         return $response;
  843.     }
  844.     /**
  845.      * @Route("/valide-order-intent-check-paypal/{idPayment}", name="valide_order_check_paypal_by_payment_intent" ,options={"expose"=true})
  846.      */
  847.     public function checkPayPalOrder(Request $request,$idPayment): Response
  848.     {
  849.         $charge $idPayment;
  850.         $isValid false;
  851.         if($idPayment == $request->query->get('payment_intent')){
  852.             $peimentIntentObject $this->stripeConnectService->checkPayment($idPayment);
  853.             if ($peimentIntentObject && $peimentIntentObject->status == 'succeeded') {
  854.                 $id_order $this->session->get('id_order');
  855.                 $order $this->em->getRepository(Orders::class)->find($id_order);
  856.                 if ($order) {
  857.                     $order->setChargeStripeId($idPayment);
  858.                     $order->setIsValid(true);
  859.                     $status $this->em->getRepository(Stats::class)->findOneBy(array('statusNbr'=>Stats::ENCOURT));
  860.                     $order->setStatus($status);
  861.                     $this->em->persist($order);
  862.                     $this->em->flush();
  863.                     $isValid true;
  864.                 }
  865.             }
  866.         }
  867.         if($isValid){
  868.             return $this->redirectToRoute('checkout_verifie',['tk_or'=> $this->session->get('tk_or')]);
  869.         }else{
  870.             return $this->redirectToRoute('checkout_erreur');
  871.         }
  872.     }
  873.     /**
  874.      * @Route("/checkout-verifie", name="checkout_verifie")
  875.      */
  876.     public function verifieCheckout(Request $request): Response
  877.     {
  878.         $peimentIntentObject null;
  879.         $id_order $this->session->get('id_order');
  880.         $order $this->em->getRepository(Orders::class)->find($id_order);
  881.         // check paiement succeeded
  882.         if ($this->session->get('payment_intent_id')) {
  883.             $peimentIntentObject $this->stripeConnectService->checkPayment($this->session->get('payment_intent_id'));
  884.             if ($peimentIntentObject && $peimentIntentObject->status == 'succeeded') {
  885.                 $charge $this->session->get('charge');
  886.                 if($order) {
  887.                     $fees $this->stripeConnectService->getFeeTransaction($this->session->get('payment_intent_id'));
  888.                     $order->setChargeStripeId($charge);
  889.                     $order->setPrixFees($fees);
  890.                     $order->setIsValid(true);
  891.                     $status $this->em->getRepository(Stats::class)->findOneBy(array('statusNbr'=>Stats::ENCOURT));
  892.                     $order->setStatus($status);
  893.                     $this->em->persist($order);
  894.                     $this->em->flush();
  895.                 }
  896.             }elseif($peimentIntentObject && $peimentIntentObject->status == 'succeeded' && $peimentIntentObject->payment_method_types[0] == 'sepa_debit') {
  897.                 $charge $this->session->get('charge');
  898.                 if($order) {
  899.                     $order->setChargeStripeId($charge);
  900.                     $fees $this->stripeConnectService->getFeeTransaction($this->session->get('payment_intent_id'));
  901.                     $order->setPrixFees($fees);
  902.                     $order->setIsValid(true);
  903.                     $status $this->em->getRepository(Stats::class)->findOneBy(array('statusNbr'=>Stats::ENCOURT));
  904.                     $order->setStatus($status);
  905.                     $this->em->persist($order);
  906.                     $this->em->flush();
  907.                 }
  908.             }
  909.             if($order && $order->getIsWallet()){
  910.             }else{
  911.                 if($order) {
  912.                     if ($order->getPrixTtc() == or $peimentIntentObject->payment_method_types[0] == 'sepa_debit') {
  913.                     } else {
  914.                         if($this->session->get('isStripeChoiceSaveAbonnement')){
  915.                         }else if(!$order->getIsValid()){
  916.                         }
  917.                     }
  918.                 }
  919.             }
  920.         }
  921.         $charge $this->session->get('charge');
  922.         $id_order $this->session->get('id_order');
  923.         $tk_or $this->session->get('tk_or');
  924.         $tk_or_get $request->query->get('tk_or');
  925.         if($tk_or == $tk_or_get) {
  926.             if ($id_order) {
  927.                 $order $this->em->getRepository(Orders::class)->find($id_order);
  928.                 if ($order) {
  929.                     $cart $this->em->getRepository(Cart::class)->findOneBy(array('token'=>$this->session->get('token_cart')));
  930.                     if($this->session->get('isStripeChoiceSaveAbonnement')) {
  931.                         $this->session->remove('isStripeChoiceSaveAbonnement');
  932.                     }
  933.                     $this->session->remove('id_order');
  934.                     $this->session->remove('charge');
  935.                     $this->session->remove('token_cart');
  936.                     $this->session->remove('payment_intent_id');
  937.                     $this->session->remove('tk_or');
  938.                     $nameFacture $this->facture_service->uploadFacture($order->getId());  //creation facture
  939.                     $order->setPathFacture($nameFacture);
  940.                     $order->setIsAbonnementPro($cart->getIsAbonnementPro());
  941.                     $this->em->persist($order);
  942.                     $this->em->flush();
  943.                     $order->setChargeStripeId($charge);
  944.                     $order->setIsValid(true);
  945.                     $status $this->em->getRepository(Stats::class)->findOneBy(array('statusNbr'=>Stats::ENCOURT));
  946.                     $order->setStatus($status);
  947.                     $this->em->persist($order);
  948.                     $this->em->flush();
  949.                     if($order->getIsSaveCard()) $this->stripeConnectService->addCustomerStripeToPaymentIntent($id_order); // save card
  950.                     //api delivree
  951.                     $distinctCarrierOrderDetail $this->order_service->getDistinctCarrierOrderDetail($order);
  952.                     if($order->getVersionCarrier() == Cart::VERSION_CARRIER_NEW){
  953.                         if ($distinctCarrierOrderDetail) {
  954.                             foreach ($distinctCarrierOrderDetail as $item){
  955.                                 if($item['carrier']->getNum()== Carrier::STUART){
  956.                                     $data $this->stuartService->createMission($order->getId(),true,$item);
  957.                                     if($order->getIsMultiAdresse()){
  958.                                         $this->stuartService->setLienTrakingMultipleLivraison($data$order$item);
  959.                                     }else {
  960.                                         $this->stuartService->setLienTrakingMultiple($data$order$item);
  961.                                     }
  962.                                 }
  963.                                 if ($item['carrier']->getNum() == Carrier::J1 || $item['carrier']->getNum() == Carrier::J2) {
  964.                                     // send livraison national
  965.                                     $this->apiCloudSend->createParcelMultiple($order->getId(),$item);
  966.                                 }
  967.                                 if ($item['carrier']->getNum() == Carrier::EXAPRINT) {
  968.                                     foreach ($item['details'] as $value){
  969.                                         if($order->getIsMultiAdresse()){
  970.                                             $this->exaprint->createOrderInitMultiLivraison($value,$item['adresse']);
  971.                                         }else{
  972.                                             $this->exaprint->createOrderInit($value,$order->getAdresseLivraison());
  973.                                         }
  974.                                     }
  975.                                 }
  976.                             }
  977.                         }
  978.                     }else {
  979.                         if ($order->getCarrier()) {
  980.                             if ($order->getCarrier()->getNum() == Carrier::STUART) {
  981.                                 $data $this->stuartService->createMission($order->getId());
  982.                                 $this->stuartService->setLienTraking($data$order);
  983.                             }
  984.                             if ($order->getCarrier()->getNum() == Carrier::J1 || $order->getCarrier()->getNum() == Carrier::J2) {
  985.                                 // send livraison national
  986.                                 $this->apiCloudSend->createParcel($order->getId());
  987.                             }
  988.                         }
  989.                     }
  990.                     $this->order_service->createBonDeCommandeAndFolder($order); // create bon de livraison in serveur "commande/"
  991.                     if($this->params->get('str_env') == 'PROD' || $this->params->get('str_env') == 'PREPROD2') {
  992.                         if ($order->getVersionCarrier() == Cart::VERSION_CARRIER_NEW) {
  993.                             if ($order->getCart()->getAbonnementProCart() and count($order->getOrderDetail()) == 0) {
  994.                             } else {
  995.                                 $this->notifications->sendOrder($order->getAdresseFacturation()->getEmail(), 'Nouvelle commande Copees'$order$nameFacture$distinctCarrierOrderDetail); // send order to user
  996.                                 $this->cart_service->checkMailProAndSendMail($order,$order->getAdresseFacturation()); // send mail if adresse mail pro
  997.                                 if ($distinctCarrierOrderDetail) {
  998.                                     foreach ($distinctCarrierOrderDetail as $item) {
  999.                                         $this->notifications->sendOrderDetailImprimeurMultiple($item['imprimeur']->getEmailImp(), 'Nouvelle commande Copees'$order$item); // send order detail to Imprimeur
  1000.                                         $this->notifications->sendNotifClientImprimeurCommentaireImprimeurMultiple($item['imprimeur']->getEmailImp(), 'Nouveau commentaire sur la commande #' $order->getId(), $order$item); //check commentaire client imprimeur
  1001.                                     }
  1002.                                     // send sms
  1003.                                     if(isset($item['adresse'])){
  1004.                                         if ($order->getCart()->getAbonnementProCart() and count($order->getOrderDetail()) == 0) {
  1005.                                         } else {
  1006.                                             $local $this->notifications->user_locale(null,null,$item['adresse']);
  1007.                                             $content $this->trans->trans('Bonjour ',[],'emailAndFactureAndSms',$local) . ucfirst($item['adresse']->getLastname()) . ' ' ucfirst($item['adresse']->getFirstname()) . $this->trans->trans(', Votre commande #',[],'emailAndFactureAndSms',$local) . $order->getId() . $this->trans->trans(' est en cours de préparation chez Copees.',[],'emailAndFactureAndSms',$local);
  1008.                                             $this->service_sms->sendSmsByPhone($item['adresse']->getPhone(), $content);
  1009.                                         }
  1010.                                     }else{
  1011.                                         if ($order->getCart()->getAbonnementProCart() and count($order->getOrderDetail()) == 0) {
  1012.                                         } else {
  1013.                                             $local $this->notifications->user_locale(null,null,$order->getAdresseLivraison());
  1014.                                             $content $this->trans->trans('Bonjour ',[],'emailAndFactureAndSms',$local) . ucfirst($order->getAdresseLivraison()->getLastname()) . ' ' ucfirst($order->getAdresseLivraison()->getFirstname()) . $this->trans->trans(', Votre commande #',[],'emailAndFactureAndSms',$local) . $order->getId() . $this->trans->trans(' est en cours de préparation chez Copees.',[],'emailAndFactureAndSms',$local);
  1015.                                             $this->service_sms->sendSmsByPhone($order->getAdresseLivraison()->getPhone(), $content);
  1016.                                         }
  1017.                                     }
  1018.                                     if ($item['imprimeur']->getMobile())
  1019.                                         $local $this->notifications->user_locale(null,$item['imprimeur']);
  1020.                                     $content $this->trans->trans('La commande #',[],'emailAndFactureAndSms',$local) . $order->getId() . $this->trans->trans(' vient de vous être attribué. Si vous rencontrer un problème avec lacommande n\'hésitez pas nous contacter à contact@copees.com.',[],'emailAndFactureAndSms',$local);
  1021.                                         $this->service_sms->sendSmsByPhone($item['imprimeur']->getMobile(), $content);
  1022.                                 }
  1023.                             }
  1024.                         } else {
  1025.                             $this->notifications->sendOrder($order->getAdresseFacturation()->getEmail(), 'Nouvelle commande Copees'$order$nameFacture); // send order to user
  1026.                             $this->cart_service->checkMailProAndSendMail($order,$order->getAdresseFacturation()); // send mail if adresse mail pro
  1027.                             if ($order->getImprimeur()) {
  1028.                                 $this->notifications->sendOrderDetailImprimeur($order->getImprimeur()->getEmailImp(), 'Nouvelle commande Copees'$order); // send order detail to Imprimeur
  1029.                                 $this->notifications->sendNotifClientImprimeurCommentaireImprimeur($order->getImprimeur()->getEmailImp(), 'Nouveau commentaire sur la commande #' $order->getId(), $order); //check commentaire client imprimeur
  1030.                                 // send sms
  1031.                                 if ($order->getCart()->getAbonnementProCart() and count($order->getOrderDetail()) == 0) {
  1032.                                 } else {
  1033.                                     $local $this->notifications->user_locale(null,null,$order->getAdresseLivraison());
  1034.                                     $content $this->trans->trans('Bonjour ',[],'emailAndFactureAndSms',$local) . ucfirst($order->getAdresseLivraison()->getLastname()) . ' ' ucfirst($order->getAdresseLivraison()->getFirstname()) . $this->trans->trans(', Votre commande #',[],'emailAndFactureAndSms',$local) . $order->getId() . $this->trans->trans(' est en cours de préparation chez Copees.',[],'emailAndFactureAndSms',$local);
  1035.                                     $this->service_sms->sendSmsByPhone($order->getAdresseLivraison()->getPhone(), $content);
  1036.                                 }
  1037.                                 if ($order->getImprimeur()->getMobile()) {
  1038.                                     $local $this->notifications->user_locale(null,$order->getImprimeur());
  1039.                                     $content $this->trans->trans('La commande #',[],'emailAndFactureAndSms',$local) . $order->getId() . $this->trans->trans(' vient de vous être attribué. Si vous rencontrer un problème avec lacommande n\'hésitez pas nous contacter à contact@copees.com.',[],'emailAndFactureAndSms',$local);
  1040.                                     $this->service_sms->sendSmsByPhone($order->getImprimeur()->getMobile(), $content);
  1041.                                 }
  1042.                             }
  1043.                         }
  1044.                         $this->avisVerifiesService->notifAvisVerifies($order->getId()); // avis verifies
  1045.                         $this->candyService->referalCandy($request$order->getId()); // referal candy
  1046.                         if (!empty($this->order_service->checkIsExpert($order))) {
  1047.                             $this->notifications->sendCopeesExpert('Notification Expert Copees'$order$this->order_service->checkIsExpert($order)); // send copees expert
  1048.                         }
  1049.                         if (!empty($this->order_service->checkIsVerification($order))) {
  1050.                             $this->notifications->sendCopeesVerification('Notification Demande de verification Copees'$order$this->order_service->checkIsVerification($order)); // send copees expert
  1051.                         }
  1052.                         if ($this->order_service->checkIsDistubutionFlyer($order)) {
  1053.                             $this->notifications->sendCopeesNotifDistrubution('Notification distribution Copees'$order); // send copees notif distrubution flyer
  1054.                         }
  1055.                     }
  1056.                     if($peimentIntentObject && $peimentIntentObject->payment_method_types[0] != 'sepa_debit'){
  1057.                         $isSepaPay false;
  1058.                     }else{
  1059.                         $isSepaPay true;
  1060.                     }
  1061.                     if($order->getIsWallet()){
  1062.                         $this->order_service->processAbonnementProWalletAfterCheckout($order); //process  Abonnement Pro wallet If exist
  1063.                         $this->order_service->reduireMontantWalletB2bByOrder($order);//reduire amount to wallet
  1064.                     }else{
  1065.                         $this->order_service->processAbonnementProAfterCheckout($cart,$order,true,$isSepaPay); //process  Abonnement Pro If exist
  1066.                     }
  1067.                     if($peimentIntentObject && $peimentIntentObject->payment_method_types[0] != 'sepa_debit'){
  1068.                         $this->stripeConnectService->createRefundByPaymentIntentIfEmptyDetail($order,$cart); // refound 0.5€ if 0€ in order
  1069.                     }
  1070.                     if($this->params->get('str_env') == 'PROD' || $this->params->get('str_env') == 'PREPROD') {
  1071.                         $this->notifications->sendRemerciementParticipation($order->getAdresseFacturation()->getEmail(), 'Profitez de ce cadeau ! '); // send remerciement de participation
  1072.                         $local $this->notifications->user_locale(null,null,$order->getAdresseLivraison());
  1073.                         $content =  $this->trans->trans('Copees.com, Merci pour votre commande #',[],'emailAndFactureAndSms',$local) . $order->getId() . $this->trans->trans('.  Témoignez maintenant et prenez vos commandes en photo pour recevoir un avoir de 10€ sur votre prochaine commande Copees dès 30 euros d\'achat https://g.page/r/CSI6L7j-RVKPEBE/review.',[],'emailAndFactureAndSms',$local);
  1074.                         $this->service_sms->sendSmsByPhone($order->getAdresseLivraison()->getPhone(), $content);
  1075.                         $this->notifications->sendNotifClientImprimeurCommentaire('Nouveau commentaire sur la commande #' $order->getId(), $order); //check commentaire client imprimeur
  1076.                     }
  1077.                     $this->order_service->affiliaTapfiliale($order); //
  1078.                     $this->cart_service->sendRoutineMail1($order->getCustomer()->getUser());// send mail is first order
  1079.                     $this->cart_service->sendRoutineMail2($order->getCustomer()->getUser());// send mail is second order
  1080.                     $this->cart_service->sendRoutineMail3($order->getCustomer()->getUser());// send mail is third order
  1081.                     $resultAbo $this->cart_service->checkB2bUser($this->getUser());
  1082.                     $abonnement $resultAbo['abonnement'];
  1083.                     $isAbonnementProInCart $resultAbo['isAbonnementProInCart'];
  1084.                     if($abonnement['is_abonnemen_pro'] || $isAbonnementProInCart){
  1085.                         $template 'front/b2b/checkout/confirme.html.twig';
  1086.                     }else{
  1087.                         $template 'front/checkout/confirme.html.twig';
  1088.                     }
  1089.                     return $this->render($template,['id_order'=>'id_order-'.$id_order,'order'=>$order]);
  1090.                 } else {
  1091.                     return $this->redirectToRoute('accueil');
  1092.                 }
  1093.             } else {
  1094.                 return $this->redirectToRoute('accueil');
  1095.             }
  1096.         }
  1097.         return $this->redirectToRoute('accueil');
  1098.     }
  1099.     /**
  1100.      * @Route("/checkout-erreur", name="checkout_erreur",options={"expose"=true})
  1101.      */
  1102.     public function errorCheckout(Request $request): Response
  1103.     {
  1104.         return $this->render('front/checkout/pay-error.html.twig');
  1105.     }
  1106.     /**
  1107.      * @Route("/get-country-code/{country}", name="get_country_code",options={"expose"=true})
  1108.      */
  1109.     public function getCountry(Request $request $country): Response
  1110.     {
  1111.         $countryEntity $this->em->getRepository(LanguageCountry::class)->findOneBy(['countryName'=>$country]);
  1112.         $countryCode 0;
  1113.         if($countryEntity){
  1114.             $countryCode $countryEntity->getCountryCode() ? $countryEntity->getCountryCode() : 0;
  1115.         }
  1116.         $response = new Response();
  1117.         $response->setContent($countryCode);
  1118.         $response->setStatusCode(200);
  1119.         return $response;
  1120.     }
  1121. }
  1122.