Hello,
petit dilemne sur la gestion des réductions avec paniers et commandes tels qu'ils sont actuellement designés.
Je vous soumets donc mes interrogations et pistes d'évolution pour avis avant de risquer de partir dans une direction inopportune ou si vous avez de meilleures idées.
Workflow actuel :
* on ajoute des produits au panier, qui sont représentés par des liens dans produits_liens avec une quantité.
* on visualise le récapitulatif du panier, avec possibilité de modifier les quantités, supprimer un article
* on valide le panier qui est transformé en commande qui n'est plus ensuite modifiée (on ne change pas les quantités, les prix sur la commandes).
Au moment de la transformation du panier en commande on calcule le prix de chaque objet avec la fonction prix() et on enregistre prix ht et taxe de chaque objet dans commandes_details.
A la phase de récapitulatif panier je veux pouvoir entrer un code de réduction ou appliquer une remise.
1er problème : affecter la remise au prix du panier
* si j'ajoute ma remise au panier comme un produit, il ne me sera pas possible d'en calculer le prix, car la fonction prix() appelée pour un objet remise ne saura pas calculer un prix puisqu'elle ne sait pas à quel panier ça s'applique
* si j'ai plusieurs produits avec des TVA différentes, je ne peux pas appliquer une ligne de remise unique, je suis obligé de faire une ligne par taux de TVA
Cela remets en cause la représentation en base du panier par un simple lien entre panier et objet : il faudrait que le lien contienne aussi l'info de prix_ht et taxe (comme les détails d'une commande) qui serait renseigné par défaut avec la fonction prix() comme actuellement
2ème problème : affecter la remise à chaque ou certains produits
* Du fait du problème potentiel sur la TVA qui n'est pas identique pour tous les produits, ou du fait qu'une remise ne s'applique pas forcément globalement à tout un panier/une commande il me semble en fait que chaque ligne du panier (et de la commande) devrait pouvoir recevoir une remise dans un champ dédié.
Ainsi l'application d'une remise consisterait donc à modifier le champ 'remise' sur les lignes du panier/de la commande.
Cela peut se combiner avec le fait d'ajouter une ligne 'Remise' avec un prix nul, juste pour indiquer le libellé/la raison de la remise.
Mais de cette façon on aurait un prix ligne par ligne correct, avec des taxes correctes.
Cela fait évoluer (un peu) le plugin commandes pour ajouter la colonne supplémentaire 'remise'.
Du coup, dans la même optique on pourrait se contenter d'ajouter une colonne 'remise' sur paniers_liens, comme pour le champ 'quantite', le prix restant calculé par la fonction prix() pour l'affichage et la transformation en commande.
Dans les 2 cas on fait évoluer la base et les squelettes d'affichage, ainsi que la fonction de conversion du panier en commande.
Si les squelettes ont été surchargés, le champ remise ne sera pas pris en compte, mais cela veut dire aussi qu'il n'est pas utilisé, donc à zero, et on ne casse rien.
Des avis, des objections, des remarques, des questions ?
--
Cédric