{"id":592,"date":"2014-02-14T18:13:44","date_gmt":"2014-02-14T16:13:44","guid":{"rendered":"http:\/\/www.h-hennes.fr\/blog\/?p=592"},"modified":"2014-02-14T18:13:44","modified_gmt":"2014-02-14T16:13:44","slug":"magento-regle-x-achetes-y-gratuits","status":"publish","type":"post","link":"https:\/\/www.h-hennes.fr\/blog\/2014\/02\/14\/magento-regle-x-achetes-y-gratuits\/","title":{"rendered":"Magento : Promotion X achet\u00e9s Y gratuits"},"content":{"rendered":"<p>La mise en place\u00a0 d&rsquo;une r\u00e8gle de promotion Magento de type \u00ab\u00a0x achet\u00e9s y gratuits\u00a0\u00bb est plut\u00f4t fastidieuse et pas forc\u00e9ment claire.<br \/>\n<strong>( Note : Sur la version 1.4.1.1 de Magento, il y a un probl\u00e8me lorsqu&rsquo;on souhaite cr\u00e9er une r\u00e8gle de type 1 achet\u00e9 1 offert , nous verrons plus loin comment corriger ce comportement. )<\/strong><\/p>\n<p>Voici un exemple sur comment configurer une r\u00e8gle de ce type\u00a0 sur l&rsquo;exemple suivant :<br \/>\nPour l&rsquo;achat de 2 t\u00e9l\u00e9phone Nokia 2610 , un 3\u00e8me t\u00e9l\u00e9phone\u00a0Nokia 2610 sera offert \ud83d\ude42\u00a0 ( Pour 4\u00a0 =&gt; 2 , ect&#8230; )<\/p>\n<p>Pour commencer il faut se rendre dans \u00ab\u00a0Promotions \/ R\u00e8gles de prix Panier\u00a0\u00bb puis cliquer sur \u00ab\u00a0Ajouter une nouvelle r\u00e8gle\u00a0\u00bb<br \/>\nVoici ensuite ce que nous allons saisir dans l&rsquo;onglet \u00ab\u00a0Informations r\u00e8gle\u00a0\u00bb<\/p>\n<p><a href=\"https:\/\/www.h-hennes.fr\/blog\/wp-content\/uploads\/2014\/02\/magento-rule-informations.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"size-large wp-image-594 alignnone\" alt=\"Magento SalesRule Informations\" src=\"https:\/\/www.h-hennes.fr\/blog\/wp-content\/uploads\/2014\/02\/magento-rule-informations-525x1024.jpg\" width=\"525\" height=\"1024\" srcset=\"https:\/\/www.h-hennes.fr\/blog\/wp-content\/uploads\/2014\/02\/magento-rule-informations-525x1024.jpg 525w, https:\/\/www.h-hennes.fr\/blog\/wp-content\/uploads\/2014\/02\/magento-rule-informations-154x300.jpg 154w\" sizes=\"auto, (max-width: 525px) 100vw, 525px\" \/><\/a><\/p>\n<ol>\n<li>La r\u00e8gle s&rsquo;applique \u00e0 l&rsquo;ensemble des sites web<\/li>\n<li>La r\u00e8gle s&rsquo;applique \u00e0 l&rsquo;ensemble des groupes clients<\/li>\n<li>Le code pour utiliser le coupon est \u00ab\u00a0TEL\u00a0\u00bb<\/li>\n<li>Pas de limites d&rsquo;utilisation du coupon<\/li>\n<li>Pas de limites d&rsquo;utilisation par client<\/li>\n<\/ol>\n<p>Dans l&rsquo;onglet \u00ab\u00a0Conditions\u00a0\u00bb nous ne mettons rien car il n&rsquo;y a pas de restrictions.<\/p>\n<p>L&rsquo;essentiel de la configuration va se r\u00e9aliser dans l&rsquo;onglet \u00ab\u00a0Actions\u00a0\u00bb<\/p>\n<p><a href=\"https:\/\/www.h-hennes.fr\/blog\/wp-content\/uploads\/2014\/02\/magento-sales-rule-conditions.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-593 alignnone\" title=\"Magento Sales Rule Condition\" alt=\"Magento Sales Rule Condition\" src=\"https:\/\/www.h-hennes.fr\/blog\/wp-content\/uploads\/2014\/02\/magento-sales-rule-conditions.jpg\" width=\"545\" height=\"521\" srcset=\"https:\/\/www.h-hennes.fr\/blog\/wp-content\/uploads\/2014\/02\/magento-sales-rule-conditions.jpg 545w, https:\/\/www.h-hennes.fr\/blog\/wp-content\/uploads\/2014\/02\/magento-sales-rule-conditions-300x286.jpg 300w\" sizes=\"auto, (max-width: 545px) 100vw, 545px\" \/><\/a><\/p>\n<ol>\n<li>\u00a0Dans le type de promotion Choisir \u00a0\u00bb X achet\u00e9s, Y gratuits\u00a0\u00bb<\/li>\n<li>\u00a0Le champ \u00ab\u00a0Remise\u00a0\u00bb correspond au <strong>Y<\/strong> de la promotion, il faut donc saisir le nombre de produit que l&rsquo;on souhaite offrir. ( Dans notre cas 1 )<\/li>\n<li>Le nombre de fois que cette promotion doit s&rsquo;appliquer, laisser 0 pour que la r\u00e8gle s&rsquo;applique ind\u00e9finiment. ( Dans notre cas \u00a0\u00bb 2 achet\u00e9s, 1 gratuit\u00a0\u00bb\u00a0 : les r\u00e8gles suivantes s&rsquo;appliquent 2 =&gt; 1 , 4\u00a0 =&gt; 2 ,\u00a0 6 =&gt; 3 &#8230; )<\/li>\n<li>Quantit\u00e9 qu&rsquo;il faut acheter pour obtenir la remise ( Dans notre cas 2 )<\/li>\n<li>S\u00e9lection du produit pour lequel la r\u00e8gle doit s&rsquo;appliquer, on se base sur son code produit (SKU). ( Dans notre cas la r\u00e9f\u00e9rence du produit est n2610 )<\/li>\n<\/ol>\n<p><strong>Sauvegardez votre r\u00e8gle et testez sur votre front office.<\/strong><\/p>\n<ul>\n<li>Ajouter 3 t\u00e9l\u00e9phone 2610 \u00e0 votre panier<\/li>\n<li>Saisissez le code \u00ab\u00a0TEL\u00a0\u00bb<\/li>\n<li>Pour 2 t\u00e9l\u00e9phones achet\u00e9s, 1 t\u00e9l\u00e9phone est bien offert \ud83d\ude42<\/li>\n<\/ul>\n<p><a href=\"https:\/\/www.h-hennes.fr\/blog\/wp-content\/uploads\/2014\/02\/salesrule-x-y.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-595 alignnone\" alt=\"Coupon de r\u00e9duction magento\" src=\"https:\/\/www.h-hennes.fr\/blog\/wp-content\/uploads\/2014\/02\/salesrule-x-y.jpg\" width=\"958\" height=\"439\" srcset=\"https:\/\/www.h-hennes.fr\/blog\/wp-content\/uploads\/2014\/02\/salesrule-x-y.jpg 958w, https:\/\/www.h-hennes.fr\/blog\/wp-content\/uploads\/2014\/02\/salesrule-x-y-300x137.jpg 300w\" sizes=\"auto, (max-width: 958px) 100vw, 958px\" \/><\/a><\/p>\n<p>&nbsp;<\/p>\n<p><strong>Correction pour la cr\u00e9ation d&rsquo;un r\u00e8gle de type 1 achet\u00e9 \/ 1 offert sous Magento 1.4.1.1<\/strong><\/p>\n<p>En tentant d&rsquo;appliquer une r\u00e8gle de type 1 achet\u00e9 \/ 1 offert sous la version 1.4.1.1 j&rsquo;ai constat\u00e9 que cela ne fonctionnait pas.<br \/>\nApr\u00e8s analyse du code, il s&rsquo;av\u00e8re que cette fonctionnalit\u00e9 n&rsquo;est pas disponible de base.<\/p>\n<p>Voici comment le corriger.<\/p>\n<p>Pour commencer enregistrez une copie du fichier app\/code\/core\/Mage\/SalesRule\/Model\/Validator.php dans le pool local (\u00a0\u00bb app\/code\/local\/Mage\/SalesRule\/Model\/Validator.php\u00a0\u00bb);<\/p>\n<p>Le traitement de la r\u00e8gle est g\u00e9r\u00e9 dans la fonction \u00ab\u00a0Process\u00a0\u00bb dans le case \u00ab\u00a0buy_x_get_y\u00a0\u00bb (lignes 319 \u00e0 338 )<\/p>\n<p>Voici le code de base<\/p>\n<pre lang=\"php\" escaped=\"true\">case 'buy_x_get_y':\r\n $x = $rule-&gt;getDiscountStep();\r\n $y = $rule-&gt;getDiscountAmount();\r\n if (!$x || $y&gt;=$x) {\r\n  break;\r\n }\r\n $buy = 0; $free = 0;\r\n while ($buy+$free&lt;$qty) {\r\n  $buy += $x;\r\n  if ($buy+$free&gt;=$qty) {\r\n   break;\r\n  }\r\n  $free += min($y, $qty-$buy-$free);\r\n  if ($buy+$free&gt;=$qty) {\r\n  break;\r\n }\r\n}\r\n$discountAmount\u00a0\u00a0\u00a0 = $free*$itemPrice;\r\n$baseDiscountAmount= $free*$baseItemPrice;\r\nbreak;<\/pre>\n<p>Comme vous pouvez le constater, la validation v\u00e9rifie que la quantit\u00e9 <strong>y<\/strong> est <span style=\"text-decoration: underline;\">sup\u00e9rieure ou \u00e9gale<\/span> \u00e0 <strong>x<\/strong><br \/>\nLa r\u00e8gle 1 achet\u00e9 =&gt; 1 offert ne fonctionne donc pas.<br \/>\nPour corriger le comportement on va donc modifier la condition pour que la validation v\u00e9rifie que la quantit\u00e9 <strong>y<\/strong> est <span style=\"text-decoration: underline;\">strictement sup\u00e9rieure<\/span> \u00e0 <strong>x<\/strong><\/p>\n<p>Voici donc le code corrig\u00e9.<\/p>\n<pre lang=\"php\" escaped=\"true\">case 'buy_x_get_y':\r\n $x = $rule-&gt;getDiscountStep();\r\n $y = $rule-&gt;getDiscountAmount();\r\n if (!$x || $y&gt;$x) { \/\/ Ligne modifi\u00e9e\r\n  break;\r\n }\r\n $buy = 0; $free = 0;\r\n while ($buy+$free&lt;$qty) {\r\n  $buy += $x;\r\n  if ($buy+$free&gt;$qty) { \/\/Ligne modifi\u00e9e\r\n   break;\r\n  }\r\n  $free += min($y, $qty-$buy-$free);\r\n  if ($buy+$free&gt;$qty) { \/\/Ligne modifi\u00e9e\r\n  break;\r\n }\r\n}\r\n$discountAmount    = $free*$itemPrice;\r\n$baseDiscountAmount= $free*$baseItemPrice;\r\nbreak;<\/pre>\n<p>Une fois ces changement effectu\u00e9s, la r\u00e8gle 1 achet\u00e9 =&gt; 1 offert est bien fonctionnelle<\/p>\n","protected":false},"excerpt":{"rendered":"<p>La mise en place\u00a0 d&rsquo;une r\u00e8gle de promotion Magento de type \u00ab\u00a0x achet\u00e9s y gratuits\u00a0\u00bb est plut\u00f4t fastidieuse et pas forc\u00e9ment claire. ( Note : Sur la version 1.4.1.1 de Magento, il y a un probl\u00e8me lorsqu&rsquo;on souhaite cr\u00e9er une r\u00e8gle de type 1 achet\u00e9 1 offert , nous verrons plus loin comment corriger ce [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"categories":[246,6],"tags":[150,270,271],"class_list":["post-592","post","type-post","status-publish","format-standard","hentry","category-magento-2","category-trucs-et-astuces","tag-magento","tag-salesrule","tag-x-achetes-y-gratuits"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/posts\/592","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/comments?post=592"}],"version-history":[{"count":2,"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/posts\/592\/revisions"}],"predecessor-version":[{"id":597,"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/posts\/592\/revisions\/597"}],"wp:attachment":[{"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/media?parent=592"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/categories?post=592"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/tags?post=592"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}