将订单转换为报价并加载到当前购物车


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

和类似的方法,但仍未加载报价。非常感谢你!

Answers:


9

@ user1240207

请使用以下代码。它将为您提供帮助。

法师:: 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,我不知道为什么有些人无缘无故地投了反对票
阿米特·贝拉

@AmitBera:嗯,下次好运。
Keyul Shah 2014年

3

仅在数据库中仍提供引号的情况下,以上答案才有效。我遇到了一种情况,不再是这种情况,因此此代码不起作用:

$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)。它以订单作为输入并输出新的报价对象。

您确实需要调用额外的函数来转换帐单/送货地址,项目等。对于每个对象,您都会在此类中找到一个函数。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.