No se puede obtener el código postal de la dirección de envío en la página de pedido de Crear en el panel de administración
-
29-09-2020 - |
Pregunta
Estoy usando CE 1.9.2.2 configurado para el sitio web multi.
Estoy tratando de resolver un error en un módulo de envío que restringe ciertos Pincodes.
El módulo funciona bien en el lado frontest pero, lamentablemente, falla si el pedido se crea en el panel de administración o si intento agregar comentarios a un pedido.
Después de la depuración, descubrí que el observador no logra obtener el código postal de la dirección de envío.
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>
observador.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
{
}
}
Durante la depuración, descubrí que la función a continuación devuelve el valor vacío en la página de pedido del panel de administración y, por lo tanto, el código de comparación del código postal en el archivo de observador falla en el panel de administración.
$address = Mage::getSingleton('checkout/session')->getQuote()->getShippingAddress();
$address->getData('postcode');
Solución
en su observador, en lugar de
$address = Mage::getSingleton('checkout/session')->getQuote()
->getShippingAddress();
PUT
$address = $observer->getEvent()->getOrder()
->getShippingAddress();