gribouille Posted August 31, 2010 Share Posted August 31, 2010 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 More sharing options...
Jean-Bruno Posted November 17, 2010 Share Posted November 17, 2010 Salut, Tu as trouvé ta solutions ???Il y a moyen sur la 1.3 je crois de définir des frais de port spécifiques pour chaque article il me semble. a+ et merci si tu as mieux Link to comment Share on other sites More sharing options...
gribouille Posted November 18, 2010 Author Share Posted November 18, 2010 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 More sharing options...
Pierre-Yves Posted November 18, 2010 Share Posted November 18, 2010 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 More sharing options...
gribouille Posted November 18, 2010 Author Share Posted November 18, 2010 Bonjour Pierre Yves.merci pour cette info. Vu mon niveau en php, je risque de planter le site en 2 seconde 37 ... Mais bon on ne sait jamais, si je trouve un dev. Link to comment Share on other sites More sharing options...
Pierre-Yves Posted November 18, 2010 Share Posted November 18, 2010 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 More sharing options...
Romain29 Posted November 30, 2010 Share Posted November 30, 2010 Bonsoir, Je remonte ce topic. Pierre-Yves, pourrais-tu me dire dans quel fichier il faudrait intervenir pour faire cette modification ? Merci bien à toi d'avance. Link to comment Share on other sites More sharing options...
Trafiquant Posted December 17, 2010 Share Posted December 17, 2010 +1 : je cherche aussi à savoir comment faire cela... Link to comment Share on other sites More sharing options...
Trafiquant Posted December 20, 2010 Share Posted December 20, 2010 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 More sharing options...
Trafiquant Posted December 21, 2010 Share Posted December 21, 2010 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 More sharing options...
fherrard Posted January 10, 2011 Share Posted January 10, 2011 merci pour votre aide precieuse sur ce topicjuste une petite question c'est a dire a l inversesur 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 More sharing options...
Trafiquant Posted January 11, 2011 Share Posted January 11, 2011 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 More sharing options...
Max2Crea Posted January 25, 2011 Share Posted January 25, 2011 Bonjour,En effet les dev qui prennent le temps de proposer une solution rapide et fiable ça fait très plaisir aux novices!!Merci beaucoupDans 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 More sharing options...
Trafiquant Posted January 26, 2011 Share Posted January 26, 2011 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 More sharing options...
Mr6 Posted January 26, 2011 Share Posted January 26, 2011 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 More sharing options...
Trafiquant Posted January 26, 2011 Share Posted January 26, 2011 Sauf que si le client outrepasse le message en question et procède au paiement de sa commande, il faudra procéder à son remboursement... Link to comment Share on other sites More sharing options...
Max2Crea Posted January 26, 2011 Share Posted January 26, 2011 Merci beaucoupJe 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 More sharing options...
Trafiquant Posted January 2, 2012 Share Posted January 2, 2012 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 More sharing options...
noclans Posted January 9, 2012 Share Posted January 9, 2012 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 More sharing options...
noclans Posted January 9, 2012 Share Posted January 9, 2012 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 More sharing options...
noclans Posted January 9, 2012 Share Posted January 9, 2012 arf on dirait que mon post qui avait disparu est réapparu. désolé pour la double formulation. Link to comment Share on other sites More sharing options...
misterpink Posted March 8, 2012 Share Posted March 8, 2012 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 More sharing options...
misterpink Posted March 8, 2012 Share Posted March 8, 2012 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 More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now