src/Shipping/Checker/TableRateShippingMethodEligibilityChecker.php line 18

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace App\Shipping\Checker;
  4. use App\Entity\Shipping\ShippingTableRate;
  5. use Sylius\Component\Core\Model\ShipmentInterface;
  6. use Sylius\Component\Shipping\Checker\ShippingMethodEligibilityCheckerInterface;
  7. use Sylius\Component\Shipping\Model\ShippingMethodInterface;
  8. use Sylius\Component\Shipping\Model\ShippingSubjectInterface;
  9. use Webgriffe\SyliusTableRateShippingPlugin\Calculator\TableRateShippingCalculator;
  10. use Webgriffe\SyliusTableRateShippingPlugin\Exception\RateNotFoundException;
  11. use Webgriffe\SyliusTableRateShippingPlugin\Resolver\TableRateResolverInterface;
  12. use Webmozart\Assert\Assert;
  13. final class TableRateShippingMethodEligibilityChecker implements ShippingMethodEligibilityCheckerInterface{
  14.     private ShippingMethodEligibilityCheckerInterface $eligibilityChecker;
  15.     private TableRateResolverInterface $tableRateResolver;
  16.     public function __construct(
  17.         ShippingMethodEligibilityCheckerInterface $eligibilityChecker,
  18.         TableRateResolverInterface $tableRateResolver
  19.     ) {
  20.         $this->eligibilityChecker $eligibilityChecker;
  21.         $this->tableRateResolver $tableRateResolver;
  22.     }
  23.     public function isEligible(
  24.         ShippingSubjectInterface $subject,
  25.         ShippingMethodInterface $method
  26.     ): bool {
  27.         if (!$this->eligibilityChecker->isEligible($subject$method)) {
  28.             return false;
  29.         }
  30.         if ($method->getCalculator() !== TableRateShippingCalculator::TYPE) {
  31.             return true;
  32.         }
  33.         Assert::isInstanceOf($subjectShipmentInterface::class);
  34.         /** @var ShippingTableRate $tableRate */
  35.         $tableRate $this->tableRateResolver->resolve($subject$method->getConfiguration());
  36.         $value 0;
  37.         if($tableRate->getType() === ShippingTableRate::TYPE_WEIGHT )
  38.             $value $subject->getShippingWeight();   //weight
  39.         elseif($tableRate->getType() === ShippingTableRate::TYPE_PRICE)
  40.             $value =  $subject->getOrder()->getItemsTotal();  //price
  41.         try {
  42.             $rate $tableRate->getRate($value);
  43.         } catch (RateNotFoundException $e) {
  44.             return false;
  45.         }
  46.         return \is_int($rate);
  47.     }
  48. }