ps-loyaltydiscount
Présentation
Module PrestaShop 1.6 permettant de gérer des remises conditionnées par l’achat.
Illustration : l’achat d’un produit A par un client lui fait bénéficier d’une remise sur un produit B.
Installation
cd <PRESTASHOP_HOME>/modules
git clone https://github.com/enten/ps-loyaltydiscount loyaltydiscount
chown -R www-data loyaltydiscount
Se rendre dans le menu Modules de l’interface d’administration et
installer le nouveau module Loyalty Discount.
Administration
L’installation du module ajoute le lien Loyalty Discount dans le menu Price Rules.
L’interface proposée permet de configurer simplement de nouvelles réductions de fidélité.
Fonctionnement
Tables de données
+-------------------------------+
| loyaltydiscount |
+-------------------------------+
| - id_loyaltydiscount : int |
| - id_product_purchased : int |
| - id_product_discounted : int |
| - rate : float |
| - active : bit |
| - date_add : datetime |
| - date_upd : datetime |
| |
| PK: id_loyaltydiscount |
+-------------------------------+
| |
| | +------------------------------------------+
| +--->| loyaltydiscount_lang |
| +------------------------------------------+
| | - id_loyaldiscount : int |
| | - id_shop : int |
| | - id_lang : int |
| | - name : varchar |
| | - description : text |
| | |
| | PK: id_loyaltydiscount, id_shop, id_lang |
| +------------------------------------------+
|
| +---------------------------------+
+------>| loyaltydiscount_shop |
+---------------------------------+
| - id_loyaldiscount : int |
| - id_shop : int |
| |
| PK: id_loyaltydiscount, id_shop |
+---------------------------------+
Surcharge de la classe SpecificPrice
La méthode getSpecificPrice de la classe SpecificPrice est surchargée pour appliquer une éventuelle réduction conditionnée par l’achat d’un autre produit.
L’application d’une éventuelle réduction est réalisée sous plusieures conditions :
* Le module loyaltydiscount est activé ;
* Le produit a acheter fait l’objet d’une réduction de fidélité (il existe au moins une
ligne dans la table loyaltydiscount où la colonne id_product_discounted est
égale à celle du produit à acheter) ;
* La réduction de fidélité est activée (colonne active égale à 1);
* L’acheteur a une commande validée avec le produit désigné par la colonne id_product_purchased.
Attention
Les réductions de fidélité se cumulent!
Par exemple, si l’achat du produit A donne 5% de réduction sur le produit C et que l’achat du produit B donne 10% de réduction sur le produit C, un acheteur peut cumuler 15% de réduction (s’il a des commandes valides contenant l’achat des produits A et B).
Ce comportement est dû à l’incrémentation dans la fonction statique applyPossibleDiscount
de la classe LoyaltyDiscount.
if ($res['n'] > 0)
$rate += $row['rate'];
Note: remplacer += par = annule ce comportement.