src/Flexy/FrontBundle/Controller/CheckoutController.php line 48

Open in your IDE?
  1. <?php
  2. namespace App\Flexy\FrontBundle\Controller;
  3. use App\Entity\App\Flexy\ShopBundle\Entity\Chronodyali\StatusTrackingOrder;
  4. use App\Service\GenerateTokenChronoDialiService;
  5. use App\Flexy\FrontBundle\Repository\ProductFrontRepository;
  6. use App\Flexy\ProductBundle\Repository\ProductRepository;
  7. use App\Flexy\ShopBundle\Entity\Customer\Customer;
  8. use App\Flexy\ShopBundle\Entity\Order\Order;
  9. use App\Flexy\ShopBundle\Entity\Order\OrderItem;
  10. use App\Flexy\ShopBundle\Entity\Product\ProductShop;
  11. use App\Flexy\ShopBundle\Entity\Shipping\City;
  12. use App\Flexy\ShopBundle\Entity\Chronodyali\CustomerChronoCustomer;
  13. use App\Flexy\ShopBundle\Entity\Chronodyali\data;
  14. use App\Flexy\ShopBundle\Entity\Chronodyali\Address;
  15. use App\Flexy\ShopBundle\Entity\Chronodyali\CustomerChrono;
  16. use App\Flexy\ShopBundle\Entity\Chronodyali\DeliveryTimeslot;
  17. use App\Flexy\ShopBundle\Entity\Chronodyali\Dimension;
  18. use App\Flexy\ShopBundle\Entity\Chronodyali\StatusTrackingChrono;
  19. use App\Flexy\ShopBundle\Entity\Chronodyali\Item;
  20. use App\Flexy\ShopBundle\Entity\Chronodyali\ParcelJob;
  21. use App\Flexy\ShopBundle\Entity\Chronodyali\PickupTimeslot;
  22. use App\Flexy\ShopBundle\Entity\Chronodyali\ReferenceOrder;
  23. use App\Flexy\ShopBundle\Repository\Customer\CustomerRepository;
  24. use Doctrine\ORM\EntityManagerInterface;
  25. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  26. use Symfony\Component\HttpFoundation\Response;
  27. use Symfony\Component\Routing\Annotation\Route;
  28. use App\Flexy\ShopBundle\Repository\Payment\PaymentMethodRepository;
  29. use App\Flexy\ShopBundle\Repository\Shipping\CityRepository;
  30. use App\Flexy\ShopBundle\Repository\Chronodyali\TransportTarifRepository;
  31. use App\Repository\Flexy\ShopBundle\Entity\Customer\CustomerAddressRepository;
  32. use App\Repository\Flexy\ShopBundle\Entity\Shipping\DepartementRepository;
  33. use Symfony\Component\HttpFoundation\Request;
  34. use App\Flexy\ShopBundle\Repository\Order\OrderRepository;
  35. use App\Flexy\ShopBundle\Repository\VendorRepository;
  36. use App\Flexy\ShopBundle\Repository\Order\AccessTokenExpirationRepository;
  37. use CMI\CmiClient;
  38. use Symfony\Component\HttpFoundation\JsonResponse;
  39. use Symfony\Component\Serializer\SerializerInterface;
  40. #[Route('/shop/checkout')]
  41. class CheckoutController extends AbstractController
  42. {
  43.     #[Route('/'name'checkout')]
  44.     public function cart(
  45.         PaymentMethodRepository $paymentMethodRepository,
  46.         CustomerRepository $customerRepository,
  47.         TransportTarifRepository  $transportTarifRepository,
  48.         OrderRepository $orderRepository,
  49.         CityRepository $cityRepository,
  50.         GenerateTokenChronoDialiService $token,
  51.         AccessTokenExpirationRepository $accessTokenExpirationRepository
  52.         ): Response
  53.     {
  54.         $hasAccess $this->isGranted('ROLE_CUSTOMER');
  55.         if(!$hasAccess){
  56.             return $this->redirectToRoute("login_register");
  57.         }
  58.         $currentUser $this->getUser();
  59.         
  60.             $customer $customerRepository->findOneBy(["user"=>$currentUser]);
  61.             $cities $cityRepository->findAll();
  62.             $transport$transportTarifRepository->findAll();
  63.  
  64.           // $token->generateTokenChronoDiali();   hire  ici j'ai désactiver le generation de token 
  65.          //dd($token);
  66.         
  67.         /*if(count($accessTokenExpirationRepository->findBy(array(),array('id'=>'DESC'),1,0))){
  68.              $accessTokenExpirationRepository->findBy(array(),array('id'=>'DESC'),1,0);
  69.             $values = $accessTokenExpirationRepository->findBy(array(),array('id'=>'DESC'),1,0);
  70.             dd($values[0]->getToken());
  71.         }else{
  72.             $token->generateTokenChronoDiali();
  73.         }*/
  74.         $paymentMethods $paymentMethodRepository->findBy(["isEnabled"=>true]);
  75.         return $this->render('@Flexy\FrontBundle/templates/checkout/checkout.html.twig',[
  76.             "paymentMethods"=>$paymentMethods,
  77.             "customer"=>$customer,
  78.             "cities"=> $cities,
  79.             "transport"=>$transport,
  80.         ]);
  81.     }
  82.     
  83.     #[Route('/cmi/cmipaiement'name:'cmipaiement')]
  84.     public function cmi(
  85.         Request $request,
  86.         PaymentMethodRepository $paymentMethodRepository,
  87.         ProductFrontRepository $productFrontRepository,
  88.         CustomerRepository $customerRepository,
  89.         CustomerAddressRepository $customerAddressRepository,
  90.         DepartementRepository $departementRepository
  91.         ): Response
  92.     {
  93.           
  94.         $firstName $request->request->get("firstName");
  95.         $lastName $request->request->get("lastName");
  96.         $address =  $request->request->get("address");
  97.         $companyName $request->request->get("companyName");
  98.         //$departement = $departementRepository->find((int)$request->request->get("department"))->getName();
  99.         $city $request->request->get("city");
  100.         $tel $request->request->get("tel");
  101.         $postcode $request->request->get("postcode");
  102.         $email $request->request->get("email");
  103.         $amountToPay $request->request->get("amount");
  104.         $orderid $request->request->get("orderid");
  105.         $id $request->request->get("id");
  106.         $delivery $request->request->get("delivery");
  107.         $adressCollectes $request->request->get("adressCollectes");
  108.         $weight $request->request->get("weight");
  109.         
  110.         $base_url $request->getScheme() . '://' $request->getHttpHost() . $request->getBasePath().'/shop/checkout';
  111.           /*$base_url="http://omall.fibysen.com/shop/checkout";
  112.           $base_url="http://localhost:8000/shop/checkout";*/
  113.          $client = new CmiClient([
  114.             'storekey' => 'Omall2022'// STOREKEY
  115.             'clientid' => '600003088'// CLIENTID
  116.             'oid' => $orderid."/".$id// COMMAND ID IT MUST BE UNIQUE
  117.             'shopurl' => $base_url// SHOP URL FOR REDIRECTION
  118.             'okUrl' => $base_url.'/okFail'// REDIRECTION AFTER SUCCEFFUL PAYMENT
  119.             'failUrl' => $base_url.'/okFail'// REDIRECTION AFTER FAILED PAYMENT
  120.             'email' => $email// YOUR EMAIL APPEAR IN CMI PLATEFORM
  121.             'BillToName' =>  $firstName.' '.$lastName// YOUR NAME APPEAR IN CMI PLATEFORM
  122.             'BillToCompany' =>   $companyName // YOUR COMPANY NAME APPEAR IN CMI PLATEFORM
  123.             'BillToStreet12' => $address."/livraison:".$delivery."/collect:".$adressCollectes // YOUR ADDRESS APPEAR IN CMI PLATEFORM NOT REQUIRED
  124.             'BillToCity' => $city// YOUR CITY APPEAR IN CMI PLATEFORM NOT REQUIRED
  125.             'BillToStateProv' =>  $address// YOUR STATE APPEAR IN CMI PLATEFORM NOT REQUIRED
  126.             'BillToPostalCode' => 'Code postal : '.$postcode // YOUR POSTAL CODE APPEAR IN CMI PLATEFORM NOT REQUIRED
  127.             'BillToCountry' => '504'."/poids:".$weight// YOUR COUNTRY APPEAR IN CMI PLATEFORM NOT REQUIRED (504=MA)
  128.             'tel' =>  $tel// YOUR PHONE APPEAR IN CMI PLATEFORM NOT REQUIRED
  129.             'amount' => $amountToPay// RETRIEVE AMOUNT WITH METHOD POST
  130.             'CallbackURL' => $base_url.'/callback'// CALLBACK
  131.             'AutoRedirect' => 'true'
  132.         ]);
  133.         
  134.         // OPTIONAL ATTRIBUTES
  135.         // $client->lang = 'ar'; // CHANGE LANG PAGE
  136.          //$client->AutoRedirect = 'true'; // REDIRECT THE CUSTOMER AUTOMATICALY BACK TO THE MERCHANT's WEB SITE WHEN TRANSACION IS ACCEPTED
  137.         //dd($client);
  138.         $client->redirect_post(); // CREATE INPUTS HIDDEN, GENERATE A VALID HASH AND MAKE REDIRECT POST TO CMI
  139.         /*$paymentMethods = $paymentMethodRepository->findBy(["isEnabled"=>true]);*/
  140.          
  141.         
  142.     }
  143.     #[Route('/chronodyali'name'chronodyali')]
  144.     public function insertDataInNinjaVanRequest $request,
  145.     OrderRepository $orderRepository,
  146.     AccessTokenExpirationRepository $accessTokenExpirationRepository
  147.  ): Response
  148.     {
  149.       //$allOrders = $this->dataRepository->findAll();
  150.   
  151.       /*$mapedArray = array_map(function ($object) {
  152.         return $object->getRequestedTrackingNumber();
  153.       }, $allOrders);*/
  154.   
  155.       //dd($mapedArray);
  156.       $ch curl_init();
  157.       
  158.       $time = new \DateTime();
  159.       
  160.        
  161.   
  162.       
  163.       $entityManager $this->getDoctrine()->getManager();
  164.     
  165.       
  166.         $addressFrom = new Address();
  167.         $addressFrom->setAddress1("rue nador impasse 69")
  168.           ->setAddress2("x")
  169.           ->setArea("x")
  170.           ->setcity("Casablanca")
  171.           ->setState("x")
  172.           ->setAddressType("x")
  173.           ->setCountry("MA")
  174.           ->setPostcode("20000");
  175.         
  176.         $entityManager->persist($addressFrom);
  177.   
  178.         $addressTo = new Address();
  179.         $addressTo->setAddress1("Jalan PJU 8/8")
  180.           ->setAddress2("")
  181.           ->setArea("Damansara Perdana")
  182.           ->setcity("Petaling Jaya")
  183.           ->setState("x")
  184.           ->setAddressType("office")
  185.           ->setCountry("MA")
  186.           ->setPostcode("20000");
  187.        
  188.         $entityManager->persist($addressTo);
  189.   
  190.         $from = new CustomerChrono();
  191.         $from->setName("DP IMMO, OMALL")
  192.           ->setPhoneNumber("+212 623 321 345")
  193.           ->setEmail("contact.info@o-mall.ma")
  194.           ->setAddress($addressTo);
  195.          
  196.         $entityManager->persist($from);
  197.   
  198.         $to = new CustomerChrono();
  199.         $to->setName("najib ")
  200.           ->setPhoneNumber("+60138201527")
  201.           ->setEmail("benkirane.doe@gmail.com")
  202.           ->setAddress($addressTo);
  203.         
  204.         $entityManager->persist($to);
  205.   
  206.         $timeSlot = new PickupTimeslot();
  207.         $timeSlot->setStartTime("09:00")
  208.           ->setEndTime("12:00")
  209.           ->setTimezone("Africa/Casablanca");
  210.           
  211.          
  212.         $entityManager->persist($timeSlot);
  213.   
  214.         $deliveryTimeSlot = new DeliveryTimeslot();
  215.         $deliveryTimeSlot->setStartTime("09:00")
  216.           ->setEndTime("12:00")
  217.           ->setTimezone("Africa/Casablanca");
  218.        
  219.       
  220.         $entityManager->persist($deliveryTimeSlot);
  221.   
  222.         $dimension = new Dimension();
  223.          
  224.        
  225.        $parcelJob = new ParcelJob();
  226.        $parcelJob->setIsPickupRequired(true)
  227.          ->setPickupAddressId("9905505")
  228.          //->setCacheOnDelivery($order->node->shippingInfo->codValue)
  229.          ->setPickupServiceType("Scheduled")
  230.          ->setPickupServiceLevel("Standard")
  231.          ->setPickupDate($time->format('Y-m-d'))
  232.          ->setPickupTimeslot($timeSlot)
  233.          ->setPickupInstructions("pick up with care")
  234.          ->setDeliveryInstructions("If recipient is not around, leave parcel in power riser")
  235.          ->setDeliveryStartDate($time->format('Y-m-d'))
  236.          ->setDeliveryTimeslot($deliveryTimeSlot)
  237.          ->setDimensions($dimension);
  238.         
  239.        
  240.        $entityManager->persist($parcelJob);
  241.        $dimension->setWeight(1.5);
  242.       
  243.   
  244.         
  245.         $entityManager->persist($dimension);
  246.         
  247.   
  248.         // = new \DateTime($order->node->shippingInfo->prefferedDeliveryDate);
  249.   
  250.         $reference = new ReferenceOrder();
  251.         $reference->setMerchantOrderNumber("SHIP-1234-56789");
  252.         $data = new data();
  253.         //if ($order->node->fulfillmentOrderColisRecords->edgeCount > 0) {
  254.           //foreach ($order->node->fulfillmentOrderColisRecords->edges as $package) {
  255.             $data->setServiceType("Parcel")
  256.               ->setServiceLevel("Nextday")
  257.               ->setRequestedTrackingNumber("TSST598267878")
  258.               ->setReference($reference)
  259.               ->setForm($from)
  260.               ->setTo($to)
  261.               ->setParcelJob($parcelJob);
  262.            
  263.             $entityManager->persist($reference);
  264.            
  265.          // }
  266.          // if (!in_array($package->node->trackingNumber, $mapedArray)) {
  267.            
  268.             $entityManager->persist($data);
  269.             
  270.          // }
  271.         //}
  272.         
  273.         //$entityManager->flush();
  274.        $trk="TSST598267580";
  275.           
  276.           $jsonString  =' {
  277.             "service_type": "Parcel",
  278.             "service_level": "Nextday",
  279.             "requested_tracking_number": "'.$trk.'",
  280.             "reference": {
  281.                 "merchant_order_number": "SHIP-1234-56789"
  282.             },
  283.             "from": {
  284.                 "name": "DP IMMO, OMALL",
  285.                 "phone_number": "+212 623 321 345",
  286.                 "email": "contact.info@o-mall.ma",
  287.                 "address": {
  288.                     "address1": "123 Rue sokrate",
  289.                     "address2": "",
  290.                     "area": "Taman Sri Delima",
  291.                     "city": "Casablanca",
  292.                     "state": "Casablanca - Anfa",
  293.                     "address_type": "office",
  294.                     "country": "MA",
  295.                     "postcode": "20000"
  296.                 }
  297.             },
  298.             "to": {
  299.                 "name": "Jane Doe",
  300.                 "phone_number": "+60103067174",
  301.                 "email": "jane.doe@gmail.com",
  302.                 "address": {
  303.                     "address1": "Jalan PJU 8/8",
  304.                     "address2": "",
  305.                     "area": "Damansara Perdana",
  306.                     "city": "Petaling Jaya",
  307.                     "state": "Selangor",
  308.                     "address_type": "home",
  309.                     "country": "MA",
  310.                     "postcode": "20000"
  311.                 }
  312.             },
  313.             "parcel_job": {
  314.                 "is_pickup_required": true,
  315.                 "pickup_address_id": "65431",
  316.                 "pickup_service_type": "Scheduled",
  317.                 "pickup_service_level": "Standard",
  318.                 "pickup_date": "'.$time->format('Y-m-d').'",
  319.                 "pickup_timeslot": {
  320.                     "start_time": "09:00",
  321.                     "end_time": "18:00",
  322.                     "timezone": "Africa/Casablanca"
  323.                 },
  324.                 "pickup_instructions": "Pickup with care!",
  325.                 "delivery_instructions": "If recipient is not around, leave parcel in power riser.",
  326.                 "delivery_start_date": "'.$time->format('Y-m-d').'",
  327.                 "delivery_timeslot": {
  328.                     "start_time": "09:00",
  329.                     "end_time": "12:00",
  330.                     "timezone": "Africa/Casablanca"
  331.                 },
  332.                 "dimensions": {
  333.                     "weight": 1.5
  334.                 } ,
  335.                  "items": [
  336.                     {
  337.                         "item_description": "Sample description",
  338.                         "quantity": 1,
  339.                         "is_dangerous_good": false
  340.                     }
  341.                 ]
  342.                
  343.             }
  344.         }';
  345.         
  346.         $jayParsedAry json_encode($jsonString);
  347.         
  348.        
  349.         
  350.         $tokenRepository $accessTokenExpirationRepository->findAll()[0];
  351.         curl_setopt($chCURLOPT_URL"https://api.chronodiali.ma/ma/4.1/orders");
  352.         curl_setopt($chCURLOPT_POST1);
  353.         curl_setopt($chCURLOPT_CUSTOMREQUEST'POST');
  354.   
  355.         curl_setopt($chCURLOPT_POSTFIELDS$jsonString);
  356.         curl_setopt($chCURLOPT_RETURNTRANSFERtrue);
  357.         curl_setopt(
  358.           $ch,
  359.           CURLOPT_HTTPHEADER,
  360.           [
  361.             'User-Agent: PHP Script',
  362.             'Content-Type: application/json;charset=utf-8',
  363.             'Authorization: Bearer ' .$accessTokenExpirationRepository->findOneBy([])->getToken()
  364.           ]
  365.         );
  366.         $response curl_exec($ch);
  367.         $decodedResponse json_decode($response,true);
  368.         curl_close($ch);
  369.      
  370.        // dd($decodedResponse["error"]['title']);
  371.       // dd($decodedResponse);
  372.      
  373.      // die(); 
  374.     }
  375.     #[Route('/webhooks'name'webhooks')]
  376.     public function webhookschronodyali(
  377.         Request $request,
  378.         EntityManagerInterface $em
  379.         OrderRepository $orderRepository,
  380.         AccessTokenExpirationRepository $accessTokenExpirationRepository,
  381.         SerializerInterface  $serializerInterface
  382.      ): JsonResponse
  383.     {
  384.         //$jsonString = json_decode($request->getContent(), true);
  385.        /* dd($jsonString);
  386.          $jsonString  =' {
  387.             "shipper_id": "Parcel",
  388.             "status": "Pending Pickup",
  389.             "shipper_re_no": "123344",
  390.             "tracking_re_no": "123344",
  391.             "shipper_order_ref_no": "123344",
  392.             "timestamp": "2021-03-01T07:00:00+0700",
  393.             "id":"dcfea1-3445-535-7dj",
  394.             "tracking_id":"TSST598267185"    
  395.         }'; */
  396.          
  397.       
  398.        // $jayParsedAry = json_encode($jsonString);
  399.         $decodedResponse json_decode($request->getContent(),true);
  400.          $id_orderexplode("TSST598267",$decodedResponse["tracking_id"]);
  401.          $order_id ltrim($id_order[1], "0"); 
  402.          
  403.          
  404.          
  405.          if($decodedResponse["status"]== "Pending Pickup")  {
  406.             $status"En attente de collecte";
  407.           }else if($decodedResponse["status"]== "Successful Pickup")  {
  408.             $status"Collecte réussie";
  409.          }else if($decodedResponse["status"]== "Completed")  {
  410.             $status"Livré";
  411.          }else if($decodedResponse["status"]== "Successful Delivery")  {
  412.             $status"Livraison réussie";
  413.          }else if($decodedResponse["status"]== "Pending Reschedule")  {
  414.             $status"En attente de reprogrammation";
  415.          }else if($decodedResponse["status"]== "On Vehicle For Delivery")  {
  416.             $status"En cours de livraison";
  417.          }else if($decodedResponse["status"]== "Returned To Sender")  {
  418.             $status"Retourné à l'expéditeur";
  419.         }else if($decodedResponse["status"]== "Cancelled")  {
  420.             $status"Annulé";
  421.         }else if($decodedResponse["status"]== "Arrived At Sorting Hub")  {
  422.             $status"Arrivé au centre de tri";
  423.         }else if($decodedResponse["status"]== "En Route To Sorting Hub")  {
  424.             $status"En cours d'acheminement";
  425.         }else if($decodedResponse["status"]== "Return To Sender Triggered")  {
  426.             $status"Retour à l'expéditeur déclenché";
  427.         }else if($decodedResponse["status"]== "Pickup Fail")  {
  428.             $status"Echec à la collecte";
  429.         }
  430.         
  431.         
  432.        
  433.          $order $orderRepository->UpdateStatusOrder($status,$order_id);
  434.          $entityManager $this->getDoctrine()->getManager();
  435.            $datenow = new \DateTime();
  436.          // $date = $datenow->format('Y-m-d');
  437.          
  438.     
  439.          $statustrackingorder = new StatusTrackingChrono();
  440.          $statustrackingorder->setIdOrder($order_id)
  441.            ->setStatus($decodedResponse["status"])
  442.            //->setDateInsert($datenow->format('Y-m-d'))
  443.            ->setTimestamp($decodedResponse["timestamp"])
  444.            ->setTrackingId($decodedResponse["tracking_id"]);
  445.            $entityManager->persist($statustrackingorder);
  446.            $entityManager->flush();
  447.          //return dd($order);
  448.          $data $serializerInterface->serialize($order,'json');
  449.        
  450.          // $response->headers->set('Content-Type', 'application/json');
  451.         
  452.          return new JsonResponse($dataResponse::HTTP_OK, [] , true);
  453.          
  454.           
  455.        
  456.     }
  457.     #[Route('/okFail'name'ok_Fail')]
  458.     public function okFail(
  459.         Request $request,
  460.         OrderRepository $orderRepository,
  461.         AccessTokenExpirationRepository $accessTokenExpirationRepository
  462.      ): Response
  463.     {
  464.          $data $request->request->all();
  465.          
  466.          $tracking="";
  467.          $delivery $request->request->get('BillToStreet12');
  468.          $order $request->request->get('ReturnOid');
  469.          $poid $request->request->get('BillToCountry');
  470.        
  471.          $weight=explode("/poids:"$poid);
  472.          //dd($weight[1]); 
  473.          $valueDelivery=explode("/livraison:"$delivery);
  474.          $id explode("/"$order);
  475.           
  476.          $value=explode("/collect:"$valueDelivery[1]);
  477.          $Delivery =$value[0];
  478.          $adressCollectes=$value[1];
  479.          
  480.          
  481.         
  482.            
  483.                     
  484.          $TransId $request->request->get('TransId');
  485.          $response $request->request->get('Response');
  486.          $email $request->request->get('email');
  487.          $ammount $request->request->get('amount'); 
  488.          $date_transation $request->request->get('EXTRA_TRXDATE'); 
  489.          $oid  $request->request->get('oid'); 
  490.           
  491.          if($response == "Approved"){
  492.          $order $this->getDoctrine()->getRepository(Order::class)->find($id[1]);
  493.          $order->setStatusPayment($response);
  494.          $order->setTransationId($TransId);
  495.          $entityManager $this->getDoctrine()->getManager();
  496.          $entityManager->persist($order);
  497.          $entityManager->flush();
  498.        if($Delivery == "chronodyali"){
  499.         $order $this->getDoctrine()->getRepository(Order::class)->find($id[1]);
  500.         $order->setStatus("En attente de collecte");
  501.         $entityManager $this->getDoctrine()->getManager();
  502.         $entityManager->persist($order);
  503.         $entityManager->flush();
  504.          $poids=0;
  505.         $adress explode("|"$adressCollectes);
  506.         foreach($adress as $i =>$key) {
  507.            if(count($adress) > 1) {
  508.             $poids=($weight[1]/2);
  509.             }else{
  510.              $poids=$weight[1];
  511.             }
  512.                  
  513.             $ch curl_init();
  514.             $time = new \DateTime();
  515.             $trk="TSST598267".$i.$id[1];
  516.                 $jsonString  =' {
  517.                   "service_type": "Parcel",
  518.                   "service_level": "Nextday",
  519.                   "requested_tracking_number": "'.$trk.'",
  520.                   "reference": {
  521.                       "merchant_order_number": "SHIP-1234-56789"
  522.                   },
  523.                   "from": {
  524.                       "name": "DP IMMO, OMALL",
  525.                       "phone_number": "+212 623 321 345",
  526.                       "email": "contact.info@o-mall.ma",
  527.                       "address": {
  528.                           "address1":"'.$key.'",
  529.                           "address2": "",
  530.                           "area": "Taman Sri Delima",
  531.                           "city": "",
  532.                           "state": "",
  533.                           "address_type": "office",
  534.                           "country": "MA",
  535.                           "postcode": "20000"
  536.                       }
  537.                   },
  538.                   "to": {
  539.                       "name": "'.$request->request->get('BillToName').'",
  540.                       "phone_number": "'.$request->request->get('tel').'",
  541.                       "email": "'.$request->request->get('email').'",
  542.                       "address": {
  543.                           "address1": "'.$valueDelivery[0].'",
  544.                           "address2": "",
  545.                           "area": "Damansara Perdana",
  546.                           "city": "'.$request->request->get('BillToCity').'", 
  547.                           "state": "'.$request->request->get('BillToCity').'",
  548.                           "address_type": "home",
  549.                           "country": "MA",
  550.                           "postcode": "20000"
  551.                       }
  552.                   },
  553.                   "parcel_job": {
  554.                       "is_pickup_required": true,
  555.                       "pickup_address_id": "65431",
  556.                       "pickup_service_type": "Scheduled",
  557.                       "pickup_service_level": "Standard",
  558.                       "pickup_date": "'.$time->format('Y-m-d').'",
  559.                       "pickup_timeslot": {
  560.                           "start_time": "09:00",
  561.                           "end_time": "18:00",
  562.                           "timezone": "Africa/Casablanca"
  563.                       },
  564.                       "pickup_instructions": "Pickup with care!",
  565.                       "delivery_instructions": "If recipient is not around, leave parcel in power riser.",
  566.                       "delivery_start_date": "'.$time->format('Y-m-d').'",
  567.                       "delivery_timeslot": {
  568.                           "start_time": "09:00",
  569.                           "end_time": "12:00",
  570.                           "timezone": "Africa/Casablanca"
  571.                       },
  572.                       "dimensions": {
  573.                           "weight": "'.$poids.'"
  574.                       } ,
  575.                        "items": [
  576.                           {
  577.                               "item_description": "Sample description",
  578.                               "quantity": 1,
  579.                               "is_dangerous_good": false
  580.                           }
  581.                       ]
  582.                      
  583.                   }
  584.               }';
  585.               
  586.               $jayParsedAry json_encode($jsonString);
  587.               
  588.              
  589.               
  590.               $tokenRepository $accessTokenExpirationRepository->findAll()[0];
  591.               curl_setopt($chCURLOPT_URL"https://api.chronodiali.ma/ma/4.1/orders");
  592.               curl_setopt($chCURLOPT_POST1);
  593.               curl_setopt($chCURLOPT_CUSTOMREQUEST'POST');
  594.         
  595.               curl_setopt($chCURLOPT_POSTFIELDS$jsonString);
  596.               curl_setopt($chCURLOPT_RETURNTRANSFERtrue);
  597.               curl_setopt(
  598.                 $ch,
  599.                 CURLOPT_HTTPHEADER,
  600.                 [
  601.                   'User-Agent: PHP Script',
  602.                   'Content-Type: application/json;charset=utf-8',
  603.                   'Authorization: Bearer ' .$accessTokenExpirationRepository->findOneBy([])->getToken()
  604.                 ]
  605.               );
  606.               $response curl_exec($ch);
  607.               $decodedResponse json_decode($response,true);
  608.               curl_close($ch);
  609.             }
  610.               //dd($decodedResponse);
  611.              // dd($decodedResponse["requested_tracking_number"]);
  612.             
  613.             
  614.               
  615.             if($Delivery == "chronodyali"){
  616.                 $tracking=$decodedResponse["requested_tracking_number"];
  617.             }
  618.         
  619.         }
  620.         
  621.         $transport = (new \Swift_SmtpTransport('omav2.heberdomaine.net'465'ssl'))
  622.         ->setUsername('devomall@fibysen.com')
  623.         ->setPassword('devomall2022')
  624.         ;
  625.         $mailer = new \Swift_Mailer($transport);
  626.         $message = (new \Swift_Message("Validation de la commande"))
  627.        ->setFrom(['contact@omall.ma'=>"O'Mall"])
  628.        ->setTo([$request->request->get('email')=>"Une commande a été payer de la plate forme omall"])
  629.         ->setBody(
  630.         $this->renderView(
  631.            '@Flexy/FrontBundle/templates/registration/mail_chronovendor.html.twig',
  632.            [   
  633.                "commande"=>$request->request->get('ReturnOid'),
  634.                "TransId"=>$request->request->get('TransId'),
  635.                ]           
  636.         ),
  637.             'text/html'
  638.         );
  639.         
  640.         $mailer->send($message); 
  641.        
  642.             return $this->render('@Flexy\FrontBundle/templates/checkout/ajax/_paymentResult.html.twig',[ 
  643.                 "TransId"=>$TransId,
  644.                 "order"=>$oid,
  645.                 "email"=>$email,
  646.                 "ammount"=> $ammount,
  647.                 "TransDate" => $date_transation,
  648.                 "chronodyali"=> $tracking,
  649.                   
  650.             ]);
  651.          
  652.          }else{
  653.             //dd($order);
  654.             $order $request->request->get('oid');
  655.             $id explode("/"$order);
  656.             $order $this->getDoctrine()->getRepository(Order::class)->find($id[1]);
  657.             $entityManager $this->getDoctrine()->getManager();
  658.             $entityManager->remove($order);
  659.             $entityManager->flush();
  660.             return $this->render('@Flexy\FrontBundle/templates/checkout/ajax/_paymentErreur.html.twig',[      
  661.             ]);
  662.         }
  663.         //dd($data);
  664.     }
  665.     
  666.     #[Route('/send-mail-offer'name'send_mail')]
  667.     public function sendmailoffer(
  668.         Request $request,
  669.         \Swift_Mailer $mailer
  670.         
  671.      ): Response
  672.     {
  673.         $message = (new \Swift_Message("Merci ! Votre réservation à l'établissement O'mall est confirmée"))
  674.         ->setFrom(['contact@omall.ma'=>"O'Mall"])
  675.         ->setTo(["najib.benkirane@gmail.com"=>"Reservation Service O'Mall"])
  676.          ->setBody(
  677.             $this->renderView(
  678.                 '@Flexy/FrontBundle/templates/registration/mail_chronovendor.html.twig',
  679.                 [   
  680.                     "commande"=>"CMD220500030",
  681.                     ]           
  682.              ),
  683.                  'text/html'
  684.              );
  685.          $mailer->send($message); 
  686.          return $this->redirectToRoute('front_home');
  687.     }
  688.     #[Route('/confirm/ajax'name'confirm_checkout_ajax')]
  689.     public function confirmChcekout(
  690.         Request $request,
  691.         PaymentMethodRepository $paymentMethodRepository,
  692.         ProductFrontRepository $productFrontRepository,
  693.         CustomerRepository $customerRepository,
  694.         CustomerAddressRepository $customerAddressRepository,
  695.         DepartementRepository $departementRepository,
  696.         AccessTokenExpirationRepository $accessTokenExpirationRepository,
  697.         VendorRepository $vendorRepository,
  698.         \Swift_Mailer $mailer
  699.      ): Response
  700.     {
  701.         
  702.        
  703.         $currentUser $this->getUser();
  704.         if($currentUser){
  705.             $customer $customerRepository->findOneBy(["user"=>$currentUser]);
  706.             if(!$customer){
  707.                 $customer = new Customer();
  708.             }
  709.         }
  710.         
  711.          
  712.         
  713.         $adressCollectes $request->query->get("adressCollectes");
  714.         $delivery $request->query->get("delivery");
  715.         $firstName $request->query->get("firstName");
  716.         $lastName $request->query->get("lastName");
  717.         $companyName $request->query->get("companyName");
  718.         $address $request->query->get("address");
  719.         $city $request->query->get("city");
  720.         $departement $departementRepository->find((int)$request->query->get("department"))->getName();
  721.         $postcode $request->query->get("postcode");
  722.         $email $request->query->get("email");
  723.         $tel $request->query->get("tel");
  724.         $comment $request->query->get("comment");
  725.         $amount $request->query->get("amount");
  726.         $weight $request->query->get("weight");
  727.         $priceWeight  $request->query->get("priceWeight");
  728.         $vendeur $request->query->get("vendeur");
  729.               
  730.         $order = new Order();
  731.         
  732.        
  733.         if($request->query->get("customerAdresseShipping")){
  734.             $customerAddress $customerAddressRepository->find((int)$request->query->get("customerAdresseShipping"));
  735.             if($customerAddress){
  736.                 
  737.                 $firstName $customerAddress->getCustomer()->getFirstName();
  738.                 $lastName $customerAddress->getCustomer()->getLastName();
  739.                 $companyName $customerAddress->getCompanyName();
  740.                 $address $customerAddress->getAddress();
  741.                 $city $customerAddress->getCity();
  742.                 $departement $customerAddress->getDepartement();
  743.                 $postcode $customerAddress->getPostCode();
  744.                 if(!$email){
  745.                     $email $customerAddress->getCustomer()->getEmail();
  746.                 }
  747.                 if($customerAddress->getEmail()){
  748.                     $email $customerAddress->getEmail();
  749.                 }
  750.                 $email $email ;
  751.                 $tel $customerAddress->getPhone();
  752.             }
  753.         }
  754.         if($request->query->get("isBilling") and $request->query->get("isBilling")=="on"){
  755.             
  756.        
  757.         if($request->query->get("customerAdresseBilling")){
  758.             $customerAddressBilling $customerAddressRepository->find((int)$request->query->get("customerAdresseBilling"));
  759.             if($customerAddress){
  760.                 $firstNameBilling $customerAddressBilling->getCustomer()->getFirstName();
  761.                 $lastNameBilling $customerAddressBilling->getCustomer()->getLastName();
  762.                 $companyNameBilling $customerAddressBilling->getCompanyName();
  763.                 $addressBilling $customerAddressBilling->getAddress();
  764.                 $cityBilling $customerAddressBilling->getCity();
  765.                 $departementBilling $customerAddressBilling->getDepartement();
  766.                 $postcodeBilling $customerAddressBilling->getPostCode();
  767.                 if(!$email){
  768.                     $email $customerAddress->getCustomer()->getEmail();
  769.                 }
  770.                 if($customerAddress->getEmail()){
  771.                     $email $customerAddress->getEmail();
  772.                 }
  773.                 $emailBilling $email ;
  774.                 $telBilling $customerAddressBilling->getPhone();
  775.             }
  776.         //Billing : BySamir
  777.         //Il manque la creation de facturation dans l'order
  778.         }
  779.     }
  780.         $order->setFirstName($firstName);
  781.         $order->setLastName($lastName);
  782.         $order->setCompanyName($companyName);
  783.         $order->setAddress($address);
  784.         $order->setCity($city);
  785.         $order->setCountry("Maroc");
  786.         $order->setDepartment($departement);
  787.         $order->setPostcode($postcode);
  788.         $order->setEmail($email);
  789.         $order->setTel($tel);
  790.         $order->setWeight($weight);
  791.         $order->setPriceWeight($priceWeight);
  792.        
  793.         $order->setComment($comment);
  794.         foreach((array)$request->query->get("orderItems") as $singleOrderItem){
  795.             $orderItem = new OrderItem();
  796.             $product $productFrontRepository->find((int)$singleOrderItem["id"]);
  797.             // TODO BySamir : Check if product in DB
  798.             // TODO BySamir : Check if stock existe 
  799.             // TODO BySamir : Else redirection to message
  800.             
  801.             if($product){
  802.                 $orderItem->setProduct($product);
  803.                 $orderItem->setPrice($product->getPrice());
  804.                 $orderItem->setQuantity($singleOrderItem["quantity"]);
  805.                 $order->addOrderItem($orderItem);
  806.             }
  807.         }
  808.         $customer->setFirstName($firstName);
  809.         $customer->setLastName($lastName);
  810.         $customer->setAddress($address);
  811.         $customer->setEmail($email);
  812.         $customer->setCompanyName($companyName);
  813.         $customer->setPhone($tel);
  814.         $order->setCustomer($customer);
  815.         $em $this->getDoctrine()->getManager();
  816.         $em->persist($order);
  817.         $em->flush();
  818.         /* hire */
  819.         if($vendeur != ""){
  820.              
  821.             $vendeurs explode(","$vendeur);
  822.              $data_vendor=array_filter($vendeurs);
  823.                
  824.             foreach($data_vendor as $i =>$key) {
  825.     
  826.                 $vendor $vendorRepository->findBy(["id"=>$data_vendor]);
  827.                 
  828.     
  829.                   $transport = (new \Swift_SmtpTransport('omav2.heberdomaine.net'465'ssl'))
  830.                   ->setUsername('devomall@fibysen.com')
  831.                   ->setPassword('devomall2022')
  832.                   ;
  833.           
  834.                   $mailer = new \Swift_Mailer($transport);
  835.           
  836.                   $message = (new \Swift_Message("Service Omall"))
  837.                  ->setFrom(['contact@omall.ma'=>"O'Mall"])
  838.                  ->setTo([$vendor[$i]->getEmail()=>"Une commande a été payer de la plate forme omall"])
  839.                   ->setBody(
  840.                   $this->renderView(
  841.                      '@Flexy/FrontBundle/templates/registration/mail_vendorOffer.html.twig',
  842.                      [   
  843.                          "commande"=>"CMD221000".$order->getId(),
  844.                          
  845.                          ]           
  846.                   ),
  847.                       'text/html'
  848.                   );
  849.           
  850.                   
  851.                   $mailer->send($message); 
  852.       
  853.             }
  854.     
  855.             
  856.          
  857.             }
  858.          
  859.         $paymentMethods $paymentMethodRepository->findBy(["isEnabled"=>true]);
  860.         $paymentMethod $request->query->get("paymentMethod");
  861.         if($paymentMethod == "1" or   $paymentMethod == "2"){
  862.       $order $this->getDoctrine()->getRepository(Order::class)->find($order);
  863.          if($paymentMethod == "1"){
  864.          $order->setStatusPayment("PAL");
  865.         }else{
  866.           $order->setStatusPayment("VB");
  867.         }
  868.          
  869.          $entityManager $this->getDoctrine()->getManager();
  870.          $entityManager->persist($order);
  871.          $entityManager->flush();
  872.          $adress explode("|"$adressCollectes);
  873.         foreach($adress as $i =>$key) {
  874.            if(count($adress) > 1) {
  875.             $poids=($weight/2);
  876.             }else{
  877.              $poids=$weight;
  878.             }
  879.             $time = new \DateTime();        
  880.             $ch curl_init();
  881.          
  882.             $trk="TSST598267".$i.$order->getId();
  883.                 $jsonString  =' {
  884.                   "service_type": "Parcel",
  885.                   "service_level": "Nextday",
  886.                   "requested_tracking_number": "'.$trk.'",
  887.                   "reference": {
  888.                       "merchant_order_number": "SHIP-1234-56789"
  889.                   },
  890.                   "from": {
  891.                       "name": "DP IMMO, OMALL",
  892.                       "phone_number": "+212 623 321 345",
  893.                       "email": "contact.info@o-mall.ma",
  894.                       "address": {
  895.                           "address1":"'.$key.'",
  896.                           "address2": "",
  897.                           "area": "Taman Sri Delima",
  898.                           "city": "",
  899.                           "state": "",
  900.                           "address_type": "office",
  901.                           "country": "MA",
  902.                           "postcode": "20000"
  903.                       }
  904.                   },
  905.                   "to": {
  906.                       "name": "'.$firstName.' '.$lastName.'",
  907.                       "phone_number": "'.$tel.'",
  908.                       "email": "'.$email.'",
  909.                       "address": {
  910.                           "address1": "'.$address.'",
  911.                           "address2": "",
  912.                           "area": "Damansara Perdana",
  913.                           "city": "'.$city.'", 
  914.                           "state": "'.$departement.'",
  915.                           "address_type": "home",
  916.                           "country": "MA",
  917.                           "postcode": "20000"
  918.                       }
  919.                   },
  920.                   "parcel_job": {
  921.                       "is_pickup_required": true,
  922.                       "pickup_address_id": "65431",
  923.                       "pickup_service_type": "Scheduled",
  924.                       "pickup_service_level": "Standard",
  925.                       "pickup_date": "'.$time->format('Y-m-d').'",
  926.                       "pickup_timeslot": {
  927.                           "start_time": "09:00",
  928.                           "end_time": "18:00",
  929.                           "timezone": "Africa/Casablanca"
  930.                       },
  931.                       "pickup_instructions": "Pickup with care!",
  932.                       "delivery_instructions": "If recipient is not around, leave parcel in power riser.",
  933.                       "delivery_start_date": "'.$time->format('Y-m-d').'",
  934.                       "delivery_timeslot": {
  935.                           "start_time": "09:00",
  936.                           "end_time": "12:00",
  937.                           "timezone": "Africa/Casablanca"
  938.                       },
  939.                       "dimensions": {
  940.                           "weight": "'.$poids.'"
  941.                       } ,
  942.                        "items": [
  943.                           {
  944.                               "item_description": "Sample description",
  945.                               "quantity": 1,
  946.                               "is_dangerous_good": false
  947.                           }
  948.                       ]
  949.                      
  950.                   }
  951.               }';
  952.               
  953.               $jayParsedAry json_encode($jsonString);    
  954.               $tokenRepository $accessTokenExpirationRepository->findAll()[0];
  955.               curl_setopt($chCURLOPT_URL"https://api.chronodiali.ma/ma/4.1/orders");
  956.               curl_setopt($chCURLOPT_POST1);
  957.               curl_setopt($chCURLOPT_CUSTOMREQUEST'POST');
  958.         
  959.               curl_setopt($chCURLOPT_POSTFIELDS$jsonString);
  960.               curl_setopt($chCURLOPT_RETURNTRANSFERtrue);
  961.               curl_setopt(
  962.                 $ch,
  963.                 CURLOPT_HTTPHEADER,
  964.                 [
  965.                   'User-Agent: PHP Script',
  966.                   'Content-Type: application/json;charset=utf-8',
  967.                   'Authorization: Bearer ' .$accessTokenExpirationRepository->findOneBy([])->getToken()
  968.                 ]
  969.               );
  970.               $response curl_exec($ch);
  971.               $decodedResponse json_decode($response,true);
  972.               curl_close($ch);
  973.             }
  974.               //dd($decodedResponse); 
  975.              // dd($decodedResponse["requested_tracking_number"]);
  976.               $tracking="";
  977.               $tracking=$decodedResponse["requested_tracking_number"];
  978.             
  979.         
  980.         
  981.             return $this->render('@Flexy\FrontBundle/templates/checkout/ajax/_paymentResultNoPay.html.twig',[
  982.                 "chronodyali"=>$tracking,
  983.                 "order"=>$order->getId(),
  984.                 "amount"=>$amount,
  985.                 "email"=>$email,
  986.                 
  987.             ]);
  988.         } else {
  989.         return $this->render('@Flexy\FrontBundle/templates/checkout/payment.html.twig',[
  990.             "order"=>$order,
  991.             "amount"=>$amount,
  992.             "delivery"=>$delivery,
  993.             "adressCollectes"=>$adressCollectes,
  994.             "weight"=>$weight,
  995.         ]);
  996.         }
  997.     }
  998.     #[Route('/departements/ajax'name'departements_ajax')]
  999.     public function ajaxDeparatements(Request $request,CityRepository $cityRepository){
  1000.         //cityID
  1001.         $cityParam $request->query->get("city");
  1002.         $city $cityRepository->findOneBy(["name"=>$cityParam]);
  1003.         if(!$city){
  1004.             $city $cityRepository->find((int)$cityParam);
  1005.         }
  1006.         $departemets = [];
  1007.         if($city){
  1008.             $departemets $city->getDepartements();
  1009.         }
  1010.         return $this->render("@Flexy/FrontBundle/templates/checkout/ajax/_departementsResult.html.twig",[
  1011.             "departements"=>$departemets
  1012.         ]);
  1013.     }
  1014. }