Ubah Pesanan menjadi Penawaran dan Muat ke Troli Saat Ini

10

Saya dapat dengan sukses mengkonversi konversi pesanan menjadi kutipan tetapi saya masih tidak dapat memuatnya ke keranjang saat ini. Saya mencoba beberapa metode tetapi tidak berhasil. Inilah yang paling sederhana:

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

Saya bisa mendapatkan ID kutipan tetapi objek kutipan tidak memuat ke troli saat ini.

Saya juga mencoba

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

dan pendekatan serupa tetapi masih belum memuat kutipan. Terima kasih banyak!

pengguna1240207
sumber

Jawaban:

9

@ user1240207

Silakan gunakan kode di bawah ini. Ini akan membantu Anda.

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

Kode konversi pesanan menjadi penawaran harap gunakan di bawah ini:

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

Berikut prosesnya:

Dapatkan penawaran terkini

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

Konversi Pesanan menjadi penawaran

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

Kutipan aktif

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

Gabungkan penawaran Anda saat ini dan pesan Penawaran terbalik

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

setel kutipan ke sesi 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
sumber
Y? apa yang turun? tolong ada yang memberi tahu kami?
Keyul Shah
Tidak tahu bagaimana itu diturunkan. Tetapi saya juga memeriksa apakah itu akan berhasil, sayangnya itu tidak berhasil.
user1240207
@ KeyulShah, saya tidak tahu mengapa beberapa orang memilih tanpa alasan
Amit Bera
@AmitBera: hmm Better Luck Lain kali.
Keyul Shah
3

Jawaban sebelumnya hanya berfungsi jika kutipan masih tersedia di DB. Saya mengalami situasi di mana ini tidak lagi terjadi, jadi kode ini tidak berfungsi:

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

Sebagai gantinya, kita dapat menggunakan Mage_Sales_Model_Convert_Orderuntuk mengubah pesanan yang ada kembali menjadi penawaran baru menggunakan toQuote(Mage_Sales_Model_Order $order)metode ini. Dibutuhkan pesanan sebagai input dan output objek kutipan baru.

Anda perlu memanggil fungsi tambahan untuk mengonversi alamat penagihan / pengiriman, barang, dll. Untuk setiap objek Anda akan menemukan fungsi di kelas ini.

Wouter
sumber