Jump to content

Minimum de commande ( sauf sur 1 prooduit )


Recommended Posts

Bonjour la communauté,

J'ai une pitite question ...

Voilà j'ai, sur mon site, mis en place un minimum de commande de 150 €.

Je souhaite mettre en place, des échantillons ( à la demande de mes clients ).

Je ne veux pas leur faire gratuitement ( sinon je vais avoir 300 échantillon / jour ;-, et dans la Vie tout ne pas être gratos ... ).

Donc j'aimerai pouvoir sur une catégorie ( par exemple " échantillon " ) pouvoir autoriser, après ma validation en BO, une commande d'environ 16 € ( prix de l'échantillon avec frais de port ).

J'ai tenté avec, des bons de réduction ( de la différence de prix entre les 150 € et l'échantillon ) mais si le client souhaite changer d'avis et prendre un autre échantillon, le montant va être faux.

Je cherche mais ne vois pas comment faire. Si quelqu'un a une idée. Elle est la bienvenue ... :-)

J'ai pensé à un truc, sur le principe des bons de réduction : donner un code unique ( que je transmettrais au client ) qui passera outre la commande minimum.

Merci

Link to comment
Share on other sites

  • 2 months later...

Salut,

en fait je n'ai trouvé aucune solution. Donc je fonctionne au coup par coup. Et je débloque temporairement le montant minimum de commande de 150 €, pendant que le client passe sa commande. ( je reste avec lui au téléphone, et réactive le minima juste après ). Archaïque mais je n'ai pas trouvé d'autre solution pour le moment. dsl.

Link to comment
Share on other sites

C'est impossible tel quel avec PrestaShop. Maintenant il est facile de faire cela en modifier le "core" de PrestaShop. Au final, il faut juste désactiver la limite minimum pour le panier quand un produit qui à pour "id_category_default" la catégorie "échantillons".

Mais... il faut s'y connaitre en php :)

Link to comment
Share on other sites

Quand tu pose une question comme cela, je te conseille de toujours mettre la version PrestaShop que tu utilises, comme cela, si un dev qui à du temps, à envie de te proposer une solution, alors ça lui évite de te poser la question.

Hélas je n'ai pas beaucoup de temps de mon coté, mais on ne sait jamais ;)

Link to comment
Share on other sites

  • 2 weeks later...
  • 3 weeks later...

Bon je dirai que la modif doit être réalisée dans le fichier order.php... La vérification du montant minimum se fait à partir de la ligne 27 (sur PS 1.3.3.0) :

/* Check minimal account */
$orderTotal = $cart->getOrderTotal();

$orderTotalDefaultCurrency = Tools::convertPrice($cart->getOrderTotal(true, 1), Currency::getCurrency(intval(Configuration::get('PS_CURRENCY_DEFAULT'))));
$minimalPurchase = floatval(Configuration::get('PS_PURCHASE_MINIMUM'));
if ($orderTotalDefaultCurrency < $minimalPurchase)
{
   $step = 0;
   $errors[] = Tools::displayError('A minimum purchase total of').' '.Tools::displayPrice($minimalPurchase, Currency::getCurrency(intval($cart->id_currency))).
   ' '.Tools::displayError('is required in order to validate your order');
}



Il faudrait rajouter dans le test une condition : que l'un des éléments du panier n'appartienne pas à la catégorie n°x. Ou mieux encore, que le panier ne contienne que des produits ayant la catégorie x pour catégorie par défaut. Quelqu'un saurait comment récupérer la liste des items contenus dans le panier à cet endroit du code ?

Link to comment
Share on other sites

Hello everybody !

Bon, voilà une semaine ou deux que je parle tout seul, mais il se trouve que du haut de mon statut d'apprentice, j'ai trouvé la solution au problème mentionné.

Certes, j'ai dû me faire aider par le Dieu de PrestaShop lui-même (un grand merci à lui, dommage qu'il n'y en ait pas plus des comme ça sur ce forum), mais j'ai pensé qu'il serait pas mal de partager cela avec la communauté, même si je pense que certains font beaucoup semblant de partager ici ("ah oui c'est facile à faire, mais je te montrerai pas comment on fait").

C'est donc bien dans order.php que doit se faire la manip'. Il faut identifier l'identifiant de(s) la catégorie(s) des produits qui ne seront pas concernés par le minimum de commande (dans mon cas, la n°6). On peut voir cet identifiant dans l'onglet "Catalogue" du Back-Office. Le numéro qui précède l'intitulé de vos catégories est cet identifiant.

Ensuite, éditez via un outil FTP votre fichier /order.php. Repérez la portion de code qui réalise le test sur le montant total du panier :

