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!

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

¿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.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.