7 votes

Comment transformer le champ "quote-item" en "order-item" ?

Je veux sauvegarder des informations personnalisées dans order_item-table . Ces informations ont été créées dans le panier. Je fais donc comme décrit dans este poste.

J'ai installé l'attribut :

$installer->addAttribute('quote_item', 'final_delivery_time', $settings);

$installer->addAttribute('order_item', 'final_delivery_time', $settings);

déclarer le jeu de champs dans le fichier config.xml

<fieldset>
        <sales_convert_quote_item>
            <final_delivery_time>
                <to_order_item>final_delivery_time</to_order_item>
            </final_delivery_time>
        </sales_convert_quote_item>

        <sales_convert_order_item>
            <final_delivery_time>
                <to_quote_item>*</to_quote_item>
                <to_invoice_item>*</to_invoice_item>
                <to_shipment_item>*</to_shipment_item>
                <to_cm_item>*</to_cm_item>
            </final_delivery_time>
        </sales_convert_order_item>
</fieldset>

et un peu de code dans le panier par exemple

$oQuote = Mage::getSingleton('checkout/session')->getQuote();
    foreach ( $oQuote->getAllItems() as $_item )
    {
        $orderItemId = $_item->getId();
        $_item->setFinalDeliveryTime('some Value');
        $_item->save();
    }

J'ai donc obtenu un devis et j'ai mon terrain. final_delivery_time avec cette valeur dans le sales_flat_quote_item tableau

Après avoir passé la commande dans onepage-review je devrais également avoir ce champ dans le champ sales_flat_order_item table mais il n'y a rien. Dans la colonne se trouve null . J'ai donc besoin que la valeur du champ soit enregistrée dans la commande.

6voto

Marco Points 237

J'ai trouvé la solution

c'est un observateur J'ajoute le code suivant

config.xml

...  
<events>
        <sales_convert_quote_item_to_order_item>
            <observers>
                <quoteitem_set_custom_data>
                    <class>DeliveryTime/observer</class>
                    <method>setCustomDataOnQuoteItem</method>
                </quoteitem_set_custom_data>
            </observers>
        </sales_convert_quote_item_to_order_item>
</events>
...

Observer.php

...
public function setCustomDataOnQuoteItem(Varien_Event_Observer $observer)
{

    $quote = Mage::getModel('checkout/cart')->getQuote();
    $orderItem = $observer->getOrderItem();
    foreach ( $quote->getAllVisibleItems() as $_item )
    {
        if ($_item->getSku() == $orderItem->getSku())
        {
            $orderItem->setFinalDeliveryTime($_item->getFinalDeliveryTime());
        }
    }
}
...

pour que tout soit enregistré dans l'ordre

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X