if ($orderTotalDefaultCurrency < $minimalPurchase)
{
   $step = 0;
   $errors[] = Tools::displayError('A minimum purchase total of').' '.Tools::displayPrice($minimalPurchase, Currency::getCurrency(intval($cart->id_currency))).' '.Tools::displayError('is required in order to validate your order');
}



Remplacez-la par celle-ci :

$tab = $cart->getProducts();

$_SESSION['c']=0;
for ($i=0 ; $i < count($tab) ; $i++) {
   if($tab[$i][id_category_default] == 6) $_SESSION['c']++; // Remplacez le 6 par votre identifiant de catégorie
}

if ($_SESSION['c'] < count($tab)) {
    if ($orderTotalDefaultCurrency < $minimalPurchase) {
        $step = 0;
        $errors[] = Tools::displayError('A minimum purchase total of').' '.Tools::displayPrice($minimalPurchase, Currency::getCurrency(intval($cart->id_currency))).' '.Tools::displayError('is required in order to validate your order');
   }
}



Et voilà. Ça a pris 5 minutes montre en main à la personne mandatée pour me proposer cette solution. Comme quoi les développeurs qui "manquent de temps" manquent peut-être finalement juste d'envie...

Bien sûr, si vous avez plusieurs catégories concernées, rien ne vous empêche de compléter le test :

if($tab[$i][id_category_default] == 6 || $tab[$i][id_category_default] == 8) $_SESSION['c']++;



Le fait est que, désormais, si votre panier ne contient que des éléments de la catégorie 6 (et 8), votre minimum de commande ne sera pas appliqué. En revanche, si un item d'une autre catégorie figure dans votre panier, alors le minimum de commande est requis. Ça évitera que des petits malins intègrent un échantillon à leur panier pour voir s'évaporer le minimum de commande requis !

Voili voilou.

++

On peut marquer le topic comme résolu désormais. J'espère que ça te servira, gribouille.

Link to comment
Share on other sites

  • 3 weeks later...

merci pour votre aide precieuse sur ce topic
juste une petite question c'est a dire a l inverse
sur ma boutique pas de minimum je voudrais juste un minimum sur 1 categorie ou 2 categories c'est faisable ?
je pourrais utilisé la methode du dessus en listant toutes me categorie sauf 1 ou 2 mais le jour ou je rajoute une categorie faudrait refaire du php ;-)

Merci

Link to comment
Share on other sites

Bonjour,

Il suffit je pense d'inverser la condition :

$tab = $cart->getProducts();

$_SESSION['c']=0;
for ($i=0 ; $i < count($tab) ; $i++) {
   if($tab[$i][id_category_default] != 6) $_SESSION['c']++; // Remplacez le 6 par votre identifiant de catégorie qui doit être soumise à un minimum de commande
}

if ($_SESSION['c'] < count($tab)) {
    if ($orderTotalDefaultCurrency < $minimalPurchase) {
        $step = 0;
        $errors[] = Tools::displayError('A minimum purchase total of').' '.Tools::displayPrice($minimalPurchase, Currency::getCurrency(intval($cart->id_currency))).' '.Tools::displayError('is required in order to validate your order');
   }
}



Penser toutefois à vérifier que le comportement est le bon lorsque le panier est rempli avec des produits venant de diverses catégories (avec et sans minimum de commande)...

Link to comment
Share on other sites

  • 2 weeks later...

Bonjour,
En effet les dev qui prennent le temps de proposer une solution rapide et fiable ça fait très plaisir aux novices!!
Merci beaucoup

Dans mon cas par contre je souhaiterai limiter le nombre d'échantillon commandable à 1 produit "échantillon" par client (j'ai 3 produits "échantillons" possible différents) et je ne trouve nulle part la solution...

Je vais essayer de piger quelque chose à ce code s'il peut s'appliquer à ce cas mais si quelqu'un (ou même le Dieu de Presta!!!) a une idée suis preneur!
merci beaucoup d'avance et encore bravo..

Link to comment
Share on other sites

Le problème est un peu différent de celui explicité dans ce topic, mais je suppose que la solution devrait ressembler à ça...

$tab = $cart->getProducts();

$_SESSION['c']=0;
for ($i=0 ; $i < count($tab) ; $i++) { 
   if($tab[$i][id_category_default] == 6) $_SESSION['c']++; // Remplacez le 6 par votre identifiant de catégorie échantillon
}

if ($_SESSION['c'] > 1) {
    // Affichage de l'erreur ici
} 

Link to comment
Share on other sites

Salut !

