src/Ecommerce/Cart/PriceModificator/Shipping.php line 70

Open in your IDE?
  1. <?php
  2. /**
  3.  * Pimcore
  4.  *
  5.  * This source file is available under two different licenses:
  6.  * - GNU General Public License version 3 (GPLv3)
  7.  * - Pimcore Enterprise License (PEL)
  8.  * Full copyright and license information is available in
  9.  * LICENSE.md which is distributed with this source code.
  10.  *
  11.  *  @copyright  Copyright (c) Pimcore GmbH (http://www.pimcore.org)
  12.  *  @license    http://www.pimcore.org/license     GPLv3 and PEL
  13.  */
  14. namespace App\Ecommerce\Cart\PriceModificator;
  15. use App\Model\Product\AccessoryPart;
  16. use App\Model\Product\Car;
  17. use Pimcore\Bundle\EcommerceFrameworkBundle\CartManager\CartInterface;
  18. use Pimcore\Bundle\EcommerceFrameworkBundle\PriceSystem\ModificatedPrice;
  19. use Pimcore\Bundle\EcommerceFrameworkBundle\PriceSystem\ModificatedPriceInterface;
  20. use Pimcore\Bundle\EcommerceFrameworkBundle\PriceSystem\PriceInterface;
  21. use Pimcore\Bundle\EcommerceFrameworkBundle\PriceSystem\TaxManagement\TaxEntry;
  22. use Pimcore\Bundle\EcommerceFrameworkBundle\Type\Decimal;
  23. use Symfony\Component\OptionsResolver\OptionsResolver;
  24. class Shipping extends \Pimcore\Bundle\EcommerceFrameworkBundle\CartManager\CartPriceModificator\Shipping
  25. {
  26.     /**
  27.      * @var Decimal
  28.      */
  29.     protected $baseCharge;
  30.     /**
  31.      * @var Decimal
  32.      */
  33.     protected $carCharge;
  34.     protected function processOptions(array $options)
  35.     {
  36.         $this->baseCharge Decimal::create($options['baseCharge']);
  37.         $this->carCharge Decimal::create($options['carCharge']);
  38.     }
  39.     protected function configureOptions(OptionsResolver $resolver)
  40.     {
  41.         $resolver->setDefaults([
  42.             'baseCharge' => 10,
  43.             'carCharge' => 200,
  44.         ]);
  45.     }
  46.     /**
  47.      * @return string
  48.      */
  49.     public function getName()
  50.     {
  51.         return 'Shipping';
  52.     }
  53.     /**
  54.      * function which modifies the current sub total price
  55.      *
  56.      * @param PriceInterface $currentSubTotal - current sub total which is modified and returned
  57.      * @param CartInterface $cart - cart
  58.      *
  59.      * @return ModificatedPriceInterface
  60.      */
  61.     public function modify(PriceInterface $currentSubTotalCartInterface $cart)
  62.     {
  63.         $carCount 0;
  64.         $hasAccessories false;
  65.         foreach ($cart->getItems() as $cartItem) {
  66.             if ($cartItem->getProduct() instanceof Car) {
  67.                 $carCount += $cartItem->getCount();
  68.             }
  69.             if ($cartItem->getProduct() instanceof AccessoryPart) {
  70.                 $hasAccessories true;
  71.             }
  72.         }
  73.         $shippingCost Decimal::zero();
  74.         if ($hasAccessories) {
  75.             $shippingCost $shippingCost->add($this->baseCharge);
  76.         }
  77.         $shippingCost $shippingCost->add($this->carCharge->mul($carCount));
  78.         $modificatedPrice = new ModificatedPrice($shippingCost$currentSubTotal->getCurrency());
  79.         $taxClass $this->getTaxClass();
  80.         if ($taxClass) {
  81.             $modificatedPrice->setTaxEntryCombinationMode($taxClass->getTaxEntryCombinationType());
  82.             $modificatedPrice->setTaxEntries(TaxEntry::convertTaxEntries($taxClass));
  83.             $modificatedPrice->setGrossAmount($shippingCosttrue);
  84.         }
  85.         return $modificatedPrice;
  86.     }
  87.     public function setCharge(Decimal $charge)
  88.     {
  89.         if ($charge->isZero()) {
  90.             $this->baseCharge Decimal::zero();
  91.             $this->carCharge Decimal::zero();
  92.         }
  93.     }
  94. }