/** * Check if shipping prices include tax * * @param null|int $store * @return bool */ public function shippingPriceIncludesTax($store = null) { if ($this->_getDataHelper()->isAvataxEnabled($store)) { return false; } return parent::shippingPriceIncludesTax($store); }
/** * Check if we need subtract store tax amount from shipping * * @deprecated after 1.4.0.0 * @param Mage_Sales_Model_Quote_Address $address * @return bool */ protected function _needSubtractShippingTax($address) { $store = $address->getQuote()->getStore(); if ($this->_config->shippingPriceIncludesTax($store) || $this->_config->getNeedUseShippingExcludeTax()) { return true; } 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) { $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 if shipping prices include tax * * @param mixed $store * @return bool */ public function shippingPriceIncludesTax($store = null) { return $this->_config->shippingPriceIncludesTax($store); }
/** * Collect totals information about shipping * * @param Mage_Sales_Model_Quote_Address $address * @return Mage_Sales_Model_Quote_Address_Total_Shipping */ public function collect(Mage_Sales_Model_Quote_Address $address) { parent::collect($address); $calc = $this->_calculator; $store = $address->getQuote()->getStore(); $storeTaxRequest = $calc->getRateOriginRequest($store); $addressTaxRequest = $calc->getRateRequest($address, $address->getQuote()->getBillingAddress(), $address->getQuote()->getCustomerTaxClassId(), $store); $shippingTaxClass = $this->_config->getShippingTaxClass($store); $storeTaxRequest->setProductClassId($shippingTaxClass); $addressTaxRequest->setProductClassId($shippingTaxClass); $priceIncludesTax = $this->_config->shippingPriceIncludesTax($store); if ($priceIncludesTax) { $this->_areTaxRequestsSimilar = $calc->compareRequests($addressTaxRequest, $storeTaxRequest); } $shipping = $taxShipping = $address->getShippingAmount(); $baseShipping = $baseTaxShipping = $address->getBaseShippingAmount(); $rate = $calc->getRate($addressTaxRequest); if ($priceIncludesTax) { if ($this->_areTaxRequestsSimilar) { $tax = $this->_round($calc->calcTaxAmount($shipping, $rate, true, false), $rate, true); $baseTax = $this->_round($calc->calcTaxAmount($baseShipping, $rate, true, false), $rate, true, 'base'); $taxShipping = $shipping; $baseTaxShipping = $baseShipping; $shipping = $shipping - $tax; $baseShipping = $baseShipping - $baseTax; $taxable = $taxShipping; $baseTaxable = $baseTaxShipping; $isPriceInclTax = true; } else { $storeRate = $calc->getStoreRate($addressTaxRequest, $store); $storeTax = $calc->calcTaxAmount($shipping, $storeRate, true, false); $baseStoreTax = $calc->calcTaxAmount($baseShipping, $storeRate, true, false); $shipping = $calc->round($shipping - $storeTax); $baseShipping = $calc->round($baseShipping - $baseStoreTax); $tax = $this->_round($calc->calcTaxAmount($shipping, $rate, false, false), $rate, false); $baseTax = $this->_round($calc->calcTaxAmount($baseShipping, $rate, false, false), $rate, false, 'base'); $taxShipping = $shipping + $tax; $baseTaxShipping = $baseShipping + $baseTax; $taxable = $shipping; $baseTaxable = $baseShipping; $isPriceInclTax = false; } } else { $tax = $this->_round($calc->calcTaxAmount($shipping, $rate, false, false), $rate, false); $baseTax = $this->_round($calc->calcTaxAmount($baseShipping, $rate, false, false), $rate, false, 'base'); $taxShipping = $shipping + $tax; $baseTaxShipping = $baseShipping + $baseTax; $taxable = $shipping; $baseTaxable = $baseShipping; $isPriceInclTax = false; } $address->setTotalAmount('shipping', $shipping); $address->setBaseTotalAmount('shipping', $baseShipping); $address->setShippingInclTax($taxShipping); $address->setBaseShippingInclTax($baseTaxShipping); $address->setShippingTaxable($taxable); $address->setBaseShippingTaxable($baseTaxable); $address->setIsShippingInclTax($isPriceInclTax); if ($this->_config->discountTax($store)) { $address->setShippingAmountForDiscount($taxShipping); $address->setBaseShippingAmountForDiscount($baseTaxShipping); } return $this; }