Dans les tables sales_flat_quote_item et sales_flat_quote, vous avez les champs « discount_amount » et « base_discount_amount » qui vous permettent d’obtenir la réduction obtenue sur chaque article.
Cependant, si plusieurs règles de prix panier sont appliquées à vos articles, le montant est cumulé est vous ne pouvez pas obtenir la réduction obtenue par telle ou telle règle.
Eviter la surcharge !
Cela tombe bien, on a un Observer qui renvoie le Quote Item, avec sa réduction sur le coupon calculé.
L’observer souhaité est le suivant : salesrule_validator_process
Il est appelé à chaque règle de prix panier appliquée à l’article du panier.
<events> <salesrule_validator_process> <observers> <minimax_salesrule_validator_process> <class>minimax_discountdetails/observer</class> <method>setDiscountAmountByRule</method> </minimax_salesrule_validator_process> </observers> </salesrule_validator_process> </events>
Organiser ses données
Nous avons donc notre observer qui contient nos données. Maintenant nous allons construire un tableau de la sorte :
$discountDetails[$ruleId] = array( 'discount_amount' => round($discountAmount,2), 'base_discount_amount' => round($discountAmount,2), );
Ce tableau est appliqué par item, on peut donc obtenir la valeur d’une règle prix panier par item.
Pour sauvegarder l’info en base, je la serialize. Il ne faut donc pas oublier de l’unserializer quand on la récupère !
Convert to Order Item
Nous avons l’info dans notre table sales_flat_quote_item. Maintenant, il faut la renvoyer vers notre table « sales_flat_order_item »
<fieldsets> <sales_convert_quote_item> <discount_details> <to_order_item>*</to_order_item> </discount_details> </sales_convert_quote_item> <sales_convert_order_item> <discount_details> <to_quote_item>*</to_quote_item> </discount_details> </sales_convert_order_item> </fieldsets>
Conclusion
Et voilà, une petite fonctionnalité bien pratique ajoutée à notre Magento !
L’information n’est pas utilisée dans ce module, elle est juste enregistrée.
Elle vous permettra avec un order_item ou un quote_item de faire un getDiscountDetails() pour avoir l’information désirée. Et comme je l’ai dit précédemment, n’oubliez pas de l’unserializer !
Téléchargement
Le petit lien ci-dessous vous permettra de télécharger le module.
Après avoir copié/collé les fichiers, n’oubliez pas de vider vos caches !
Un conseil : allez dans var/cache, et supprimer tout son contenu également.
On est jamais trop prudent 😉
Si vous avez des suggestions, ou que vous remarquez des bugs, tout commentaire est le bienvenu !