Jump to content

[Résolu] Multiple De Quantité Minimum


Recommended Posts

Bonjour,

Après avoir parcouru un nombre important de fil de discussion sur différent forum, je ne trouve pas solution à ma demande. D'avance, désolé si la discussion existe déjà...

Prestashop 1.5.x

Je mets en place un site de commande B2B pour lequel je souhaiterai pouvoir gérer les quantités de bases de commande pour chaque article. Si dans PS 1.5 on peut définir la quantité minimum, je souhaiterai surtout pouvoir ne proposer que la possibilité de commander par multiple de cette quantité minimum. Un exemple plus parlant : le produit "trucmuche" est vendu par 2,4,6,8..etc le produit "machinbidule" est vendu par 12,24,48...etc. L'idéal serait d'avoir un menu dropdown proposant les multiples et surtout qu'apparaisse le prix à l'unité (cette fonction de "drop" est possible sur d'autres logiciels comme virtuemart). La solution de création de déclinaisons (proposé par certains) est une solution que je ne souhaite pas étant donné qu'il faudrait les créer pour chaque produit (très fastidieux).

Je suis peut être passé à côté du module qui permet cela, alors n'hésitez pas, et d'avance merci pour vos réponses...

Fred

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

  • 2 weeks later...

Bonjour,

D'abord, je tenais à remercier jeckyl pour ces informations (et le reste !) mais malheureusement sa solution bien que très bien faite, ne réponds pas à ma demande particulière.

A la lecture de nombreux sujet sur les forums, il apparaît qu'une des pistes se trouverai dans la définition de la variable "minimum_quantity" dans la fonction checkMinimalQuantity du product.js (thème actuel).... mais là j'avoue que mes connaissances en php et autre java sont beaucoup trop succinctes ! Si j'ai bien compris qu'il faut redéfinir cette fameuse variable avec la fonction php : reste d'une division (% minimal_quantity !=0)... un message en rouge peut donc prévenir que la quantité doit être un multiple, mais par contre rien n'empêche un client de mettre une valeur non divisible dans le champ "quantité" et de valider !! Il ne me manque pas grand-chose...

 

pour le code dans product.js :

 

if ($('#quantity_wanted').val() < minimal_quantity)

devient

if ($('#quantity_wanted').val() % minimal_quantity !=0)

Link to comment
Share on other sites

Re,

Effectivement, il serait possible de vendre par lot mais voilà le prix affiché correspond au lot et non à l'unité (oui, le prix à l'unité est indiqué mais en petit !). c'est donc un souci de marketing ! Un exemple, j'ai des articles vendus par lot de 72, le prix à l'unité étant 1.50 or le prix afficher en gros et en rouge 108 € , mais il y a aussi des articles vendus simplement par 2 ... à 6.95 l'unité et donc affiché dans la page produit à 13.90 !! Voilà le pourquoi de ma demande...

Link to comment
Share on other sites

  • 2 weeks later...

Bonjour,

ci dessous une solution pour la version 1.4

 

Dans le product.js remplacer la line 624 (function checkMinimalQuantity)

if ($('#quantity_wanted').val() < minimal_quantity)

 

par

 

if ($('#quantity_wanted').val() % minimal_quantity !=0)

 

Ensuite il faut ajoutez le code qui suit dans la fonction preProcess() du CartController.

 

if ((int)$idProductAttribute)
  $minimal_quantity = Attribute::getAttributeMinimalQty((int)$idProductAttribute);
else
	$minimal_quantity = $producToAdd->minimal_quantity;				  

 if ($qty % $minimal_quantity != 0)
	  {
		$this->errors[] = Tools::displayError('You can only only add this item to your cart with a quantity multiple of ').' '.$minimal_quantity;
		}

 

 

cet ajout doit se faire après les lignes


