/** * Map an item to item data object. Add AvaTax details to extension objects. * * @param QuoteDetailsItemInterfaceFactory $itemDataObjectFactory * @param Item\AbstractItem $item * @param bool $priceIncludesTax * @param bool $useBaseCurrency * @param string $parentCode * @return \Magento\Tax\Api\Data\QuoteDetailsItemInterface */ public function mapItem(QuoteDetailsItemInterfaceFactory $itemDataObjectFactory, Item\AbstractItem $item, $priceIncludesTax, $useBaseCurrency, $parentCode = null) { $quoteDetailsItem = parent::mapItem($itemDataObjectFactory, $item, $priceIncludesTax, $useBaseCurrency, $parentCode); $storeId = $item->getStore()->getId(); if (!$this->config->isModuleEnabled($storeId) || $this->config->getTaxMode($storeId) == Config::TAX_MODE_NO_ESTIMATE_OR_SUBMIT) { return $quoteDetailsItem; } /** @var \Magento\Tax\Api\Data\QuoteDetailsItemExtensionInterface $extensionAttribute */ $extensionAttribute = $quoteDetailsItem->getExtensionAttributes() ? $quoteDetailsItem->getExtensionAttributes() : $this->extensionFactory->create(); $product = $item->getProduct(); $taxCode = $this->taxClassHelper->getAvataxTaxCodeForProduct($product, $storeId); $itemCode = $this->taxClassHelper->getItemCodeOverride($product); if (!$itemCode) { $itemCode = $item->getSku(); } $extensionAttribute->setAvataxItemCode($itemCode); $extensionAttribute->setAvataxTaxCode($taxCode); $extensionAttribute->setAvataxDescription($item->getName()); $extensionAttribute->setAvataxRef1($this->taxClassHelper->getRef1ForProduct($product)); $extensionAttribute->setAvataxRef2($this->taxClassHelper->getRef2ForProduct($product)); $quoteDetailsItem->setExtensionAttributes($extensionAttribute); return $quoteDetailsItem; }