Magento : Promotion X achetés Y gratuits

Cet article est assez ancien, malgré toute l'attention que j' apporte à mes contenus il est possible que celui-ci ne soit plus d'actualité.
N'hésitez pas à me le signaler si nécessaire via le formulaire de contact.

La mise en place  d’une règle de promotion Magento de type « x achetés y gratuits » est plutôt fastidieuse et pas forcément claire.
( Note : Sur la version 1.4.1.1 de Magento, il y a un problème lorsqu’on souhaite créer une règle de type 1 acheté 1 offert , nous verrons plus loin comment corriger ce comportement. )

Voici un exemple sur comment configurer une règle de ce type  sur l’exemple suivant :
Pour l’achat de 2 téléphone Nokia 2610 , un 3ème téléphone Nokia 2610 sera offert 🙂  ( Pour 4  => 2 , ect… )

Pour commencer il faut se rendre dans « Promotions / Règles de prix Panier » puis cliquer sur « Ajouter une nouvelle règle »
Voici ensuite ce que nous allons saisir dans l’onglet « Informations règle »

Magento SalesRule Informations

  1. La règle s’applique à l’ensemble des sites web
  2. La règle s’applique à l’ensemble des groupes clients
  3. Le code pour utiliser le coupon est « TEL »
  4. Pas de limites d’utilisation du coupon
  5. Pas de limites d’utilisation par client

Dans l’onglet « Conditions » nous ne mettons rien car il n’y a pas de restrictions.

L’essentiel de la configuration va se réaliser dans l’onglet « Actions »

Magento Sales Rule Condition

  1.  Dans le type de promotion Choisir  » X achetés, Y gratuits »
  2.  Le champ « Remise » correspond au Y de la promotion, il faut donc saisir le nombre de produit que l’on souhaite offrir. ( Dans notre cas 1 )
  3. Le nombre de fois que cette promotion doit s’appliquer, laisser 0 pour que la règle s’applique indéfiniment. ( Dans notre cas  » 2 achetés, 1 gratuit »  : les règles suivantes s’appliquent 2 => 1 , 4  => 2 ,  6 => 3 … )
  4. Quantité qu’il faut acheter pour obtenir la remise ( Dans notre cas 2 )
  5. Sélection du produit pour lequel la règle doit s’appliquer, on se base sur son code produit (SKU). ( Dans notre cas la référence du produit est n2610 )

Sauvegardez votre règle et testez sur votre front office.

  • Ajouter 3 téléphone 2610 à votre panier
  • Saisissez le code « TEL »
  • Pour 2 téléphones achetés, 1 téléphone est bien offert 🙂

Coupon de réduction magento

 

Correction pour la création d’un règle de type 1 acheté / 1 offert sous Magento 1.4.1.1

En tentant d’appliquer une règle de type 1 acheté / 1 offert sous la version 1.4.1.1 j’ai constaté que cela ne fonctionnait pas.
Après analyse du code, il s’avère que cette fonctionnalité n’est pas disponible de base.

Voici comment le corriger.

Pour commencer enregistrez une copie du fichier app/code/core/Mage/SalesRule/Model/Validator.php dans le pool local ( » app/code/local/Mage/SalesRule/Model/Validator.php »);

Le traitement de la règle est géré dans la fonction « Process » dans le case « buy_x_get_y » (lignes 319 à 338 )

Voici le code de base

case 'buy_x_get_y':
 $x = $rule->getDiscountStep();
 $y = $rule->getDiscountAmount();
 if (!$x || $y>=$x) {
  break;
 }
 $buy = 0; $free = 0;
 while ($buy+$free<$qty) {
  $buy += $x;
  if ($buy+$free>=$qty) {
   break;
  }
  $free += min($y, $qty-$buy-$free);
  if ($buy+$free>=$qty) {
  break;
 }
}
$discountAmount    = $free*$itemPrice;
$baseDiscountAmount= $free*$baseItemPrice;
break;

