src/Services/Order/PricePromocodeForOnlineOrder.php line 20

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace Slivki\Services\Order;
  4. use Doctrine\ORM\EntityManagerInterface;
  5. use Slivki\Entity\AbstractOrderBase;
  6. use Slivki\Entity\FoodOrder;
  7. use Slivki\Entity\Offer;
  8. use Slivki\Repository\OfferRepository;
  9. use function array_keys;
  10. use function explode;
  11. final class PricePromocodeForOnlineOrder
  12. {
  13.     private OfferRepository $offerRepository;
  14.     public function __construct(EntityManagerInterface $entityManager)
  15.     {
  16.         $this->offerRepository $entityManager->getRepository(Offer::class);
  17.     }
  18.     public function getPrice(AbstractOrderBase $orderOffer $offerfloat $codesCountfloat $orderAmount): float
  19.     {
  20.         $codeCost = (float) $this->offerRepository->getCodeCost($offer$codesCount);
  21.         if (!$order instanceof FoodOrder) {
  22.             return $codeCost;
  23.         }
  24.         $settings $offer->getOnlineOrderSettings();
  25.         if ($settings === null || empty($settings->getPriceCodeDependsOnOrder())) {
  26.             return $codeCost;
  27.         }
  28.         $prices json_decode($settings->getPriceCodeDependsOnOrder(), true512JSON_THROW_ON_ERROR);
  29.         foreach ($prices as $price) {
  30.             $range array_keys($price)[0];
  31.             $range explode('-'$range);
  32.             $min = (float) $range[0];
  33.             $max = (float) $range[1];
  34.             if ($orderAmount >= $min && $orderAmount <= $max) {
  35.                 return $price[$range[0] . '-' $range[1]];
  36.             }
  37.         }
  38.         return $codeCost;
  39.     }
  40. }