Impossible d'obtenir un code postal de l'adresse de livraison dans Créer une page de commande dans le panneau d'administration

magento.stackexchange https://magento.stackexchange.com/questions/103717

Question

J'utilise CE 1.9.2.2 configuré pour Multi Site Web.

J'essaie de résoudre une erreur dans un module d'expédition qui limite certains pincodes.

Le module fonctionne bien sur le côté frontal, mais malheureusement, il échoue si la commande est créée à partir du panneau d'administration ou si j'essaie d'ajouter des commentaires à une commande.

Après le débogage, j'ai découvert que l'observateur ne parvient pas à obtenir le code postal de l'adresse de livraison.

config.xml

<events>
  <sales_order_save_before>
    <observers>
      <sales_order_save_before_handler>
        <type>model</type>
        <class>shippingrestriction/observer</class>
        <method>Shippingzip</method>
        <args></args>
      </sales_order_save_before_handler>
    </observers>
  </sales_order_save_before>
</events>

Observateur.php

public function Shippingzip(Varien_Event_Observer $observer)
        {
            $collection = Mage::getModel('shippingrestriction/shippingzip')->getCollection();

            $data = array();
            foreach ($collection as $value)
            {
                $data[] = $value->zipcode;
            }
            $address = Mage::getSingleton('checkout/session')->getQuote()
                                  ->getShippingAddress();   

            if (in_array($address->getData('postcode'),$data))
            {
                throw new Mage_Core_Exception(
                Mage::helper('catalog')->__('Shipping is not available for your location.')
                );die;
            }
            else
            {
            }

        }

Lors du débogage, j'ai découvert que la fonction ci-dessous renvoie la valeur vide dans le panneau d'administrateur Créer une page de commande et que le code de comparaison des codes postaux dans le fichier d'observateur échoue dans le panneau d'administration.

$address =  Mage::getSingleton('checkout/session')->getQuote()->getShippingAddress();
$address->getData('postcode');

Était-ce utile?

La solution

dans votre observateur, au lieu de

$address = Mage::getSingleton('checkout/session')->getQuote()
                                  ->getShippingAddress(); 

mettre

$address = $observer->getEvent()->getOrder()
                                  ->getShippingAddress();

Licencié sous: CC-BY-SA avec attribution
Non affilié à magento.stackexchange
scroll top