src/Utils/Shipping/ShippingCosts/Service/FreeShippingChecker.php line 70

Open in your IDE?
  1. <?php
  2. namespace App\Utils\Shipping\ShippingCosts\Service;
  3. use App\Entity\Gos\PortalSettings;
  4. use Symfony\Component\HttpFoundation\RequestStack;
  5. class FreeShippingChecker
  6. {
  7.     private $request;
  8.     public function __construct(RequestStack $requestStack)
  9.     {
  10.         $this->request $requestStack->getCurrentRequest();
  11.     }
  12.     public function checkFreeShippingBasedOnPortal(&$price, &$totalShippingCosts$portal$skipPortalDiscount false): void
  13.     {
  14.         if ($portal instanceof PortalSettings)
  15.         {
  16.             $price['missingPriceForPortalFreeShipping'] = null;
  17.             $price['missingPriceForPortalFreeShippingType'] = 'brutto';
  18.             $price['enabledFreePostalCostByPortal'] = false;
  19.             $priceAfterFreePostageCost $this->getPriceAfterFreePostageCost($portal);
  20.             if ($priceAfterFreePostageCost !== null &&
  21.                 (
  22.                     (isset($totalShippingCosts['net']) && $totalShippingCosts['net'] > 0) ||
  23.                     (isset($totalShippingCosts['PostageCostNet']) && $totalShippingCosts['PostageCostNet'] > 0)
  24.                 ) && $skipPortalDiscount === false
  25.             ) {
  26.                 $price['enabledFreePostalCostByPortal'] = true;
  27.                 if (!$portal->getShowGrossPrice())
  28.                 {
  29.                     $priceToCheck $price['totalPriceAfterCouponNet'];
  30.                     $price['missingPriceForPortalFreeShippingType'] = 'netto';
  31.                 }
  32.                 else
  33.                 {
  34.                     $priceToCheck $price['totalPriceAfterCouponGross'];
  35.                 }
  36.                 if ($priceToCheck >= $priceAfterFreePostageCost)
  37.                 {
  38.                     if (isset($totalShippingCosts['net']))
  39.                     {
  40.                         $totalShippingCosts['net']   = $this->setFreeShippingCost($portal'net');
  41.                         $totalShippingCosts['gross'] = $this->setFreeShippingCost($portal'gross');
  42.                     }
  43.                     else
  44.                     {
  45.                         $totalShippingCosts['PostageCostNet']   = $this->setFreeShippingCost($portal'net');
  46.                         $totalShippingCosts['PostageCostGross'] = $this->setFreeShippingCost($portal'gross');
  47.                     }
  48.                 }
  49.                 else
  50.                 {
  51.                     $price['missingPriceForPortalFreeShipping'] = round($priceAfterFreePostageCost $priceToCheck2);
  52.                 }
  53.             }
  54.         }
  55.     }
  56.     private function getPriceAfterFreePostageCost(PortalSettings $portal): ?float
  57.     {
  58.         $priceAfterFreePostageCost $portal->getPriceAfterFreePostageCost();
  59.         //START A/B TESTS
  60.         if ($this->request !== null && $this->request->getSession()->get('lab') === 'dlvr')
  61.         {
  62.             $priceAfterFreePostageCost $portal->getTestPriceAfterFreePostageCost();
  63.         }
  64.         //END OF A/B TESTS
  65.         return $priceAfterFreePostageCost;
  66.     }
  67.     /**
  68.      * Free shipping on CMS is not as free as it might seem
  69.      *
  70.      * @return void
  71.      * @throws \Exception
  72.      */
  73.     private function setFreeShippingCost(PortalSettings $portalSettingsstring $type): float
  74.     {
  75.         if (!$portalSettings->getIsCmsPortal())
  76.         {
  77.             return 0;
  78.         }
  79.         switch ($type)
  80.         {
  81.             case 'net':
  82.                 return 1;
  83.             case 'gross':
  84.                 return 1.23;
  85.             default:
  86.                 return 0;
  87.         }
  88.     }
  89. }