Impossibile ottenere il codice postale dall'indirizzo di spedizione nella pagina Creazione ordine nel pannello di amministrazione

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

Domanda

Sto usando CE 1.9.2.2 configurato per il multi sito web.

Sto cercando di risolvere un errore in un modulo di spedizione che limita determinati Pincodi.

Il modulo funziona bene sul lato frontend, ma sfortunatamente non riesce se l'ordine viene creato dal pannello di amministrazione o se provo ad aggiungere commenti a un ordine.

Dopo un bit di debug di debug ho scoperto che l'osservatore non riesce a ottenere il codice postale dall'indirizzo di spedizione.

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>
.

Observer.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 il debugging ho scoperto che la funzione seguente restituisce il valore vuoto nel pannello di amministrazione Creare la pagina dell'ordine e quindi il codice di confronto del codice postale nel file dell'osservatore non riesce nel pannello di amministrazione.

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

È stato utile?

Soluzione

nel tuo osservatore, invece di

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

PUT

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

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