/** * Check what taxes should be applied after discount * * @param Mage_Core_Model_Store|int $store * @return bool */ public function applyTaxAfterDiscount($store = null) { if ($this->_getDataHelper()->isServiceEnabled($store)) { if (!$this->_getTaxDataHelper()->priceIncludesTax($store)) { return true; } } return parent::applyTaxAfterDiscount($store); }
/** * 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) { $store = $address->getQuote()->getStore(); $shippingTaxClass = $this->_config->getShippingTaxClass($store); $shippingAmount = $address->getShippingAmount(); $baseShippingAmount = $address->getBaseShippingAmount(); $shippingDiscountAmount = $address->getShippingDiscountAmount(); $baseShippingDiscountAmount = $address->getBaseShippingDiscountAmount(); /** * Subtract discount before calculate tax amount */ if ($this->_config->applyTaxAfterDiscount($store)) { $calcAmount = $shippingAmount - $shippingDiscountAmount; $baseCalcAmount = $baseShippingAmount - $baseShippingDiscountAmount; } else { $calcAmount = $shippingAmount; $baseCalcAmount = $baseShippingAmount; } $shippingTax = 0; $shippingBaseTax = 0; if ($shippingTaxClass) { $taxRateRequest->setProductClassId($shippingTaxClass); $rate = $this->_calculator->getRate($taxRateRequest); if ($rate) { if ($this->_config->shippingPriceIncludesTax($store) && $this->_areTaxRequestsSimilar) { $shippingTax = $this->_calculator->calcTaxAmount($calcAmount, $rate, true); $shippingBaseTax = $this->_calculator->calcTaxAmount($baseCalcAmount, $rate, true); $shippingAmount -= $shippingTax; $baseShippingAmount -= $shippingBaseTax; } else { $shippingTax = $this->_calculator->calcTaxAmount($calcAmount, $rate); $shippingBaseTax = $this->_calculator->calcTaxAmount($baseCalcAmount, $rate); } $address->setTotalAmount('shipping', $shippingAmount); $address->setBaseTotalAmount('shipping', $baseShippingAmount); /** * Provide additional attributes for apply discount on price include tax */ if ($this->_config->discountTax($store)) { $address->setShippingAmountForDiscount($shippingAmount + $shippingTax); $address->setBaseShippingAmountForDiscount($baseShippingAmount + $shippingBaseTax); } $this->_addAmount($shippingTax); $this->_addBaseAmount($shippingBaseTax); $applied = $this->_calculator->getAppliedRates($taxRateRequest); $this->_saveAppliedTaxes($address, $applied, $shippingTax, $shippingBaseTax, $rate); } } $address->setShippingTaxAmount($shippingTax); $address->setBaseShippingTaxAmount($shippingBaseTax); return $this; }
/** * Check what taxes should be applied after discount * * @param mixed $store * @return bool */ public function applyTaxAfterDiscount($store = null) { return $this->_config->applyTaxAfterDiscount($store); }