Reescribir el modelo para evitar cambiar el método de envío en la etapa de revisión del pedido del proceso de pago

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

Pregunta

Estoy intentando anular una clase de modelo para evitar que los clientes cambien la dirección y el método de envío en la etapa (final) de revisión del pedido, usando esta sugerencia.Este es el punto en el que el cliente regresa de PayPal para verificar el pedido antes de finalmente hacer clic en el botón "Realizar pedido".Acordamos previamente los costos de envío con nuestros clientes mediante una cotización, por lo que darles la opción de cambiar el método de envío no tiene ningún sentido.

Este es mi primer intento de hacer esto en Magento.Se siente como si estuviera cerca de ahí pero no funciona:

Review Order Shipping Method is still editable

Si alguien con experiencia en anular clases de modelos en Magento pudiera decirme en qué me estoy equivocando, sería fantástico.

(1)
(a) Cree /app/code/local/Lms/Paypal/Model/Express y cópielo en /app/code/core/Mage/Paypal/Model/Express/Checkout.php

(b) Cambie el nombre de la clase en Checkout.php de:Mage_paypal_model_express_checkout a:Lms_Paypal_Model_Express_Checkout extiende Mage_Paypal_Model_Express_Checkout

(c) Borre el cuerpo de la clase y reemplácelo solo con esta función:

/**
 * Check whether order review has enough data to initialize
 *
 * @param $token
 * @throws Mage_Core_Exception
 */
public function prepareOrderReview($token = null)
{
    parent::prepareOrderReview($token);
    $this->_quote->setMayEditShippingAddress(false);
    $this->_quote->setMayEditShippingMethod(false);
    $this->_ignoreAddressValidation();
    $this->_quote->collectTotals()->save();
}

(2)
(a) Ahora cree el directorio /app/code/local/Lms/Paypal/etc/
(b) Cree el archivo Config.xml en ese directorio y coloque este código allí:

<?xml version="1.0"?>
<config>
    <modules>
        <lms_paypal>
            <version>0.1</version>
        </lms_paypal>
    </modules>
    <global>
       <models>
          <paypal>
              <rewrite>
                  <express>Lms_Paypal_Model_Express</express>
              </rewrite>
          </paypal>
       </models>
    </global>
</config>

(3)
(a) Ahora vaya a /app/etc/modules/
(b) Cree Lms_Paypal.xml en ese directorio y coloque este código en Lms_Paypal.xml:

<?xml version="1.0"?>  
<config>  
    <modules>  
        <Lms_Paypal>  
            <active>true</active>  
            <codePool>local</codePool>  
        </Lms_Paypal>  
    </modules>  
</config> 
¿Fue útil?

Solución

Estás yendo por el camino equivocado /app/code/local/Lms/Paypal/etc/config.xml y archivo de modelo

/app/code/local/Lms/Paypal/Model/Express/Checkout.php

Reemplazar config.xml código de archivo de

<?xml version="1.0"?>
<config>
    <modules>
        <lms_paypal>
            <version>0.1</version>
        </lms_paypal>
    </modules>
    <global>
       <models>
          <paypal>
              <rewrite>
                  <express>Lms_Paypal_Model_Express</express>
              </rewrite>
          </paypal>
       </models>
    </global>
</config>

A

<?xml version="1.0"?>
<config>
    <modules>
        <Lms_Paypal>
            <version>0.1</version>
        </Lms_Paypal>
    </modules>
    <global>
       <models>
          <paypal>
              <rewrite>
                  <express_checkout>Lms_Paypal_Model_Express_Checkout</express_checkout>
              </rewrite>
          </paypal>
       </models>
    </global>
</config>

También reemplace el código en el archivo app/code/local/Lms/Paypal/Model/Express/Checkout.php de

public function prepareOrderReview($token = null)
{
    parent::prepareOrderReview($token);
    $this->_quote->setMayEditShippingAddress(false);
    $this->_quote->setMayEditShippingMethod(false);
    $this->_ignoreAddressValidation();
    $this->_quote->collectTotals()->save();
}

A

class Lms_Paypal_Model_Express_Checkout extends Mage_Paypal_Model_Express_Checkout
{

    public function prepareOrderReview($token = null)
    {
        $payment = $this->_quote->getPayment();
        if (!$payment || !$payment->getAdditionalInformation(self::PAYMENT_INFO_TRANSPORT_PAYER_ID)) {
            Mage::throwException(Mage::helper('paypal')->__('Payer is not identified.'));
        }
        $this->_quote->setMayEditShippingAddress(false);
        $this->_quote->setMayEditShippingMethod(false);
        $this->_ignoreAddressValidation();
        $this->_quote->collectTotals()->save();
    }
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a magento.stackexchange
scroll top