Jump to content

[Résolu] Module Parrainage : imposer un montant minimum de commande.


Recommended Posts

Bonjour

dans le module "parrainage" on peut indiquer le nombre minimum de commandes à passer pour ouvrir droit à un bon de réduction et le montant de celui-ci.
Mais pas le montant minimum d'une commande pour pouvoir utiliser ce bon.

Donc si on créé des bons de 10€ par exemple, et que le parrain et/ou le filleul commande pour 10€ - 11€ de marchandises, on se retrouve avec une facture à 0 ou 1 € (hors frais de port).
Du coup le commerçant n'est plus vraiment gagnant.

Comment imposer un montant minimum des commandes auxquelles s'appliqueront les bons de réductions créés par parrainage ?
J'ai cherché dans le module /referralprogram, dans les fichiers referralprogram.php, referralprogrammodule.php et referralprogram_program.php, mais impossible de trouver comment enregistrer cette somme dans la table "discount" à la création d'un nouveau bon...

Quelqu'un de bien intentionné trouverait-il cette fonctionnalité intéressante et aurait-il une idée ?

Amicalement,

Version prestashop : Version 1.3.1.1
Module parrainage : v1.4

Link to comment
Share on other sites

Hello,
Je pense qu'il serait préférable de choisir le "pourcentage" plutôt que le montant, le problème serait alors réglé.
Perso, si je dois revenir 3-4 fois pour avoir 10 euros de réduc la 5 ème fois ... j'ai tendance à fuir !
Le principe du parrainage, c'est de remplir d'adresse mail ton bloc "client", les attirer sur ton site.
Le système que tu veux mettre en place (montant), s'adresse plus à des clients réguliers, une sorte de fidélisation.
Cordialement.

Link to comment
Share on other sites

Bonjour

et merci de la réponse.
Oui c'est vrai, c'est une façon cohérente de voir les choses, et ça résout effectivement le problème.
A condition que la personne pour laquelle j'entreprends la mise au point du site soit d'accord avec le principe, mais ça c'est un autre débat. A moi maintenant de lui présenter les avantages de la méthode ! ;)
En tous cas, merci encore.

Link to comment
Share on other sites

  • 4 weeks later...

Je recherche la même chose, mais la solution du pourcentage ne m'intéresse pas.
Car je veux inciter les parrains à trouver de nombreux de filleuls.

C'est plutôt le schéma suivant qui m'intéresserait.

1. Ne pas imposer une première commande pour parrainer. *
2. Garder l'option des 5 euros offerts au parrain ET au filleul.
3. Mais imposer cependant le montant d'achat minimum de 20 euros au filleul pour qu'il puisse bénéficier de son bon de réduction.
4. Accepter pour le parrain que ce bon soit cumulable avec d'autres bons de réduction.
5. Accepter pour le parrain et pour le filleul que ce bon soit cumulable avec les promotions.

Comment faut-il changer le code du fichier referralprogram.php pour obtenir tout cela ?

L'intérêt, vous l'avez compris, est de ne pas perdre d'argent tout en encourageant beaucoup à parrainer.
En effet, pour 20 euros de commande, on offre 10 euros (5 au parrain, 5 au filleul).
Le parrain, s'il se débrouille bien peut faire des commandes à 0 euros (excepté frais de port).
Il est donc bien récompensé de son travail.
Le marchand quant à lui sait exactement où il va : il fait en sorte une réduction de 50% aux premières commandes de chaque nouveau client.
(Il faut faire cependant attention à mon point n° 5 et donc suivant les cas ne pas forcément accepter des cumuls avec les promos.)

__
* Ceci je l'ai déjà résolu grâce à un autre post. Il faut écrire :
if (intval(Tools::getValue('order_quantity')) < 0)
au lieu de :
if (!intval(Tools::getValue('order_quantity')) OR Tools::getValue('order_quantity') < 0)

Link to comment
Share on other sites

