Перетворити замовлення на котирування та завантажити в поточний кошик


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

та подібні підходи, але все ще не завантажують цитату. Дуже дякую!

Відповіді:


9

@ user1240207

Будь ласка, використовуйте наведений нижче код. Це може вам допомогти.

Mage :: getSingleton ('замовлення / сесія') -> setQuoteId ($ _ quo-> 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? що вниз? будь-хто скажіть нам?
Кейул Шах

Поняття не маю, як це було знято. Але я також перевірив, чи буде це працювати, на жаль, це не зробило трюку.
користувач1240207

@ 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)методу. Він приймає замовлення як вхід і виводить новий об'єкт цитати.

Вам потрібно викликати додаткові функції для перетворення адреси виставлення рахунків / доставки, предметів тощо. Для кожного об'єкта ви знайдете функцію цього класу.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.