Solution rapide (vue sur d'autres boutiques) : Mettre dans la description des produits que le nombre d'échantillons est limité à X par mois/semaine/commande par client, et que les commandes dépassant cette limite ne seront pas prises en compte.

Perso je trouve le message aussi efficace qu'un dev si c'est écrit clairement ;)

@+
Mr6

Link to comment
Share on other sites

Merci beaucoup
Je vais essayer cette solution c'est en effet parceque certains clients outrepassent le message davertissement que je cherchais une solution stable ....
il est vrai qu'ils pourront multiplier les comptes utilisateur mais cela restreint quand même beaucoup le risque!
Il faut que je regarde comment cela agit sur les catégories car mes échantillons ont leur propre catégorie mais apparaissent aussi dans toutes les autres catégories..
Merci beaucoup en tout cas d essayer de m aider sur ce problème!!

Link to comment
Share on other sites

  • 11 months later...

Je profite du fait d'avoir dû porter cette adaptation sur PS 1.4.6.2 pour vous faire partager les quelques nuances qu'elle comporte :

 

Le fichier à modifier n'est plus /order.php mais /controllers/OrderController.php

 

Ligne 56 vous trouverez le calcul du montant minimum de commande.

 

Voici le code à désactiver / remplacer :

 

/* Check minimal amount */
       $currency = Currency::getCurrency((int)self::$cart->id_currency);

       $orderTotal = self::$cart->getOrderTotal();
       $minimalPurchase = Tools::convertPrice((float)Configuration::get('PS_PURCHASE_MINIMUM'), $currency);
       /* if (self::$cart->getOrderTotal(false, Cart::ONLY_PRODUCTS) < $minimalPurchase && $this->step != -1)
       {
           $this->step = 0;
           $this->errors[] = Tools::displayError('A minimum purchase total of').' '.Tools::displayPrice($minimalPurchase, $currency).
           ' '.Tools::displayError('is required in order to validate your order.');
       } */

$tab=self::$cart->getProducts();

$_SESSION['c'] = 0;
for ($i=0 ; $i < count($tab) ; $i++) {
   if ($tab[$i][id_category_default]==6) $_SESSION['c']++;
}

if ($_SESSION['c'] < count($tab)) {
   if (self::$cart->getOrderTotal(false, Cart::ONLY_PRODUCTS) < $minimalPurchase && $this->step != -1) {
       $this->step = 0;
       $this->errors[] = Tools::displayError('A minimum purchase total of').' '.Tools::displayPrice($minimalPurchase, $currency).' '.Tools::displayError('is required in order to validate your order.');
   }
}
/* Fin modification */

 

En espérant que cela serve, et bonne année 2012 à toute la communauté !

Link to comment
Share on other sites

Bonjour et bravo pour votre aide.

 

Pour la version "inversée"

C'est à dire une catégorie parmi les autres doit avoir un minimum de montant d'achat et pas les autres.

Vous avez supposé une solution en inversant le test mais cela ne fonctionne pas.

Je me demande si on ne doit pas comparer le "$minimalPurchase" avec un "getOrderTotal" mais de uniquement la catégorie concernée?

 

Le soucis c'est que je n'y connais rien.

Auriez-vous une idée du code à appliquer?

 

Merci

Link to comment
Share on other sites

Bonjour et bravo pour cette contribution,

 

La solution que vous évoquiez en inversé n'a pas l'air de fonctionner.

 

Il semblerai que le test de l'ID de categorie ne se fasse pas et que le montant total uniquement de cette catégorie n'est pas fait.

Ce qui fait que si on ajoute un produit d'une autre catégorie le test ne se fait plus et on passe le seuil minimum de commande.

 

Auriez vous une idée de ce qui pourrait "clocher" ?

 

Merci d'avance

Link to comment
Share on other sites

  • 1 month later...

Bonjour,

 

je suis en version prestashop 1.4.7 et il semblerai que ce code ne fonctionne pas, mon soucis c'est que j'ai deux catégorie, une catégorie pro et une catégorie particuliers la pro a une id 6 et la catégorie particulier id 2, j'aimerai que les clients particuliers n'est pas de minimum d'achat et que la catégorie pro est un minimum d'achat de 100 euros, comment puis je faire cela?

merci d'avance

Link to comment
Share on other sites

Oups désolé, ca fonctionne, en faite j'avais juste mis l'id de la catégorie particulier mais pas les ids des sous catégories comprises dans la catégorie client particuliers, par contre si quelqu'un connait comment faire pour ne pas avoir a rajouter dans orderController.php une id catégorie a chaque fois que je vais créer une sous catégorie appartenant a la catégorie particulier je suis preneur....

 

merci

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