Converter pedido em cotação e carregar no carrinho atual

10

Posso converter com sucesso converter um pedido em cotação, mas ainda não consegui carregá-lo no carrinho atual. Eu tentei vários métodos, mas sem sucesso. Aqui está o mais simples:

$_quote = Mage::getModel('sales/convert_order')->toQuote($order)->save();
$_quote = Mage::getModel('sales/quote')->load($_quote->getId());
$_quote->setIsActive(true)->save();

Consegui obter o ID da cotação, mas o objeto de cotação não é carregado no carrinho atual.

Eu também tentei

$_quote = Mage::getModel('sales/convert_order')->toQuote($order)->save();
$_quote = Mage::getModel('sales/quote')->load($_quote->getId());

if ($_checkoutQuote->getId() != $_quote->getId() && $_quote->getId()) {
    $_checkoutQuote->merge($_quote)->save();
    Mage::getModel('checkout/session')
                    ->setQuote($_checkoutQuote)
                    ->init();
    Mage::getSingleton('checkout/session')->getQuote()->setIsActive(true)->save();
}

e abordagens semelhantes, mas ainda não carregando a cotação. Muito obrigado!

user1240207
fonte

Respostas:

9

@ user1240207

Por favor, use o código abaixo. Isso pode ajudá-lo.

Mage :: getSingleton ('checkout / session') -> setQuoteId ($ _ quote-> getId ());

Código converter um pedido para citar por favor use abaixo:

   $quote = Mage::getModel('sales/quote')->load($order->getQuoteId());
    if ($quote->getId()) {
        $quote->setIsActive(1)
            //->setReservedOrderId(null)
            ->save();
        Mage::getSingleton('checkout/session')
            ->replaceQuote($quote);
           // ->unsLastRealOrderId();
    }

Aqui está o processo:

Obter cotação atual

$currenQuoteId=Mage::getSingleton('checkout/session')->getQuoteId();

Converter pedido em cotação

$OrderQuote = Mage::getModel('sales/quote')->load($order->getQuoteId());

Orçamento ativo

if ($OrderQuote>getId()) {
    $OrderQuote>setIsActive(1)
        //->setReservedOrderId(null)
        ->save();
}

Mesclar sua cotação atual e solicitar a cotação reversa

if ($OrderQuote->getId() && $currenQuoteId != $OrderQuote->getId()) {
    if ($currenQuoteId) {
    $OrderQuote->merge(Mage::getSingleton('checkout/session')->getQuote())
        ->collectTotals()
        ->save();
    }

definir cotação para a sessão de checkout

Mage::getSingleton('checkout/session')->setQuoteId($OrderQuote->getId());

 if (Mage::getSingleton('checkout/session')->_quote) {
            Mage::getSingleton('checkout/session')->delete();
        }
       Mage::getSingleton('checkout/session') = $OrderQuote;
    } else {
        Mage::getSingleton('checkout/session')->getQuote()->getBillingAddress();
        Mage::getSingleton('checkout/session')->getQuote()->getShippingAddress();
        Mage::getSingleton('checkout/session')->getQuote()->setCustomer(Mage::getSingleton('customer/session')->getCustomer())
            ->setTotalsCollectedFlag(false)
            ->collectTotals()
            ->save();
    }
Amit Bera
fonte
Y? que baixo? por favor, alguém nos diga?
precisa saber é o seguinte
Não faço ideia de como foi rebaixado. Mas também verifiquei se funcionaria, infelizmente não funcionou.
user1240207
@ KeyulShah, eu não sabia por que algumas pessoas votam sem motivo
Amit Bera
@AmitBera: hmm Melhor sorte Da próxima vez.
precisa saber é o seguinte
3

A resposta anterior funciona apenas se a cotação ainda estiver disponível no banco de dados. Eu me deparei com uma situação em que isso não era mais o caso, então esse código não funciona:

$quote = Mage::getModel('sales/quote')->load($order->getQuoteId());
$quote->getId() => This is empty, in fact the whole model is empty!

Em vez disso, podemos usar o Mage_Sales_Model_Convert_Orderpara converter um pedido existente novamente em uma nova cotação usando o toQuote(Mage_Sales_Model_Order $order)método Ele recebe um pedido como entrada e gera um novo objeto de cotação.

Você precisa chamar funções extras para converter o endereço de cobrança / entrega, itens etc. Para cada objeto, você encontrará uma função nesta classe.

Wouter
fonte