/** * Map item extra taxables * * @param \Magento\Tax\Api\Data\QuoteDetailsItemInterfaceFactory $itemDataObjectFactory * @param AbstractItem $item * @param bool $priceIncludesTax * @param bool $useBaseCurrency * @return \Magento\Tax\Api\Data\QuoteDetailsItemInterface[] */ public function mapItemExtraTaxables(\Magento\Tax\Api\Data\QuoteDetailsItemInterfaceFactory $itemDataObjectFactory, AbstractItem $item, $priceIncludesTax, $useBaseCurrency) { $itemDataObjects = []; $extraTaxables = $item->getAssociatedTaxables(); if (!$extraTaxables) { return []; } foreach ($extraTaxables as $extraTaxable) { $extraTaxableIncludesTax = isset($extraTaxable['price_includes_tax']) ? $extraTaxable['price_includes_tax'] : $priceIncludesTax; if ($useBaseCurrency) { $unitPrice = $extraTaxable[self::KEY_ASSOCIATED_TAXABLE_BASE_UNIT_PRICE]; } else { $unitPrice = $extraTaxable[self::KEY_ASSOCIATED_TAXABLE_UNIT_PRICE]; } /** @var \Magento\Tax\Api\Data\QuoteDetailsItemInterface $itemDataObject */ $itemDataObject = $itemDataObjectFactory->create(); $itemDataObject->setCode($extraTaxable[self::KEY_ASSOCIATED_TAXABLE_CODE])->setType($extraTaxable[self::KEY_ASSOCIATED_TAXABLE_TYPE])->setQuantity($extraTaxable[self::KEY_ASSOCIATED_TAXABLE_QUANTITY])->setTaxClassKey($this->taxClassKeyDataObjectFactory->create()->setType(TaxClassKeyInterface::TYPE_ID)->setValue($extraTaxable[self::KEY_ASSOCIATED_TAXABLE_TAX_CLASS_ID]))->setUnitPrice($unitPrice)->setIsTaxIncluded($extraTaxableIncludesTax)->setAssociatedItemCode($item->getTaxCalculationItemId()); $itemDataObjects[] = $itemDataObject; } return $itemDataObjects; }