Dans le fichier ReferralProgramModule, j'ai rajouté 3 lignes en mettant mes propres paramètres.

        $discount = new Discount();
       $discount->id_discount_type = intval($configurations['REFERRAL_DISCOUNT_TYPE']);
       $discount->value = floatval($configurations['REFERRAL_DISCOUNT_VALUE_'.intval($id_currency)]);
       $discount->quantity = 1;
       $discount->quantity_per_user = 1;
       $discount->date_from = date('Y-m-d H:i:s', time());
       $discount->date_to = date('Y-m-d H:i:s', time() + 31536000); // + 1 year
       $discount->name = $this->getDiscountPrefix().Tools::passwdGen(6);
       $discount->description = Configuration::getInt('REFERRAL_DISCOUNT_DESCRIPTION');
       $discount->id_customer = intval($id_customer);
       $discount->id_currency = intval($id_currency);
       $discount->cumulable = 1;  // DEBUT AJOUT
       $discount->cumulable_reduction = 1;
       $discount->minimal = 20;  // FIN AJOUT
       if ($discount->add())

Link to comment
Share on other sites

  • 2 weeks later...

Salut,
Moi je préferais avoir un module de parrainage qui permettrait aux parrains de recevoir 5% de réduction à la première commande de son filleule.
mais pas avant.

Bref, cela les inciterait à chercher des filleuls et à les encouragés a acheter.
Autre chose, le parrain ne doit pas avoir passer de commande pour pouvoir parrainer d'autre personne.

Est ce que quelqu'un a une idée de comment modifié le module pour faire cela ?
Merci d'avance
Nicolas

Link to comment
Share on other sites

Bonjour Quotidianus

impossible d'obtenir la prise en compte d'un minimum de commande.
J'ai ajouté dans mon ReferralProgramModule la ligne

$discount->minimal = 20;  // FIN AJOUT



Le montant minimum ne s'inscrit même pas dan la base de données (j'ai NULL à la place).
C'est bien la seule ligne de code à ajouter ?
Amicalement

Link to comment
Share on other sites

Bonsoir,

J'avoue ne pas avoir regardé dans la base de données elle-même ce qui se passait.

J'ai simulé un parrainage avec deux fiches et deux emails "bidon" et j'ai vu que le bon de réduction engendré possédait les paramètres choisis.

N'ai rien rajouté ailleurs.

Bien cordialement.

Quoti.

_____
Pour info, je vais mettre de mon côté le montant minimum à 25 euros.
Ce qui veut dire que pour les commandes les plus petites, il restera toujours 15 euros + les frais de port.

Link to comment
Share on other sites

Bonjour

chez moi l'affichage des bons de réductions ne montre pas non plus de montant minimum (logique puisque non pris en compte dans la base de données).
C'est pour ça que je tourne en rond depuis mon 1° poste sur ce topic, malgré tous mes essais de mon côté (j'avais déjà essayé le $discount->minimal = XX).

Pourtant j'ai désinstallé / réinstallé ce module. Je n'y comprends rien...

Merci quand même, de toutes façons si l'astuce sert à d'autres elle n'a rien d'inutile !
Amicalement

Link to comment
Share on other sites

Re,

bon ben c'est encore pire que ce que je croyais.
Je n'arrive pas à imposer un montant minimum de commande, même depuis la zone en backoffice de gestion des bons de réduction...

Autrement dit dans ma table, d'où que vienne la requête (de referral program ou de la gestion des bons) ce montant n'est jamais pris en compte.
Je vais aller voir du côté de la base de données ce qui se passe (mauvaise configuration du champ "minimal" dans la table ?)

Link to comment
Share on other sites

Bon ça y est, ça marche.

Voyant que le problème se produisait aussi bien sur le module "bons de réduction" que sur celui de "parrainage" je me suis dit que ça ne venait d'aucun d'eux, mais de quelque chose de + général comme une classe.

Effectivement, dans classes/Discount.php, j'avais à la ligne 89

$fields['minimal'] = floatval($this->minimal, 30);


Je l'ai remplacé par

$fields['minimal'] = floatval($this->minimal);



L'avais-je ajouté lors de mes essais et - faute et honte à moi - ai-je oublié de le supprimer ? Je ne m'en souviens pas...
Mais maintenant ça marche.
Ce poste est donc passé en résolu. Un grand merci à Quotidianus.

Link to comment
Share on other sites

Une question bête, mais je la pose quand même parce que parfois j'ai ce genre de distraction :
Vous avez bien rajouté :

$discount->minimal = 20;

AVANT

if ($discount->add())

?

-----

