| Server IP : 213.186.33.4 / Your IP : 216.73.216.193 Web Server : Apache System : Linux webm006.cluster103.gra.hosting.ovh.net 5.15.206-ovh-vps-grsec-zfs-classid #1 SMP Fri May 15 02:41:25 UTC 2026 x86_64 User : awebpaca ( 35430) PHP Version : 8.5.0 Disable Function : _dyuweyrj4,_dyuweyrj4r,dl MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : OFF | Pkexec : OFF Directory : /home/awebpaca/boutiques/app/code/core/Mage/Tax/Model/Sales/Total/Quote/ |
Upload File : |
<?php
/**
* Magento
*
* NOTICE OF LICENSE
*
* This source file is subject to the Open Software License (OSL 3.0)
* that is bundled with this package in the file LICENSE.txt.
* It is also available through the world-wide-web at this URL:
* http://opensource.org/licenses/osl-3.0.php
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to license@magentocommerce.com so we can send you a copy immediately.
*
* DISCLAIMER
*
* Do not edit or add to this file if you wish to upgrade Magento to newer
* versions in the future. If you wish to customize Magento for your
* needs please refer to http://www.magentocommerce.com for more information.
*
* @category Mage
* @package Mage_Tax
* @copyright Copyright (c) 2010 Magento Inc. (http://www.magentocommerce.com)
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
*/
/**
* Tax totals calculation model
*/
class Mage_Tax_Model_Sales_Total_Quote_Tax extends Mage_Sales_Model_Quote_Address_Total_Abstract
{
/**
* Tax module helper
*
* @var Mage_Tax_Helper_Data
*/
protected $_helper;
/**
* Tax calculation model
*
* @var Mage_Tax_Model_Calculation
*/
protected $_calculator;
/**
* Tax configuration object
*
* @var Mage_Tax_Model_Config
*/
protected $_config;
/**
* Flag which is initialized when collect method is start.
* Is used for checking if store tax and customer tax requests are similar
*
* @var bool
*/
protected $_areTaxRequestsSimilar = false;
protected $_roundingDeltas = array();
protected $_baseRoundingDeltas = array();
protected $_store;
/**
* Class constructor
*/
public function __construct()
{
$this->setCode('tax');
$this->_helper = Mage::helper('tax');
$this->_calculator = Mage::getSingleton('tax/calculation');
$this->_config = Mage::getSingleton('tax/config');
}
/**
* Collect tax totals for quote address
*
* @param Mage_Sales_Model_Quote_Address $address
* @return Mage_Tax_Model_Sales_Total_Quote
*/
public function collect(Mage_Sales_Model_Quote_Address $address)
{
parent::collect($address);
$this->_roundingDeltas = array();
$this->_baseRoundingDeltas = array();
$address->setShippingTaxAmount(0);
$address->setBaseShippingTaxAmount(0);
$this->_store = $address->getQuote()->getStore();
$customer = $address->getQuote()->getCustomer();
if ($customer) {
$this->_calculator->setCustomer($customer);
}
if (!$address->getAppliedTaxesReset()) {
$address->setAppliedTaxes(array());
}
$items = $this->_getAddressItems($address);
if (!count($items)) {
return $this;
}
$request = $this->_calculator->getRateRequest(
$address,
$address->getQuote()->getBillingAddress(),
$address->getQuote()->getCustomerTaxClassId(),
$this->_store
);
$this->_areTaxRequestsSimilar = $this->_calculator->compareRequests(
$this->_calculator->getRateOriginRequest($address->getQuote()->getStore()),
$request
);
switch ($this->_config->getAlgorithm($this->_store)) {
case Mage_Tax_Model_Calculation::CALC_UNIT_BASE:
$this->_unitBaseCalculation($address, $request);
break;
case Mage_Tax_Model_Calculation::CALC_ROW_BASE:
$this->_rowBaseCalculation($address, $request);
break;
case Mage_Tax_Model_Calculation::CALC_TOTAL_BASE:
$this->_totalBaseCalculation($address, $request);
break;
default:
break;
}
$this->_addAmount($address->getExtraTaxAmount());
$this->_addBaseAmount($address->getBaseExtraTaxAmount());
$this->_calculateShippingTax($address, $request);
return $this;
}
/**
* Check if price include tax should be used for calculations.
* We are using price include tax just in case when catalog prices are including tax
* and customer tax requist is same as store tax request
*
* @param $store
* @return bool
*/
protected function _usePriceIncludeTax($store)
{
if ($this->_config->priceIncludesTax($store) || $this->_config->getNeedUsePriceExcludeTax()) {
return $this->_areTaxRequestsSimilar;
}
return false;
}
/**
* 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;
}
/**
* Calculate address tax amount based on one unit price and tax amount
*
* @param Mage_Sales_Model_Quote_Address $address
* @return Mage_Tax_Model_Sales_Total_Quote
*/
protected function _unitBaseCalculation(Mage_Sales_Model_Quote_Address $address, $taxRateRequest)
{
$items = $this->_getAddressItems($address);
foreach ($items as $item) {
if ($item->getParentItemId()) {
continue;
}
if ($item->getHasChildren() && $item->isChildrenCalculated()) {
foreach ($item->getChildren() as $child) {
$taxRateRequest->setProductClassId($child->getProduct()->getTaxClassId());
$rate = $this->_calculator->getRate($taxRateRequest);
$this->_calcUnitTaxAmount($child, $rate);
$this->_addAmount($child->getTaxAmount());
$this->_addBaseAmount($child->getBaseTaxAmount());
$this->_getAddress()->addTotalAmount('hidden_tax', $child->getHiddenTaxAmount());
$this->_getAddress()->addBaseTotalAmount('hidden_tax', $child->getBaseHiddenTaxAmount());
$applied = $this->_calculator->getAppliedRates($taxRateRequest);
$this->_saveAppliedTaxes($address, $applied, $child->getTaxAmount(), $child->getBaseTaxAmount(), $rate);
}
$this->_recalculateParent($item);
}
else {
$taxRateRequest->setProductClassId($item->getProduct()->getTaxClassId());
$rate = $this->_calculator->getRate($taxRateRequest);
$this->_calcUnitTaxAmount($item, $rate);
$this->_addAmount($item->getTaxAmount());
$this->_addBaseAmount($item->getBaseTaxAmount());
$this->_getAddress()->addTotalAmount('hidden_tax', $item->getHiddenTaxAmount());
$this->_getAddress()->addBaseTotalAmount('hidden_tax', $item->getBaseHiddenTaxAmount());
$applied = $this->_calculator->getAppliedRates($taxRateRequest);
$this->_saveAppliedTaxes($address, $applied, $item->getTaxAmount(), $item->getBaseTaxAmount(), $rate);
}
}
return $this;
}
/**
* Calculate unit tax anount based on unit price
*
* @param Mage_Sales_Model_Quote_Item_Abstract $item
* @param float $rate
* @return Mage_Tax_Model_Sales_Total_Quote
*/
protected function _calcUnitTaxAmount(Mage_Sales_Model_Quote_Item_Abstract $item, $rate)
{
$extra = $item->getExtraTaxableAmount();
$baseExtra = $item->getBaseExtraTaxableAmount();
$qty = $item->getTotalQty();
$inclTax = $item->getIsPriceInclTax();
$price = $item->getTaxableAmount();
$basePrice = $item->getBaseTaxableAmount();
$item->setTaxPercent($rate);
$hiddenTax = null;
$baseHiddenTax = null;
switch ($this->_config->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:
$unitTax = $this->_calculator->calcTaxAmount($price, $rate, $inclTax);
$baseUnitTax = $this->_calculator->calcTaxAmount($basePrice, $rate, $inclTax);
break;
break;
case Mage_Tax_Model_Calculation::CALC_TAX_AFTER_DISCOUNT_ON_EXCL:
case Mage_Tax_Model_Calculation::CALC_TAX_AFTER_DISCOUNT_ON_INCL:
$discountAmount = $item->getDiscountAmount();
$baseDiscountAmount = $item->getBaseDiscountAmount();
$unitTax = $this->_calculator->calcTaxAmount($price-$discountAmount/$qty, $rate, $inclTax);
$baseUnitTax = $this->_calculator->calcTaxAmount($basePrice-$baseDiscountAmount/$qty, $rate, $inclTax);
if ($inclTax && $discountAmount>0) {
$hiddenTax = $price - $unitTax - $item->getOriginalPrice();
$baseHiddenTax = $basePrice - $unitTax - $item->getBasePrice();
}
break;
}
$item->setTaxAmount($this->_store->roundPrice(max(0, $qty*$unitTax)));
$item->setBaseTaxAmount($this->_store->roundPrice(max(0, $qty*$baseUnitTax)));
$item->setHiddenTaxAmount(max(0, $qty*$hiddenTax));
$item->setBaseHiddenTaxAmount(max(0, $qty*$baseHiddenTax));
return $this;
}
/**
* Calculate address total tax based on row total
*
* @param Mage_Sales_Model_Quote_Address $address
* @param Varien_Object $taxRateRequest
* @return Mage_Tax_Model_Sales_Total_Quote
*/
protected function _rowBaseCalculation(Mage_Sales_Model_Quote_Address $address, $taxRateRequest)
{
$items = $this->_getAddressItems($address);
foreach ($items as $item) {
if ($item->getParentItemId()) {
continue;
}
if ($item->getHasChildren() && $item->isChildrenCalculated()) {
foreach ($item->getChildren() as $child) {
$taxRateRequest->setProductClassId($child->getProduct()->getTaxClassId());
$rate = $this->_calculator->getRate($taxRateRequest);
$this->_calcRowTaxAmount($child, $rate);
$this->_addAmount($child->getTaxAmount());
$this->_addBaseAmount($child->getBaseTaxAmount());
$this->_getAddress()->addTotalAmount('hidden_tax', $child->getHiddenTaxAmount());
$this->_getAddress()->addBaseTotalAmount('hidden_tax', $child->getBaseHiddenTaxAmount());
$applied = $this->_calculator->getAppliedRates($taxRateRequest);
$this->_saveAppliedTaxes($address, $applied, $child->getTaxAmount(), $child->getBaseTaxAmount(), $rate);
}
$this->_recalculateParent($item);
}
else {
$taxRateRequest->setProductClassId($item->getProduct()->getTaxClassId());
$rate = $this->_calculator->getRate($taxRateRequest);
$this->_calcRowTaxAmount($item, $rate);
$this->_addAmount($item->getTaxAmount());
$this->_addBaseAmount($item->getBaseTaxAmount());
$this->_getAddress()->addTotalAmount('hidden_tax', $item->getHiddenTaxAmount());
$this->_getAddress()->addBaseTotalAmount('hidden_tax', $item->getBaseHiddenTaxAmount());
$applied = $this->_calculator->getAppliedRates($taxRateRequest);
$this->_saveAppliedTaxes($address, $applied, $item->getTaxAmount(), $item->getBaseTaxAmount(), $rate);
}
}
return $this;
}
/**
* Calculate item tax amount based on row total
*
* @param Mage_Sales_Model_Quote_Item_Abstract $item
* @param float $rate
* @return Mage_Tax_Model_Sales_Total_Quote
*/
protected function _calcRowTaxAmount($item, $rate)
{
$inclTax = $item->getIsPriceInclTax();
$subtotal = $item->getTaxableAmount() + $item->getExtraRowTaxableAmount();
$baseSubtotal = $item->getBaseTaxableAmount() + $item->getBaseExtraRowTaxableAmount();
$item->setTaxPercent($rate);
$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:
$rowTax = $this->_calculator->calcTaxAmount($subtotal, $rate, $inclTax);
$baseRowTax = $this->_calculator->calcTaxAmount($baseSubtotal, $rate, $inclTax);
break;
case Mage_Tax_Model_Calculation::CALC_TAX_AFTER_DISCOUNT_ON_EXCL:
case Mage_Tax_Model_Calculation::CALC_TAX_AFTER_DISCOUNT_ON_INCL:
$discountAmount = $item->getDiscountAmount();
$baseDiscountAmount = $item->getBaseDiscountAmount();
$rowTax = $this->_calculator->calcTaxAmount($subtotal - $discountAmount, $rate, $inclTax);
$baseRowTax = $this->_calculator->calcTaxAmount($baseSubtotal - $baseDiscountAmount, $rate, $inclTax);
if ($inclTax && $discountAmount>0) {
$hiddenTax = $subtotal - $rowTax - $item->getRowTotal();
$baseHiddenTax = $baseSubtotal - $baseRowTax - $item->getBaseRowTotal();
}
break;
}
$item->setTaxAmount(max(0, $rowTax));
$item->setBaseTaxAmount(max(0, $baseRowTax));
$item->setHiddenTaxAmount(max(0, $hiddenTax));
$item->setBaseHiddenTaxAmount(max(0, $baseHiddenTax));
return $this;
}
/**
* Calculate address total tax based on address subtotal
*
* @param Mage_Sales_Model_Quote_Address $address
* @param Varien_Object $taxRateRequest
* @return Mage_Tax_Model_Sales_Total_Quote
*/
protected function _totalBaseCalculation(Mage_Sales_Model_Quote_Address $address, $taxRateRequest)
{
$items = $this->_getAddressItems($address);
$store = $address->getQuote()->getStore();
$taxGroups = array();
$inclTax = false;
foreach ($items as $item) {
if ($item->getParentItemId()) {
continue;
}
if ($item->getHasChildren() && $item->isChildrenCalculated()) {
foreach ($item->getChildren() as $child) {
$taxRateRequest->setProductClassId($child->getProduct()->getTaxClassId());
$rate = $this->_calculator->getRate($taxRateRequest);
$taxGroups[(string)$rate]['applied_rates'] = $this->_calculator->getAppliedRates($taxRateRequest);
$this->_aggregateTaxPerRate($child, $rate, $taxGroups);
$this->_getAddress()->addTotalAmount('hidden_tax', $child->getHiddenTaxAmount());
$this->_getAddress()->addBaseTotalAmount('hidden_tax', $child->getBaseHiddenTaxAmount());
$inclTax = $child->getIsPriceInclTax();
}
$this->_recalculateParent($item);
} else {
$taxRateRequest->setProductClassId($item->getProduct()->getTaxClassId());
$rate = $this->_calculator->getRate($taxRateRequest);
$taxGroups[(string)$rate]['applied_rates'] = $this->_calculator->getAppliedRates($taxRateRequest);
$this->_aggregateTaxPerRate($item, $rate, $taxGroups);
$this->_getAddress()->addTotalAmount('hidden_tax', $item->getHiddenTaxAmount());
$this->_getAddress()->addBaseTotalAmount('hidden_tax', $item->getBaseHiddenTaxAmount());
$inclTax = $item->getIsPriceInclTax();
}
}
foreach ($taxGroups as $rateKey => $data) {
$rate = (float) $rateKey;
$totalTax = $this->_calculator->calcTaxAmount(array_sum($data['totals']), $rate, $inclTax);
$baseTotalTax = $this->_calculator->calcTaxAmount(array_sum($data['base_totals']), $rate, $inclTax);
$this->_addAmount($totalTax);
$this->_addBaseAmount($baseTotalTax);
$this->_saveAppliedTaxes($address, $data['applied_rates'], $totalTax, $baseTotalTax, $rate);
}
return $this;
}
/**
* Aggregate row totals per tax rate in array
*
* @param Mage_Sales_Model_Quote_Item_Abstract $item
* @param float $rate
* @param array $taxGroups
* @return Mage_Tax_Model_Sales_Total_Quote
*/
protected function _aggregateTaxPerRate($item, $rate, &$taxGroups)
{
$inclTax = $item->getIsPriceInclTax();
$rateKey = (string) $rate;
$subtotal = $item->getTaxableAmount() + $item->getExtraRowTaxableAmount();
$baseSubtotal = $item->getBaseTaxableAmount() + $item->getBaseExtraRowTaxableAmount();
$item->setTaxPercent($rate);
if (!isset($taxGroups[$rateKey]['totals'])) {
$taxGroups[$rateKey]['totals'] = array();
$taxGroups[$rateKey]['base_totals'] = array();
}
$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:
$rowTax = $this->_calculator->calcTaxAmount($subtotal, $rate, $inclTax, false);
$baseRowTax = $this->_calculator->calcTaxAmount($baseSubtotal, $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:
$discount = $item->getDiscountAmount();
$baseDiscount = $item->getBaseDiscountAmount();
$subtotal -= $discount;
$baseSubtotal -= $baseDiscount;
$rowTax = $this->_calculator->calcTaxAmount($subtotal, $rate, $inclTax, false);
$baseRowTax = $this->_calculator->calcTaxAmount($baseSubtotal, $rate, $inclTax, false);
break;
}
$rowTax = $this->_deltaRound($rowTax, $rateKey, $inclTax);
$baseRowTax = $this->_deltaRound($baseRowTax, $rateKey, $inclTax, 'base');
if ($inclTax && !empty($discount)) {
$hiddenTax = $item->getRowTotalInclTax() - $item->getRowTotal() - $rowTax;
$baseHiddenTax = $item->getBaseRowTotalInclTax() - $item->getBaseRowTotal() - $baseRowTax;
}
$item->setTaxAmount(max(0, $rowTax));
$item->setBaseTaxAmount(max(0, $baseRowTax));
$item->setHiddenTaxAmount(max(0, $hiddenTax));
$item->setBaseHiddenTaxAmount(max(0, $baseHiddenTax));
$taxGroups[$rateKey]['totals'][] = max(0, $subtotal);
$taxGroups[$rateKey]['base_totals'][] = max(0, $baseSubtotal);
return $this;
}
/**
* Round price based on previous rounding operation delta
*
* @param float $price
* @param string $rate
* @param bool $direction price including or excluding tax
* @param string $type
* @return float
*/
protected function _deltaRound($price, $rate, $direction, $type='regular')
{
if ($price) {
$rate = (string) $rate;
$type = $type.$direction;
$delta = isset($this->_roundingDeltas[$type][$rate]) ? $this->_roundingDeltas[$type][$rate] : 0;
$price += $delta;
$this->_roundingDeltas[$type][$rate] = $price - $this->_calculator->round($price);
$price = $this->_calculator->round($price);
}
return $price;
}
/**
* Recalculate parent item amounts base on children data
*
* @param Mage_Sales_Model_Quote_Item_Abstract $item
* @return Mage_Tax_Model_Sales_Total_Quote
*/
protected function _recalculateParent(Mage_Sales_Model_Quote_Item_Abstract $item)
{
$rowTaxAmount = 0;
$baseRowTaxAmount = 0;
foreach ($item->getChildren() as $child) {
$rowTaxAmount += $child->getTaxAmount();
$baseRowTaxAmount += $child->getBaseTaxAmount();
}
$item->setTaxAmount($rowTaxAmount);
$item->setBaseTaxAmount($baseRowTaxAmount);
return $this;
}
/**
* Collect applied tax rates information on address level
*
* @param Mage_Sales_Model_Quote_Address $address
* @param array $applied
* @param float $amount
* @param float $baseAmount
* @param float $rate
*/
protected function _saveAppliedTaxes(Mage_Sales_Model_Quote_Address $address, $applied, $amount, $baseAmount, $rate)
{
$previouslyAppliedTaxes = $address->getAppliedTaxes();
$process = count($previouslyAppliedTaxes);
foreach ($applied as $row) {
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);
}
/**
* Add tax totals information to address object
*
* @param Mage_Sales_Model_Quote_Address $address
* @return Mage_Tax_Model_Sales_Total_Quote
*/
public function fetch(Mage_Sales_Model_Quote_Address $address)
{
$applied= $address->getAppliedTaxes();
$store = $address->getQuote()->getStore();
$amount = $address->getTaxAmount();
$area = null;
if ($this->_config->displayCartTaxWithGrandTotal($store) && $address->getGrandTotal()) {
$area = 'taxes';
}
if (($amount!=0) || ($this->_config->displayCartZeroTax($store))) {
$address->addTotal(array(
'code' => $this->getCode(),
'title' => Mage::helper('tax')->__('Tax'),
'full_info' => $applied ? $applied : array(),
'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()+$address->getTaxAmount()-$address->getShippingTaxAmount();
}
$address->addTotal(array(
'code' => 'subtotal',
'title' => Mage::helper('sales')->__('Subtotal'),
'value' => $subtotalInclTax,
'value_incl_tax' => $subtotalInclTax,
'value_excl_tax' => $address->getSubtotal(),
));
}
return $this;
}
/**
* Process model configuration array.
* This method can be used for changing totals collect sort order
*
* @param array $config
* @param store $store
* @return array
*/
public function processConfigArray($config, $store)
{
$calculationSequence = $this->_helper->getCalculationSequence($store);
switch ($calculationSequence) {
case Mage_Tax_Model_Calculation::CALC_TAX_BEFORE_DISCOUNT_ON_INCL:
$config['before'][] = 'discount';
break;
default:
$config['after'][] = 'discount';
break;
}
return $config;
}
/**
* Get Tax label
*
* @return string
*/
public function getLabel()
{
return Mage::helper('tax')->__('Tax');
}
}