src/IlaveU/Apps/POSBundle/Controller/POSApiController.php line 18

  1. <?php
  2. namespace App\IlaveU\Apps\POSBundle\Controller;
  3. use App\IlaveU\ShopBundle\Entity\Order\Order;
  4. use App\IlaveU\ShopBundle\Entity\Shipping\ShippingMethod;
  5. use App\IlaveU\ShopBundle\Service\IlaveUShopProvider;
  6. use Doctrine\Persistence\ManagerRegistry;
  7. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  8. use Symfony\Component\HttpFoundation\Request;
  9. use Symfony\Component\HttpFoundation\Response;
  10. use Symfony\Component\Routing\Annotation\Route;
  11. class POSApiController extends AbstractController
  12. {
  13.     #[Route('/api/calculate-shipping-slots'name'calculateShippingSlots',methods:["POST","GET"])]
  14.     public function calculateShippingSlots(
  15.         IlaveUShopProvider $ilaveShopProvider,
  16.         Request $request,
  17.         ManagerRegistry $doctrine
  18.     ) {
  19.         $contentJsonRequest = [];
  20.         if ($request->getContentType() == 'json' and $request->getContent()) {
  21.             $contentJsonRequest json_decode($request->getContent(), true512JSON_THROW_ON_ERROR);
  22.             if ($contentJsonRequest) {
  23.                 $request->request->replace($contentJsonRequest);
  24.             } else {
  25.                 return $this->json([
  26.                     'status' => 'error',
  27.                     'message' => 'Content is not well formated',
  28.                 ]);
  29.             }
  30.         }
  31.         $shippingMethodId = (int) ($request->request->get('shippingMethodId')
  32.             ?? $request->request->get('shippingMethod')
  33.             ?? 0);
  34.         if ($shippingMethodId 0) {
  35.             $shippingMethod $doctrine->getManager()
  36.                 ->getRepository(ShippingMethod::class)
  37.                 ->find($shippingMethodId);
  38.             if (!$shippingMethod) {
  39.                 return $this->json([
  40.                     'status' => 'error',
  41.                     'message' => 'Mode de livraison introuvable',
  42.                 ], 404);
  43.             }
  44.             $collectPreview = new \DateTime($request->request->get('datetime') ?? 'now');
  45.             $shippingPreview $collectPreview;
  46.             if ($request->request->get('startDeliveryAt')) {
  47.                 $shippingPreview = new \DateTime($request->request->get('startDeliveryAt'));
  48.             } elseif ($request->request->get('startProcessingAt')) {
  49.                 $collectPreview = new \DateTime($request->request->get('startProcessingAt'));
  50.                 $shippingPreview = clone $collectPreview;
  51.             }
  52.             return $this->json($ilaveShopProvider->getOrderSlotsForMobile(
  53.                 $shippingMethod,
  54.                 $collectPreview,
  55.                 $shippingPreview,
  56.                 (string) $request->request->get('deliveryType''collecte-and-delivery')
  57.             ));
  58.         }
  59.         $useWorkingHours filter_var($request->request->get('useWorkingHours'false), FILTER_VALIDATE_BOOLEAN)
  60.             || $request->request->get('slotType') === 'delivery';
  61.         return $this->json($ilaveShopProvider->calculateShippingSlots(
  62.             new \DateTime($request->request->get('datetime') ?? 'now'),
  63.             (float) $request->request->get('interval'1),
  64.             (float) $request->request->get('duration'0),
  65.             (float) $request->request->get('offsetStartHours'0),
  66.             $useWorkingHours
  67.         ));
  68.     }
  69.     #[Route('/api/calculate-shipping-fees'name'calculateShippingFees',methods:["POST","GET"])]
  70.     public function calculateShippingFees(IlaveUShopProvider $ilaveShopProvider,Request $request,ManagerRegistry $doctrine)
  71.     {
  72.         $contentJsonRequest = [];
  73.         $result = [];
  74.         
  75.         if ($request->getContentType() == 'json' and $request->getContent()) {
  76.             $contentJsonRequest json_decode($request->getContent(),true512JSON_THROW_ON_ERROR);
  77.             if($contentJsonRequest){
  78.                 $request->request->replace($contentJsonRequest);
  79.             }else{
  80.                 return $this->json([
  81.                     "status"=>"error","message"=>"Content is not well formated"
  82.                 ]);
  83.             }
  84.             
  85.         }
  86.         $shippingMethod $doctrine->getManager()->getRepository(ShippingMethod::class)->find((int)$request->request->get("shippingMethodId"));
  87.         $deliveryType $request->request->get("deliveryType");
  88.         if($deliveryType == "on-store" and $shippingMethod->getCode() == "CLASSIQUE GRATUIT"){
  89.             return $this->json([
  90.                 "fees"=>0
  91.             ]);
  92.         }
  93.         return $this->json([
  94.             "fees"=>$ilaveShopProvider->calculateShippingFees(
  95.                 $shippingMethod,
  96.                 (float)$request->request->get("price"),
  97.                 true
  98.             )
  99.         ]);
  100.     }
  101.     
  102. }