vendor/pimcore/pimcore/bundles/EcommerceFrameworkBundle/PriceSystem/AbstractPriceSystem.php line 59

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. /**
  4.  * Pimcore
  5.  *
  6.  * This source file is available under two different licenses:
  7.  * - GNU General Public License version 3 (GPLv3)
  8.  * - Pimcore Commercial License (PCL)
  9.  * Full copyright and license information is available in
  10.  * LICENSE.md which is distributed with this source code.
  11.  *
  12.  *  @copyright  Copyright (c) Pimcore GmbH (http://www.pimcore.org)
  13.  *  @license    http://www.pimcore.org/license     GPLv3 and PCL
  14.  */
  15. namespace Pimcore\Bundle\EcommerceFrameworkBundle\PriceSystem;
  16. use Pimcore\Bundle\EcommerceFrameworkBundle\CartManager\CartPriceModificator\CartPriceModificatorInterface;
  17. use Pimcore\Bundle\EcommerceFrameworkBundle\Model\CheckoutableInterface;
  18. use Pimcore\Bundle\EcommerceFrameworkBundle\PriceSystem\TaxManagement\TaxCalculationService;
  19. use Pimcore\Bundle\EcommerceFrameworkBundle\PriceSystem\TaxManagement\TaxEntry;
  20. use Pimcore\Bundle\EcommerceFrameworkBundle\PricingManager\PricingManagerInterface;
  21. use Pimcore\Bundle\EcommerceFrameworkBundle\PricingManager\PricingManagerLocatorInterface;
  22. use Pimcore\Model\DataObject\OnlineShopTaxClass;
  23. use Pimcore\Model\WebsiteSetting;
  24. abstract class AbstractPriceSystem implements PriceSystemInterface
  25. {
  26.     /**
  27.      * @var PricingManagerLocatorInterface
  28.      */
  29.     protected $pricingManagers;
  30.     public function __construct(PricingManagerLocatorInterface $pricingManagers)
  31.     {
  32.         $this->pricingManagers $pricingManagers;
  33.     }
  34.     /**
  35.      * {@inheritdoc}
  36.      */
  37.     public function getPriceInfo(CheckoutableInterface $product$quantityScale null$products null): PriceInfoInterface
  38.     {
  39.         return $this->initPriceInfoInstance($quantityScale$product$products);
  40.     }
  41.     /**
  42.      * Returns shop-instance specific implementation of priceInfo, override this method in your own price system to
  43.      * set any price values
  44.      *
  45.      * @param null|int|string $quantityScale Numeric or string (allowed values: PriceInfoInterface::MIN_PRICE)
  46.      * @param CheckoutableInterface $product
  47.      * @param CheckoutableInterface[] $products
  48.      *
  49.      * @return PriceInfoInterface
  50.      */
  51.     protected function initPriceInfoInstance($quantityScaleCheckoutableInterface $product$products)
  52.     {
  53.         $priceInfo $this->createPriceInfoInstance($quantityScale$product$products);
  54.         if ($quantityScale !== PriceInfoInterface::MIN_PRICE) {
  55.             $priceInfo->setQuantity($quantityScale);
  56.         }
  57.         $priceInfo->setProduct($product);
  58.         $priceInfo->setProducts($products);
  59.         $priceInfo->setPriceSystem($this);
  60.         // apply pricing rules
  61.         $priceInfoWithRules $this->getPricingManager()->applyProductRules($priceInfo);
  62.         return $priceInfoWithRules;
  63.     }
  64.     protected function getPricingManager(): PricingManagerInterface
  65.     {
  66.         return $this->pricingManagers->getPricingManager();
  67.     }
  68.     /**
  69.      * @param null|int|string $quantityScale Numeric or string (allowed values: PriceInfoInterface::MIN_PRICE)
  70.      * @param CheckoutableInterface $product
  71.      * @param CheckoutableInterface[] $products
  72.      *
  73.      * @return AbstractPriceInfo
  74.      */
  75.     abstract public function createPriceInfoInstance($quantityScaleCheckoutableInterface $product$products);
  76.     /**
  77.      * Sample implementation for getting the correct OnlineShopTaxClass. In this case Tax Class is retrieved from
  78.      * Website Setting and if no Website Setting is set it creates an empty new Tax Class.
  79.      *
  80.      * Should be overwritten in custom price systems with suitable implementation.
  81.      *
  82.      * @return OnlineShopTaxClass
  83.      */
  84.     protected function getDefaultTaxClass()
  85.     {
  86.         $taxClass WebsiteSetting::getByName('defaultTaxClass');
  87.         if ($taxClass) {
  88.             $taxClass $taxClass->getData();
  89.         }
  90.         if (empty($taxClass)) {
  91.             $taxClass = new OnlineShopTaxClass();
  92.             $taxClass->setTaxEntryCombinationType(TaxEntry::CALCULATION_MODE_COMBINE);
  93.         }
  94.         return $taxClass;
  95.     }
  96.     /**
  97.      * Returns OnlineShopTaxClass for given CheckoutableInterface.
  98.      *
  99.      * @param CheckoutableInterface $product
  100.      *
  101.      * @return OnlineShopTaxClass
  102.      */
  103.     public function getTaxClassForProduct(CheckoutableInterface $product)
  104.     {
  105.         return $this->getDefaultTaxClass();
  106.     }
  107.     /**
  108.      * Returns OnlineShopTaxClass for given CartPriceModificatorInterface
  109.      *
  110.      * @param CartPriceModificatorInterface $modificator
  111.      *
  112.      * @return OnlineShopTaxClass
  113.      */
  114.     public function getTaxClassForPriceModification(CartPriceModificatorInterface $modificator)
  115.     {
  116.         return $this->getDefaultTaxClass();
  117.     }
  118.     /**
  119.      * @return TaxCalculationService
  120.      */
  121.     protected function getTaxCalculationService()
  122.     {
  123.         return new TaxCalculationService();
  124.     }
  125. }