vendor/pimcore/pimcore/bundles/EcommerceFrameworkBundle/CartManager/AbstractCartItem.php line 112

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 Commercial License (PCL)
  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 PCL
  13.  */
  14. namespace Pimcore\Bundle\EcommerceFrameworkBundle\CartManager;
  15. use Pimcore\Bundle\EcommerceFrameworkBundle\AvailabilitySystem\AvailabilityInterface;
  16. use Pimcore\Bundle\EcommerceFrameworkBundle\Model\AbstractSetProduct;
  17. use Pimcore\Bundle\EcommerceFrameworkBundle\Model\AbstractSetProductEntry;
  18. use Pimcore\Bundle\EcommerceFrameworkBundle\Model\CheckoutableInterface;
  19. use Pimcore\Bundle\EcommerceFrameworkBundle\Model\MockProduct;
  20. use Pimcore\Bundle\EcommerceFrameworkBundle\PriceSystem\PriceInfoInterface;
  21. use Pimcore\Bundle\EcommerceFrameworkBundle\PriceSystem\PriceInterface;
  22. use Pimcore\Model\DataObject;
  23. abstract class AbstractCartItem extends \Pimcore\Model\AbstractModel implements CartItemInterface
  24. {
  25.     /**
  26.      * flag needed for preventing call modified on cart when loading cart from storage
  27.      *
  28.      * @var bool
  29.      */
  30.     protected $isLoading false;
  31.     /**
  32.      * @var CheckoutableInterface|null
  33.      */
  34.     protected $product;
  35.     /**
  36.      * @var int|null
  37.      */
  38.     protected $productId;
  39.     /**
  40.      * @var string
  41.      */
  42.     protected $itemKey;
  43.     protected $count;
  44.     protected $comment;
  45.     /**
  46.      * @var string
  47.      */
  48.     protected $parentItemKey '';
  49.     protected $subItems null;
  50.     /**
  51.      * @var CartInterface|null
  52.      */
  53.     protected $cart;
  54.     protected $cartId;
  55.     /**
  56.      * @var int|null unix timestamp
  57.      */
  58.     protected $addedDateTimestamp;
  59.     public function __construct()
  60.     {
  61.         $this->setAddedDate(new \DateTime());
  62.     }
  63.     public function setCount($countbool $fireModified true)
  64.     {
  65.         if ($count 0) {
  66.             $count 0;
  67.         }
  68.         if ($this->count !== $count && $this->getCart() && !$this->isLoading && $fireModified) {
  69.             $this->getCart()->modified();
  70.         }
  71.         $this->count $count;
  72.     }
  73.     public function getCount()
  74.     {
  75.         return $this->count;
  76.     }
  77.     /**
  78.      * @param CheckoutableInterface $product
  79.      * @param bool $fireModified
  80.      */
  81.     public function setProduct(CheckoutableInterface $productbool $fireModified true)
  82.     {
  83.         if ($this->productId !== $product->getId() && $this->getCart() && !$this->isLoading && $fireModified) {
  84.             $this->getCart()->modified();
  85.         }
  86.         $this->product $product;
  87.         $this->productId $product->getId();
  88.     }
  89.     /**
  90.      * @return CheckoutableInterface
  91.      */
  92.     public function getProduct()
  93.     {
  94.         if ($this->product) {
  95.             return $this->product;
  96.         }
  97.         $product DataObject::getById($this->productId);
  98.         if ($product instanceof CheckoutableInterface) {
  99.             $this->product $product;
  100.         } else {
  101.             // actual product is not available or not checkoutable (e.g. deleted in Admin)
  102.             $product = new MockProduct();
  103.             $product->setId($this->productId);
  104.             $this->product $product;
  105.         }
  106.         return $this->product;
  107.     }
  108.     /**
  109.      * @param CartInterface $cart
  110.      */
  111.     public function setCart(CartInterface $cart)
  112.     {
  113.         $this->cart $cart;
  114.         $this->cartId $cart->getId();
  115.     }
  116.     /**
  117.      * @return CartInterface|null
  118.      */
  119.     abstract public function getCart();
  120.     /**
  121.      * @return int
  122.      */
  123.     public function getCartId()
  124.     {
  125.         return $this->cartId;
  126.     }
  127.     /**
  128.      * @param int $cartId
  129.      */
  130.     public function setCartId($cartId)
  131.     {
  132.         $this->cartId $cartId;
  133.     }
  134.     /**
  135.      * @return int
  136.      */
  137.     public function getProductId()
  138.     {
  139.         if (!is_null($this->productId)) {
  140.             return $this->productId;
  141.         }
  142.         return $this->getProduct()->getId();
  143.     }
  144.     /**
  145.      * @param int $productId
  146.      */
  147.     public function setProductId($productId)
  148.     {
  149.         if ($this->productId !== $productId && $this->getCart() && !$this->isLoading) {
  150.             $this->getCart()->modified();
  151.         }
  152.         $this->productId $productId;
  153.         $this->product null;
  154.     }
  155.     /**
  156.      * @param string $parentItemKey
  157.      */
  158.     public function setParentItemKey($parentItemKey)
  159.     {
  160.         $this->parentItemKey $parentItemKey;
  161.     }
  162.     /**
  163.      * @return string
  164.      */
  165.     public function getParentItemKey()
  166.     {
  167.         return $this->parentItemKey;
  168.     }
  169.     /**
  170.      * @param string $itemKey
  171.      */
  172.     public function setItemKey($itemKey)
  173.     {
  174.         $this->itemKey $itemKey;
  175.     }
  176.     /**
  177.      * @return string
  178.      */
  179.     public function getItemKey()
  180.     {
  181.         return $this->itemKey;
  182.     }
  183.     /**
  184.      * @param  CartItemInterface[] $subItems
  185.      *
  186.      * @return void
  187.      */
  188.     public function setSubItems($subItems)
  189.     {
  190.         $cart $this->getCart();
  191.         if ($cart && !$this->isLoading) {
  192.             $cart->modified();
  193.         }
  194.         foreach ($subItems as $item) {
  195.             if ($item instanceof AbstractCartItem) {
  196.                 $item->setParentItemKey($this->getItemKey());
  197.             }
  198.         }
  199.         $this->subItems $subItems;
  200.     }
  201.     /**
  202.      * @return PriceInterface
  203.      */
  204.     public function getPrice(): PriceInterface
  205.     {
  206.         return $this->getPriceInfo()->getPrice();
  207.     }
  208.     /**
  209.      * @return PriceInfoInterface
  210.      */
  211.     public function getPriceInfo(): PriceInfoInterface
  212.     {
  213.         if ($this->getProduct() instanceof AbstractSetProduct) {
  214.             $priceInfo $this->getProduct()->getOSPriceInfo($this->getCount(), $this->getSetEntries());
  215.         } else {
  216.             $priceInfo $this->getProduct()->getOSPriceInfo($this->getCount());
  217.         }
  218.         if ($priceInfo instanceof \Pimcore\Bundle\EcommerceFrameworkBundle\PricingManager\PriceInfoInterface) {
  219.             $priceInfo->getEnvironment()->setCart($this->getCart());
  220.             $priceInfo->getEnvironment()->setCartItem($this);
  221.         }
  222.         return $priceInfo;
  223.     }
  224.     /**
  225.      * @return AvailabilityInterface
  226.      */
  227.     public function getAvailabilityInfo()
  228.     {
  229.         if ($this->getProduct() instanceof AbstractSetProduct) {
  230.             return $this->getProduct()->getOSAvailabilityInfo($this->getCount(), $this->getSetEntries());
  231.         } else {
  232.             return $this->getProduct()->getOSAvailabilityInfo($this->getCount());
  233.         }
  234.     }
  235.     /**
  236.      * @return \Pimcore\Bundle\EcommerceFrameworkBundle\Model\AbstractSetProductEntry[]
  237.      */
  238.     public function getSetEntries()
  239.     {
  240.         $products = [];
  241.         if ($this->getSubItems()) {
  242.             foreach ($this->getSubItems() as $item) {
  243.                 $products[] = new AbstractSetProductEntry($item->getProduct(), $item->getCount());
  244.             }
  245.         }
  246.         return $products;
  247.     }
  248.     /**
  249.      * @param string $comment
  250.      */
  251.     public function setComment($comment)
  252.     {
  253.         $this->comment $comment;
  254.     }
  255.     /**
  256.      * @return string
  257.      */
  258.     public function getComment()
  259.     {
  260.         return $this->comment;
  261.     }
  262.     /**
  263.      * @return PriceInterface
  264.      */
  265.     public function getTotalPrice(): PriceInterface
  266.     {
  267.         return $this->getPriceInfo()->getTotalPrice();
  268.     }
  269.     /**
  270.      * @param \DateTime|null $date
  271.      */
  272.     public function setAddedDate(\DateTime $date null)
  273.     {
  274.         if ($date) {
  275.             $this->addedDateTimestamp intval($date->format('Uu'));
  276.         } else {
  277.             $this->addedDateTimestamp null;
  278.         }
  279.     }
  280.     /**
  281.      * @return \DateTime|null
  282.      */
  283.     public function getAddedDate()
  284.     {
  285.         $datetime null;
  286.         if ($this->addedDateTimestamp) {
  287.             $datetime \DateTime::createFromFormat('U'intval($this->addedDateTimestamp 1000000));
  288.         }
  289.         return $datetime;
  290.     }
  291.     /**
  292.      * @return int
  293.      */
  294.     public function getAddedDateTimestamp()
  295.     {
  296.         return $this->addedDateTimestamp;
  297.     }
  298.     /**
  299.      * @param int $time
  300.      */
  301.     public function setAddedDateTimestamp($time)
  302.     {
  303.         $this->addedDateTimestamp $time;
  304.     }
  305.     /**
  306.      * get item name
  307.      *
  308.      * @return string
  309.      */
  310.     public function getName()
  311.     {
  312.         return $this->getProduct()->getOSName();
  313.     }
  314.     /**
  315.      * Flag needed for preventing call modified on cart when loading cart from storage
  316.      * only for internal usage
  317.      *
  318.      * @param bool $isLoading
  319.      *
  320.      * @internal
  321.      */
  322.     public function setIsLoading(bool $isLoading)
  323.     {
  324.         $this->isLoading $isLoading;
  325.     }
  326. }