注文を見積もりに変換し、現在のカートに読み込む


10

注文を見積もりに変換できましたが、現在のカートに読み込めませんでした。私はいくつかの方法を試しましたが、役に立ちませんでした。これが最も簡単な方法です。

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

見積もりIDを取得できましたが、見積もりオブジェクトが現在のカートに読み込まれません。

私も試しました

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

と同様のアプローチがまだ引用をロードしていません。どうもありがとうございました!

回答:


9

@ user1240207

以下のコードを使用してください。それはあなたを助けるかもしれません。

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

注文を見積にコード変換するには、以下を使用してください:

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

ここでのプロセス:

現在の見積もりを取得

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

注文を見積もりに変換

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

アクティブな見積もり

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

現在の見積もりをマージし、逆見積もりを注文する

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

チェックアウトセッションに見積もりを設定

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

え?どうした?誰か教えてください
Keyul Shah 2014

それがどのようにして反対投票されたかはわかりません。しかし、うまくいくかどうかも確認しましたが、残念ながらうまくいきませんでした。
user1240207 2014年

@KeyulShah、私はなぜ何人かの人々が理由なしに反対票を投じる理由を知りませんでした
Amit Bera

@AmitBera:うーん幸運次の時間。
Keyul Shah 2014

3

前の回答は、DBで見積がまだ利用できる場合にのみ機能します。私はこれがもはや当てはまらない状況に遭遇したので、このコードは機能しません:

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

代わりに、メソッドを使用して、Mage_Sales_Model_Convert_Orderを使用して既存の注文を新しい見積もりに戻すことができますtoQuote(Mage_Sales_Model_Order $order)。入力として注文を取り、新しい見積オブジェクトを出力します。

請求先/配送先住所、アイテムなどを変換するには、追加の関数を呼び出す必要があります。オブジェクトごとに、このクラスの関数が見つかります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.