Jump to content

Discount / Bon de reductions : Montant Cible pour X produits, ma solution


Recommended Posts

Bonjour à tous,
Mon boss à eu une bonne idée de promo : deux articles au choix pour un montant de 10€

Je me suis donc mis en quete d'un module de discount, mais je n'ai pas trouvé grand chose,
à part le "better together" qui modifie plusieurs fichiers au coeur de prestashop.

finalement, j'ai opté pour une solution maison : étendre la fonction "bon de réduction" de prestashop, même si là aussi il s'agit de modifier un fichier au coeur de prestashop : la classe Discount.

Le principe est de proposer une réduction variable pour atteindre un montant fixé par l'administrateur pour un certain nombre de produits.
Par exemple (dans mon cas en fait) Deux Disques pour 10€ (parmi un choix de 4 disques).
les produits peuvent avoir un montant variable, la réduction s'adapte pour atteindre le montant cible (10€ dans mon cas).

Pour cette astuce il n'y a pas de modification de la base de donnée, mais quelques ajouts.

je vous recommande tout de même la plus grande précaution quand à l'utilisation de ce "hack", comme d'hab, sauvegardez vos fichiers originaux et la base de donnée.

treve de bavardage, voici les modifications :

on ajout simple un nouveau type de discount (il y'en a trois actuellement, on ajoute un quatrième)
ajout dans la base de donné (via phpMyAdmin par exemple):

INSERT INTO  `ps_discount_type` (
`id_discount_type`
)
VALUES (
NULL
);

INSERT INTO  `ps_discount_type_lang` (
`id_discount_type` ,
`id_lang` ,
`name`
)
VALUES (
'4',  '1',  'Target Amount for X products'
);


INSERT INTO  `ps_discount_type_lang` (
`id_discount_type` ,
`id_lang` ,
`name`
)
VALUES (
'4',  '2',  'montant cible pour X produits'
);



à ce stade, vous devriez avoir dans vos bon de réduction un nouveau type de bons.

l'etape suivante permet d'ajouter le nouveau type dans la classe Discount.php
faites une copie du fichier classe/Discount.php
ensuite, après la ligne 245, ajoutez le code suivant :

/* MODIF SARIHA DISCOUNT BUY X GET DISCOUNT - */
           break;
           case 4:
               $i=0;
               foreach ($products AS $product){
                   if (Product::idIsOnCategoryId($product['id_product'], $categories)){

                   //tarif auquel appliquer le discount :
                   if($i < (int)$this->minimal){
                       $i++;
                       $tarifs_a_traiter[] = $useTax ? $product['price_wt'] : $product['price'];
                   }
               }
           }

       if($tarifs_a_traiter AND $i >= (int)$this->minimal){ //si il y'a un tarif à traiter et si on a atteind le nombre de produits minimum à traiter
           foreach($tarifs_a_traiter as $tarif_a_traiter){
                   $prix_a_traiter += $tarif_a_traiter;
               }
           //si il y'a reduction :
           $reduc = -($this->value - $prix_a_traiter);
                   if($reduc > 0){ //pour être sur que la reduction est positive !
                       return $reduc;
                   }else{
                       return 0;
                   }
               }else{
                   return 0;
               }
           break;
/* FIN MODIF SARIHA */



normalement c'est finit !
pour en profiter, il suffit d'ajouter un discount de type "montant cible pour X produits",
le champs "Valeur" est le montant cible à atteindre
le champs "Montant minimum d'achat" permet de spécifier le nombre de produits différents à atteindre pour que le client bénéficie de la réduction.
Les catégories permettent de spécifier dans quelles catégorie les produits sont concernés par cette réductions.

pour bien utiliser ce hack, je recommande l'utilisation de l'excellent module qui permet d'ajouter automatiquement les bon au panier, autodiscountcart (gratuit)

pour finir ci-joint ma classe Discount.php, vous pouvez simplement remplacer la votre par celle-ci (apres avoir fait une sauvegarde de votre fichier original)
et une copie d'ecran avec les explications.

j'espere que cette petite chose servira à la communauté :)

Discount.php

21911_2nhS6bVkxPvW3KOLkBJq_t

Link to comment
Share on other sites

  • 1 month later...

bnjour
probleme similaire que je n arrive pas à resoudre,
j aimerai proposer 2 articles prix d'origine 6 euros , les 2 à 10 euros .(articles aux choix dans tout le site)
chaque paire de 2 articles à 6 euros donne une remise automatique de 2 euros (seulement les articles à 6euros dispersés sur le site)
je veux bien un coup de main, petite remuneration possible merci
1 semaine deja que je cherche une solution.......

Link to comment
Share on other sites

jeromestat,
tu as un bon début avec mon module 'autodiscountcart', l'idée serait de tester le panier à chaque update de celui-ci, tu analyses son contenu, tu ajoutes dans le code la création automatique d'un bon de réduction de 2 euros lorsque tu trouves 2 produits à 6 euros et tu l'injectes automatiquement dans le panier. Si le client modifie son panier, la fonction devra revérifier si le bon de réduction est toujours valable ou si il ne faut pas en créer un autre et l'affecter. Il faut aussi penser à supprimer le bon de réduction si le client réduit le contenu de son panier, sinon on va faire grossir la table des bons de réduction sans raison. Je pense que tu peux t'en sortir en modifiant donc le module "AutodiscountCart".

Link to comment
Share on other sites

merci BVINCE....
mais suis beginner et un peu perdu pour modifier la prog de prestashop.
si cela est simple peux tu me le faire?
suis desolé mais je n ai pas le niveau pour cela, merci beaucoup

Link to comment
Share on other sites

  • 2 weeks later...

toujours personne pour me sauver...
j aimerai proposer 2 articles prix d’origine 6 euros , les 2 à 10 euros .(articles aux choix dans tout le site)
chaque paire de 2 articles à 6 euros donne une remise automatique de 2 euros (seulement les articles à 6euros dispersés sur le site)
je veux bien un coup de main, petite remuneration possible merci

Link to comment
Share on other sites

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