Comme vous pouvez le constater, la validation vérifie que la quantité y est supérieure ou égale à x
La règle 1 acheté => 1 offert ne fonctionne donc pas.
Pour corriger le comportement on va donc modifier la condition pour que la validation vérifie que la quantité y est strictement supérieure à x

Voici donc le code corrigé.

case 'buy_x_get_y':
 $x = $rule->getDiscountStep();
 $y = $rule->getDiscountAmount();
 if (!$x || $y>$x) { // Ligne modifiée
  break;
 }
 $buy = 0; $free = 0;
 while ($buy+$free<$qty) {
  $buy += $x;
  if ($buy+$free>$qty) { //Ligne modifiée
   break;
  }
  $free += min($y, $qty-$buy-$free);
  if ($buy+$free>$qty) { //Ligne modifiée
  break;
 }
}
$discountAmount    = $free*$itemPrice;
$baseDiscountAmount= $free*$baseItemPrice;
break;

Une fois ces changement effectués, la règle 1 acheté => 1 offert est bien fonctionnelle

14 réflexions sur “Magento : Promotion X achetés Y gratuits”

  1. Bonjour,

    Et si je souhaite faire l’offre 2 achetés (sur n’importe quel produit) = 1 offert (le produit le moins cher sera offert), comment procéder ?

    Merci

    1. Bonjour Mous,

      A ma connaissance ce type de promotion n’est pas possible nativement dans Magento.
      Il vous sera certainement nécessaire de passer par un module spécifique.

  2. Bonjour,
    Merci Mous pour cette question !
    En effet comment peut on appliquer la règle sur des produits différents
    ex: 1 Produit A + 1 Produit B = 1 produit C offert
    Merci

    1. Bonjour Armelle,

      Concernant votre demande la réponse est assez simple.
      Ce n’est pas possible via une règle de ce type car elle est disponible uniquement pour 2 produits différents ( X et Y ) et vous souhaitez utiliser 3 produits.

      Cependant dans le cadre d’une offre promotionnelle spécifique ( et avec des quantités fixes ) il est possible de configurer une offre de la manière suivante :
      Conditions :
      Conditions magento
      Actions :
      Actions Magento

      Dans les conditions vous saissez les quantités de produits A et B nécessaire pour bénéficier de l’offre
      Et dans les actions vous appliquer uniquement au produit souhaité.

      De manière générale dès qu’on souhaite faire des promotions un peu spécifique avec Magento il est nécessaire d’acheter ou de développer des modules complémentaires.

  3. Bonjour Hervé,

    Est-t’il possible avec Magento de programmer un code réduction avec un plafond maximum en € ?
    Sans limite de nombre de commandes passées, de quantités produits…

    Merci

    1. Bonjour Sandy,

      C’est en effet possible, pour cela il vous faut ajouter la condition suivante ( Onglet conditions )
      Sous-total inférieur ou égal à xx ( xx étant votre montant en € )

      Votre promotion ne s’appliquera dans qu’aux paniers qui on un montant inférieur au plafond souhaité.

  4. Merci Hervé,

    Après test, je me suis aperçu que pour l’utilisation du même code, le plafond (€) s’applique sur 1 commande et non sur plusieurs commandes. Est-il possible d’y lier encore une nouvelle condition ?

    Et autre petite question, dans l’onglet « générer les codes… » est t-il possible d’importer un fichier CSV pour uploader les codes et donc non les générer… ?

    Merci!

    1. Quelle est votre version de Magento ?

      A priori je ne vois pas pourquoi le plafond s’appliquerait uniquement à la première commande.
      Concernant l’import de codes Csv, cela dépends de votre version mais j’aurais tendance à penser que non de base.
      ( Ce genre de modifications est en général réalisable via des développements spécifiques )

  5. Magento ver. 1.9.0.1 !

    Le plafond s’applique sur un paiement/commande et non sur un ensemble de paiements/commandes. Le but de l’opération étant de faire bénéficier d’une remise sur le long terme sans deadline.

    Je pense aussi que l’import de code promo n’est pas prévu sur le Magento.

Répondre à Mous Annuler la réponse

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *