示例#1
0
 /**
  * Add AvaTax specific extension attribute fields to a \Magento\Tax\Model\Sales\Quote\ItemDetails object
  *
  * @param \Magento\Tax\Api\Data\QuoteDetailsItemInterface $quoteDetailsItem
  * @param $avaTaxItemCode
  * @param $avaTaxTaxCode
  * @param $avaTaxDescription
  * @return $this
  */
 protected function addExtensionAttributesToTaxQuoteDetailsItem(\Magento\Tax\Api\Data\QuoteDetailsItemInterface $quoteDetailsItem, $avaTaxItemCode, $avaTaxTaxCode, $avaTaxDescription)
 {
     /** @var \Magento\Tax\Api\Data\QuoteDetailsItemExtensionInterface $extensionAttribute */
     $extensionAttribute = $quoteDetailsItem->getExtensionAttributes() ? $quoteDetailsItem->getExtensionAttributes() : $this->extensionFactory->create();
     $extensionAttribute->setAvataxItemCode($avaTaxItemCode);
     $extensionAttribute->setAvataxTaxCode($avaTaxTaxCode);
     $extensionAttribute->setAvataxDescription($avaTaxDescription);
     $quoteDetailsItem->setExtensionAttributes($extensionAttribute);
     return $this;
 }
 /**
  * Calculate the total quantity for all items and set the total quantity on the extension attribute object
  *
  * Total quantities are calculated here because quantity is sometimes determined by multiplying
  * child * parent quantity, so it's necessary to have all items in order to calculate this.
  *
  * @param \Magento\Tax\Api\Data\QuoteDetailsItemInterface[] $items
  * @return $this
  */
 public function calculateTotalQuantities($items)
 {
     $keyedItems = $this->getKeyedItems($items);
     $childrenItems = $this->getChildrenItems($items);
     $processedItems = [];
     /** @var \Magento\Tax\Api\Data\QuoteDetailsItemInterface $item */
     foreach ($keyedItems as $item) {
         if (isset($childrenItems[$item->getCode()])) {
             /** @var \Magento\Tax\Api\Data\QuoteDetailsItemInterface $childItem */
             foreach ($childrenItems[$item->getCode()] as $childItem) {
                 $processedItems[] = $childItem;
             }
         }
         $processedItems[] = $item;
     }
     foreach ($processedItems as $processedItem) {
         $extensionAttribute = $processedItem->getExtensionAttributes() ? $processedItem->getExtensionAttributes() : $this->extensionFactory->create();
         $totalQuantity = $this->calculateTotalQuantity($processedItem, $keyedItems);
         $extensionAttribute->setTotalQuantity($totalQuantity);
         $processedItem->setExtensionAttributes($extensionAttribute);
     }
     return $this;
 }