Jump to content

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éé ;)

Link to comment
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.

Link to comment
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.

Link to comment
Share on other sites

  • 2 months later...

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

Link to comment
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

Link to comment
Share on other sites

  • 2 weeks later...
  • 5 months later...
  • 1 month later...

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.

Link to comment
Share on other sites

  • 3 weeks later...
  • 4 months later...

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)))

Link to comment
Share on other sites

  • 10 months later...
  • 1 year later...

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...