Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    text
    copied!<p>I managed to solve this this using the following code. Not the best solution but spent hours trying to do it and didn't get anywhere fast. Asterix's need to be replaced.</p> <pre><code>class *****_Deposits_Model_Quote_Address_Total_Surcharge extends Mage_Sales_Model_Quote_Address_Total_Abstract { protected $_taxConfig = null; public function __construct() { $this-&gt;setCode('surcharge_price'); $this-&gt;_taxConfig = Mage::getSingleton('tax/config'); $this-&gt;_store = Mage::app()-&gt;getStore(); } protected function _calculateTax(Mage_Sales_Model_Quote_Address $address) { $calculator = Mage::getSingleton('tax/calculation'); $calculator-&gt;setCustomer($address-&gt;getQuote()-&gt;getCustomer()); $inclTax = $this-&gt;_taxConfig-&gt;priceIncludesTax($this-&gt;_store); $taxRateRequest = $calculator-&gt;getRateRequest( $address, $address-&gt;getQuote()-&gt;getBillingAddress(), $address-&gt;getQuote()-&gt;getCustomerTaxClassId(), $this-&gt;_store ); $taxRateRequest-&gt;setProductClassId(Mage::getStoreConfig('*****/surcharges/tax_class', $this-&gt;_store)); $rate = $calculator-&gt;getRate($taxRateRequest); if($rate &gt; 0.0) { $baseTax = $calculator-&gt;calcTaxAmount($address-&gt;getBaseSurchargePriceAmount(), $rate, $inclTax, true); $tax = $address-&gt;getQuote()-&gt;getStore()-&gt;convertPrice($baseTax, false); $address-&gt;addTotalAmount('tax', $tax); $address-&gt;addBaseTotalAmount('tax', $baseTax); $rates = array(); foreach ($address-&gt;getAppliedTaxes() as $rate) { $rate['amount'] = $rate['amount'] + $tax; $rate['base_amount'] = $rate['base_amount'] + $baseTax; $rates[] = $rate; } $address-&gt;setAppliedTaxes($rates); if($inclTax) { $address-&gt;setGrandTotal($address-&gt;getGrandTotal() - $tax); $address-&gt;setBaseGrandTotal($address-&gt;getBaseGrandTotal() - $baseTax); } } } /** * Collect address subtotal * * @param *****_Surcharges_Model_Quote_Address $address * @return *****_Surcharges_Model_Quote_Address_Total_Surcharge */ public function collect(Mage_Sales_Model_Quote_Address $address) { parent::collect($address); // Clear Cached Values As Multiple Addresses Causes Values To Be Added Twice Otherwise! $this-&gt;_setAmount(0)-&gt;_setBaseAmount(0); // If Surcharges Is Enabled Then Calculate Away :-) if(Mage::getStoreConfig('*****/surcharges/surcharge_enabled')) { $items = $this-&gt;_getAddressItems($address); if (!count($items)) { return $this; } // Calculate Total Surcharge For Items In Quote (Base Prices!) $surcharge = 0.0; foreach ($items as $item) { $price = $item-&gt;getData('base_surcharge_price', null); if(isset($price)) { $surcharge += $item-&gt;getData('base_surcharge_price') * $item-&gt;getQty(); } } $this-&gt;_setAmount($address-&gt;getQuote()-&gt;getStore()-&gt;convertPrice($surcharge, false)); $this-&gt;_setBaseAmount($surcharge); $this-&gt;_calculateTax($address); } return $this; } /** * Assign subtotal amount and label to address object * * @param *****_Surcharges_Model_Quote_Address $address * @return *****_Surcharges_Model_Quote_Address_Total_Surcharge */ public function fetch(Mage_Sales_Model_Quote_Address $address) { if(Mage::getStoreConfig('*****/surcharges/surcharge_enabled')) { $surcharge = $address-&gt;getSurchargePriceAmount(); if(isset($surcharge) &amp;&amp; $surcharge &gt; 0) { $address-&gt;addTotal(array( 'code' =&gt; $this-&gt;getCode(), 'title' =&gt; Mage::getStoreConfig('*****/surcharges/surcharge_label'), 'value' =&gt; $surcharge )); } } return $this; } /** * Get Surcharge label * * @return string */ public function getLabel() { return Mage::getStoreConfig('*****/surcharges/surcharge_label'); } </code></pre> <p>}</p>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload