Convertir la commande en devis et charger dans le panier actuel

10

Je peux réussir à convertir une commande en devis mais je ne pouvais toujours pas la charger dans le panier actuel. J'ai essayé plusieurs méthodes mais en vain. Voici le plus simple:

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

J'ai pu obtenir l'ID de devis mais l'objet de devis ne se charge pas dans le panier actuel.

J'ai aussi essayé

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

et des approches similaires, mais ne charge toujours pas le devis. Merci beaucoup!

user1240207
la source

Réponses:

9

@ user1240207

Veuillez utiliser le code ci-dessous. Cela peut vous aider.

Mage :: getSingleton ('checkout / session') -> setQuoteId ($ _ quote-> getId ());

Code convertir une commande en devis, veuillez utiliser ci-dessous:

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

Voici le processus:

Obtenir un devis actuel

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

Convertir la commande en devis

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

Devis actif

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

Fusionnez votre devis actuel et commandez le devis inversé

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

définir un devis pour la session de paiement

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
la source
Oui? quoi de bas? s'il vous plaît quelqu'un nous dit?
Keyul Shah
Aucune idée de la façon dont il a été voté. Mais j'ai aussi vérifié si ça marcherait, malheureusement ça n'a pas fait l'affaire.
user1240207
@ KeyulShah, je ne savais pas pourquoi certaines personnes refusent de voter sans aucune raison
Amit Bera
@AmitBera: hmm meilleure chance la prochaine fois.
Keyul Shah
3

La réponse précédente ne fonctionne que si le devis est toujours disponible dans la base de données. J'ai rencontré une situation où ce n'était plus le cas, donc ce code ne fonctionne pas:

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

Au lieu de cela, nous pouvons utiliser le Mage_Sales_Model_Convert_Orderpour reconvertir une commande existante en un nouveau devis en utilisant la toQuote(Mage_Sales_Model_Order $order)méthode. Il prend une commande en entrée et sort un nouvel objet devis.

Vous devez appeler des fonctions supplémentaires pour convertir l'adresse de facturation / d'expédition, les articles, etc. Pour chaque objet, vous trouverez une fonction dans cette classe.

Wouter
la source