src/Controller/Shop/CartController.php line 788

Open in your IDE?
  1. <?php
  2. namespace App\Controller\Shop;
  3. use App\Component\Discount\Model\Discount;
  4. use App\Component\Order\Model\Order;
  5. use App\Component\Order\Model\OrderItem;
  6. use App\Component\Order\OrderFactory;
  7. use App\Component\Payment\Model\Payment;
  8. use App\Component\Product\Model\Product;
  9. use App\Component\Product\Repository\ProductRepository;
  10. use App\Component\Shipment\Model\Shipment;
  11. use App\Constants\Emails;
  12. use App\Entity\CustomerContact;
  13. use App\Entity\Invoice;
  14. use App\Entity\OrderPayment;
  15. use App\Entity\User;
  16. use App\Entity\WishList;
  17. use App\Form\AddItemType;
  18. use App\Form\AddProductType;
  19. use App\Form\ClearCartType;
  20. use App\Form\CustomerContactType;
  21. use App\Form\RemoveItemType;
  22. use App\Form\SetDiscountType;
  23. use App\Form\SetItemQuantityType;
  24. use App\Form\SetPaymentType;
  25. use App\Form\SetShipmentType;
  26. use App\Repository\WishListRepository;
  27. use App\Service\CurrencyService;
  28. use App\Service\EmailService;
  29. use App\Service\paypalExpress;
  30. use App\Service\SmsService;
  31. //use Stripe\Checkout\Session;
  32. use App\Service\StripeService;
  33. use Dompdf\Dompdf;
  34. use Dompdf\Options;
  35. use Stripe\Stripe;
  36. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  37. use Symfony\Component\HttpFoundation\JsonResponse;
  38. use Symfony\Component\HttpFoundation\Request;
  39. use Symfony\Component\HttpFoundation\Response;
  40. use Symfony\Component\HttpFoundation\Session\Session;
  41. use Symfony\Component\HttpFoundation\Session\SessionInterface;
  42. use Symfony\Component\Routing\Annotation\Route;
  43. use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
  44. use Symfony\Component\Security\Http\Authentication\AuthenticationUtils;
  45. // Include Dompdf required namespaces
  46. use Symfony\Component\Translation\TranslatorInterface;
  47. class CartController extends AbstractController
  48. {
  49.     /**
  50.      * @var TranslatorInterface
  51.      */
  52.     private $translator;
  53.     /**
  54.      * @var OrderFactory
  55.      */
  56.     private $orderFactory;
  57.     /** @var TokenStorageInterface */
  58.     private $tokenStorage;
  59.     public function __construct(TranslatorInterface $translatorOrderFactory $orderFactoryTokenStorageInterface $tokenStorage)
  60.     {
  61.         $this->translator $translator;
  62.         $this->orderFactory $orderFactory;
  63.         $this->tokenStorage $tokenStorage;
  64.     }
  65.     /**
  66.      * @Route({
  67.      *     "fr": "/cart",
  68.      *     "en": "/cart/en"
  69.      * }, name="cart")
  70.      *  @param Request $request
  71.      *  @param CurrencyService $currency
  72.      *
  73.      */
  74.     public function index(Request $request,
  75.         CurrencyService $currency,
  76.         OrderFactory $order,
  77.         SmsService $sms,
  78.         SessionInterface $session,
  79.         WishListRepository $wishrepo,
  80.         AuthenticationUtils $authenticationUtils) {
  81.         $clearForm $this->createForm(ClearCartType::class, $order->getCurrent());
  82.         $setPaymentForm $this->createForm(SetPaymentType::class, $order->getCurrent());
  83.         $setShipmentForm $this->createForm(SetShipmentType::class, $order->getCurrent());
  84.         $setDiscountForm $this->createForm(SetDiscountType::class, $order->getCurrent());
  85.         $ville = [=> "Douala"=> "Yaoundé"=> "Bafoussam"=> "Mbouda"10 => ""];
  86.         // get the login error if there is one
  87.         $error $authenticationUtils->getLastAuthenticationError();
  88.         // last username entered by the user
  89.         $lastUsername $authenticationUtils->getLastUsername();
  90.         //$cookie = new Cookie('foo', 'bar', strtotime('now + 10 minutes'));
  91.         /*
  92.         $cookie = new Cookie( 'my_cookie',"56",time() + ( 2 * 365));
  93.         $res = new Response();
  94.         $res->headers->setCookie( $cookie );
  95.         $res->send();
  96.         $id = $request->cookies->get('my_cookie');
  97.         dump($id); exit;
  98.          */
  99.         $repository $this->getDoctrine()->getRepository(Product::class);
  100.         /**
  101.          * @var User $user
  102.          */
  103.         $user $this->getUser();
  104.         //   $wishrepo = $this->getDoctrine()->getRepository(WishListRepository::class);
  105.     
  106.         $user_wish = (!is_null($user))?$wishrepo->countUserWishList($user->getId())["cnt"]:""
  107.         $user_bookingValue = (!is_null($user))?((float)(base64_decode($user->getBookingValue()))):"0,00"
  108.       
  109.         //   $locale = $request->getLocale();
  110.         //   dump($locale); exit;
  111.         /*
  112.         $repository = $this->getDoctrine()->getRepository(Product::class);
  113.         $mitarbeiter = array("0131a2a3-eeb7-11ea-ba4b-1063c84cee2c"=>4,"06d6a110-33fe-11eb-aa2e-ca02b436025f"=>2,"137eb0e6-eeb6-11ea-ba4b-1063c84cee2c"=>5);
  114.         foreach($mitarbeiter AS $vorname => $nachname){
  115.         $this->orderFactory->addItem($repository->findOneBy(['id'=>$vorname]),$nachname);
  116.         }
  117.          */
  118.         return $this->render('cart/index.html.twig', [
  119.             'last_username' => $lastUsername,
  120.             'error' => $error,
  121.             'userWish' => $user_wish,
  122.             'bookingValue'=>$user_bookingValue,
  123.             'order' => $order,
  124.             'ville' => array_key_exists($order->getCurrent()->getCart_cat(), $ville) ? $ville[$order->getCurrent()->getCart_cat()] : "Aucune",
  125.             'locale' => $request->getLocale(),
  126.             'clearForm' => $clearForm->createView(),
  127.             'setPaymentForm' => $setPaymentForm->createView(),
  128.             'currencie_convert' => $currency->getRate($session->get('converter')),
  129.             "converter" => (!empty($session->get('converter'))) ? $session->get('converter') : "EUR",
  130.             'setShipmentForm' => $setShipmentForm->createView(),
  131.             'setDiscountForm' => $setDiscountForm->createView(),
  132.             'itemsInCart' => $order->getCurrent()->getItemsTotal(),
  133.             'order_cat' => $order->getCurrent()->getCart_cat(),
  134.             'cart_cat_order' => $order->getCurrent()->getCart_cat(),
  135.             
  136.         ]);
  137.     }
  138.     /**
  139.      * @Route("/cart/payment/{orderId}/{contactId}", name="premium_payment")
  140.      * @param Request $request
  141.      * @return Response
  142.      */
  143.     public function paymentAction(Request $request,
  144.         StripeService $stripe,
  145.         OrderFactory $order,
  146.         $contactId,
  147.         AuthenticationUtils $authenticationUtils,
  148.         $orderId,
  149.         SessionInterface $session,
  150.         EmailService $emailService,
  151.         ProductRepository $productRepository,
  152.         CurrencyService $currency) {
  153.         /** @var User $user */
  154.         $user $this->getUser();
  155.         $userData = ["name" => $user->getName(), "forname" => $user->getForeName()];
  156.         $first_name $request->request->get('first_name');
  157.         $email $request->request->get('email');
  158.         $stripeToken $request->request->get('stripeToken');
  159.         // get the login error if there is one
  160.         $error $authenticationUtils->getLastAuthenticationError();
  161.         // last username entered by the user
  162.         $lastUsername $authenticationUtils->getLastUsername();
  163.         if ($request->isMethod('POST')) {
  164.             if ($first_name) {
  165.                 try {
  166.                     $entity $this->getDoctrine()->getManager();
  167.                     // Configure Dompdf according to your needs
  168.                     $pdfOptions = new Options();
  169.                     $pdfOptions->set('defaultFont''Arial');
  170.                     // Instantiate Dompdf with our options
  171.                     $dompdf = new Dompdf($pdfOptions);
  172.                     // Retrieve the HTML generated in our twig file
  173.                     $html $this->renderView('pdf/rechnungsmuster.html.twig', [
  174.                         'error' => $error,
  175.                         'last_username' => $lastUsername,
  176.                         'order' => $order,
  177.                         'userData' => $userData,
  178.                         'locale' => $request->getLocale(),
  179.                         'currencie_convert' => $currency->getRate($session->get('converter')),
  180.                         "converter" => (!empty($session->get('converter'))) ? $session->get('converter') : "EUR",
  181.                         'itemsInCart' => $order->getCurrent()->getItemsTotal(),
  182.                     ]);
  183.                     // Load HTML to Dompdf
  184.                     $dompdf->loadHtml($html);
  185.                     // (Optional) Setup the paper size and orientation 'portrait' or 'portrait'
  186.                     $dompdf->setPaper('A4''portrait');
  187.                     // Render the HTML as PDF
  188.                     $dompdf->render();
  189.                     // Store PDF Binary Data
  190.                     $output $dompdf->output();
  191.                     $publicDirectory $this->getParameter('kernel.project_dir') . '/public/invoices/';
  192.                     // e.g /var/www/project/public/mypdf.pdf
  193.                     $pdfFilepath $publicDirectory 'invoice_' $order->getCurrent()->getId() . '.pdf';
  194.                     // Write file to the desired path
  195.                     file_put_contents($pdfFilepath$output);
  196.                     $invoice_pdf = new invoice();
  197.                     $invoice_pdf->setInvoiceUrl('invoice_' $order->getCurrent()->getId() . '.pdf');
  198.                     $invoice_pdf->setInvoiceId($contactId);
  199.                     $invoice_pdf->setPaymentInfo("Visa Card");
  200.                     $invoice_pdf->setUser($user);
  201.                     $invoice_pdf->setInvoiceNumber($order->getCurrent()->getId());
  202.                     $entity->persist($invoice_pdf);
  203.                     $entity->flush();
  204.                     $orderPay = new OrderPayment();
  205.                     //  $date = (new \DateTime('now'))->format("Y-m-d H:i:s");jij
  206.                     $orderPay->setContactId($contactId);
  207.                     $orderPay->setTransactionId($stripeToken);
  208.                     $orderPay->setInvoiceId($invoice_pdf->getInvoiceId());
  209.                     $orderPay->setUser($user);
  210.                     $orderPay->setPaymentAmount($order->getCurrent()->getPriceTotal() + 2.99*$currency->getRate($session->get('converter')));
  211.                     $orderPay->setCurrencyCode((!empty($session->get('converter'))) ? $session->get('converter') : "EUR");
  212.                     $orderPay->setPaymentStatus(0);
  213.                     $orderPay->setOrderId($order->getCurrent()->getId());
  214.                     $entity->persist($orderPay);
  215.                     $entity->flush();
  216.                     $emailService->sendMail($user->getEmail(), Emails::PAYMENT_SUCCESS, ["name" => $user->getForeName()]);
  217.                     $stripe->createCharge($this->getUser(), $stripeToken$order->getCurrent()->getPriceTotal() * 100);
  218.                     $session->clear();
  219.                     return $this->redirectToRoute('home1');
  220.                 } catch (\Stripe\Error\Base $e) {
  221.                     $this->addFlash('warning'sprintf('Unable to take payment, %s'$e instanceof \Stripe\Error\Card lcfirst($e->getMessage()) : 'please try again.'));
  222.                     return $this->redirectToRoute('premium_payment');
  223.                 }
  224.             }
  225.         }
  226.         return $this->render('cart/paymentStripe.html.twig', [
  227.             'amount' => $order->getCurrent()->getPriceTotal(),
  228.             'contactId' => $contactId,
  229.             'orderId' => $orderId,
  230.             'stripe_public_key' => $this->getParameter('stripe_public_key'),
  231.             'order_cat' => $order->getCurrent()->getCart_cat(),
  232.         ]);
  233.     }
  234.     /**
  235.      *  @Route("/cart/Payment-Customer", name="cart-payment-customer")
  236.      *  @param Request $request
  237.      */
  238.     public function PaymentCustomer(Request $request,
  239.         SessionInterface $session,
  240.         OrderFactory $order,
  241.         EmailService $emailService,
  242.         ProductRepository $productRepository,
  243.         \Swift_Mailer $mailer,
  244.         CurrencyService $currency
  245.     ) {
  246.         /**
  247.          * @var User $user
  248.          */
  249.         $user $this->getUser();
  250.         $userData = ["name" => $user->getName(), "forname" => $user->getForeName()];
  251.         //  $orderPay->setCreatedAt($date);
  252.         if ($request->isXmlHttpRequest()) {
  253.             $arr_cus =
  254.                 ["friend_name" => $request->request->get('friend_name'),
  255.                 "friend_tel" => !empty($request->request->get('friend_tel')) ? $request->request->get('friend_tel') : "",
  256.                 "id_friend" => $request->request->get('friend_id'),
  257.                 "friend_note" => $request->request->get('friend_note'),
  258.                 "summe" => $request->request->get('summe'),
  259.                 "order_id" => $order->getCurrent()->getId(),
  260.                 "payment_type" => $request->request->get('payment_type'),
  261.                 "delivery_type" => $request->request->get('delivery_type') ,
  262.                 "currencie" => (!empty($session->get('converter'))) ? $session->get('converter') : "EUR",
  263.                 'order_cat' => !is_null($order->getCurrent()->getCart_cat())?$order->getCurrent()->getCart_cat():1,
  264.             ];
  265.             $payment $this->getDoctrine()->getRepository('App\Component\Payment\Model:Payment')->findOneBy(['id' => $request->request->get('payment_type')]);
  266.                
  267.             if($payment){
  268.                 $this->orderFactory->setPayment($payment);           
  269.             } 
  270.             
  271.             if ($payment->getName() == "Bank Transfert") {
  272.                 if ($request->request->get('friend_id') == || $request->request->get('friend_id') == 10000000 ) {
  273.                     $customerContact = new CustomerContact();
  274.                     $customerContact->addUser($user);
  275.                     $customerContact->SetName($request->request->get('friend_name'));
  276.                     $customerContact->setMsg($request->request->get('friend_note'));
  277.                     $customerContact->setStatus(10);
  278.                     $customerContact->setMobile(!empty($request->request->get('friend_tel')) ? $request->request->get('friend_tel') : "");
  279.                     $customerContact->setAddress(!empty($request->request->get('delivery_type')) ? $request->request->get('delivery_type') : "");
  280.                     // Save
  281.                     $entity $this->getDoctrine()->getManager();
  282.                     $entity->persist($customerContact);
  283.                     $entity->flush();
  284.                     $lastContactId $customerContact->getId();
  285.                 } else {
  286.                     $customerContact $this->getDoctrine()->getRepository(CustomerContact::class)->find($request->request->get('friend_id'));
  287.                     $customerContact->SetName($request->request->get('friend_name'));
  288.                     $customerContact->setMsg($request->request->get('friend_note'));
  289.                     $customerContact->setMobile($request->request->get('friend_tel'));
  290.                     $customerContact->setAddress($request->request->get('delivery_type'));
  291.                     // Save
  292.                     $em $this->getDoctrine()->getManager();
  293.                     $em->flush();
  294.                     $lastContactId $request->request->get('friend_id');
  295.                 }
  296.                     array_push($arr_cus$lastContactId);
  297.                     $entity $this->getDoctrine()->getManager();
  298.                 $invoice_pdf = new invoice();
  299.                 $invoice_pdf->setInvoiceUrl('invoice_' $order->getCurrent()->getId() . '.pdf');
  300.                 $invoice_pdf->setInvoiceId($lastContactId);
  301.                 $invoice_pdf->setPaymentInfo($request->request->get('friend_note'));
  302.                 $invoice_pdf->setUser($user);
  303.                 $invoice_pdf->setInvoiceNumber($order->getCurrent()->getId());
  304.                 $entity->persist($invoice_pdf);
  305.                 $entity->flush();
  306.                 $orderPay = new OrderPayment();
  307.                 //  $date = (new \DateTime('now'))->format("Y-m-d H:i:s");jij
  308.                 $orderPay->setContactId($lastContactId);
  309.                 $orderPay->setTransactionId("BT-" $orderPay->getId());
  310.                 $orderPay->setOrderId($order->getCurrent()->getId());
  311.                 $orderPay->setInvoiceId($invoice_pdf->getInvoiceId());
  312.                 $orderPay->setUser($user);
  313.                 // $orderPay->setPaymentAmount((int) $request->request->get('summe'));
  314.                 $amountTotal $order->getCurrent()->getPriceTotal() + (2.99*$currency->getRate($session->get('converter')));
  315.                 $orderPay->setPaymentAmount($amountTotal);
  316.                 $orderPay->setCurrencyCode((!empty($session->get('converter'))) ? $session->get('converter') : "EUR");
  317.                 $orderPay->setPaymentStatus(0);
  318.                 $entity->persist($orderPay);
  319.                 $entity->flush();
  320.                 if($user->getCodePromoStatus() == 2){
  321.                     $em $this->getDoctrine()->getManager();
  322.                     $discount $this->getDoctrine()->getRepository('App\Component\Discount\Model:Discount')->findOneBy(['userId'=>$user->getId()]);
  323.           
  324.                     if(!is_null($discount)) {
  325.              
  326.                         $discount->setUserId(0);                        
  327.                         $user->setCodePromoName("");
  328.                         $user->setCodePromoStatus(0);
  329.                         $user->setCodePromoValue("");
  330.                         $em->persist($discount);
  331.                         $em->persist($user);
  332.                         $em->flush();
  333.             
  334.                       }else{
  335.             
  336.                       }
  337.                    
  338.                 }
  339.           
  340.                 $date = (new \DateTime('now'))->format("d-m-Y");
  341.                 // Configure Dompdf according to your needs
  342.                 $pdfOptions = new Options();
  343.                 $pdfOptions->set('defaultFont''Arial');
  344.                 // Instantiate Dompdf with our options
  345.                 $dompdf = new Dompdf($pdfOptions);
  346.                 $path 'img/logo/logo.png';
  347.                 $type pathinfo($pathPATHINFO_EXTENSION);
  348.                 $data file_get_contents($path);
  349.                 $base64 'data:image/' $type ';base64,' base64_encode($data);
  350.                     // Retrieve the HTML generated in our twig file
  351.                 $html $this->renderView('pdf/rechnungsmuster.html.twig', [
  352.                     'logo'=>$base64,
  353.                     'order' => $order,
  354.                     'user_id'=>$user->getId(),
  355.                     'telephone_user' => $user->getMobile(),
  356.                     'invoiceID'=>$invoice_pdf->getInvoiceId(),
  357.                     'methode_payment'=>"Bank Transfert",
  358.                     'destinataire'=>$request->request->get('friend_name'),
  359.                     'telephone_destinataire'=>$request->request->get('friend_tel'),
  360.                     'message_destinataire'=> !empty($request->request->get('friend_note')) ? $request->request->get('friend_note') : "",
  361.                     'mode_livraison'=>$request->request->get('delivery_type'),
  362.                     'date_invoice'=>$date,
  363.                     'userData' => $userData,
  364.                     'locale' => $request->getLocale(),
  365.                     'currencie_convert' => $currency->getRate($session->get('converter')),
  366.                     "converter" => (!empty($session->get('converter'))) ? $session->get('converter') : "EUR",
  367.                     'itemsInCart' => $order->getCurrent()->getItemsTotal(),
  368.                 ]);
  369.                 // Load HTML to Dompdf
  370.                 $dompdf->loadHtml($html);
  371.                 // (Optional) Setup the paper size and orientation 'portrait' or 'portrait'
  372.                 $dompdf->setPaper('A4''portrait');
  373.                 // Render the HTML as PDF
  374.                 $dompdf->render();
  375.                 // Store PDF Binary Data
  376.                 $output $dompdf->output();
  377.                 $publicDirectory $this->getParameter('kernel.project_dir') . '/public/invoices/';
  378.                 // e.g /var/www/project/public/mypdf.pdf
  379.                 $pdfFilepath $publicDirectory 'invoice_' $order->getCurrent()->getId() . '.pdf';
  380.                 // Write file to the desired path
  381.                 file_put_contents($pdfFilepath$output);
  382.                 //$emailService->sendMail($user->getEmail(), Emails::PAYMENT_SUCCESS, ["name" => $user->getForeName()]);
  383.                 $villeName = [=> "Douala"=> "Yaoundé"=> "Bafoussam"=> "Mbouda"10 => ""];
  384.                 $numberVille = !is_null($order->getCurrent()->getCart_cat())?$order->getCurrent()->getCart_cat():1;
  385.                 $message = (new \Swift_Message('Attente de Confirmation du paiement pour la commande n°'.$invoice_pdf->getInvoiceId().' sur YeYeTo.Com dans la ville de '$villeName[$numberVille].' '))
  386.                 ->setFrom('info@yeyeto.com')
  387.                 ->setTo($user->getEmail())
  388.                 ->setBody(
  389.                     $this->renderView(
  390.                         'email/bankTransfert.html.twig', [         
  391.                           "code" => $orderPay->getId(),
  392.                           "custoData" => $customerContact->getName(),
  393.                           "amount" => $amountTotal,            
  394.                           'logo'=>$base64,
  395.                           'order' => $order,
  396.                           'user_id'=>$user->getId(),
  397.                           'telephone_user' => $user->getMobile(),
  398.                           'invoiceID'=>$invoice_pdf->getInvoiceId(),
  399.                           'methode_payment'=> "Bank Transfert",
  400.                           'destinataire'=>$request->request->get('friend_name'),
  401.                           'telephone_destinataire'=>$request->request->get('friend_tel'),
  402.                           'message_destinataire'=> $request->request->get('friend_tel'),
  403.                           'mode_livraison'=>$request->request->get('delivery_type'),
  404.                           'date_invoice'=>$date,
  405.                           'userData' => $userData,
  406.                           'locale' => $request->getLocale(),
  407.                           'currencie_convert' => $currency->getRate($session->get('converter')),
  408.                           "converter" => (!empty($session->get('converter'))) ? $session->get('converter') : "EUR",
  409.                           'itemsInCart' => $order->getCurrent()->getItemsTotal(),
  410.                         ]
  411.                       ),
  412.                     'text/html'
  413.                 )->attach(\Swift_Attachment::fromPath($pdfFilepath,"application/pdf"));
  414.         
  415.                 $mailer->send($message);
  416.                 $json=[];
  417.                 $json[] = $arr_cus;
  418.                 $session->clear();
  419.                 return new JsonResponse($json);
  420.             }
  421.             if ($payment->getName() == "visa card" || $payment->getName() == "Paypal" || $payment->getName() == "Pay Yeyeto" ) {
  422.                 $session->set('customer_data'$arr_cus);
  423.                 // $session->get('cat_c1');
  424.                 $json=[];
  425.                 $json[] = $arr_cus;
  426.                 return new JsonResponse($json);
  427.             } else {
  428.                 return new JsonResponse($json);
  429.             }
  430.         } else {
  431.             $json['error'] = "Error";
  432.         }
  433.         return new JsonResponse($json);
  434.     }
  435.     /**
  436.      *  @Route("/cart/bank-transfer/{orderId}/{contactId}", name="cart-bank-transfer")
  437.      *  @param Request $request
  438.      */
  439.     public function BankCustomer(OrderFactory $order,
  440.         $orderId,
  441.         $contactId,
  442.         AuthenticationUtils $authenticationUtils,
  443.         paypalExpress $paymentService,
  444.         SessionInterface $session,
  445.         Request $request,
  446.         WishListRepository $wishrepo) {
  447.         $clearForm $this->createForm(ClearCartType::class, $order->getCurrent());
  448.         $setPaymentForm $this->createForm(SetPaymentType::class, $order->getCurrent());
  449.         $setShipmentForm $this->createForm(SetShipmentType::class, $order->getCurrent());
  450.         $setDiscountForm $this->createForm(SetDiscountType::class, $order->getCurrent());
  451.         $custoCon $this->getDoctrine()->getRepository(CustomerContact::class)->findOneBy(['id' => $contactId]);
  452.         $custoOrd $this->getDoctrine()->getRepository(OrderPayment::class)->findOneBy(['order_id' => $orderId]);
  453.         //  dd($custoOrd);exit;
  454.         /**
  455.          * @var User $user
  456.          */
  457.         $user $this->getUser();
  458.         $userData = ["name" => $user->getName(),
  459.             "forname" => $user->getForeName(),
  460.         ];
  461.         // get the login error if there is one
  462.         $error $authenticationUtils->getLastAuthenticationError();
  463.         // last username entered by the user
  464.         $lastUsername $authenticationUtils->getLastUsername();
  465.    
  466.         $user_wish = (!is_null($user))?$wishrepo->countUserWishList($user->getId())["cnt"]:""
  467.         $user_bookingValue = (!is_null($user))?((float)(base64_decode($user->getBookingValue()))):"0,00"
  468.         $null_1 "000000";
  469.         $em $this->getDoctrine()->getManager();
  470.         $sql_query ' UPDATE cart_order_item SET session_id = "' $null_1 '" WHERE order_id = "' $orderId '" ; ';
  471.         $statement1 $em->getConnection()->prepare($sql_query);
  472.         $statement1->execute();
  473.         return $this->render('cart/banktransfer.html.twig', [
  474.             'error' => $error,
  475.             'last_username' => $lastUsername,
  476.             'userWish' => $user_wish,
  477.             'bookingValue'=>$user_bookingValue,
  478.             'userData' => $userData,
  479.             "code" => $custoOrd->getId(),
  480.             "custoData" => $custoCon->getName(),
  481.             "amount" => $custoOrd->getPaymentAmount(),
  482.             'order' => $order,
  483.             "converter" => (!empty($session->get('converter'))) ? $session->get('converter') : "EUR",
  484.             'id_order' => $order->getCurrent()->getId(),
  485.             'clearForm' => $clearForm->createView(),
  486.             'setPaymentForm' => $setPaymentForm->createView(),
  487.             'setShipmentForm' => $setShipmentForm->createView(),
  488.             'setDiscountForm' => $setDiscountForm->createView(),
  489.             'itemsInCart' => $order->getCurrent()->getItemsTotal(),
  490.             'order_cat' => $order->getCurrent()->getCart_cat(),
  491.         ]);
  492.     }
  493.     /**
  494.      *  @Route("/cart/otherfriend/{id}/{status}", name="cart-otherfriend")
  495.      *  @param Request $request
  496.      */
  497.     public function OtherCustomer($id$statusProductRepository $productRepositoryOrderFactory $order)
  498.     {
  499.         $custoCon $this->getDoctrine()->getRepository(CustomerContact::class)->findOneBy(['id' => $id,'status'=>$status]);
  500.         return $this->render('cart/otherfriend.html.twig', [
  501.             'order' => $order,
  502.             'id' => $custoCon->getId(), 
  503.             'name' => $custoCon->getName(),
  504.             'mobile' => $custoCon->getMobile(),
  505.         ]);
  506.     }
  507.     /**
  508.      *  @Route("/cart/action/{cat_sp}", name="cart-action")
  509.      *  @param Request $request
  510.      *  @param CurrencyService $currency
  511.      */
  512.     public function buyAction(CurrencyService $currencyOrderFactory $orderSessionInterface $session$cat_spProductRepository $productRepository)
  513.     {
  514.         $repository $this->getDoctrine()->getRepository(Product::class);
  515.         $action $productRepository->findAllProductByAction($cat_sp);
  516.         for ($i 0$i count($action); $i++) {
  517.           $this->orderFactory->addItemRecharge($repository->findOneBy(['id' => $action[$i]["prod_id"]]), $action[$i]["qty"]);
  518.         }
  519. //69494 51 89  Nazer
  520.         return $this->redirectToRoute('home1');
  521.     }
  522.     /**
  523.      *@Route({
  524.      *     "fr": "/cart/checkout",
  525.      *     "en": "/cart/checkout/en"
  526.      *     }, name="cart-checkout")
  527.      *@param paypalExpress $paymentService
  528.      *@param Request $request
  529.      */
  530.     public function checkoutCart(OrderFactory $order,
  531.         paypalExpress $paymentService,
  532.         SessionInterface $session,
  533.         Request $request,
  534.         CurrencyService $currency,
  535.         AuthenticationUtils $authenticationUtils,
  536.         WishListRepository $wishrepo) {
  537.         $clearForm $this->createForm(ClearCartType::class, $order->getCurrent());
  538.         $setPaymentForm $this->createForm(SetPaymentType::class, $order->getCurrent());
  539.         $setShipmentForm $this->createForm(SetShipmentType::class, $order->getCurrent());
  540.         $setDiscountForm $this->createForm(SetDiscountType::class, $order->getCurrent());
  541.         $ville = [=> "Douala"=> "Yaoundé"=> "Bafoussam"=> "Mbouda"10 => ""];
  542.         /**
  543.          * @var User $user
  544.          */
  545.         $user $this->getUser();
  546.         if (!is_null($user)) {
  547.             $user_wish $wishrepo->countUserWishList($user->getId())["cnt"];
  548.         } else {
  549.             return $this->redirectToRoute('cart');
  550.         }
  551.         $user_bookingValue = (!is_null($user))?((float)(base64_decode($user->getBookingValue()))):"0,00"
  552.         
  553.          
  554.          //  dd( $currency->getRate($session->get('converter')));  exit;
  555.         // get the login error if there is one
  556.         $error $authenticationUtils->getLastAuthenticationError();
  557.         // last username entered by the user
  558.         $lastUsername $authenticationUtils->getLastUsername();
  559.         //    dd($this->getDoctrine()->getRepository(Payment::class)->findAll()); exit;
  560.         foreach ($this->getDoctrine()->getRepository(Payment::class)->findAll() as $pay_data) {
  561.             $payData[] = ['id' => $pay_data->getId(), 'name' => $pay_data->getName(), 'price' => $pay_data->getPrice()];
  562.         }
  563.         $customerContact = new CustomerContact();
  564.         $formCust $this->createForm(CustomerContactType::class, $customerContact);
  565.         if ($shipment $this->getDoctrine()->getRepository('App\Component\Shipment\Model:Shipment')->findOneBy(['id' => $order->getCurrent()->getShipment()])) {
  566.             $shipment_info = ["id" => $shipment->getId(), "name" => $shipment->getName(), "price" => $shipment->getPrice(), "image" => $shipment->getImage()];
  567.         } else {
  568.             $shipment_info = ["id" => "0""name" => "Retrait au magasin""price" => 0"image" => "<span class='fa fa-home fa-3x'></span>"];
  569.         }
  570.         $formCust->handleRequest($request);
  571.         if ($formCust->isSubmitted() && $formCust->isValid()) {
  572.             $customerContact->addUser($user);
  573.             // Save
  574.             $em $this->getDoctrine()->getManager();
  575.             $em->persist($customerContact);
  576.             $em->flush();
  577.             return $this->redirectToRoute('cart-checkout');
  578.         }
  579.         $custoConts $this->getDoctrine()->getRepository(CustomerContact::class)->findBy(['user' => $user->getId(),'status'=>10]);
  580.         
  581.         //  $payment = $this->getDoctrine()->getRepository(Payment::class)->findAll();
  582.         //  $shipment = $this->getDoctrine()->getRepository(Shipment::class)->findAll();
  583.         $order->getCurrent()->setUserId($user->getId());
  584.         $em $this->getDoctrine()->getManager();
  585.         $em->flush();
  586.         if (count($custoConts) > 0) {
  587.             foreach ($custoConts as $custoCon) {
  588.                 $arr_cust[] = ['id' => $custoCon->getId(), 'name' => $custoCon->getName(), 'mobile' => $custoCon->getMobile()];
  589.             }
  590.         } else {
  591.             $arr_cust[] = ['id' => ""'name' => ""'mobile' => ""];
  592.         }
  593.         return $this->render('cart/checkout.html.twig', [
  594.             'error' => $error,
  595.             'ville' => array_key_exists($order->getCurrent()->getCart_cat(), $ville) ? $ville[$order->getCurrent()->getCart_cat()] : "Aucune",
  596.             'last_username' => $lastUsername,
  597.             'payData' => $payData,
  598.             "shipment_info" => $shipment_info,
  599.             'arr_custs' => $arr_cust,
  600.             "arr_custs_length" => count($custoConts),
  601.             'paypal_client_id' => $paymentService::PayPal_CLIENT_ID,
  602.             'paypal_secret' => $paymentService::PayPal_SECRET,
  603.             'paypal_base_url' => $paymentService::PayPal_BASE_URL,
  604.             'base_url' => $paymentService::BASE_URL,
  605.             'userWish' => $user_wish,
  606.             'bookingValue'=>$user_bookingValue,
  607.             'order' => $order,
  608.             "converter" => (!empty($session->get('converter'))) ? $session->get('converter') : "EUR",
  609.             'currencie_convert' => $currency->getRate($session->get('converter')),
  610.             'id_order' => $order->getCurrent()->getId(),
  611.             'cart_cat_order' => $order->getCurrent()->getCart_cat(),
  612.             'clearForm' => $clearForm->createView(),
  613.             'setPaymentForm' => $setPaymentForm->createView(),
  614.             'setShipmentForm' => $setShipmentForm->createView(),
  615.             'setDiscountForm' => $setDiscountForm->createView(),
  616.             'formCust' => $formCust->createView(),
  617.             'itemsInCart' => $order->getCurrent()->getItemsTotal(),
  618.             'order_cat' => $order->getCurrent()->getCart_cat(),
  619.         ]);
  620.     }
  621.     public function addItemForm(Product $product): Response
  622.     {
  623.         $form $this->createForm(AddItemType::class, $product);
  624.         return $this->render('cart/_addItem_form.html.twig', [
  625.             'form' => $form->createView(),
  626.         ]);
  627.     }
  628.     public function addItemForm1(Product $product): Response
  629.     {
  630.         $form $this->createForm(AddProductType::class, $product);
  631.         return $this->render('cart/_addproduct.html.twig', [
  632.             'form' => $form->createView(),
  633.         ]);
  634.     }
  635.     /**
  636.      * @Route({
  637.      *     "fr": "/cart/addWishlist/{id}",
  638.      *     "en": "/cart/addWishlist/{id}/en"
  639.      *     }, name="cart.addWishlist", methods={"POST"})
  640.      *  @param Request $request
  641.      *
  642.      */
  643.     public function AddWishlist(Request $requestSessionInterface $sessionProductRepository $prodrepoWishListRepository $wishrepo): Response
  644.     {
  645.         $productId $request->request->get('product_wish');
  646.         $product $prodrepo->find($productId);
  647.         if (!is_null($this->tokenStorage->getToken()) && $this->tokenStorage->getToken() == 'anon.') {
  648.             $session->getFlashBag()->add('error''You have to be logged to add to the wishlist');
  649.             return new RedirectResponse('home1');
  650.         }
  651.         if ($this->tokenStorage->getToken()) {
  652.             $user $this->tokenStorage->getToken()->getUser();
  653.             //  $tokenUser->getUser()
  654.             // $delay = new \DateTime ();
  655.             // $delay
  656.             // ->setTimestamp (strtotime ('2 minutes ago'));
  657.             // We are checking the Admin class in order to be certain we can
  658.             // call "getLastActivity".
  659.             // && $user->getLastActivity() < $delay) {
  660.             if ($user == "anon.") {
  661.                 $this->addFlash('error''Vous devez vous connecter à votre compte ou en créer un!');
  662.                 // redirect
  663.                 return $this->redirectToRoute('app_login1');
  664.             }
  665.             $wishlist $wishrepo->findOneBy(array('user' => $user->getId()));
  666.             if (is_null($wishlist)) {
  667.                 $wishlist = new WishList();
  668.                 $wishlist->setUser($user);
  669.             }
  670.             $wishlist->addProduct($product);
  671.             $em $this->getDoctrine()->getManager();
  672.             $em->persist($wishlist);
  673.             $em->flush();
  674.             $session->getFlashBag()->add('success''Product added to the wishlist');
  675.             return $this->redirect($request->server->get('HTTP_REFERER'));
  676.         }
  677.         return $this->redirectToRoute('home1');
  678.     }
  679.     public function removeItemForm(OrderItem $item): Response
  680.     {
  681.         $form $this->createForm(RemoveItemType::class, $item);
  682.         return $this->render('cart/_removeItem_form.html.twig', [
  683.             'form' => $form->createView(),
  684.         ]);
  685.     }
  686.     public function setItemQuantityForm(OrderItem $item): Response
  687.     {
  688.         $form $this->createForm(SetItemQuantityType::class, $item);
  689.         return $this->render('cart/_setItemQuantity_form.html.twig', [
  690.             'form' => $form->createView(),
  691.         ]);
  692.     }
  693.     public function setCartItemQuantityForm(OrderItem $item): Response
  694.     {
  695.         $form $this->createForm(SetItemQuantityType::class, $item);
  696.         return $this->render('cart/_setCartItemQuantity_form.html.twig', [
  697.             'form' => $form->createView(),
  698.         ]);
  699.     }
  700.     /**
  701.      * @Route({
  702.      *     "fr": "/cart/addProduct/{id}",
  703.      *     "en": "/cart/addProduct/{id}/en"
  704.      *     }, name="cart.addProduct", methods={"POST"})
  705.      *  @param Request $request
  706.      *
  707.      */
  708.     public function addProduct(Request $requestProduct $product): Response
  709.     {
  710.         /*
  711.         $form = $this->createForm(AddProductType::class, $product);
  712.         $form->handleRequest($request);
  713.         if ($form->isSubmitted() && $form->isValid()) {
  714.             $this->orderFactory->addItem($product, $request->request->get('quantity'));
  715.             $this->addFlash('success', $this->translator->trans('app.cart.addProduct.message.success'));
  716.         }
  717.         return $this->redirectToRoute('home1');
  718.         */
  719.         $session = new Session();
  720.         $em $this->getDoctrine()->getManager();
  721.         $form $this->createForm(AddProductType::class, $product);
  722.         $form->handleRequest($request);
  723.         $id $form->get("id")->getData();
  724.         $QUERY 'SELECT * FROM cart_order_item where session_id = "' $session->getId() . '" ORDER BY DATE(created_at) DESC  LIMIT 1 ;';
  725.         $statement $em->getConnection()->prepare($QUERY);
  726.         $statement->execute();
  727.         $result $statement->fetch();
  728.         if ($result == false) {
  729.             if ($form->isSubmitted() && $form->isValid()) {
  730.                 $this->orderFactory->addItem($product$request->request->get('quantity'));
  731.                 $this->addFlash('success'$this->translator->trans('app.cart.addItem.message.success'));
  732.                 $QUERY1 'SELECT * FROM cart_order_item where session_id = "' $session->getId() . '" AND product_id = "' $id '"  LIMIT 1 ;';
  733.                 $statement1 $em->getConnection()->prepare($QUERY1);
  734.                 $statement1->execute();
  735.                 $result1 $statement1->fetch();
  736.                 $sql_query ' UPDATE cart_order SET cart_cat = ' $product->getCart_cat() . ' WHERE id = "' $result1["order_id"] . '" ; ';
  737.                 $statement2 $em->getConnection()->prepare($sql_query);
  738.                 $statement2->execute();
  739.             }
  740.             
  741.             return $this->redirectToRoute('home1');
  742.         } else if (($result != false) && $result["cart_cat"] != $product->getCart_cat() && $result["cart_cat"] != 10) {
  743.             $ville = [=> "Douala"=> "Yaoundé"=> "Bafoussam"=> "Mbouda"10 => ""];
  744.             $message "Impossible! Vous avez au depart choisit un magasin dans la ville de " $ville[$result["cart_cat"]] . " et maintenant vous changez par celui de " $ville[$product->getCart_cat()] . ". Vous ne pouvez que faire vos achats dans les magasins d'une même ville: ";
  745.             $this->addFlash('error'$message);
  746.             return $this->redirectToRoute('cart');
  747.         }if (($result != false && $result["cart_cat"] == $product->getCart_cat()) || ($result["cart_cat"] != $product->getCart_cat() && $result["cart_cat"] == 10)) {
  748.             if ($form->isSubmitted() && $form->isValid()) {
  749.                 $this->orderFactory->addItem($product$request->request->get('quantity'));
  750.                 $this->addFlash('success'$this->translator->trans('app.cart.addItem.message.success'));
  751.                 $QUERY1 'SELECT * FROM cart_order_item where session_id = "' $session->getId() . '" AND product_id = "' $id '" ORDER BY DATE(created_at) DESC LIMIT 1 ;';
  752.                 $statement1 $em->getConnection()->prepare($QUERY1);
  753.                 $statement1->execute();
  754.                 $result1 $statement1->fetch();
  755.                 $sql_query ' UPDATE cart_order SET cart_cat = ' $product->getCart_cat() . ' WHERE id = "' $result1["order_id"] . '" ; ';
  756.                 $statement2 $em->getConnection()->prepare($sql_query);
  757.                 $statement2->execute();
  758.             }
  759.             return $this->redirectToRoute('home1');
  760.         } else {
  761.             $ville = [=> "Douala"=> "Yaoundé"=> "Bafoussam"=> "Mbouda"10 => ""];
  762.             $message "Impossible! Vous avez au depart choisit un magasin dans la ville de " $ville[$result["cart_cat"]] . " et maintenant vous changer par celui de " $ville[$product->getCart_cat()] . ". Vous ne pouvez que faire vos achats dans les magasins d'une même ville: ";
  763.             $this->addFlash('error'$message);
  764.             return $this->redirectToRoute('cart');
  765.         }
  766.     }
  767.     /**
  768.      * @Route({
  769.      *     "fr": "/cart/addItem/{id}",
  770.      *     "en": "/cart/addItem/{id}/en"
  771.      *     }, name="cart.addItem", methods={"POST"})
  772.      *  @param Request $request
  773.      *
  774.      */
  775.     public function addItem(Request $requestProduct $product$id): Response
  776.     {
  777.         $session = new Session();
  778.         $em $this->getDoctrine()->getManager();
  779.         $form $this->createForm(AddItemType::class, $product);
  780.         $form->handleRequest($request);
  781.         $QUERY 'SELECT * FROM cart_order_item where session_id = "' $session->getId() . '" ORDER BY DATE(created_at) DESC  LIMIT 1 ;';
  782.         $statement $em->getConnection()->prepare($QUERY);
  783.         $statement->execute();
  784.         $result $statement->fetch();
  785.         if ($result == false) {
  786.             if ($form->isSubmitted() && $form->isValid()) {
  787.                 $this->orderFactory->addItem($product,  $request->request->get('quantity'));
  788.                 $this->addFlash('success'$this->translator->trans('app.cart.addItem.message.success'));
  789.                 $QUERY1 'SELECT * FROM cart_order_item where session_id = "' $session->getId() . '" AND product_id = "' $id '"  LIMIT 1 ;';
  790.                 $statement1 $em->getConnection()->prepare($QUERY1);
  791.                 $statement1->execute();
  792.                 $result1 $statement1->fetch();
  793.                 $sql_query ' UPDATE cart_order SET cart_cat = ' $product->getCart_cat() . ' WHERE id = "' $result1["order_id"] . '" ; ';
  794.                 $statement2 $em->getConnection()->prepare($sql_query);
  795.                 $statement2->execute();
  796.             }
  797.             return $this->redirectToRoute('home1');
  798.         } else if (($result != false) && $result["cart_cat"] != $product->getCart_cat() && $result["cart_cat"] != 10) {
  799.             $ville = [=> "Douala"=> "Yaoundé"=> "Bafoussam"=> "Mbouda"10 => ""];
  800.             $message "Impossible! Vous avez au depart choisit un magasin dans la ville de " $ville[$result["cart_cat"]] . " et maintenant vous changer par celui de " $ville[$product->getCart_cat()] . ". Vous ne pouvez que faire vos achats dans les magasins d'une même ville: ";
  801.             $this->addFlash('error'$message);
  802.             return $this->redirectToRoute('cart');
  803.         }if (($result != false && $result["cart_cat"] == $product->getCart_cat()) || ($result["cart_cat"] != $product->getCart_cat() && $result["cart_cat"] == 10)) {
  804.             if ($form->isSubmitted() && $form->isValid()) {
  805.                 $this->orderFactory->addItem($product$request->request->get('quantity'));
  806.                 $this->addFlash('success'$this->translator->trans('app.cart.addItem.message.success'));
  807.                 $QUERY1 'SELECT * FROM cart_order_item where session_id = "' $session->getId() . '" AND product_id = "' $id '" ORDER BY DATE(created_at) DESC LIMIT 1 ;';
  808.                 $statement1 $em->getConnection()->prepare($QUERY1);
  809.                 $statement1->execute();
  810.                 $result1 $statement1->fetch();
  811.                 $sql_query ' UPDATE cart_order SET cart_cat = ' $product->getCart_cat() . ' WHERE id = "' $result1["order_id"] . '" ; ';
  812.                 $statement2 $em->getConnection()->prepare($sql_query);
  813.                 $statement2->execute();
  814.             }
  815.             return $this->redirectToRoute('home1');
  816.         } else {
  817.             $ville = [=> "Douala"=> "Yaoundé"=> "Bafoussam"=> "Mbouda"10 => ""];
  818.             $message "Impossible! Vous avez au depart choisit un magasin dans la ville de " $ville[$result["cart_cat"]] . " et maintenant vous changer par celui de " $ville[$product->getCart_cat()] . ". Vous ne pouvez que faire vos achats dans les magasins d'une même ville: ";
  819.             $this->addFlash('error'$message);
  820.             return $this->redirectToRoute('cart');
  821.         }
  822.     }
  823.     /**
  824.      * @Route({
  825.      *     "fr": "/cart/addsearch/{id}",
  826.      *     "en": "/cart/addsearch/{id}/en"
  827.      *     }, name="cart_search", methods={"POST"})
  828.      *  @param Request $request
  829.      *
  830.      */
  831.     public function addSearchProduct(Request $requestProduct $product): Response
  832.     {
  833.         if ($request->request->get('product_id')) {
  834.             $session = new Session();
  835.             $em $this->getDoctrine()->getManager();
  836.             $repository $this->getDoctrine()->getRepository(Product::class);
  837.             $QUERY 'SELECT * FROM cart_order_item where session_id = "' $session->getId() . '"  ORDER BY DATE(created_at) DESC LIMIT 1 ;';
  838.             $statement $em->getConnection()->prepare($QUERY);
  839.             $statement->execute();
  840.             $result $statement->fetch();
  841.             if ($result == false) {
  842.                 $this->orderFactory->addItem($repository->findOneBy(['id' => $request->request->get('product_id')]), $request->request->get('quantity'));
  843.                 $this->addFlash('success'$this->translator->trans('app.cart.addItem.message.success'));
  844.                 $QUERY1 'SELECT * FROM cart_order_item where session_id = "' $session->getId() . '" AND product_id = "' $request->request->get('product_id') . '"  LIMIT 1 ;';
  845.                 $statement1 $em->getConnection()->prepare($QUERY1);
  846.                 $statement1->execute();
  847.                 $result1 $statement1->fetch();
  848.                 $sql_query ' UPDATE cart_order SET cart_cat = ' $product->getCart_cat() . '  WHERE id = "' $result1["order_id"] . '" ; ';
  849.                 $statement1 $em->getConnection()->prepare($sql_query);
  850.                 $statement1->execute();
  851.                 return $this->redirectToRoute('shop_detail_ville', ['ville' => $request->request->get('cat'), 'magasin' => $request->request->get('magasin'), 'categorie'=>$request->request->get('categorie'), 'type'=>$request->request->get('type')]);
  852.             } // elseif (($result != false) && $result["cart_cat"] != $product->getCart_cat()) {
  853.             else if (($result != false) && $result["cart_cat"] != $product->getCart_cat() && $result["cart_cat"] != 10) {
  854.                 $ville = [=> "Douala"=> "Yaoundé"=> "Bafoussam"=> "Mbouda"10 => ""];
  855.                 $message "Impossible! Vous avez au depart choisit un magasin dans la ville de " $ville[$result["cart_cat"]] . " et maintenant vous changer par celui de " $ville[$product->getCart_cat()] . "  vous ne pouvez que faire vos achats dans les magasins d'une même ville: ";
  856.                 $this->addFlash('error'$message);
  857.                 return $this->redirectToRoute('cart');
  858.             } //elseif (($result != false) && $result["cart_cat"] == $product->getCart_cat()) {
  859.             if (($result != false && $result["cart_cat"] == $product->getCart_cat()) || ($result["cart_cat"] != $product->getCart_cat() && $result["cart_cat"] == 10)) {
  860.                 $this->orderFactory->addItem($repository->findOneBy(['id' => $request->request->get('product_id')]),  $request->request->get('quantity'));
  861.                 $this->addFlash('success'$this->translator->trans('app.cart.addItem.message.success'));
  862.                 $QUERY1 'SELECT * FROM cart_order_item where session_id = "' $session->getId() . '" AND product_id = "' $request->request->get('product_id') . '" ORDER BY DATE(created_at) DESC LIMIT 1 ;';
  863.                 $statement1 $em->getConnection()->prepare($QUERY1);
  864.                 $statement1->execute();
  865.                 $result1 $statement1->fetch();
  866.                 $sql_query ' UPDATE cart_order SET cart_cat = ' $product->getCart_cat() . ' WHERE id = "' $result1["order_id"] . '" ; ';
  867.                 $statement2 $em->getConnection()->prepare($sql_query);
  868.                 $statement2->execute();
  869.                 // return $this->redirectToRoute('home1');
  870.                 return $this->redirectToRoute('shop_detail_ville', ['ville' => $request->request->get('cat'), 'magasin' => $request->request->get('magasin'), 'categorie'=>$request->request->get('categorie'), 'type'=>$request->request->get('type')]);
  871.             } else {
  872.                 $ville = [=> "Douala"=> "Yaoundé"=> "Bafoussam"=> "Mbouda"10 => ""];
  873.                 $message "Impossible! Vous avez au depart choisit un magasin dans la ville de " $ville[$result["cart_cat"]] . " et maintenant vous changer par celui de " $ville[$product->getCart_cat()] . ". Vous ne pouvez que faire vos achats dans les magasins d'une même ville: ";
  874.                 $this->addFlash('error'$message);
  875.                 return $this->redirectToRoute('cart');
  876.             }
  877.         }
  878.     }
  879.     /**
  880.      * @Route({
  881.      *     "fr": "/cart/addsearch2/{id}",
  882.      *     "en": "/cart/addsearch2/{id}/en"
  883.      *     }, name="cart_search2", methods={"POST"})
  884.      *  @param Request $request
  885.      *
  886.      */
  887.     public function addSearchProducts(Request $requestProduct $product): Response
  888.     {
  889.         if ($request->request->get('product_id')) {
  890.             $session = new Session();
  891.             $em $this->getDoctrine()->getManager();
  892.             $repository $this->getDoctrine()->getRepository(Product::class);
  893.             $QUERY 'SELECT * FROM cart_order_item where session_id = "' $session->getId() . '"  ORDER BY DATE(created_at) DESC LIMIT 1 ;';
  894.             $statement $em->getConnection()->prepare($QUERY);
  895.             $statement->execute();
  896.             $result $statement->fetch();
  897.             if ($result == false) {
  898.                 $this->orderFactory->addItem($repository->findOneBy(['id' => $request->request->get('product_id')]),  $request->request->get('quantity'));
  899.                 $this->addFlash('success'$this->translator->trans('app.cart.addItem.message.success'));
  900.                 $QUERY1 'SELECT * FROM cart_order_item where session_id = "' $session->getId() . '" AND product_id = "' $request->request->get('product_id') . '"  LIMIT 1 ;';
  901.                 $statement1 $em->getConnection()->prepare($QUERY1);
  902.                 $statement1->execute();
  903.                 $result1 $statement1->fetch();
  904.                 $sql_query ' UPDATE cart_order SET cart_cat = ' $product->getCart_cat() . '  WHERE id = "' $result1["order_id"] . '" ; ';
  905.                 $statement1 $em->getConnection()->prepare($sql_query);
  906.                 $statement1->execute();
  907.                 // return $this->redirectToRoute('home1');
  908.                 return $this->redirect($request->server->get('HTTP_REFERER'));
  909.             } // elseif (($result != false) && $result["cart_cat"] != $product->getCart_cat()) {
  910.             else if (($result != false) && $result["cart_cat"] != $product->getCart_cat() && $result["cart_cat"] != 10) {
  911.                 $ville = [=> "Douala"=> "Yaoundé"=> "Bafoussam"=> "Mbouda"10 => ""];
  912.                 $message "Impossible! Vous avez au depart choisit un magasin dans la ville de " $ville[$result["cart_cat"]] . " et maintenant vous changer par celui de " $ville[$product->getCart_cat()] . "  vous ne pouvez que faire vos achats dans les magasins d'une même ville: ";
  913.                 $this->addFlash('error'$message);
  914.                 return $this->redirectToRoute('cart');
  915.             } //elseif (($result != false) && $result["cart_cat"] == $product->getCart_cat()) {
  916.             if (($result != false && $result["cart_cat"] == $product->getCart_cat()) || ($result["cart_cat"] != $product->getCart_cat() && $result["cart_cat"] == 10)) {
  917.                 $this->orderFactory->addItem($repository->findOneBy(['id' => $request->request->get('product_id')]),  $request->request->get('quantity'));
  918.                 $this->addFlash('success'$this->translator->trans('app.cart.addItem.message.success'));
  919.                 $QUERY1 'SELECT * FROM cart_order_item where session_id = "' $session->getId() . '" AND product_id = "' $request->request->get('product_id') . '" ORDER BY DATE(created_at) DESC LIMIT 1 ;';
  920.                 $statement1 $em->getConnection()->prepare($QUERY1);
  921.                 $statement1->execute();
  922.                 $result1 $statement1->fetch();
  923.                 $sql_query ' UPDATE cart_order SET cart_cat = ' $product->getCart_cat() . ' WHERE id = "' $result1["order_id"] . '" ; ';
  924.                 $statement2 $em->getConnection()->prepare($sql_query);
  925.                 $statement2->execute();
  926.                 //  return $this->redirectToRoute('home1');
  927.                 return $this->redirect($request->server->get('HTTP_REFERER'));
  928.             } else {
  929.                 $ville = [=> "Douala"=> "Yaoundé"=> "Bafoussam"=> "Mbouda"10 => ""];
  930.                 $message "Impossible! Vous avez au depart choisit un magasin dans la ville de " $ville[$result["cart_cat"]] . " et maintenant vous changer par celui de " $ville[$product->getCart_cat()] . ". Vous ne pouvez que faire vos achats dans les magasins d'une même ville: ";
  931.                 $this->addFlash('error'$message);
  932.                 return $this->redirectToRoute('cart');
  933.             }
  934.         }
  935.     }
  936.     /**
  937.      * @Route({
  938.      *     "fr": "/cart/removeItem/{id}",
  939.      *     "en": "/cart/removeItem/{id}/en"
  940.      *     }, name="cart.removeItem", methods={"POST"})
  941.      *  @param Request $request
  942.      *
  943.      */
  944.     public function removeItem(Request $requestOrderItem $item): Response
  945.     {
  946.         $form $this->createForm(RemoveItemType::class, $item);
  947.         $form->handleRequest($request);
  948.        
  949.         if ($form->isSubmitted() && $form->isValid()) {
  950.            
  951.             $this->orderFactory->removeItem($item);
  952.             $this->addFlash('success'$this->translator->trans('app.cart.removeItem.message.success'));
  953.         }
  954.         return $this->redirectToRoute('cart');
  955.     }
  956.       /**
  957.      * @Route({
  958.      *     "fr": "/cart/getremoveItem/{id}",
  959.      *     "en": "/cart/getremoveItem/{id}/en"
  960.      *     }, name="getremoveItem", methods={"GET"})
  961.      *  @param Request $request
  962.      *
  963.      */
  964.     public function getRemoveItem(Request $request$id): Response
  965.     {
  966.        
  967.             $orderItem $this->getDoctrine()->getRepository('App\Component\Order\Model:OrderItem')->findOneBy(array('id'=>$id));
  968.            
  969.             if ($orderItem != null){
  970.                 $this->orderFactory->removeItem($orderItem);
  971.               
  972.                 $this->addFlash('success'$this->translator->trans('app.cart.removeItem.message.success'));
  973.             }
  974.           
  975.         return $this->redirectToRoute('cart');
  976.     }
  977.     /**
  978.      * @Route({
  979.      *     "fr": "/cart/setItemQuantity/{id}",
  980.      *     "en": "/cart/setItemQuantity/{id}/en"
  981.      *     }, name="cart.setItemQuantity", methods={"POST"})
  982.      *  @param Request $request
  983.      *
  984.      */
  985.     public function setQuantity(Request $requestOrderItem $item): Response
  986.     {
  987.         $form $this->createForm(SetItemQuantityType::class, $item);
  988.         $form->handleRequest($request);
  989.         if ($form->isSubmitted() && $form->isValid()) {
  990.             $this->orderFactory->setItemQuantity($item$form->getData()->getQuantity());
  991.             $this->addFlash('success'$this->translator->trans('app.cart.setItemQuantity.message.success'));
  992.         }
  993.         return $this->redirectToRoute('cart');
  994.     }
  995.     /**
  996.      * @Route({
  997.      *     "fr": "/cart/clear",
  998.      *     "en": "/cart/clear/en"
  999.      *     }, name="cart.clear", methods={"POST"})
  1000.      *  @param Request $request
  1001.      *
  1002.      */
  1003.     public function clear(Request $request): Response
  1004.     {
  1005.         $form $this->createForm(ClearCartType::class, $this->orderFactory->getCurrent());
  1006.         $form->handleRequest($request);
  1007.         if ($form->isSubmitted() && $form->isValid()) {
  1008.             $this->orderFactory->clear();
  1009.             $this->addFlash('success'$this->translator->trans('app.cart.clear.message.success'));
  1010.         }
  1011.         return $this->redirectToRoute('home1');
  1012.     }
  1013.     /**
  1014.      * @Route({
  1015.      *     "fr": "/cart/setPayment",
  1016.      *     "en": "/cart/setPayment/en"
  1017.      *     }, name="cart.setPayment", methods={"POST"})
  1018.      *  @param Request $request
  1019.      *
  1020.      */
  1021.     public function setPayment(Request $requestOrderFactory $order): Response
  1022.     {
  1023.         $form $this->createForm(SetPaymentType::class, $order->getCurrent());
  1024.         $form->handleRequest($request);
  1025.         if ($form->isSubmitted() && $form->isValid()) {
  1026.             $this->orderFactory->setPayment($form->getData()->getPayment());
  1027.             $this->addFlash('success'$this->translator->trans('app.cart.setPayment.message.success'));
  1028.         }
  1029.         return $this->redirectToRoute('cart');
  1030.     }
  1031.     /**
  1032.      * @Route({
  1033.      *     "fr": "/cart/setShipment",
  1034.      *     "en": "/cart/setShipment/en"
  1035.      *     }, name="cart.setShipment", methods={"POST"})
  1036.      *  @param Request $request
  1037.      *
  1038.      */
  1039.     public function setShipment(Request $request): Response
  1040.     {
  1041.         $form $this->createForm(SetShipmentType::class, $this->orderFactory->getCurrent());
  1042.         $form->handleRequest($request);
  1043.         if ($form->isSubmitted() && $form->isValid()) {
  1044.             $this->orderFactory->setShipment($form->getData()->getShipment());
  1045.             $this->addFlash('success'$this->translator->trans('app.cart.setShipment.message.success'));
  1046.         }
  1047.         //return $this->redirectToRoute('cart');
  1048.         return $this->redirect($request->server->get('HTTP_REFERER'));
  1049.     }
  1050.     /**
  1051.      * @Route({
  1052.      *     "fr": "/cart/setDiscount",
  1053.      *     "en": "/cart/setDiscount/en"
  1054.      *     }, name="cart.setDiscount", methods={"POST"})
  1055.      *  @param Request $request
  1056.      *
  1057.      */
  1058.     public function setDiscount(Request $request): Response
  1059.     {
  1060.         /**
  1061.          * @var User $user
  1062.          */
  1063.         $user $this->getUser();  
  1064.             $form $this->createForm(SetDiscountType::class, $this->orderFactory->getCurrent());
  1065.             $form->handleRequest($request);
  1066.              $em $this->getDoctrine()->getManager();
  1067.             if ($form->isSubmitted() && $form->isValid()) {
  1068.                 if(!is_null($user)){
  1069.                     $discount $this->getDoctrine()->getRepository('App\Component\Discount\Model:Discount')->findOneBy([
  1070.                         'code' => $form->get('discountCode')->getData(),'userId'=>$user->getId()
  1071.                     ]);
  1072.                     if ($discount !== null) {
  1073.                         $this->orderFactory->setDiscount($discount);
  1074.                            // $discount->setUserId(0);
  1075.                           
  1076.                             //$user->setCodePromoName("");
  1077.                             $user->setCodePromoStatus(2);
  1078.                          //   $user->setCodePromoValue("");
  1079.                           //  $em->persist($discount);
  1080.                             $em->persist($user);
  1081.                             $em->flush();
  1082.                         $this->addFlash('success'$this->translator->trans('app.cart.setDiscount.message.success'));
  1083.                     } else {
  1084.                         $this->addFlash('error'$this->translator->trans('app.cart.setDiscount.message.codeNotFound'));
  1085.                         
  1086.                     }
  1087.                 }else{
  1088.               
  1089.                     $this->addFlash('error'$this->translator->trans('app.cart.setDiscount.message.codeNotFound'));
  1090.     
  1091.                }
  1092.     
  1093.             }
  1094.         return $this->redirectToRoute('cart');
  1095.     }
  1096. }