/** * Populate QuoteDetails object from Address object * * @param Address $address * @param ItemDataObject[] $itemDataObjects * @return \Magento\Tax\Service\V1\Data\QuoteDetails */ protected function prepareQuoteDetails(Address $address, $itemDataObjects) { $items = $this->_getAddressItems($address); if (!count($items)) { return $this->quoteDetailsBuilder->create(); } $this->populateAddressData($this->quoteDetailsBuilder, $address); //Set customer tax class $this->quoteDetailsBuilder->setCustomerTaxClassKey($this->quoteDetailsBuilder->getTaxClassKeyBuilder()->setType(TaxClassKey::TYPE_ID)->setValue($address->getQuote()->getCustomerTaxClassId())->create()); $this->quoteDetailsBuilder->setItems($itemDataObjects); $this->quoteDetailsBuilder->setCustomerId($address->getQuote()->getCustomerId()); $quoteDetails = $this->quoteDetailsBuilder->create(); return $quoteDetails; }
/** * Populate QuoteDetails object from Address object * * @param Address $address * @param bool $useBaseCurrency * @return \Magento\Tax\Service\V1\Data\QuoteDetails */ protected function prepareQuoteDetails(Address $address, $useBaseCurrency) { $items = $this->_getAddressItems($address); if (!count($items)) { return $this->quoteDetailsBuilder->create(); } $addressBuilder = $this->quoteDetailsBuilder->getAddressBuilder(); //Set billing address $this->quoteDetailsBuilder->setBillingAddress($this->mapAddress($addressBuilder, $address->getQuote()->getBillingAddress())); //Set shipping address $this->quoteDetailsBuilder->setShippingAddress($this->mapAddress($addressBuilder, $address)); //Set customer tax class $this->quoteDetailsBuilder->setCustomerTaxClassId($address->getQuote()->getCustomerTaxClassId()); //Populate with items $priceIncludesTax = $this->_config->priceIncludesTax($this->_store); $itemBuilder = $this->quoteDetailsBuilder->getItemBuilder(); $itemDataObjects = []; foreach ($items as $item) { if ($item->getParentItem()) { continue; } if ($item->getHasChildren() && $item->isChildrenCalculated()) { $parentItemDataObject = $this->mapItem($itemBuilder, $item, $priceIncludesTax, $useBaseCurrency); $itemDataObjects[] = $parentItemDataObject; foreach ($item->getChildren() as $child) { $childItemDataObject = $this->mapItem($itemBuilder, $child, $priceIncludesTax, $useBaseCurrency, $parentItemDataObject->getCode()); $itemDataObjects[] = $childItemDataObject; } } else { $itemDataObject = $this->mapItem($itemBuilder, $item, $priceIncludesTax, $useBaseCurrency); $itemDataObjects[] = $itemDataObject; } } if ($this->includeShipping()) { //Add shipping as an item if (!$address->getShippingTaxCalculationAmount() || $address->getShippingTaxCalculationAmount() <= 0) { //Save the original shipping amount because shipping amount will be overridden //with shipping amount excluding tax $address->setShippingTaxCalculationAmount($address->getShippingAmount()); $address->setBaseShippingTaxCalculationAmount($address->getBaseShippingAmount()); } if ($address->getShippingTaxCalculationAmount() > 0) { $itemBuilder->setType(self::SHIPPING_ITEM_TYPE); $itemBuilder->setCode(self::SHIPPING_ITEM_CODE); $itemBuilder->setQuantity(1); if ($useBaseCurrency) { $itemBuilder->setUnitPrice($address->getBaseShippingTaxCalculationAmount()); } else { $itemBuilder->setUnitPrice($address->getShippingTaxCalculationAmount()); } if ($address->getShippingDiscountAmount()) { if ($useBaseCurrency) { $itemBuilder->setDiscountAmount($address->getBaseShippingDiscountAmount()); } else { $itemBuilder->setDiscountAmount($address->getShippingDiscountAmount()); } } $itemBuilder->setTaxClassId($this->_config->getShippingTaxClass($this->_store)); $itemBuilder->setTaxIncluded($this->_config->shippingPriceIncludesTax($this->_store)); $itemDataObjects[] = $itemBuilder->create(); } } $this->quoteDetailsBuilder->setItems($itemDataObjects); $quoteDetails = $this->quoteDetailsBuilder->create(); return $quoteDetails; }