Преобразуйте заказ в предложение и загрузите в текущую корзину
Я могу успешно конвертировать преобразовать заказ в предложение, но я все еще не смог загрузить его в текущую корзину. Я попробовал несколько методов, но безрезультатно. Вот самый простой из них:
$_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();
}
И аналогичные подходы, но все еще не загружающие цитату. Большое спасибо!
2 answers
@пользователь1240207
Пожалуйста, используйте приведенный ниже код. Это может вам помочь.
Маг::getSingleton('проверка/сеанс')->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();
}
Предыдущий ответ работает только в том случае, если цитата все еще доступна в БД. Я столкнулся с ситуацией, когда этого больше не было, поэтому этот код не работает:
$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)
. Он принимает заказ в качестве входных данных и выводит новый объект котировки.
Вам действительно нужно вызвать дополнительные функции для преобразования адреса выставления счетов/доставки, товаров и т.д. Для каждого объекта вы найдете функцию в этом классе.