Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
Updater.php
Go to the documentation of this file.
1 <?php
7 
8 use Magento\Catalog\Model\ProductFactory;
10 use Magento\Framework\DataObject\Factory as ObjectFactory;
13 use Zend\Code\Exception\InvalidArgumentException;
14 
18 class Updater
19 {
23  protected $productFactory;
24 
28  protected $localeFormat;
29 
33  protected $objectFactory;
34 
40  private $serializer;
41 
48  public function __construct(
49  ProductFactory $productFactory,
51  ObjectFactory $objectFactory,
52  \Magento\Framework\Serialize\Serializer\Json $serializer = null
53  ) {
54  $this->productFactory = $productFactory;
55  $this->localeFormat = $localeFormat;
56  $this->objectFactory = $objectFactory;
57  $this->serializer = $serializer ?: \Magento\Framework\App\ObjectManager::getInstance()
58  ->get(\Magento\Framework\Serialize\Serializer\Json::class);
59  }
60 
71  public function update(Item $item, array $info)
72  {
73  if (!isset($info['qty'])) {
74  throw new InvalidArgumentException(__('The qty value is required to update quote item.'));
75  }
76  $itemQty = $info['qty'];
77  if ($item->getProduct()->getStockItem()) {
78  if (!$item->getProduct()->getStockItem()->getIsQtyDecimal()) {
79  $itemQty = (int)$info['qty'];
80  } else {
81  $item->setIsQtyDecimal(1);
82  }
83  }
84  $itemQty = $itemQty > 0 ? $itemQty : 1;
85  if (isset($info['custom_price'])) {
86  $this->setCustomPrice($info, $item);
87  } elseif ($item->hasData('custom_price')) {
88  $this->unsetCustomPrice($item);
89  }
90 
91  if (empty($info['action']) || !empty($info['configured'])) {
92  $noDiscount = !isset($info['use_discount']);
93  $item->setQty($itemQty);
94  $item->setNoDiscount($noDiscount);
95  $item->getProduct()->setIsSuperMode(true);
96  $item->getProduct()->unsSkipCheckRequiredOption();
97  $item->checkData();
98  }
99 
100  return $this;
101  }
102 
110  protected function setCustomPrice(array $info, Item $item)
111  {
112  $itemPrice = $this->parseCustomPrice($info['custom_price']);
114  $infoBuyRequest = $item->getBuyRequest();
115  if ($infoBuyRequest) {
116  $infoBuyRequest->setCustomPrice($itemPrice);
117 
118  $infoBuyRequest->setValue($this->serializer->serialize($infoBuyRequest->getData()));
119  $infoBuyRequest->setCode('info_buyRequest');
120  $infoBuyRequest->setProduct($item->getProduct());
121 
122  $item->addOption($infoBuyRequest);
123  }
124 
125  $item->setCustomPrice($itemPrice);
126  $item->setOriginalCustomPrice($itemPrice);
127  }
128 
135  protected function unsetCustomPrice(Item $item)
136  {
138  $infoBuyRequest = $item->getBuyRequest();
139  if ($infoBuyRequest->hasData('custom_price')) {
140  $infoBuyRequest->unsetData('custom_price');
141 
142  $infoBuyRequest->setValue($this->serializer->serialize($infoBuyRequest->getData()));
143  $infoBuyRequest->setCode('info_buyRequest');
144  $infoBuyRequest->setProduct($item->getProduct());
145  $item->addOption($infoBuyRequest);
146  }
147 
148  $item->unsetData('custom_price');
149  $item->unsetData('original_custom_price');
150  }
151 
158  protected function parseCustomPrice($price)
159  {
160  $price = $this->localeFormat->getNumber($price);
161  return $price > 0 ? $price : 0;
162  }
163 }
elseif(isset( $params[ 'redirect_parent']))
Definition: iframe.phtml:17
__()
Definition: __.php:13
$price
foreach( $_productCollection as $_product)() ?>" class $info
Definition: listing.phtml:52
update(Item $item, array $info)
Definition: Updater.php:71
__construct(ProductFactory $productFactory, FormatInterface $localeFormat, ObjectFactory $objectFactory, \Magento\Framework\Serialize\Serializer\Json $serializer=null)
Definition: Updater.php:48