Convertir pedido a cotización y cargar al carro actual

10

Puedo convertir con éxito convertir un pedido en presupuesto, pero aún así no pude cargarlo en el carrito actual. Probé varios métodos pero fue en vano. Aquí está el más simple:

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

Pude obtener el ID de presupuesto pero el objeto de presupuesto no se carga en el carrito actual.

También intenté

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

y enfoques similares pero aún no carga la cotización. ¡Muchas gracias!

usuario1240207
fuente

Respuestas:

9

@ user1240207

Por favor use el siguiente código. Te puede ayudar.

Mage :: getSingleton ('pago / sesión') -> setQuoteId ($ _ quote-> getId ());

Código de convertir un pedido para cotizar, por favor, utilice a continuación:

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

Aquí el proceso:

Obtener cotización actual

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

Convertir orden a cotización

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

Cotización activa

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

Combine su presupuesto actual y solicite un presupuesto inverso

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

establecer presupuesto para la sesión de pago

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();
    }
Amit Bera
fuente
¿Y? que abajo por favor alguien nos dice?
Keyul Shah
No tengo idea de cómo fue rechazado. Pero también comprobé si funcionaría, desafortunadamente no funcionó.
user1240207
@ KeyulShah, no sabía por qué algunas personas rechazan el voto sin ningún motivo
Amit Bera
@AmitBera: hmm Mejor suerte la próxima vez.
Keyul Shah
3

La respuesta anterior solo funciona si la cotización aún está disponible en la base de datos. Me encontré con una situación en la que este ya no era el caso, por lo que este código no funciona:

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

En cambio, podemos usar el Mage_Sales_Model_Convert_Orderpara convertir un pedido existente nuevamente en una nueva cotización usando el toQuote(Mage_Sales_Model_Order $order)método. Toma un pedido como entrada y genera un nuevo objeto de presupuesto.

Es necesario llamar a funciones adicionales para convertir la dirección de facturación / envío, artículos, etc. Para cada objeto, encontrará una función en esta clase.

Wouter
fuente