/** * 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; }