/** * @param QuoteAddressToOrder $subject * @param OrderInterface $order * @return OrderInterface * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ public function afterConvert(QuoteAddressToOrder $subject, OrderInterface $order) { /** @var \Magento\Sales\Model\Order $order */ $taxes = $this->quoteAddress->getAppliedTaxes(); $extensionAttributes = $order->getExtensionAttributes(); if ($extensionAttributes == null) { $extensionAttributes = $this->orderExtensionFactory->create(); } if (!empty($taxes)) { $extensionAttributes->setAppliedTaxes($taxes); $extensionAttributes->setConvertingFromQuote(true); } $itemAppliedTaxes = $this->quoteAddress->getItemsAppliedTaxes(); if (!empty($itemAppliedTaxes)) { $extensionAttributes->setItemAppliedTaxes($itemAppliedTaxes); } $order->setExtensionAttributes($extensionAttributes); return $order; }
/** * @param QuoteAddressToOrder $subject * @param OrderInterface $order * @return OrderInterface * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ public function afterConvert(QuoteAddressToOrder $subject, OrderInterface $order) { /** @var \Magento\Sales\Model\Order $order */ $taxes = $this->quoteAddress->getAppliedTaxes(); if (is_array($taxes)) { if (is_array($order->getAppliedTaxes())) { $taxes = array_merge($order->getAppliedTaxes(), $taxes); } $order->setCustomAttribute('applied_taxes', $taxes); $order->setCustomAttribute('converting_from_quote', true); } $itemAppliedTaxes = $this->quoteAddress->getItemsAppliedTaxes(); if (is_array($itemAppliedTaxes)) { if (is_array($order->getItemAppliedTaxes())) { $itemAppliedTaxes = array_merge($order->getItemAppliedTaxes(), $itemAppliedTaxes); } $order->setCustomAttribute('item_applied_taxes', $itemAppliedTaxes); } return $order; }
/** * Verify fields in quote address * * @param \Magento\Quote\Model\Quote\Address $quoteAddress * @param array $expectedAddressData * @return $this */ protected function verifyQuoteAddress($quoteAddress, $expectedAddressData) { foreach ($expectedAddressData as $key => $value) { if ($key == 'applied_taxes') { $this->verifyAppliedTaxes($quoteAddress->getAppliedTaxes(), $value); } else { $this->assertEquals($value, $quoteAddress->getData($key), 'Quote address ' . $key . ' is incorrect'); } } return $this; }
/** * Collect applied tax rates information on address level * * @param QuoteAddress $address * @param array $applied * @param float $amount * @param float $baseAmount * @param float $rate * @return void * @SuppressWarnings(PHPMD.CyclomaticComplexity) * @SuppressWarnings(PHPMD.NPathComplexity) */ protected function _saveAppliedTaxes(QuoteAddress $address, $applied, $amount, $baseAmount, $rate) { $previouslyAppliedTaxes = $address->getAppliedTaxes(); $process = count($previouslyAppliedTaxes); foreach ($applied as $row) { if ($row['percent'] == 0) { continue; } if (!isset($previouslyAppliedTaxes[$row['id']])) { $row['process'] = $process; $row['amount'] = 0; $row['base_amount'] = 0; $previouslyAppliedTaxes[$row['id']] = $row; } if (!is_null($row['percent'])) { $row['percent'] = $row['percent'] ? $row['percent'] : 1; $rate = $rate ? $rate : 1; $appliedAmount = $amount / $rate * $row['percent']; $baseAppliedAmount = $baseAmount / $rate * $row['percent']; } else { $appliedAmount = 0; $baseAppliedAmount = 0; foreach ($row['rates'] as $rate) { $appliedAmount += $rate['amount']; $baseAppliedAmount += $rate['base_amount']; } } if ($appliedAmount || $previouslyAppliedTaxes[$row['id']]['amount']) { $previouslyAppliedTaxes[$row['id']]['amount'] += $appliedAmount; $previouslyAppliedTaxes[$row['id']]['base_amount'] += $baseAppliedAmount; } else { unset($previouslyAppliedTaxes[$row['id']]); } } $address->setAppliedTaxes($previouslyAppliedTaxes); }
/** * @param \Magento\Quote\Model\Quote\Address $address * @return $this */ public function fetch(\Magento\Quote\Model\Quote\Address $address) { $applied = $address->getAppliedTaxes(); $store = $address->getQuote()->getStore(); $amount = $address->getTaxAmount(); if ($amount != 0 || $this->_taxData->displayZeroTax($store)) { $address->addTotal(['code' => $this->getCode(), 'title' => __('Tax'), 'full_info' => $applied ? $applied : [], 'value' => $amount]); } return $this; }
/** * Add tax totals information to address object * * @param Address $address * @return $this * @SuppressWarnings(PHPMD.CyclomaticComplexity) */ public function fetch(Address $address) { $applied = $address->getAppliedTaxes(); $store = $address->getQuote()->getStore(); $amount = $address->getTaxAmount(); $items = $this->_getAddressItems($address); $discountTaxCompensation = 0; foreach ($items as $item) { $discountTaxCompensation += $item->getDiscountTaxCompensation(); } $taxAmount = $amount + $discountTaxCompensation; $area = null; if ($this->_config->displayCartTaxWithGrandTotal($store) && $address->getGrandTotal()) { $area = 'taxes'; } if ($amount != 0 || $this->_config->displayCartZeroTax($store)) { $address->addTotal(['code' => $this->getCode(), 'title' => __('Tax'), 'full_info' => $applied ? $applied : [], 'value' => $amount, 'area' => $area]); } $store = $address->getQuote()->getStore(); /** * Modify subtotal */ if ($this->_config->displayCartSubtotalBoth($store) || $this->_config->displayCartSubtotalInclTax($store)) { if ($address->getSubtotalInclTax() > 0) { $subtotalInclTax = $address->getSubtotalInclTax(); } else { $subtotalInclTax = $address->getSubtotal() + $taxAmount - $address->getShippingTaxAmount(); } $address->addTotal(['code' => 'subtotal', 'title' => __('Subtotal'), 'value' => $subtotalInclTax, 'value_incl_tax' => $subtotalInclTax, 'value_excl_tax' => $address->getSubtotal()]); } return $this; }
/** * @param QuoteAddressToOrder $subject * @param OrderInterface $order * @return OrderInterface * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ public function afterConvert(QuoteAddressToOrder $subject, OrderInterface $order) { /** @var \Magento\Sales\Model\Order $order */ $taxes = $this->quoteAddress->getAppliedTaxes(); $extensionAttributes = $order->getExtensionAttributes(); if ($extensionAttributes == null) { $extensionAttributes = $this->orderExtensionFactory->create(); } if (!empty($taxes)) { foreach ($taxes as $key => $tax) { $tax['extension_attributes']['rates'] = $tax['rates']; unset($tax['rates']); $taxes[$key] = $tax; } $extensionAttributes->setAppliedTaxes($taxes); $extensionAttributes->setConvertingFromQuote(true); } $itemAppliedTaxes = $this->quoteAddress->getItemsAppliedTaxes(); $itemAppliedTaxesModified = []; if (!empty($itemAppliedTaxes)) { foreach ($itemAppliedTaxes as $key => $itemAppliedTaxItem) { if (is_array($itemAppliedTaxItem) && !empty($itemAppliedTaxItem)) { foreach ($itemAppliedTaxItem as $itemAppliedTax) { $itemAppliedTaxesModified[$key]['type'] = $itemAppliedTax['item_type']; $itemAppliedTaxesModified[$key]['item_id'] = $itemAppliedTax['item_id']; $itemAppliedTaxesModified[$key]['associated_item_id'] = $itemAppliedTax['associated_item_id']; $itemAppliedTax['extension_attributes']['rates'] = $itemAppliedTax['rates']; unset($itemAppliedTax['rates']); $itemAppliedTaxesModified[$key]['applied_taxes'][] = $itemAppliedTax; } } } $extensionAttributes->setItemAppliedTaxes($itemAppliedTaxesModified); } $order->setExtensionAttributes($extensionAttributes); return $order; }