Konwertuj zamówienie na ofertę i ładuj do bieżącego koszyka

10

Mogę z powodzeniem przekonwertować zamówienie na wycenę, ale nadal nie mogę załadować go do bieżącego koszyka. Próbowałem kilku metod, ale bezskutecznie. Oto najprostszy:

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

Udało mi się uzyskać identyfikator oferty, ale obiekt oferty nie ładuje się do bieżącego koszyka.

Też próbowałem

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

i podobne podejścia, ale wciąż nie ładuje oferty. Dziękuję Ci bardzo!

użytkownik1240207
źródło

Odpowiedzi:

9

@ user1240207

Proszę użyć poniższego kodu. To może ci pomóc.

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

Kod konwertuj zamówienie na ofertę proszę użyć poniżej:

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

Oto proces:

Uzyskaj aktualną wycenę

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

Konwertuj zamówienie na ofertę

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

Aktywna wycena

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

Scal aktualną ofertę i zamów odwrotną ofertę

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

ustaw wycenę sesji kasowej

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
źródło
Y? co w dół? proszę, ktoś nam powie?
Keyul Shah
Nie mam pojęcia, jak zostało to przegłosowane. Ale sprawdziłem też, czy to zadziała, niestety nie zadziałało.
user1240207
@ KeyulShah, nie wiedziałem, dlaczego niektórzy głosują bez żadnego powodu
Amit Bera
@AmitBera: hmm Lepsze szczęście Następnym razem.
Keyul Shah
3

Poprzednia odpowiedź działa tylko wtedy, gdy cytat jest nadal dostępny w bazie danych. Natrafiłem na sytuację, w której już tak nie było, więc ten kod nie działa:

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

Zamiast tego możemy użyć metody Mage_Sales_Model_Convert_Orderdo konwersji istniejącego zamówienia z powrotem na nową ofertę za pomocą toQuote(Mage_Sales_Model_Order $order)metody Przyjmuje zamówienie jako dane wejściowe i generuje nowy obiekt cytowania.

Musisz wywołać dodatkowe funkcje do konwersji adresu rozliczeniowego / wysyłkowego, przedmiotów itp. Dla każdego obiektu znajdziesz funkcję w tej klasie.

Wouter
źródło