Converti l'ordine in preventivo e carica nel carrello corrente


10

Posso convertire con successo convertire un ordine in preventivo ma non riesco ancora a caricarlo nel carrello corrente. Ho provato diversi metodi ma senza risultati. Ecco il più semplice:

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

Sono stato in grado di ottenere l'ID preventivo, ma l'oggetto preventivo non viene caricato nel carrello corrente.

Ho anche provato

$_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 approcci simili ma ancora non caricando il preventivo. Grazie mille!

Risposte:


9

@ user1240207

Si prega di utilizzare il seguente codice. Ti può aiutare.

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

Il codice converte un ordine in preventivo, si prega di utilizzare di seguito:

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

Ecco il processo:

Ottieni preventivo attuale

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

Converti Ordine in preventivo

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

Preventivo attivo

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

Unisci il tuo preventivo attuale e ordina il preventivo inverso

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

imposta il preventivo per la sessione di pagamento

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();
    }

Y? cosa giù? per favore qualcuno ci dica?
Keyul Shah

Non ho idea di come sia stato downvoted. Ma ho anche controllato se avrebbe funzionato, sfortunatamente non ha funzionato.
user1240207

@ KeyulShah, non sapevo perché alcune persone non votassero senza motivo
Amit Bera

@AmitBera: hmm Better Luck La prossima volta.
Keyul Shah

3

La risposta precedente funziona solo se il preventivo è ancora disponibile nel DB. Mi sono imbattuto in una situazione in cui questo non era più il caso, quindi questo codice non funziona:

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

Invece, possiamo usare il Mage_Sales_Model_Convert_Orderper convertire un ordine esistente in un nuovo preventivo usando il toQuote(Mage_Sales_Model_Order $order)metodo Prende un ordine come input e genera un nuovo oggetto preventivo.

È necessario chiamare funzioni extra per convertire l'indirizzo di fatturazione / spedizione, articoli, ecc. Per ogni oggetto troverai una funzione in questa classe.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.