Domanda

Ho aggiunto un nuovo modulo metodo di spedizione per il mio negozio Magento. Questo modulo permette all'utente di impostare tariffe di spedizione in base di trasporto del paese indirizzo.
Ho aggiunto un osservatore indirizzo salvataggio dopo la spedizione del cliente, il codice è al di sotto. In config.xml ho aggiunto nuovo evento.

<events>
             <checkout_controller_onepage_save_shipping_address_after>
                <observers>
                    <zones>
                        <type>model</type>
                        <class>zones/observer</class>
                        <method>getShippingMethods</method>
                    </zones>
                </observers>
            </checkout_controller_onepage_save_shipping_address_after>
        </events>

Dopo che ho inviato l'evento nel metodo di OnepageController > SaveShipping come,

Mage::dispatchEvent('checkout_controller_onepage_save_shipping_address_after', array('page' => $model, 'request' => $this->getRequest()));

Ciò richiede l'osservatore quando salvo il mio indirizzo di spedizione. Ma non ho idea di come cambiare la carica metodo di spedizione come per il paese indirizzo di spedizione.
Ho usato questa discussione http://www.opencart60s.com/magento/changing-or-set-shipping-price-on-fly-from-event-or-observer-in-magento.html- 13407.html per cambiare il costo di trasporto. Ma senza successo.
Ho bisogno di cambiare il mio forfettario di trasporto secondo il paese.
Ho già creato il modulo, che verranno memorizzati i paese e spedizione dettagli della tariffa. Posso ottenere il tasso di trasporto con quel modulo. Ora, non mi resta che aggiornare il valore forfettario con il valore di tasso di trasporto personalizzato. Please help me la mia impostazione forfettario come per il codice del paese. Grazie ..

È stato utile?

Soluzione

Ho trovato la soluzione da questo link qui: http://www.magentocommerce.com/ schede / viewthread / 316685 /
Nel mio osservatore ho aggiunto sotto il codice per cambiare le mie tariffe di spedizione come da selezione del paese in indirizzo di trasporto.

class Pnk_Zones_Model_Observer
{
    public function getShippingMethods($observer)
    {
        $session = Mage::getSingleton('checkout/session');
        $quote=Mage::getSingleton('checkout/session')->getQuote();
        $quoteid=$quote->getId(); 
        if($quoteid) {                    
        try{
                $address=$quote->getShippingAddress();
                if($address->getAddressType()=='shipping'){
            //    echo '<pre>'; print_r($events->getQuoteAddress()->getData()); exit;
                //$price=40;
                $countryId = $address->getCountry();
                //Code to get Shipping rate from my zone module //
                $shippingRateCollection = Mage::getModel('zones/zones')->getCollection();
                $shippingRateCollection->addFieldToSelect('*');
                $shippingRateCollection->getSelect()->where("find_in_set('".$countryId."', `countries`)");


                foreach ($shippingRateCollection as $shipping){
                    $price = $shipping->getShippingRate();
                }
//              echo "Price = ".$price;
                // Find if our shipping has been included.
                $rates = $address->collectShippingRates()
                         ->getGroupedAllShippingRates();

                foreach ($rates as $carrier) {
                    foreach ($carrier as $rate) {
                        // Check with your custom shipping method code
                if($rate->getCode() == 'zones'){
                            $rate->setPrice($price);
                            $rate->save();
               }
                    }
                }
                    $this->collectTotals($quote,$price);
                }            
                $quote->collectTotals();
            } catch (Exception $e) {            
                Mage::logException($e);
                $response['error'] = $e->getMessage();
            }
        }
    }   

    public function collectTotals($quote,$price){
        $quoteid=$quote->getId(); 
        $shippingcode='freeshipping_freeshipping';
        if($quoteid) {                    
                try{
                $quote->setSubtotal(0);
                $quote->setBaseSubtotal(0);
                $quote->setSubtotalWithDiscount(0);
                $quote->setBaseSubtotalWithDiscount(0);
                $quote->setGrandTotal(0);
                $quote->setBaseGrandTotal(0);

                $quote->getShippingAddress()->setShippingMethod($shippingcode)/* ->collectTotals() */->save();
                $quote->save();
                foreach ($quote->getAllAddresses() as $address) {
                    $address->setSubtotal(0);
                    $address->setBaseSubtotal(0);

                    $address->setGrandTotal(0);
                    $address->setBaseGrandTotal(0);

                    $address->collectTotals();

                    $quote->setSubtotal((float) $quote->getSubtotal() + $address->getSubtotal());
                    $quote->setBaseSubtotal((float) $quote->getBaseSubtotal() + $address->getBaseSubtotal());

                    $quote->setSubtotalWithDiscount(
                        (float) $quote->getSubtotalWithDiscount() + $address->getSubtotalWithDiscount()
                    );
                    $quote->setBaseSubtotalWithDiscount(
                        (float) $quote->getBaseSubtotalWithDiscount() + $address->getBaseSubtotalWithDiscount()
                    );

                    $quote->setGrandTotal((float) $quote->getGrandTotal() + $address->getGrandTotal());
                    $quote->setBaseGrandTotal((float) $quote->getBaseGrandTotal() + $address->getBaseGrandTotal());

                    $address->setShippingAmount($price);
                    $address->setBaseShippingAmount($price);
                    $address->save();
                }

                    $response['message'] = 'Succcess';
                } catch (Exception $e) {            
                        Mage::logException($e);
                        $response['error'] = $e->getMessage();
                 }
        }
    }

}

Altri suggerimenti

Thebod costruito un modulo che fa per voi, potrebbe aiutare: https://github.com/thebod/Thebod_Shippingrates

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a magento.stackexchange
scroll top