Example #1
0
 /**
  * Tax caclulation for shipping price
  *
  * @param   Mage_Sales_Model_Quote_Address $address
  * @param   Varien_Object $taxRateRequest
  * @return  Mage_Tax_Model_Sales_Total_Quote
  */
 protected function _calculateShippingTax(Mage_Sales_Model_Quote_Address $address, $taxRateRequest)
 {
     $taxRateRequest->setProductClassId($this->_config->getShippingTaxClass($this->_store));
     $rate = $this->_calculator->getRate($taxRateRequest);
     $inclTax = $address->getIsShippingInclTax();
     $shipping = $address->getShippingTaxable();
     $baseShipping = $address->getBaseShippingTaxable();
     $hiddenTax = null;
     $baseHiddenTax = null;
     switch ($this->_helper->getCalculationSequence($this->_store)) {
         case Mage_Tax_Model_Calculation::CALC_TAX_BEFORE_DISCOUNT_ON_EXCL:
         case Mage_Tax_Model_Calculation::CALC_TAX_BEFORE_DISCOUNT_ON_INCL:
             $tax = $this->_calculator->calcTaxAmount($shipping, $rate, $inclTax, false);
             $baseTax = $this->_calculator->calcTaxAmount($baseShipping, $rate, $inclTax, false);
             break;
         case Mage_Tax_Model_Calculation::CALC_TAX_AFTER_DISCOUNT_ON_EXCL:
         case Mage_Tax_Model_Calculation::CALC_TAX_AFTER_DISCOUNT_ON_INCL:
             $discountAmount = $address->getShippingDiscountAmount();
             $baseDiscountAmount = $address->getBaseShippingDiscountAmount();
             $tax = $this->_calculator->calcTaxAmount($shipping - $discountAmount, $rate, $inclTax, false);
             $baseTax = $this->_calculator->calcTaxAmount($baseShipping - $baseDiscountAmount, $rate, $inclTax, false);
             break;
     }
     if ($this->_config->getAlgorithm($this->_store) == Mage_Tax_Model_Calculation::CALC_TOTAL_BASE) {
         $tax = $this->_deltaRound($tax, $rate, $inclTax);
         $baseTax = $this->_deltaRound($baseTax, $rate, $inclTax, 'base');
     } else {
         $tax = $this->_calculator->round($tax);
         $baseTax = $this->_calculator->round($baseTax);
     }
     if ($inclTax && !empty($discountAmount)) {
         $hiddenTax = $shipping - $tax - $address->getShippingAmount();
         $baseHiddenTax = $baseShipping - $baseTax - $address->getBaseShippingAmount();
     }
     $this->_addAmount(max(0, $tax));
     $this->_addBaseAmount(max(0, $baseTax));
     $address->setShippingTaxAmount(max(0, $tax));
     $address->setBaseShippingTaxAmount(max(0, $baseTax));
     $address->setShippingHiddenTaxAmount(max(0, $hiddenTax));
     $address->setBaseShippingHiddenTaxAmount(max(0, $baseHiddenTax));
     $address->addTotalAmount('shipping_hidden_tax', $hiddenTax);
     $address->addBaseTotalAmount('shipping_hidden_tax', $baseHiddenTax);
     $applied = $this->_calculator->getAppliedRates($taxRateRequest);
     $this->_saveAppliedTaxes($address, $applied, $tax, $baseTax, $rate);
     return $this;
 }
 /**
  * Changed By Adam 06/11/2014: Fix bug hidden tax
  * @param Mage_Sales_Model_Quote_Address $address
  * @param type $address
  */
 protected function _processHiddenTaxes($address)
 {
     foreach ($address->getAllItems() as $item) {
         if ($item->getParentItemId()) {
             continue;
         }
         if ($item->getHasChildren() && $item->isChildrenCalculated()) {
             foreach ($item->getChildren() as $child) {
                 $child->setHiddenTaxAmount($child->getHiddenTaxAmount() + $child->getAffiliateplusHiddenTaxAmount());
                 $child->setBaseHiddenTaxAmount($child->getBaseHiddenTaxAmount() + $child->getAffiliateplusBaseHiddenTaxAmount());
                 $address->addTotalAmount('hidden_tax', $child->getAffiliateplusHiddenTaxAmount());
                 $address->addBaseTotalAmount('hidden_tax', $child->getAffiliateplusBaseHiddenTaxAmount());
             }
         } elseif ($item->getProduct()) {
             $item->setHiddenTaxAmount($item->getHiddenTaxAmount() + $item->getAffiliateplusHiddenTaxAmount());
             $item->setBaseHiddenTaxAmount($item->getBaseHiddenTaxAmount() + $item->getAffiliateplusBaseHiddenTaxAmount());
             $address->addTotalAmount('hidden_tax', $item->getAffiliateplusHiddenTaxAmount());
             $address->addBaseTotalAmount('hidden_tax', $item->getAffiliateplusBaseHiddenTaxAmount());
         }
     }
 }
 /**
  * Proces row amount based on FPT total amount configuration setting
  *
  * @param   Mage_Sales_Model_Quote_Address $address
  * @param   float $rowValue
  * @param   float $baseRowValue
  * @return  Mage_Weee_Model_Total_Quote_Weee
  */
 protected function _processTotalAmount($address, $rowValue, $baseRowValue)
 {
     if ($this->_helper->includeInSubtotal($this->_store)) {
         $address->addTotalAmount('subtotal', $rowValue);
         $address->addBaseTotalAmount('subtotal', $baseRowValue);
         $this->_isTaxAffected = true;
     } else {
         $address->setExtraTaxAmount($address->getExtraTaxAmount() + $rowValue);
         $address->setBaseExtraTaxAmount($address->getBaseExtraTaxAmount() + $baseRowValue);
     }
     return $this;
 }