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