Par ailleurs, rien à voir avec ce post, mais puisque vous êtes connecté, j'en profite.
Pourriez-vous me dire :
• si les fichiers qui sont sur : trunk sont les corrections des bugs de v. 1.2.3 ?
• est-il utile de reporter toutes ces corrections, ou bien est-ce risqué ?

Merci d'avance de ce que vous pourrez me répondre.

Link to comment
Share on other sites

Il n'y a pas de question bête, surtout sur un forum.

Je suis allée voir ce fichier, on dirait bien que oui mais je ne peux pas l'assurer.

Pour les corrections, c'est toujours bien de les faire, puisqu'elles apportent des améliorations, voire corrige des bugs ou failles de sécurité.

Je crois qu'il y a toujours un risque, comme pour toute mise à jour vers une nouvelle version - même avec la méthode classique préconisée par l'équipe Prestashop - c'est pourquoi ils conseillent au préalable de faire diverses sauvegardes.

Qu'on procède d'une façon ou d'une autre, ces sauvegardes indispensables sont expliquées très en détail sur la documentation technique, page 13 à 15.

Au moins on est sûr qu'en cas de problème, on peut revenir rapidement à la version précédente. Ce qui est rassurant.
Pour ma part je fais moi-même la migration de 1.3.1 vers 1.3.2 cette semaine.

Bien amicalement

Link to comment
Share on other sites

Salut,
Je cherche une piste pour faire un module de parrainage un peu différent du votre :
Moi je préferais avoir un module de parrainage qui permettrait aux parrains de recevoir 5% de réduction à la première commande de son filleule.
mais pas avant.

Bref, cela les inciterait à chercher des filleuls et à les encouragés a acheter.
Autre chose, le parrain ne doit pas avoir passer de commande pour pouvoir parrainer d’autre personne.

Est ce que quelqu’un a une idée de comment modifié le module pour faire cela ?
Merci d’avance
Nicolas

Link to comment
Share on other sites

A l'attention de Nicolas :

Pour la première question, c'est déjà le cas. Par défaut, c'est même uniquement à la livraison de la 1ere commande (pour être sure qu'elle n'est pas annulée dans la foulée sans doute) que le parrain reçoit son bon de réduction.

Pour la deuxième question, on trouve la réponse sur la première réponse de Quotidianus sur ce post (écrit en tout petit tout en bas).page précédente.
Amicalement

Link to comment
Share on other sites

Cher Nicolas,

1. Pour ne pas obliger au parrain de passer une première commande, il faut changer dans :
../modules/referralprogram/referralprogram.php

if (!intval(Tools::getValue('order_quantity')) OR Tools::getValue('order_quantity') < 0)

par :

if (intval(Tools::getValue('order_quantity')) < 0)     



2. Pour engendrer un bon de réduction de 5%, cela se paramètre dans le module parrainage :

32921_E4sdg7mIRscJng6Ztlgo_t

32922_imR547X037shlQGr7Dtj_t

Link to comment
Share on other sites

Je viens de m'apercevoir d'un "bug" ou du moins d'un point qui devrait être mieux géré par le programme de parrainage.

Certes, on peut imposer un montant minimum pour le bon de réduction du filleul (comme pour celui du parrain).

Seulement... si le filleul passe une commande en free order (téléchargements gratuits par ex.), c'est compté comme une commande à 0,00 euro et le parrain reçoit quand même un bon de réduction...

Ce qui est risqué au niveau de la rentabilité.

Serait-ce compliqué de faire en sorte que le parrain ne reçoit son bon de réduction que lorsque le filleul utilise le sien et non lorsqu'il passe une première "commande" ?

Link to comment
Share on other sites

Bonjour Quotidianus

n'ayant pas de produit à 0 E je ne me suis pas aperçu de ça. Je pensais que justement le fait d'imposer un montant minimum de commande au filleul pour utiliser un bon contrait ce genre de problème.
Mais effectivement si le bon du parrain est généré à la 1ere commande du filleul et non à l'usage de son bon... ça complique les choses !
Pas d'idée là, tout de suite. Mais c'est vrai que ce serait plus logique.

Il faudrait que je regarde dans le code la fonction qui appelle l'envoi du bon au parrain, la clé se trouve là. J'essaie de voir ça dès que je me libère un créneau, et je reviens sur ce post. Ce serait quand même une amélioration notable.
Amicalement,

