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.