Jump to content
benscasi

Module prix degressifs tenant compte des declinaisons

Recommended Posts

Bonjour,

j'ai créé une fonction dans la classe Product qui calcule les prix dégressifs d'un produit dans un panier et qui TIENT COMPTE DES DECLINAISONS. LE problème est que je dois appeler cette fonction a chaque fois que le prix d'un produit est affiché donc de nombreuses fois ! La solution serait de créer un module qui remplace la fonction de base par ma fonction mais je ne sais pas comment faire.

Merci de me dire si c'est possible et comment faire, je donnerai tout le code une fois le module créé ;)

Share this post


Link to post
Share on other sites

Heu comment tu fais pour tenir compte de l'impact du prix dégressif sur une déclinaison alors qu'il n'existe rien dans le BO pour renseigner ce genre d'infos ? Sinon, je vois pas bien comment tu va faire pour calculer ton prix à toutes les étapes de l'achat d'un produit (affichage, panier, facture). Un bout de code ?
A plus.

Share this post


Link to post
Share on other sites

Bonjour,

j'ai créé une fonction dans la classe Product.php :

/**
  * retourne le prix d'un produit ds un panier
  *
  * @param $id_cart, $id_product, $id_product_attribute, $product_quantity, $usetax
  * @return calcule et retourne le prix degressif s'il existe sinon prix de base
  */
   public function getPriceDegr($id_cart, $id_product, $id_product_attribute, $product_quantity, $usetax=true)
   {
     $price = floatval(self::getPriceStatic(intval($id_product), $usetax, intval($id_product_attribute), 6, NULL, false, true, $product_quantity));
     $compteur_produits = Db::getInstance()->getrow('
     SELECT sum(quantity) as qt
     FROM `'._DB_PREFIX_.'cart_product`
     WHERE `id_cart` = '.intval($id_cart).' and `id_product` = '.intval($id_product));
     if (intval($id_product) > 1 AND ($qtyD = QuantityDiscount::getDiscountFromQuantity(intval($id_product), intval($compteur_produits['qt']))))
     return $price -= QuantityDiscount::getValue($price, $qtyD->id_discount_type, $qtyD->value);
     else return $price;
   }



Cette fonction calcule le prix d'un produit dans un panier : s'il existe un prix degressif il le retourne sinon il retourne le prix "normal".

J'ai modifié ensuite les fichiers qui participent au calcul du total du panier : Order.php, Cart.php, Discount.php, AdminOrders.php

Le soucis est le panier ne se rechargeant pas a chaque ajout de produit, j'ai uniquement le total qui est calculé avec les prix degressifs, je n'ai pas le prix des produits qui se mettent a jour.

Je souhaiterais pouvoir créer un module qui modifie les prix mais sans toucher au coeur de prestashop.

Share this post


Link to post
Share on other sites

bonjour, j ai un souci embettant avec les prix degressifs
je dois realiser une reduction automatique du type:

je veux que tout article qui coute 6 euros vendu par deux donne une remise (dans tout mon site, dans differentes rubriques) 6 euros l unité X2 = 10 euros

est ce possible?si oui comment
merci beaucoup de votre aide

Share this post


Link to post
Share on other sites

@jerometast

Dans ton exemple, pour 3 produits, tu souhaites faire 3*5€ et non 2*5€+1x6€ ?

Share this post


Link to post
Share on other sites

je recapitule :

il faut que dans tout mon site, si un client choisi un bijoux à 6 euros et qu’il en prends un de plus(n importe ou dans le site) à 6 euros il ai immediatement une remise de 2 euros
6+6=12 – 2euros de remise immediate = 10 euros
et sil en prends 4 etc…

comment realiser cela est ce posible?
merci

Share this post


Link to post
Share on other sites

toujours personne qui ai la solution?...

Share this post


Link to post
Share on other sites

Domage que personne n'ai trouvé une solution à la question, car je suis également très intéressé.

Share this post


Link to post
Share on other sites

Effectivement, très intéressant, ce serait chouette si une personne avait la solution ou un module à proposer :)

Share this post


Link to post
Share on other sites

Bonjour,
je me permet de relancer le sujet de départ qui était la recherche d'une solution pour que les prix dégressif sur un produit prennent en compte les déclinaison sur ce même produit.

car sauf erreur de ma part actuellement sur prestashop pour une remise sur 20 tee shirt XX achetés

si un client achète 10 tee shirt XX taille L
+ 10 tee shirt XX taille XL

Il n'a pas la remise pour 20 tee shirt XX

Si quelqu'un a une solution...

merci d'avance.

Share this post


Link to post
Share on other sites

Bonjour,

Merci pour ta fonction getPriceDegr() !
Elle m'a beaucoup inspirer pour ma fonction de prix dégressif par poids.
Je n'ai pas encore réussit à en faire un module, mais dès que j'ai quelque chose je le poste ici ;)

Bonne journée.

Share this post


Link to post
Share on other sites

Bonjour,

Même problème que vous je voulais des prix dégressifs qui s'appliquent quelque soit la déclinaison dans le panier.

Je ne sais pas si on pourrait coller un module là au milieu, ma modif touche directement le cœur donc faites attention.

Dans le fichier classes/Product.php on va modifier la fonction de calcul de prix "getPriceStatic" ligne 1360 environ

Il s'agit de modifier le test qui vérifie si on a droit à la réduction de quantité :
Juste après

if (intval($id_cart))
// Quantity discount
{
   $totalQuantity = intval(Db::getInstance()->getValue('
       SELECT SUM(`quantity`)
       FROM `'._DB_PREFIX_.'cart_product`
       WHERE `id_product` = '.intval($id_product).' AND `id_cart` = '.intval($id_cart))
   ) + intval($quantity);
}



Ajouter :

$totalQuantity2 = intval(Db::getInstance()->getValue('
   SELECT SUM(`quantity`)
   FROM `'._DB_PREFIX_.'cart_product`
   WHERE `id_product` = '.intval($id_product).' AND `id_cart` = '.intval($id_cart))
);


(Cela ressemble au bout de code au dessus mais sans l'ajout de la quantité du produit en cours, je pense que cela serait peut être plus optimisé en ne faisant qu'une requête et en affectant deux variable, mais ne sachant pas trop à quoi correspond le test au dessus je me suis abstenue)

Ensuite changer :

if ($quantity > 1 AND ($qtyD = QuantityDiscount::getDiscountFromQuantity($id_product, $quantity)))



Par :

if ($totalQuantity2 > 1 AND ($qtyD = QuantityDiscount::getDiscountFromQuantity($id_product, $totalQuantity2)))

Share this post


Link to post
Share on other sites

Merci beaucoup Damemarianne pour ta solution. Elle fonctionne parfaitement ici sur PS 1.3.7.0.

Share this post


Link to post
Share on other sites

Bonjour,

Quelqu'un a t-il une solution pour PS 1550 (de mon côté, pas testé le code ci-dessus sur PS 1550 mais je doute ..).?

 

Merci

Share this post


Link to post
Share on other sites

En fait cela existe bien en standard dans PS 1550 y compris la gestion par déclinaison.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

Cookies ensure the smooth running of our services. Using these, you accept the use of cookies. Learn More