示例#1
0
文件: Tax2.php 项目: rajarshc/Rooja
 /**
  * Collect tax totals for quote address
  *
  * @param   Mage_Sales_Model_Quote_Address $address
  * @return  Mage_Tax_Model_Sales_Total_Quote
  */
 public function collect141(Mage_Sales_Model_Quote_Address $address)
 {
     parent::collect($address);
     $this->_saveRewardsTaxDiscount($address);
     //TODO recalculate tax on shipping discounted amount
     return $this;
 }
示例#2
0
 /**
  * Collect totals process.
  *
  * @param Mage_Sales_Model_Quote_Address $address
  *
  * @return $this
  */
 public function collect(Mage_Sales_Model_Quote_Address $address)
 {
     $store = $address->getQuote()->getStore();
     if (!$this->getHelper()->isActive($store)) {
         return parent::collect($address);
     }
     Mage_Sales_Model_Quote_Address_Total_Abstract::collect($address);
     // Clear applied tax info
     $address->setAppliedTaxes(array());
     // Clear totals for this collector
     $address->setTotalAmount($this->getCode(), 0.0);
     $address->setBaseTotalAmount($this->getCode(), 0.0);
     // Clear subtotal taxes
     $address->setBaseSubtotalTotalInclTax($address->getBaseSubtotal());
     $address->setSubtotalInclTax($address->getSubtotal());
     // Clear shipping taxes (shipping cost is set/reset in shipping collector)
     $address->setBaseShippingInclTax($address->getBaseShippingAmount());
     $address->setShippingInclTax($address->getShippingAmount());
     $address->setBaseShippingTaxAmount(0);
     $address->setShippingTaxAmount(0);
     // Get all applicable items
     $items = $this->_getAddressItems($address);
     // Bail out early if possible
     if (!$items) {
         return $this;
     }
     // Clear item taxes
     foreach ($items as $item) {
         /** @var Mage_Sales_Model_Quote_Address_Item $item */
         // Recalculate row totals
         $item->calcRowTotal();
         // Copy row totals (set in calcRowTotal) to row w/tax totals
         $item->setBaseRowTotalInclTax($item->getBaseRowTotal());
         $item->setRowTotalInclTax($item->getRowTotal());
         // Set zero tax rate
         $item->setTaxPercent(0.0);
     }
     // Bail out early if possible
     if ($address->getAddressType() !== 'shipping' || $address->validate() !== true) {
         return $this;
     }
     // Get taxes via API call
     $api = $this->getHelper()->getApi($store);
     $result = $api->callGetTaxForQuote($address->getQuote());
     if ($result['ResultCode'] === 'Success') {
         $hasDisplayCurrency = $address->getQuote()->getBaseCurrencyCode() !== $address->getQuote()->getQuoteCurrencyCode();
         $exchangeRate = $hasDisplayCurrency ? $address->getQuote()->getBaseToQuoteRate() : 1.0;
         $shippingPriceIncludesTax = $this->_config->shippingPriceIncludesTax($store);
         $itemPriceIncludesTax = $this->_config->priceIncludesTax($store);
         foreach ($result['TaxLines'] as $line) {
             $itemId = $line['LineNo'];
             $rate = floatval($line['Rate']);
             $chargeTax = $store->roundPrice(floatval($line['Tax']));
             switch ($itemId) {
                 case 'SHIPPING':
                     // Store the tax amount
                     $address->setBaseShippingTaxAmount($chargeTax);
                     $address->setShippingTaxAmount($store->roundPrice($chargeTax * $exchangeRate));
                     if ($shippingPriceIncludesTax) {
                         // Remove tax from shipping total
                         $address->setBaseShippingAmount($address->getBaseShippingInclTax() - $address->getBaseShippingTaxAmount());
                         $address->setShippingAmount($address->getShippingInclTax() - $address->getShippingTaxAmount());
                         $address->addBaseTotalAmount('shipping', -$address->getBaseShippingTaxAmount());
                         $address->addTotalAmount('shipping', -$address->getShippingTaxAmount());
                     } else {
                         // Add tax to shipping w/tax total
                         $address->setBaseShippingInclTax($address->getBaseShippingAmount() + $address->getBaseShippingTaxAmount());
                         $address->setShippingInclTax($address->getShippingAmount() + $address->getShippingTaxAmount());
                     }
                     // Add shipping tax to tax total
                     $this->_addBaseAmount($address->getBaseShippingTaxAmount());
                     $this->_addAmount($address->getShippingTaxAmount());
                     break;
                 default:
                     /** @var Mage_Sales_Model_Quote_Address_Item $item */
                     $item = isset($items[$itemId]) ? $items[$itemId] : false;
                     if (!$item) {
                         continue;
                     }
                     // Tax Rate Applied
                     $item->setTaxPercent($rate * 100.0);
                     // Store the tax amount
                     $item->setBaseTaxAmount($chargeTax);
                     $item->setTaxAmount($chargeTax * $exchangeRate);
                     if ($itemPriceIncludesTax) {
                         // Remove tax from item
                         $item->setBaseRowTotal($item->getBaseRowTotalInclTax() - $item->getBaseTaxAmount());
                         $item->setRowTotal($item->getRowTotalInclTax() - $item->getTaxAmount());
                         // Remove tax from subtotal
                         $address->setBaseSubtotal($address->getBaseSubtotal() - $item->getBaseTaxAmount());
                         $address->setSubtotal($address->getSubtotal() - $item->getTaxAmount());
                         $address->addBaseTotalAmount('subtotal', -$item->getBaseTaxAmount());
                         $address->addTotalAmount('subtotal', -$item->getTaxAmount());
                     } else {
                         // Add tax to item
                         $item->setBaseRowTotalInclTax($item->getBaseRowTotalInclTax() + $item->getBaseTaxAmount());
                         $item->setRowTotalInclTax($item->getRowTotalInclTax() + $item->getTaxAmount());
                         // Add tax to subtotal w/tax
                         $address->setBaseSubtotalTotalInclTax($address->getBaseSubtotalTotalInclTax() + $item->getBaseTaxAmount());
                         $address->setSubtotalInclTax($address->getSubtotalInclTax() + $item->getTaxAmount());
                     }
                     // Add item tax to tax total
                     $this->_addBaseAmount($item->getBaseTaxAmount());
                     $this->_addAmount($item->getTaxAmount());
             }
         }
     }
     return $this;
 }
示例#3
0
 public function collect(Mage_Sales_Model_Quote_Address $address)
 {
     parent::collect($address);
     return $this;
 }