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

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

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');

¿Fue útil?

Solución

en su observador, en lugar de

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

PUT

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a magento.stackexchange
scroll top