Saturday 15 May 2010

magento - Change shipping price from an observer -



magento - Change shipping price from an observer -

i have table rate shipping method shipping cost set 5 gbp , free shipping set when subtotal more 35 gbp (a csv file imported). there additional currency (eur) in store. have alter shipping cost 6 eur (i.e. 4.xx pounds) , subtotal free shipping 40 eur (will calculated in pounds again) on fly observer. logic behind behaviour created problem i'm not able alter shipping price.

note: i've found many similar questions on se , magento forums none of solutions worked me.

the event used sales_quote_collect_totals_before.

here method in observer:

public function salesquotecollecttotalsbefore(varien_event_observer $observer) { seek { $quote = $observer->getquote(); $store = mage::app()->getstore($quote->getstoreid()); $address = $quote->getshippingaddress(); if($address->getcountry() == 'ie') { $currencyrates = mage::getmodel('directory/currency') ->getcurrencyrates(mage::app()->getbasecurrencycode(), array_values(mage::getmodel('directory/currency') ->getconfigallowcurrencies())); $shippingcostineur = 6; $freeshippingsubtotalineur = 40; $isfreeshipping = false; $isdifferentcost = false; $newcost = 0; if(mage::app()->getstore()->getcurrentcurrencycode() == 'eur') { $subtotal = $quote->getsubtotal(); if($subtotal >= $freeshippingsubtotalineur) { $isfreeshipping = true; } else { $isdifferentcost = true; $newcost = $shippingcostineur; } } else { $basesubtotal = $quote->getbasesubtotal(); $subtotalineur = $basesubtotal*$currencyrates['eur']; if($subtotalineur >= $freeshippingsubtotalineur) { $isfreeshipping = true; } else { $isdifferentcost = true; $newcost = $shippingcostineur/$currencyrates['eur']; } } if($isfreeshipping) { //$address->setfreeshipping(true); $address->setshippingmethod('freeshipping_freeshipping'); //$carriercode = 'tablerate'; //$store->setconfig("carriers/{$carriercode}/handling_fee", 0); } if($isdifferentcost) { $address->setshippingamount($newcost); //$store->setconfig("carriers/{$carriercode}/handling_fee", $newcost); } if($isdifferentcost || $isfreeshipping) { $quote->settotalscollectedflag(true) ->collecttotals(); //->save(); } } } catch(exception $e) { mage::log('boom: '.$e->getmessage(), null, 'test.log', true); } homecoming $this; }

any ideas? tried this free shipping , works i'm not sure if it's thought rewrite core methods. if utilize free shipping, problem shipping cost still exists, of course.

using magento 1.9.0.1 onepage checkout.

edit: next illustration seems work i'm not sure if it's approach. i'm changing config values saved in coupled xml know. not sure if it's save enough. i'm changing handling_fee , not price. here is:

public function salesquotecollecttotalsbefore(varien_event_observer $observer) { $quote = $observer->getquote(); $address = $quote->getshippingaddress(); $store = mage::app()->getstore($quote->getstoreid()); if($address->getcountry() == 'ie') { $currencyrates = mage::getmodel('directory/currency') ->getcurrencyrates(mage::app()->getbasecurrencycode(), array_values(mage::getmodel('directory/currency') ->getconfigallowcurrencies())); $shippingcostineur = (float)$store->getconfig('carriers/eservice_shippingrates/fixed_shipping_price'); $freeshippingsubtotalineur = (float)$store->getconfig('carriers/eservice_shippingrates/free_shipping_min_subtotal'); $newcost = $shippingcostineur/$currencyrates['eur']; if(mage::app()->getstore()->getcurrentcurrencycode() == 'eur') { $subtotalineur = $quote->getsubtotal(); } else { $basesubtotal = $quote->getbasesubtotal(); $subtotalineur = $basesubtotal*$currencyrates['eur']; } if($subtotalineur >= $freeshippingsubtotalineur) { $store->setconfig('carriers/tablerate/name', 'free'); $newcost = 0; } else { $store->setconfig('carriers/tablerate/name', $store->getconfig('carriers/eservice_shippingrates/method_name')); } $store->setconfig('carriers/tablerate/title', $store->getconfig('carriers/eservice_shippingrates/title')); $store->setconfig("carriers/tablerate/handling_fee", $newcost); } homecoming $this; }

magento magento-1.9

No comments:

Post a Comment