Beispiel #1
0
 /**
  * Add tax totals information to address object
  *
  * @param \Magento\Quote\Model\Quote $quote
  * @param Address\Total $total
  * @return array|null
  * @SuppressWarnings(PHPMD.CyclomaticComplexity)
  * @SuppressWarnings(PHPMD.NPathComplexity)
  */
 public function fetch(\Magento\Quote\Model\Quote $quote, \Magento\Quote\Model\Quote\Address\Total $total)
 {
     $totals = [];
     $store = $quote->getStore();
     $applied = $total->getAppliedTaxes();
     if (is_string($applied)) {
         $applied = unserialize($applied);
     }
     $amount = $total->getTaxAmount();
     if ($amount == null) {
         $this->enhanceTotalData($quote, $total);
         $amount = $total->getTaxAmount();
     }
     $taxAmount = $amount + $total->getTotalAmount('discount_tax_compensation');
     $area = null;
     if ($this->_config->displayCartTaxWithGrandTotal($store) && $total->getGrandTotal()) {
         $area = 'taxes';
     }
     $totals[] = ['code' => $this->getCode(), 'title' => __('Tax'), 'full_info' => $applied ? $applied : [], 'value' => $amount, 'area' => $area];
     /**
      * Modify subtotal
      */
     if ($this->_config->displayCartSubtotalBoth($store) || $this->_config->displayCartSubtotalInclTax($store)) {
         if ($total->getSubtotalInclTax() > 0) {
             $subtotalInclTax = $total->getSubtotalInclTax();
         } else {
             $subtotalInclTax = $total->getSubtotal() + $taxAmount - $total->getShippingTaxAmount();
         }
         $totals[] = ['code' => 'subtotal', 'title' => __('Subtotal'), 'value' => $subtotalInclTax, 'value_incl_tax' => $subtotalInclTax, 'value_excl_tax' => $total->getSubtotal()];
     }
     if (empty($totals)) {
         return null;
     }
     return $totals;
 }
 /**
  * Collect applied tax rates information on address level
  *
  * @param QuoteAddress\Total $total
  * @param array $applied
  * @param float $amount
  * @param float $baseAmount
  * @param float $rate
  * @return void
  * @SuppressWarnings(PHPMD.CyclomaticComplexity)
  * @SuppressWarnings(PHPMD.NPathComplexity)
  */
 protected function _saveAppliedTaxes(QuoteAddress\Total $total, $applied, $amount, $baseAmount, $rate)
 {
     $previouslyAppliedTaxes = $total->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']]);
         }
     }
     $total->setAppliedTaxes($previouslyAppliedTaxes);
 }