Link to comment
Share on other sites

Ça y est. J'ai changé le code referralprogram.php pour obtenir ce que nous désidérions.
J'ai fait des essais et cela marche. Il m'aura fallu 4h ! grrr
Connaissais pas le php; c'était l'occasion...
Voici la fonction concernée :

    public function hookUpdateOrderStatus($params)
   {
       if (!Validate::isLoadedObject($params['newOrderStatus']))
           die (Tools::displayError('Some parameters are missing.'));
       $orderState = $params['newOrderStatus'];
       $order = new Order(intval($params['id_order']));
       if ($order AND !Validate::isLoadedObject($order))
           die (Tools::displayError('Incorrect object Order.'));
       $customer = new Customer($order->id_customer);
       $stats = $customer->getStats();
       $nbOrdersCustomer = intval($stats['nb_orders']) + 1; // hack to count current order
       $totalOrdersCustomer = intval($stats['total_orders']); // AJOUT
       $referralprogram = new ReferralProgramModule(ReferralProgramModule::isSponsorised(intval($customer->id), true));
       if (!Validate::isLoadedObject($referralprogram))
           return false;
       $sponsor = new Customer($referralprogram->id_sponsor);
       if (intval($orderState->logable) AND $totalOrdersCustomer >=25 AND $nbOrdersCustomer >= intval($this->_configuration['REFERRAL_ORDER_QUANTITY']) AND $referralprogram->registerDiscountForSponsor(intval($order->id_currency))) // AJOUT
       {
           $discount = new Discount($referralprogram->id_discount_sponsor);
           $currency = new Currency($order->id_currency);
           $discount_display = $discount->display($discount->value, $discount->id_discount_type, $currency);
           $data = array(
               '{sponsored_firstname}' => $customer->firstname,
               '{sponsored_lastname}' => $customer->lastname,
               '{discount_display}' => $discount_display,
               '{discount_name}' => $discount->name
           );
           Mail::Send(intval($order->id_lang), 'referralprogram-congratulations', $this->l('Congratulations!'), $data, $sponsor->email, $sponsor->firstname.' '.$sponsor->lastname, strval(Configuration::get('PS_SHOP_EMAIL')), strval(Configuration::get('PS_SHOP_NAME')), NULL, NULL, dirname(__FILE__).'/mails/');
           return true;
       }
       return false;
   }



J'ai donc rajouté une variable :

$totalOrdersCustomer = intval($stats['total_orders']);


et une condition :

AND $totalOrdersCustomer >=25



Ce n'est pas parfait, parce quà la place de 25, il faudrait renvoyer à une variable genre "REFERRAL_ORDER_MINIMUM", mais en attendant cela marche pour ce que nous voulons.

25 (à remplacer par ce que vous voulez) est donc le montant minimum que l'on attend du filleul pour que le parrain ait un bon de réduction en récompense.
Cela ne comporte pas les frais de port.
Il faut faire attention au fait que si le filleul utilise son bon de réduction, le parrain n'aura peut-être pas le sien.

Par exemple, si vous mettez le montant minimum à 25 euros et des bons à 5 euros.
Le filleul fait une commande à 25 euros, il utilise son bon de 5 euros ; ce qui totalise une commande seulement de 20.
Et donc le parrain n'a pas son bon. Donc en prenant mon exemple, il vaudrait mieux écrire :

AND $totalOrdersCustomer >=20



J'ai seulement testé des commandes du filleul jusqu'à 24,90 euros, puis au-delà.
Le parrain a reçu quand cela a dépassé.
Je n'ai pas testé avec le filleul qui utilise son bon de réduction.

Un dernier truc : il faut non seulement modifier vos conditions générales de parrainage, mais aussi l'email que le parrain reçoit : "Votre filleul a passé sa première commande"... Dans mes essais, c'était la troisième !

Bonne continuation à tous.

Quotidianus

Link to comment
Share on other sites

Autre chose, plus haut dans cette discussion, j'ai répété bêtement le truc de modifier ce code :

if (!intval(Tools::getValue('order_quantity')) OR Tools::getValue('order_quantity') < 0) 



