Преобразовать заказ в котировку и загрузить в текущую корзину

10

Я могу успешно конвертировать конвертируемый заказ в квоту, но все равно не могу загрузить его в текущую корзину. Я пробовал несколько методов, но безрезультатно. Вот самый простой:

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

Мне удалось получить идентификатор цитаты, но объект цитаты не загружается в текущую корзину.

Я тоже пробовал

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

и подобные подходы, но все еще не загружая цитату. Большое спасибо!

user1240207
источник

Ответы:

9

@ user1240207

Пожалуйста, используйте код ниже. Это может помочь вам.

Mage :: getSingleton ( 'контроль / сессия') -> setQuoteId ($ _ цитирую> 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();
    }
Амит Бера
источник
Y? что вниз? пожалуйста, кто-нибудь сказать нам?
Кейул Шах
Понятия не имею, как это было понижено. Но я также проверил, сработает ли это, к сожалению, это не сработало.
user1240207
@ KeyulShah, я не знал, почему некоторые люди отказываются голосовать безо всякой причины
Амит Бера
@AmitBera: хмм лучше удачи в следующий раз.
Кейул Шах
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)метод. Он принимает заказ на вход и выводит новый объект цитаты.

Вам необходимо вызвать дополнительные функции для преобразования адреса выставления счета / доставки, предметов и т. Д. Для каждого объекта вы найдете функцию в этом классе.

Wouter
источник