Impossible d'obtenir un code postal de l'adresse de livraison dans Créer une page de commande dans le panneau d'administration
-
29-09-2020 - |
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.
<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');
La solution
dans votre observateur, au lieu de
$address = Mage::getSingleton('checkout/session')->getQuote()
->getShippingAddress();
mettre
$address = $observer->getEvent()->getOrder()
->getShippingAddress();