/**
  * Get request for fetching store tax rate
  *
  * @deprecated after 1.4.0.0
  * @param   Mage_Sales_Model_Quote_Address $address
  * @return  Varien_Object
  */
 protected function _getStoreTaxRequest($address)
 {
     if (is_null($this->_storeTaxRequest)) {
         $this->_storeTaxRequest = $this->_calculator->getRateOriginRequest($address->getQuote()->getStore());
     }
     return $this->_storeTaxRequest;
 }
 /**
  * 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();
     $this->_hiddenTaxes = 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);
     if ($this->_config->priceIncludesTax($this->_store)) {
         if ($this->_helper->isCrossBorderTradeEnabled($this->_store)) {
             $this->_areTaxRequestsSimilar = true;
         } else {
             $this->_areTaxRequestsSimilar = $this->_calculator->compareRequests($this->_calculator->getRateOriginRequest($this->_store), $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);
     $this->_processHiddenTaxes();
     //round total amounts in address
     $this->_roundTotals($address);
     return $this;
 }
 /**
  * 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);
     $store = $address->getQuote()->getStore();
     $customer = $address->getQuote()->getCustomer();
     if ($customer) {
         $this->_calculator->setCustomer($customer);
     }
     if (!$address->getAppliedTaxesReset()) {
         $address->setAppliedTaxes(array());
     }
     $items = $address->getAllItems();
     if (!count($items)) {
         return $this;
     }
     $request = $this->_calculator->getRateRequest($address, $address->getQuote()->getBillingAddress(), $address->getQuote()->getCustomerTaxClassId(), $store);
     $this->_areTaxRequestsSimilar = $this->_calculator->compareRequests($this->_calculator->getRateOriginRequest($address->getQuote()->getStore()), $request);
     switch ($this->_config->getAlgorithm($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;
     }
     /**
      * Subtract taxes from subtotal amount if prices include tax
      */
     if ($this->_usePriceIncludeTax($store)) {
         $subtotal = $address->getSubtotalInclTax() - $address->getTotalAmount('tax');
         $baseSubtotal = $address->getBaseSubtotalInclTax() - $address->getBaseTotalAmount('tax');
         $address->setTotalAmount('subtotal', $subtotal);
         $address->setBaseTotalAmount('subtotal', $baseSubtotal);
     }
     $this->_addAmount($address->getExtraTaxAmount());
     $this->_addBaseAmount($address->getBaseExtraTaxAmount());
     $this->_calculateShippingTax($address, $request);
     return $this;
 }