Je n'ai pas cherché à comprendre à quoi cela correspond, mais en tout cas je l'ai remis comme c'était et j'ai paramétré le programme de Parrainage avec le module comme cela est prévu par Prestashop. Il suffit de configurer le

Nombre de commandes nécessaires pour obtenir un bon de réduction : xx
à 0.

Avec cela, le parrain n'a donc pas besoin de passer de commande pour parrainer.
Comprends pas trop ce qui s'est passé !....
Link to comment
Share on other sites

Cher Nicolas,

1. Pour ne pas obliger au parrain de passer une première commande, il faut changer dans :
../modules/referralprogram/referralprogram.php
if (!intval(Tools::getValue('order_quantity')) OR Tools::getValue('order_quantity') < 0)

par :

if (intval(Tools::getValue('order_quantity')) < 0)     



2. Pour engendrer un bon de réduction de 5%, cela se paramètre dans le module parrainage :



Bonjour,

Pour ne pas obliger au parrain de passer une premiere commande pour parrainer une personne, le code ci-dessus fonctionne bien. Malheuresement, lorsque je parraine une personne, le filleul obtient un bon de reduction automatiquement sans commande min.

Et si dans le BO, je met Nombre de commandes nécessaires pour obtenir un bon de réduction : 1
dans ce cas, un parrain ne pourra plus parrainer sans avoir passer au min une commande.

Pouvez vous m'aider pour arranger tout ca. J'aimerais que le filleul et le parrain recoivent un bon de reduction lorsque un des deux passe commande.

Merci de votre aide.

cdt
Link to comment
Share on other sites

Merci de votre réponse. Ce sont ces 3 lignes qui permettront de générer le bon de réduction a condition que le parain ou le filleul ai passe au minimum une commande ?

$discount->cumulable = 1; // DEBUT AJOUT
$discount->cumulable_reduction = 1;
$discount->minimal = 20; // FIN AJOUT

Merci d'avance

Link to comment
Share on other sites

  • 4 weeks later...
  • 2 years later...
  • 1 month later...

Bonsoir,

 

Je suis de près MyColorPhone...

 

- Enlever la commande obligatoire pour le parrain pour parrainer,

- Mettre un minimum de commande pour le parrain comme le filleul,

- Afficher le bon dans le compte, partie "bons de réduction"

- Limiter la durée de validité du bon

- Interdire le cumul des bons.

 

Ce serait fort intéressant pour beaucoup de personnes !

  • Like 1
Link to comment
Share on other sites

Bonsoir MyColorPhone,

 

Je ne suis pas plus avisée que vous, je cherche mais tout ce que j'ai pu lire n'apporte aucune solution à ces points.

 

J'ai limité la durée de validité du bon dans le fichier ReferralProgramModule.php ligne 93 :

$cartRule->date_to = date('Y-m-d H:i:s', time() +

Après le "+" indiquez le nombre de secondes ( exemple : 3600 pour 24 heures soit 1 jours)

 

C'est tout ce que j'ai trouvé :-)

 

EDIT : voici de quoi mettre un minimum d'achat :

$cartRule->minimum_amount=50;

A mettre dans ReferralProgramModule.php

Edited by monvidedressing (see edit history)
Link to comment
Share on other sites

  • 8 months later...

Bonjour je suis sous 1.6 et je cherche a faire ceci :

- que le bon de parrainage ne soit utilisable que pour une commande supérieur à 50€.  Je dois voir ça dans le php du module de parrainage ou celui des bons de reduction (je mets $cartRule->minimum_amount=50; ) ?

- que les bons de parrainage ne soit pas cumulable entre eux sur une même commande : idem je dois voir ça dans parrainage ou bon de réduction.

Merci.

Link to comment
Share on other sites

  • 1 month later...

Bonjour je suis sous 1.6 et je cherche a faire ceci :

- que le bon de parrainage ne soit utilisable que pour une commande supérieur à 50€.  Je dois voir ça dans le php du module de parrainage ou celui des bons de reduction (je mets $cartRule->minimum_amount=50; ) ?

- que les bons de parrainage ne soit pas cumulable entre eux sur une même commande : idem je dois voir ça dans parrainage ou bon de réduction.

Merci.

 

bonjour, quelle module de parrainage que vous avez utilisé?

Link to comment
Share on other sites

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