/**
  * @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;
 }
Exemplo n.º 2
0
 /**
  * @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;
 }
Exemplo n.º 3
0
 /**
  * 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);
 }
Exemplo n.º 5
0
 /**
  * @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;
 }
Exemplo n.º 6
0
 /**
  * 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;
 }
Exemplo n.º 7
-1
 /**
  * @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;
 }