Bestellung in Angebot umwandeln und in aktuellen Warenkorb laden


10

Ich kann eine Bestellung erfolgreich in ein Angebot umwandeln, aber ich konnte sie immer noch nicht in den aktuellen Warenkorb laden. Ich habe verschiedene Methoden ausprobiert, aber ohne Erfolg. Hier ist die einfachste:

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

Ich konnte die Angebots-ID abrufen, aber das Angebotsobjekt wird nicht in den aktuellen Warenkorb geladen.

Ich habe es auch versucht

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

und ähnliche Ansätze, aber immer noch nicht das Zitat laden. Vielen Dank!

Antworten:


9

@ user1240207

Bitte verwenden Sie den folgenden Code. Es kann Ihnen helfen.

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

Code konvertieren Sie eine Bestellung in Angebot bitte unten verwendet:

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

Hier der Prozess:

Aktuelles Angebot einholen

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

Bestellung in Angebot umwandeln

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

Aktives Angebot

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

Führen Sie Ihr aktuelles Angebot zusammen und bestellen Sie das umgekehrte Angebot

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

Angebot auf Checkout-Sitzung setzen

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? was runter? Bitte sagt uns jemand etwas?
Keyul Shah

Keine Ahnung, wie es herabgestimmt wurde. Aber ich habe auch geprüft, ob es funktionieren würde, leider hat es nicht geklappt.
user1240207

@ KeyulShah, ich wusste nicht, warum einige Leute ohne Grund abstimmen
Amit Bera

@AmitBera: hmm Besseres Glück beim nächsten Mal.
Keyul Shah

3

Die vorherige Antwort funktioniert nur, wenn das Angebot noch in der Datenbank verfügbar ist. Ich bin auf eine Situation gestoßen, in der dies nicht mehr der Fall war, sodass dieser Code nicht funktioniert:

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

Stattdessen können wir Mage_Sales_Model_Convert_Ordermit der toQuote(Mage_Sales_Model_Order $order)Methode eine vorhandene Bestellung wieder in ein neues Angebot umwandeln . Es nimmt eine Bestellung als Eingabe entgegen und gibt ein neues Angebotsobjekt aus.

Sie müssen zusätzliche Funktionen zum Konvertieren der Rechnungs- / Versandadresse, Artikel usw. aufrufen. Für jedes Objekt finden Sie eine Funktion in dieser Klasse.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.