ChristianCH4 Posted February 9, 2023 Share Posted February 9, 2023 Bonjour à tous, Est-il possible de paramétrer des frais de gestion à inclure en fin de commande qui seraient fixes en dessous d'un certain montant de commandes (version Prestashop 1.7.8 Merci par avance de votre aide Link to comment Share on other sites More sharing options...
Eolia Posted February 9, 2023 Share Posted February 9, 2023 Un override de OrderController::init() suffit: Créez un produit en BO correspondant a ces frais fixes et récupérez son ID (145 par exemple) /* Eolia minimum amount */ $id_fees_product = 145; $minimum_amount = 10; if ($this->nbProducts && $this->step > 0 && $this->context->cart->getOrderTotal(true, Cart::ONLY_PRODUCTS) < $minimum_amount) { $this->step = 0; $this->context->cart->updateQty(1, $id_fees_product, 0, false, 'up', 0, null, false); } else { if ($result = $this->context->cart->containsProduct($id_fees_product)) $this->context->cart->deleteProduct($id_fees_product); } Link to comment Share on other sites More sharing options...
ChristianCH4 Posted February 9, 2023 Author Share Posted February 9, 2023 Merci pour cette réponse aussi rapide. Etant novice sur cette notion d'override, je vais avoir besoin d'un peu de complément d'informations. Le principe de l'override est bien de forcer Prestashop à un nouveau comportement. Mais pouvez vous me préciser où je dois ranger ce fichier, sous quel nom et dois je y rajouter une ligne particulière ? Second point : comme précisé dans mon post initial comment faire ces frais de gestion uniquement pour toute commande inférieure à un seuil 200 euros par exemple? Link to comment Share on other sites More sharing options...
Eolia Posted February 9, 2023 Share Posted February 9, 2023 il y a 9 minutes, ChristianCH4 a dit : comment faire ces frais de gestion uniquement pour toute commande inférieure à un seuil 200 euros par exemple? Citation $minimum_amount = 10; Vous mettez 200 à la place de 10. Pour les overrides je vous laisse lire la doc: https://devdocs.prestashop-project.org/8/modules/concepts/overrides/#example Link to comment Share on other sites More sharing options...
ChristianCH4 Posted February 9, 2023 Author Share Posted February 9, 2023 Merci beaucoup. Je vais lire ça tout de suite. Link to comment Share on other sites More sharing options...
ChristianCH4 Posted February 10, 2023 Author Share Posted February 10, 2023 Me revoila. Je n'aime pas faire les choses sans les comprendre et certes pour comprendre il faut apprendre. J'ai lu la documentation mais ce n'est pas suffisant pour ma compréhension. Quand j'édite OrderController.php, je trouve ces lignes sur init à la ligne 67 (je suis sous la version 1.7.8.8) /** * Initialize order controller. * * @see FrontController::init() */ public function init() { parent::init(); $this->cartChecksum = new CartChecksum(new AddressChecksum()); } J'ai du mal à faire le lien avec le code que vous me proposez de mettre en remplacement, et cela dans un fichier d'override que je placerais où ? Merci de votre aide et excusez mon ignorance dans ce domaine. Link to comment Share on other sites More sharing options...
Eolia Posted February 10, 2023 Share Posted February 10, 2023 (edited) Oui en 1.7 beaucoup de choses ont changé.. Vous mettez mon code à la suite de $this->cartChecksum = new CartChecksum(new AddressChecksum()); Vous créez un nouveau fichier dans /overrides/controller/front que vous appellez OrderController.php Et vous mettez dedans <?php class OrderController extends OrderControllerCore { public function init() { parent::init(); $this->cartChecksum = new CartChecksum(new AddressChecksum()); /* Eolia minimum amount */ $id_fee_product = 145; $minimum_amount = 10; if ($this->nbProducts && $this->context->cart->getOrderTotal(true, Cart::ONLY_PRODUCTS) < $minimum_amount) { $this->context->cart->updateQty(1, $id_fee_product, 0, false, 'up', 0, null, false); } else { if ($result = $this->context->cart->containsProduct($id_fee_product)) $this->context->cart->deleteProduct($id_fee_product); } } } Ensuite vous videz le cache Prestashop depuis votre BO Edited February 10, 2023 by Eolia (see edit history) Link to comment Share on other sites More sharing options...
ChristianCH4 Posted February 10, 2023 Author Share Posted February 10, 2023 Nickel Je teste ça. Merci encore Link to comment Share on other sites More sharing options...
ChristianCH4 Posted February 10, 2023 Author Share Posted February 10, 2023 je viens de créer le fichier override, l'installer, vider le cache, créer le "produit" frais de gestion, récupérer son Id, mettre à jour et simuler un achat de produit inférieur à mon seuil de 150 euros et j'ai un erreur <?php class OrderController extends OrderControllerCore { public function init() { parent::init(); $this->cartChecksum = new CartChecksum(new AddressChecksum()); /* modification pour frais de gestion en dessous de 150 euros code produit frais de gestion 361 */ $id_fee_product = 361; $minimum_amount = 150; if ($this->nbProducts && $this->context->cart->getOrderTotal(true, Cart::ONLY_PRODUCTS) < $minimum_amount) { $this->context->cart->updateQty(1, $id_fee_product, 0, false, 'up', 0, null, false); } else { if ($result = $this->context->cart->containsProduct($id_fee_product)) $this->context->cart->deleteProduct($id_fee_product); } } } Link to comment Share on other sites More sharing options...
Eolia Posted February 10, 2023 Share Posted February 10, 2023 Remplacez $this->nbProducts() par $this->context->cart->nbProducts() Link to comment Share on other sites More sharing options...
ChristianCH4 Posted February 10, 2023 Author Share Posted February 10, 2023 Toujours en erreur. Ne faut-il pas forcer le nBProducts() à 1 ? Parse error: syntax error, unexpected '$this' (T_VARIABLE), expecting '(' in /home/epicerieka/www/ps/override/controllers/front/OrderController.php on line 14 <?php class OrderController extends OrderControllerCore { public function init() { parent::init(); $this->cartChecksum = new CartChecksum(new AddressChecksum()); /* modification pour frais de gestion en dessous de 150 euros code produit frais de gestion 361 */ $id_fee_product = 361; $minimum_amount = 150; if $this->context->cart->nbProducts() && $this->context->cart->getOrderTotal(true, Cart::ONLY_PRODUCTS) < $minimum_amount) { $this->context->cart->updateQty(1, $id_fee_product, 0, false, 'up', 0, null, false); } else { if ($result = $this->context->cart->containsProduct($id_fee_product)) $this->context->cart->deleteProduct($id_fee_product); } } } Link to comment Share on other sites More sharing options...
Eolia Posted February 10, 2023 Share Posted February 10, 2023 Ben non vous avez viré une parenthèse^^ if $this->context->cart->nbProducts() au lieu de if ($this->context->cart->nbProducts() Link to comment Share on other sites More sharing options...
ChristianCH4 Posted February 10, 2023 Author Share Posted February 10, 2023 Désolé effectivement. Je n'ai plus d'erreur mais cette ligne de frais de gestion n'apparait pas dans le panier pour un produit inferieur à 150 Link to comment Share on other sites More sharing options...
Eolia Posted February 10, 2023 Share Posted February 10, 2023 Perso je ne m'occupe plus du code des 1.7 mais essayez de mettre cette ligne après plutôt qu'avant: $this->cartChecksum = new CartChecksum(new AddressChecksum()); Link to comment Share on other sites More sharing options...
ChristianCH4 Posted February 10, 2023 Author Share Posted February 10, 2023 désolé c'est toujours pareil Link to comment Share on other sites More sharing options...
Eolia Posted February 10, 2023 Share Posted February 10, 2023 même à l'étape suivante de la commande ? Link to comment Share on other sites More sharing options...
ChristianCH4 Posted February 10, 2023 Author Share Posted February 10, 2023 oui Link to comment Share on other sites More sharing options...
Eolia Posted February 10, 2023 Share Posted February 10, 2023 Alors il faudra fouiller dans le code de la 1.7. Il faudra aussi modifier d'autre fonctions pour que ce produit ne puisse pas être enlevé ni ajouté. Su ma 1.6.2 ça fonctionne bien https://presta.devcustom.net/fr/ (minimum 150€) 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