Reescreva o modelo para evitar a alteração do método de envio na fase de revisão do pedido na finalização da compra

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

Pergunta

Estou tentando substituir uma classe de modelo para evitar que os clientes alterem o endereço e o método de entrega no estágio (final) de revisão do pedido na finalização da compra, usando esta sugestão.Este é o ponto em que o cliente retornou do PayPal para verificar o pedido antes de finalmente clicar no botão 'Fazer pedido'.Nós pré-acordamos os custos de envio com nossos clientes por meio de um orçamento, portanto, dar-lhes a opção de alterar o método de envio não faz sentido.

Esta é minha primeira tentativa de fazer isso no Magento.Parece que estou aproximadamente lá, mas não está funcionando:

Review Order Shipping Method is still editable

Se alguém com experiência em substituir classes de modelo no Magento pudesse me dizer onde estou errando, seria fantástico.

(1)
(a) Crie /app/code/local/Lms/Paypal/Model/Express e copie em /app/code/core/Mage/Paypal/Model/Express/Checkout.php

(b) Renomeie a classe em Checkout.php de:Mage_Paypal_model_express_checkout para:Lms_Paypal_Model_Express_Checkout estende Mage_Paypal_Model_Express_Checkout

(c) Limpe o corpo da classe e substitua apenas por esta função:

/**
 * 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) Agora crie o diretório /app/code/local/Lms/Paypal/etc/
(b) Crie o arquivo Config.xml nesse diretório e coloque este código lá:

<?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) Agora vá para /app/etc/modules/
(b) Crie Lms_Paypal.xml nesse diretório e coloque este código em Lms_Paypal.xml:

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

Solução

Você está indo para o lado errado /app/code/local/Lms/Paypal/etc/config.xml e arquivo de modelo

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

Substituir config.xml código do arquivo 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>

Para

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

Substitua também o código no arquivo 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();
}

Para

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 em: CC-BY-SA com atribuição
Não afiliado a magento.stackexchange
scroll top