if (!sizeof($this->errors))
{
 if ($add AND $qty >= 0)
 {

 

 

et avant les lignes

 


/* Product addition to the cart */
	  if (!isset(self::$cart->id) OR !self::$cart->id)
  {

 

Il faut adapter ce code pour la version 1.5 car le CartController a été ré-écrit depuis la 1.4.

I'ajout sera dans la fonction processChangeProductInCart() du CartController, le mieux étant de faire un Override de la fonction.

Edited by martinjean (see edit history)
  • Like 2
Link to comment
Share on other sites

Update, pour la version 1.5

 

Ajoutez le code qui suit dans la fonction processChangeProductInCart() du CartController

 

 // collisage par qte min
 if ((int)$this->id_product_attribute)
 $minimal_quantity = Attribute::getAttributeMinimalQty($this->id_product_attribute);
 else
  $minimal_quantity = $product->minimal_quantity;				
 if ($this->qty % $minimal_quantity != 0)
   {
	  $this->errors[] = Tools::displayError('You can only only add this item to your cart with a quantity multiple of ').' '.$minimal_quantity;
	}
  // fin col par qte min

 

cet ajout doit se faire après les lignes

 

// If no errors, process product addition
if (!$this->errors && $mode == 'add')
{

 

et avant les lignes

 

// Add cart if no cart found
if (!$this->context->cart->id)
{

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

  • 2 months later...

Por fin!! encontre la solución al problema que llevaba meses buscando.. una pena no saber francés, muchísimas gracias!!

 

Finally! I found the solution to the problem that took months looking .. a shame not knowing French, thank you!

Link to comment
Share on other sites

Por fin!! encontre la solución al problema que llevaba meses buscando.. una pena no saber francés, muchísimas gracias!!

 

Finally! I found the solution to the problem that took months looking .. a shame not knowing French, thank you!

 

Bonjour

 

Traduction de notre ami Ander46 qui je suppose a poster dans ce forum pour nous remercier d'avoir trouver la solution sur le forum français.

Enfin! J'ai trouvé la solution au problème qui a pris des mois à la recherche .. dommage de ne pas connaître le français, merci!

  • Like 1
Link to comment
Share on other sites

  • 3 months later...

Bonjour,
Je suis en version 1.5.5 et je suis intéressé par cette fonctionnalité.

Que dois-je faire ?
Faire la marche à suivre indiquée pour la 1.4 puis pour la 1.5 ?
Ou j'ajoute seulement
 

  // collisage par qte min
  if ((int)$this->id_product_attribute)
	 $minimal_quantity = Attribute::getAttributeMinimalQty($this->id_product_attribute);
  else
	  $minimal_quantity = $product->minimal_quantity;				
  if ($this->qty % $minimal_quantity != 0)
	   {
		  $this->errors[] = Tools::displayError('You can only only add this item to your cart with a quantity multiple of ').' '.$minimal_quantity;
		}
   // fin col par qte min

Merci par avance,

Link to comment
Share on other sites

  • 1 month later...

Merci beaucoup martinjean.

 

Les articles ne peuvent effectivement n'être commandés que par multiples de conditionnement.

Ce qui est très bien.

Cela étant, sur la page "récapitulatif de la commande" un clic sur le "+" ou "-" n'agit plus et s'affiche le message 'You can only only add this item to your cart with a quantity multiple of '.

Il est possible de modifier la quantité en pensant à cliquer dessus et la changeant, mais pas avec  le "+" ou "-".

Y a-t-il une solution à ce détail ? Avec celle-ci ce serait parfait !

 

Par ailleurs, j'ai un commentaire au sujet du panier :

Celui-ci est inscrit avec le nombre d'articles unitaires de produits; Ne serait-il pas possible que le nombre inscrit dans le panier soit celui du nombre de références commandées ou en d'autres termes le nombre de lignes dans le panier ?

C'est une approche plus réaliste en B2B.

 

A vous lire si possible avec des solutions, merci bien.

PierreLuc

 

Link to comment
Share on other sites

  • 2 months later...
  • 8 months later...

Bonjour,

 

Merci pour cette solution qui fonctionne très bien!

 

J'aurais cependant une question...

 

Sur la page produit :

 

- Comment modifier le code pour que lorsqu'on clique sur les boutons "+" et"-", la quantité minimale soit additionnée ou soustraite?

 

Exemple : je vends par colis de 13 pièces. Lorsque je clique sur le bouton "+", j'ajoute 13. Soit 13+13 = 26. Si je clique encore sur le bouton "+", alors je sélectionne 26+13= 39 pièces... etc

Idem pour la soustraction avec le bouton "-".

 

Merci d'avance

 

[Résolu]

 

Je viens de trouver la solution.

 

Dans le "product.js", il suffit de remplacer ces lignes  :

 

$('input[name=+fieldName+]').val(currentVal + 1).trigger('keyup');

 

$('input[name=+fieldName+]').val(currentVal -  1).trigger('keyup'); 

 

Par :

 

$('input[name=+fieldName+]').val(currentVal + minimalQuantity).trigger('keyup');

$('input[name=+fieldName+]').val(currentVal - minimalQuantity).trigger('keyup');

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

Il ne me reste qu'une question :

 

Lorsqu'on charge une page produit, celui-ci apparait par défaut avec la quantité minimum sélectionnée (dans mon cas "13").

Le message généré en js devrait alors être noir et le contour du champ bleu.

Cependant le contour du champ de quantité est rouge et le texte aussi.

 

Lorsque je retape manuellement 13 dans le champ, alors il s'affiche correctement : contour bleu, texte bleu.

Idem lorsque j'ajoute un multiple de 13.

 

Comment faire pour que par défaut le contour soit bleu ainsi que le texte?

 

Merci

Link to comment
Share on other sites

  • 3 months later...
$('input[name='+fieldName+']').val(currentVal + minimalQuantity).trigger('keyup');
$('input[name='+fieldName+']').val(currentVal - minimalQuantity).trigger('keyup');
 

Merci, fonctionne sous 1.6 par contre est'il possible de faire la même chose pour la page panier?

Cordialement

Link to comment
Share on other sites

$('input[name='+fieldName+']').val(currentVal + minimalQuantity).trigger('keyup');
$('input[name='+fieldName+']').val(currentVal - minimalQuantity).trigger('keyup');
 

Merci, fonctionne sous 1.6 par contre est'il possible de faire la même chose pour la page panier?

Cordialement

 

 

UP

 

Ce code marche nickel!

 

Par contre c'est vrai qu'une fois dans le panier, le client peut mettre la quantité qu'il veut...

 

Des infos ?

Link to comment
Share on other sites

  • 2 weeks later...

Bonjour

voici ce que j'ai fait

pour que les boutons + - fonctionnent dans le panier en prenant en compte minimum.quantity (détourné de sa fontion première)

 

dans shopping-cart-product-line.tpl

ajout de

{if $product.minimal_quantity > 0}<input type="hidden" value="{$product.minimal_quantity}" name="par_quantite_{$product.id_product}_{$product.id_product_attribute}{if isset($product.id_address_delivery)}_0_{$product.id_address_delivery|intval}{/if}" />{/if}

environ ligne 60 juste avant <input type="hidden"...

 

ensuite dans cart-summary.js

 

fonction upQuantity
ajout de var qty

upQuantity = function(id, qty)
{
	var qty = $('input[name=par_quantite_'+id+']').val();
etc ..

fonction downQuantity
ajout de var qty

downQuantity = function(id, qty)
{
	var val = $('input[name=quantity_'+id+']').val();
	var newVal = val;
	var qty = $('input[name=par_quantite_'+id+']').val();
etc ..

normalement ça fonctionne

bon code

Link to comment
Share on other sites

  • 1 month later...

Bonjour

je rappelle que je travaille sur une 1.5.6

pour compéter le détournement de minimal_quantity en multiple de X

modifiez le code qui suit dans la fonction processChangeProductInCart() du CartController

            // collisage par qte min
              if ((int)$this->id_product_attribute)
                 $minimal_quantity = Attribute::getAttributeMinimalQty((int)$this->id_product_attribute);
              else
                  $minimal_quantity = $product->minimal_quantity;

              if ($this->qty % $minimal_quantity != 0)
                   {
                      $this->errors[] = Tools::displayError('You can only add this quantity ('.$this->qty.') to your cart with a quantity multiple of '.$minimal_quantity);
                    }
               // fin col par qte min

et  en prenant maintenant  en compte les quantités mini par déclinaison il faut faire une petite modif dans la fonction getAttributeMinimalQty

 

par défaut l'appel de

Attribute::getAttributeMinimalQty retourne false   ->  if ($minimal_quantity > 1)    return (int)$minimal_quantity; return false;

donc dans le  cas ou vous avez des attributs il faut overrider la fonction getAttributeMinimalQty de la classe Attribute
et ajouter = car sinon on obtient une division par zéro

if ($minimal_quantity >= 1)    return (int)$minimal_quantity; return false;

bon code

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

  • 2 weeks later...

Bonjour natachaC,

Je débute sur Prestashop 1.60.14 afin de créer ma boutique en ligne de vente de vins par carton de 6 bouteilles.

J'ai pu lire ta solution mais je n'ai pas tout compris de part mon faible niveau en programmation.

Ainsi serait il possible de me dire dans quel fichier, quelle ligne et quelles modifications faut il faire pour vendre par multiple de 6 tout en gardant le prix affiché de l'article à l'unité.

Je pense que cela sera utile à beaucoup de personnes comme moi.

 

Je te remercie d'avance.

 

A bientôt!

 

Link to comment
Share on other sites

Bonjour Yannick

ça va être difficile si vous ne savez pas coder
je suis sur une 1.5 : pas dit que ça soit identique pour une 1.6

de plus je suis une agence Web et même si je post des solutions techniques je ne vais pas plus loin sinon je n'ai plus de travail

 

bon code

Link to comment
Share on other sites

  • 3 weeks later...
$('input[name='+fieldName+']').val(currentVal + minimalQuantity).trigger('keyup');
$('input[name='+fieldName+']').val(currentVal - minimalQuantity).trigger('keyup');
 

Merci, fonctionne sous 1.6 par contre est'il possible de faire la même chose pour la page panier?

Cordialement

 

Bonjour,

 

je suis sur une 1.6 et cette modif ne fonctionne pas chez moi !

ça ajoute ou enlève toujours 1 unité alors que ma minimalQuantity est de 10 unités. (pas de message d'erreur pour autant)

 

Tous mes produits ont des déclinaisons, peut-être en est-ce la cause ?

Mais sinon tout le reste de la modification fonctionne bien...

 

Si quelqu'un a une idée du problème..?

merci par avance.

 

EDIT : par contre votre modif pour le + et - dans le panier fonctionne bien natachaC

J'ai donc simplement un problème sur le + et - dans la fiche article.

 

Edited by Dj esp@ce (see edit history)
Link to comment
Share on other sites

Bonjour

dans product le input de quantité doit ressembler à ça

<input type="text" name="qty" id="quantity_wanted" class="text" value="{if isset($quantityBackup)}{$quantityBackup|intval}{else}{if $product->minimal_quantity > 1}{$product->minimal_quantity}{else}1{/if}{/if}" size="2" maxlength="3" {if $product->minimal_quantity > 1}onkeyup="checkMinimalQuantity({$product->minimal_quantity});"{/if} />
Link to comment
Share on other sites

  • 1 month later...

bonjour

j'ai suivi toute vos conversations

très interressant si on veux vendre par multiple

mais dans mon cas je pourrais vendre a la pièce également

par exemple avec les bouteilles de vin par 6

j'aimerais que le 6 s'affiche dans la case produit par défaut et que j'ai la possibilité de réduire ou d'augmenté le nombre et pas forcement par multiple

Link to comment
Share on other sites

  • 2 months later...

Bonjour

je rappelle que je travaille sur une 1.5.6

pour compéter le détournement de minimal_quantity en multiple de X

            // collisage par qte min
              if ((int)$this->id_product_attribute)
                 $minimal_quantity = Attribute::getAttributeMinimalQty((int)$this->id_product_attribute);
              else
                  $minimal_quantity = $product->minimal_quantity;

              if ($this->qty % $minimal_quantity != 0)
                   {
                      $this->errors[] = Tools::displayError('You can only add this quantity ('.$this->qty.') to your cart with a quantity multiple of '.$minimal_quantity);
                    }
               // fin col par qte min

et  en prenant maintenant  en compte les quantités mini par déclinaison il faut faire une petite modif dans la fonction getAttributeMinimalQty

 

par défaut l'appel de

Attribute::getAttributeMinimalQty retourne false   ->  if ($minimal_quantity > 1)    return (int)$minimal_quantity; return false;

donc dans le  cas ou vous avez des attributs il faut overrider la fonction getAttributeMinimalQty de la classe Attribute

et ajouter = car sinon on obtient une division par zéro

if ($minimal_quantity >= 1)    return (int)$minimal_quantity; return false;

bon code

Je ne sais pas où mettre ce code, vous nous expliquer s'il vous plaît.

Link to comment
Share on other sites

fonction processChangeProductInCart() du CartController

fonction getAttributeMinimalQty de la classe Attribute

Dans le résumé de panier je reçois une erreur lorsque je tente de mettre un certain nombre hors de portée, je voudrais traduire cette erreur pour le rendre plus facile à comprendre, mais ne peux pas trouver où traduire, des idées?
 
Erreur de capture dans un produit qui est vendu en multiples de 100. Les captures mettent 90 et 110.
 
Je ne comprends pas le français, cela est une traduction google, je présente mes excuses.

post-334519-0-48297900-1441729218_thumb.jpg

post-334519-0-81156100-1441729220_thumb.jpg

Link to comment
Share on other sites

Ce que je l'ai fait:

function upQuantity(id, qty)
{
	var qty = $('input[name=par_quantite_' + id + ']').val();
	if (typeof(qty) == 'undefined' || !qty)
		qty = 5;
etc.
function downQuantity(id, qty)
{
	var val = $('input[name=quantity_' + id + ']').val();
	var newVal = val;
	var qty = $('input[name=par_quantite_' + id + ']').val();
	var newVal = val;
	if(typeof(qty) == 'undefined' || !qty)
etc.
{if !isset($customizedDatas.$productId.$productAttributeId) OR $quantityDisplayed > 0}
  {if $product.minimal_quantity > 0}
                <input type="hidden" value="{$product.minimal_quantity}" name="par_quantite_{$product.id_product}_{$product.id_product_attribute}{if isset($product.id_address_delivery)}_0_{$product.id_address_delivery|intval}{/if}" />
                {/if}
<input type="hidden" value="{if $quantityDisplayed == 0 AND isset($customizedDatas.$productId.$productAttributeId)}{$customizedDatas.$productId.$productAttributeId|@count}{else}{$product.cart_quantity-$quantityDisplayed}{/if}" name="quantity_{$product.id_product}_{$product.id_product_attribute}_{if $quantityDisplayed > 0}nocustom{else}0{/if}_{$product.id_address_delivery|intval}_hidden" />               
<input size="2" type="text" autocomplete="off" class="cart_quantity_input form-control grey" value="{if $quantityDisplayed == 0 AND isset($customizedDatas.$productId.$productAttributeId)}{$customizedDatas.$productId.$productAttributeId|@count}{else}{$product.cart_quantity-$quantityDisplayed}{/if}"  name="quantity_{$product.id_product}_{$product.id_product_attribute}_{if $quantityDisplayed > 0}nocustom{else}0{/if}_{$product.id_address_delivery|intval}" />
<div class="cart_quantity_button clearfix">
etc.
Edited by Eusebio100 (see edit history)
Link to comment
Share on other sites

  • 3 weeks later...

Un IMMENSE merci à Natacha C pour la simplicité et l'efficacité de ses solutions avec le code en cadeau (bon ok, il faut savoir ou le mettre ;-))

 

Ca fonctionne exactement comme je veux, version 1.6.1.1 !

 

EDIT : Le luxe absolu serait de le faire fonctionner AUSSI dans la page de création de commande (via le backoffice)

 

J'ai trouvé que le fichier admin/theme/default/template/controllers/orders/form.tpl ouait un rôle, notemment dans les lignes qui concernent les boutons ajouter/supprimer un produit (lignes 179 à 186) :

		$('.increaseqty_product, .decreaseqty_product').live('click', function(e) {
			e.preventDefault();
			var product = $(this).attr('rel').split('_');
			var sign = '';
			if ($(this).hasClass('decreaseqty_product'))
				sign = '-';
			updateQty(product[0], product[1],product[2], sign+1);
		});

mais j'avoue que je ne sais pas trop quoi modifier pour que ça fonctionne..si quelqu'un peut m'éclairer..

Edited by Turtle Wet Sports (see edit history)
Link to comment
Share on other sites

  • 11 months later...

Bonjour,

 

je suis sur une 1.6 et cette modif ne fonctionne pas chez moi !

ça ajoute ou enlève toujours 1 unité alors que ma minimalQuantity est de 10 unités. (pas de message d'erreur pour autant)

 

Tous mes produits ont des déclinaisons, peut-être en est-ce la cause ?

Mais sinon tout le reste de la modification fonctionne bien...

 

Si quelqu'un a une idée du problème..?

merci par avance.

 

EDIT : par contre votre modif pour le + et - dans le panier fonctionne bien natachaC

J'ai donc simplement un problème sur le + et - dans la fiche article.

 

Bonjour,

 

Un an après, j'en suis toujours au même point, je n'arrive pas à faire fonctionner les + et - de la fiche produit.

Enfin si, ça fonctionne mais ça ajoute ou soustrait 1 unité comme par défaut.

On dirait que la variable minimalQuantity est = 1  je ne comprends pas où elle est définie.

En revanche dans le panier tout fonctionne bien les + et - ajoutent et soustraient bien 10 unités (dans mon cas ou ma quantité mini est de 10).

 

Merci de votre aide.

Link to comment
Share on other sites

Bonjour,

 

Un an après, j'en suis toujours au même point, je n'arrive pas à faire fonctionner les + et - de la fiche produit.

Enfin si, ça fonctionne mais ça ajoute ou soustrait 1 unité comme par défaut.

On dirait que la variable minimalQuantity est = 1  je ne comprends pas où elle est définie.

En revanche dans le panier tout fonctionne bien les + et - ajoutent et soustraient bien 10 unités (dans mon cas ou ma quantité mini est de 10).

 

Merci de votre aide.

Bonjour , je suis on ne peut plus dans la même situation que toi.

 

tout va bien au niveau de la page panier mais dans la page produit impossible d'intégrer mon multiple d'article (designé dans le produit correspondant en back office).

 

Une âme charitable pour nous aider svp?

 

j'ai tout tenté à ma connaissance ( j'suis même allé explorer le code du productController, du product.tpl,..sans succès)

 

la solution est  forcément dans product.js dans cette maudite ligne : 

 

  $('input[name=+fieldName+]').val(currentVal + minimalQuantity).trigger('keyup');

 

pour le moment l'attribut 'minimalQuantity' continue d'ajouter ou de soustraire "1" ...

Link to comment
Share on other sites

  • 1 month later...

Update, pour la version 1.5

 

Ajoutez le code qui suit dans la fonction processChangeProductInCart() du CartController

 

  // collisage par qte min
  if ((int)$this->id_product_attribute)
	 $minimal_quantity = Attribute::getAttributeMinimalQty($this->id_product_attribute);
  else
	  $minimal_quantity = $product->minimal_quantity;				
  if ($this->qty % $minimal_quantity != 0)
	   {
		  $this->errors[] = Tools::displayError('You can only only add this item to your cart with a quantity multiple of ').' '.$minimal_quantity;
		}
   // fin col par qte min
cet ajout doit se faire après les lignes

 

// If no errors, process product addition
if (!$this->errors && $mode == 'add')
{
et avant les lignes

 

// Add cart if no cart found
if (!$this->context->cart->id)
{

Bonjour, est ce que quelqu'un pourrais m'aider avec PS 1.6.1.5 ?

J'essaye cette mod mais ca me fais une erreur avec les combinaisons. la mod marche bien, mais si j'essaye d'ajouter au panier un produit comportant une combinaison, j'ai cette erreur:

Impossible to add the product to the cart.

textStatus: 'parsererror'

errorThrown: 'SyntaxError: JSON.parse: unexpected character at line 1 column 1 of the JSON data'

responseText:

 

Fatal error: Uncaught DivisionByZeroError: Modulo by zero in /shop/controllers/front/CartController.php:279 Stack trace: #0 /shop/controllers/front/CartController.php(73): CartControllerCore->processChangeProductInCart() #1/shop/classes/controller/Controller.php(178): CartControllerCore->postProcess() #2 /shop/classes/Dispatcher.php(367): ControllerCore->run() #3 /shop/index.php(28): DispatcherCore->dispatch() #4 {main} thrown in /shop/controllers/front/CartController.php on line 279

 

Mon but est de forcer l'achat en multiples de la quantité minimale spécifiée dans la page quantité du produit. ca marche bien pour les produits sans combinaisons.

Link to comment
Share on other sites

Bon je suis pas à l'aise avec php mais je pense que mon erreur venait de 

 

et  en prenant maintenant  en compte les quantités mini par déclinaison il faut faire une petite modif dans la fonction getAttributeMinimalQty

 

par défaut l'appel de

Attribute::getAttributeMinimalQty retourne false   ->  if ($minimal_quantity > 1)    return (int)$minimal_quantity; return false;

donc dans le  cas ou vous avez des attributs il faut overrider la fonction getAttributeMinimalQty de la classe Attribute
et ajouter = car sinon on obtient une division par zéro

if ($minimal_quantity >= 1)    return (int)$minimal_quantity; return false;

bon code

Link to comment
Share on other sites

Bonjour,

 

Merci pour cette solution qui fonctionne très bien!

 

J'aurais cependant une question...

 

Sur la page produit :

 

- Comment modifier le code pour que lorsqu'on clique sur les boutons "+" et"-", la quantité minimale soit additionnée ou soustraite?

 

Exemple : je vends par colis de 13 pièces. Lorsque je clique sur le bouton "+", j'ajoute 13. Soit 13+13 = 26. Si je clique encore sur le bouton "+", alors je sélectionne 26+13= 39 pièces... etc

Idem pour la soustraction avec le bouton "-".

 

Merci d'avance

 

[Résolu]

 

Je viens de trouver la solution.

 

Dans le "product.js", il suffit de remplacer ces lignes  :

 

$('input[name=+fieldName+]').val(currentVal + 1).trigger('keyup');

 

$('input[name=+fieldName+]').val(currentVal -  1).trigger('keyup'); 

 

Par :

 

$('input[name=+fieldName+]').val(currentVal + minimalQuantity).trigger('keyup');

$('input[name=+fieldName+]').val(currentVal - minimalQuantity).trigger('keyup');

 

Bonjour, je travaille actuellement sur la boutique d'un client en version 1.6.0.9.

Ce code ne fonctionne pas, je suis dans un contexte de déclinaisons et en multiboutique.

Il semble en effet récupérer la quantité minimale du produit par défaut, mais pas celles définies dans les déclinaisons.

Une idée?

Link to comment
Share on other sites

  • 3 weeks later...

Bonjour j'ai utilisé les conseils ci-dessus qui fonctionne sur la fiche produit mais pas dans le panier, pouvez vous m'aider? svp  Merci

 

Dans le "product.js", il suffit de remplacer ces lignes  :

 

$('input[name=+fieldName+]').val(currentVal + 1).trigger('keyup');

 

$('input[name=+fieldName+]').val(currentVal -  1).trigger('keyup'); 

 

Par :

 

$('input[name=+fieldName+]').val(currentVal + minimalQuantity).trigger('keyup');

$('input[name=+fieldName+]').val(currentVal - minimalQuantity).trigger('keyup');

Link to comment
Share on other sites

  • 3 months later...

 Bonjour,

 

En appliquant tout cela sur un shop en développement, j'ai un petit soucis dans le récapitulatif du panier.

 

Pour chaque article dans le panier, les boutons "+" et "-" augmente ou diminue la quantité affichée par le nombre "quantité minimale", sauf qu'il n'atteind plus zéro...

 

Exemple, un article dont les quantités minimale est 2. Sur la page de l'article, j'en commande 4 (ok, puisque 4 est multiple de 2). Sur le details du panier, j'ai bien mon article avec 4 comme quantité affichée. En cliquant sur "-", il diminue la quantité affichée de 2 (= quantité minimale), il me reste donc 2 en quantité affichée. Si je clique a nouveau sur "-", il laisse 2 en quantité affichée (il devrait passer a zero), le total du panier passe à 0, mais comme la quantité affichée reste a 2, le produit n'est pas supprimé du panier.

Est-ce que quelqu'un a une piste ?

Link to comment
Share on other sites

  • 4 months later...

Bonjour à tous,

Merci pour ce forum riche en informations.

Je suis sur Prestashop 1.6.1.12

Voici ma problématique :

Pour certaines catégories de produits disons par exemple "satiné" et "coton", je voudrais pouvoir préciser des minimum et des maximums pairs de nombre d'articles à commander comme : 4,6,8,10,12.

mais ne rien modifier pour tous les autres catégories.

Auriez-vous une idée?

D'avance merci,

Bonne journée à tous!

Link to comment
Share on other sites

  • 2 months later...

Bonjour

 

Je suis sur Prestashop 1.6.1.12

 

J'ai ajouté une case quantité sur chaque produit dans la liste de produits.

 

Et je voudrais savoir si quelqu'un avais une solution pour faire la même chose dans product-list et ne pouvoir ajouter les produits uniquement que par multiple.

 

Merci d'avance

Link to comment
Share on other sites

  • 8 months later...

Bonjour,  mai 2018, retour sur le multiple de quantité sur la version 1.7x,  il y a t'il une chose dans le style ( photo joint )

j'aimerais éviter de ré ouvrir tout les produits et renseigner les valeurs lors du première import .   

un lien d'exemple de choses que vous avez réalisé ?

panier1.JPG

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

  • 1 year later...

Salut! Dans prestashop 1.7.4.3, cela ne fonctionne pas du tout. Lorsque vous mettez un montant minimum (par exemple) de 5, cela fonctionne correctement. Ignorer l'erreur "seulement des multiples de 5".

1.png

Mais vendre des produits en vrac, dont je n'ai pas besoin de multiples, donne une erreur. Par exemple, en quantité minimale, j'indique 1 et lorsque j'ajoute 1 au panier, il est dit "Impossible d'ajouter au panier" Cela n'indique rien d'autre. J'ai également essayé de mettre 0 en quantité minimale mais cela suit la même erreur. Une idée? Désolé pour mon français, c'est de Google Translator.

2.png

PD: Je ne sais pas si quelqu'un va répondre, ce message existe depuis longtemps.

Link to comment
Share on other sites

  • 3 months later...

Bonjour, ce code me donne une erreur lorsque l'article a des attributs et comme quantité minimum 1, quand il en a 2 ou plus il n'y a pas d'erreur. Parce que?
(Google Traduction)

 

// collisage par qte min
              if ((int)$this->id_product_attribute)
                 $minimal_quantity = Attribute::getAttributeMinimalQty((int)$this->id_product_attribute);
              else
                  $minimal_quantity = $product->minimal_quantity;

              if ($this->qty % $minimal_quantity != 0)
                   {
                      $this->errors[] = Tools::displayError('You can only add this quantity ('.$this->qty.') to your cart with a quantity multiple of '.$minimal_quantity);
                    }
               // fin col par qte min

Merci.

 

Link to comment
Share on other sites

On 5/26/2020 at 10:26 PM, oncle said:

Bonjour, ce code me donne une erreur lorsque l'article a des attributs et comme quantité minimum 1, quand il en a 2 ou plus il n'y a pas d'erreur. Parce que?
(Google Traduction)

 

// collisage par qte min
              if ((int)$this->id_product_attribute)
                 $minimal_quantity = Attribute::getAttributeMinimalQty((int)$this->id_product_attribute);
              else
                  $minimal_quantity = $product->minimal_quantity;

              if ($this->qty % $minimal_quantity != 0)
                   {
                      $this->errors[] = Tools::displayError('You can only add this quantity ('.$this->qty.') to your cart with a quantity multiple of '.$minimal_quantity);
                    }
               // fin col par qte min

Merci.

 

Bonjour,

Dans quel fichier utilisez-vous ce code ?

 

Link to comment
Share on other sites

Bonjour Almost Fred, je l'ai déjà résolu de cette façon.  Merci de votre intérêt

 

// Cantidad mínima por producto
if ((int)$this->id_product_attribute)

$minimal_quantity = Attribute::getAttributeMinimalQty($this->id_product_attribute);

else

$minimal_quantity = $product->minimal_quantity; if (($minimal_quantity>1) && ($this->qty % $minimal_quantity != 0))

{ $this->errors[] = Tools::displayError('Solo puede agregar este artículo a su carrito con una cantidad múltiple de ').' '.$minimal_quantity; } // fin Cantidad mínima por producto

Link to comment
Share on other sites

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