- Le bouton, sur la fiche produit et sur le panier
- Le formulaire de demande
- La liste et la fiche du devis
- La proposition et les totaux
- L’espace client « Mes devis »
- Après l’acceptation, dans le panier
- Les e-mails
- Réglages, sécurité et données
- Faut-il un compte client pour demander un devis ?
- Comment envoyer une proposition à un client ?
- Que se passe-t-il quand le client accepte ?
- Combien de temps une proposition est-elle valable ?
- Que se passe-t-il si le client modifie son panier après avoir accepté ?
- Les prix négociés s’appliquent-ils aux commandes suivantes ?
- Puis-je envoyer un PDF, créer un devis dans le back-office ou répondre à une contre-offre ?
- Les frais de port peuvent-ils être négociés ?
- Pourquoi une remise catalogue apparaît-elle à côté du prix négocié dans le panier ?
- Quelles versions de PrestaShop, quels thèmes et quel fonctionnement en multiboutique ?
Devis B2B sur PrestaShop : de la demande au panier au prix négocié
Un client professionnel ne commande pas toujours au prix affiché. Il demande un devis pour quelques pièces, puis pour une quantité bien plus importante, et attend un prix adapté au volume. Quand la demande arrive par e-mail ou par téléphone, le prix négocié se perd dans une boîte mail, la commande est ressaisie à la main, et le client finit parfois par commander au prix catalogue.
Devis B2B installe ce parcours dans votre boutique PrestaShop : le client demande un devis depuis la fiche produit ou son panier, vous répondez avec un prix négocié par ligne et une date de validité, et son acceptation met les produits dans son panier aux prix négociés, prêts à commander. Ce guide explique comment l’installer, envoyer votre première proposition et suivre chaque devis jusqu’à la commande.
Points forts :
- Un bouton « Demander un devis » sur la fiche produit (produit, déclinaison, quantité) et sur la page panier (toutes les lignes), pour les groupes de clients que vous choisissez
- Une proposition structurée : prix unitaire négocié HT par ligne, date de validité, message, totaux HT et TTC calculés avec les règles de taxe de la boutique
- Une acceptation qui aboutit : les produits rejoignent le panier du client aux prix négociés, avec les prix spécifiques natifs de PrestaShop
- Un suivi complet : cinq statuts, historique, liste filtrable, espace « Mes devis » et e-mails dans la langue du client
- Un module autonome : aucun service externe, compatible PrestaShop 1.7.8, 8.0+ et 9.0+, thèmes Classic et Hummingbird
Découvrir le module et ses formules
Présentation
Dans une boutique B2B, la négociation fait partie de la vente. Un grossiste, un artisan, un producteur ou un distributeur qui achète pour revendre ou pour un chantier veut un prix pour une quantité précise, et il attend une réponse claire : combien, pour quelle quantité, jusqu’à quand.
Sans outil dédié, cette conversation vit en dehors de la boutique. Le commercial répond par e-mail, le prix n’est conservé nulle part, la commande est créée dans le back-office avec un prix modifié à la main, et le client ne retrouve pas la proposition qu’il a acceptée. Le module remplace ce bricolage par un parcours en trois temps — demande, proposition, acceptation — avec une trace à chaque étape.
Il s’adresse aux boutiques qui vendent à des professionnels et qui négocient déjà, même occasionnellement : grossistes, fabricants, artisans, distributeurs, fournisseurs de matériel ou de consommables. Un compte client est nécessaire pour suivre un devis ; les demandes de visiteurs sans compte ne sont pas couvertes.
Le bouton « Demander un devis » sur la fiche produit, avec la déclinaison et la quantité choisies
Ce que le client voit
Sur la fiche produit, le bouton « Demander un devis » se place sous « Ajouter au panier » et reprend la déclinaison et la quantité choisies. Sur la page panier, un bouton équivalent transforme toutes les lignes en une seule demande. Le formulaire affiche les produits, le prix catalogue HT et la quantité ; le client peut ajuster la quantité, indiquer sa société, son numéro de TVA et un message, puis envoyer sa demande.
Fonctionnalités
Le bouton, sur la fiche produit et sur le panier
- Fiche produit : le bouton apparaît dans la zone d’achat, sous « Ajouter au panier ». Le lien reprend le produit, la déclinaison et la quantité minimale de la page ; au clic, le module complète la demande avec les attributs et la quantité réellement choisis. Le serveur retrouve la déclinaison à partir des attributs et ne prend jamais un prix envoyé par le navigateur. Sans JavaScript, le lien fonctionne encore avec la déclinaison affichée sur la page.
- Page panier : un bouton « Demander un devis pour ce panier » envoie toutes les lignes du panier en une seule demande. Les lignes sont relues sur le serveur dans le panier du client ; deux lignes du même produit et de la même déclinaison sont additionnées. Les cadeaux des règles de panier et les produits personnalisés sont laissés de côté, et le formulaire le précise. Une demande compte au plus 100 lignes.
- Qui voit le bouton : le module doit être activé et l’emplacement correspondant doit être ouvert. Le visiteur doit appartenir à un groupe autorisé : un client connecté par l’un de ses groupes, un visiteur non connecté par le groupe « Visiteur ». Le mode catalogue doit être désactivé, le produit actif et commandable, sans personnalisation obligatoire, et le panier doit contenir au moins un produit pouvant faire l’objet d’un devis.
- Visiteur non connecté : il est envoyé vers la page de connexion, puis revient au formulaire. La version 1.0.0 exige un compte client.
Le formulaire de demande
Le formulaire rappelle les lignes du devis (photo, nom avec la déclinaison, référence, prix unitaire HT actuel, quantité), puis demande :
- la société, préremplie avec celle du compte ou de la première adresse, facultative, 128 caractères au plus ;
- le numéro de TVA, prérempli depuis la première adresse qui en contient un, facultatif, 32 caractères au plus, lettres, chiffres, espaces, points et tirets uniquement ;
- un message facultatif de 5 000 caractères au plus, sans HTML conservé ;
- le consentement, obligatoire, avec votre texte ou le texte traduit par défaut.
L’envoi est protégé par un champ piège invisible, une durée signée (au moins 3 secondes, au plus 2 heures), un plafond de 10 demandes par compte et par heure, un contrôle des doublons sur 2 minutes et un jeton CSRF. Pour une demande issue du panier, les quantités viennent du panier et un lien permet de le modifier d’abord. Pour une demande issue d’une fiche produit, la quantité se règle entre 1 et 999 999, sans descendre sous la quantité minimale du produit ou de la déclinaison.
Après l’envoi, le devis reçoit une référence unique (la lettre Q suivie de huit caractères), le client reçoit un accusé de réception, votre équipe une notification, et le client est redirigé vers son devis avec le message « Votre demande de devis Q7XBLS6TC a bien été envoyée. Nous vous répondrons par e-mail. » Les erreurs s’affichent au-dessus du formulaire et les champs gardent ce qui a été saisi.
La liste et la fiche du devis
La page Devis B2B > Devis liste les demandes de la boutique avec la référence, le client, la société, la date de la demande, le statut, le total HT de la proposition, la date de validité et le nombre de lignes. Chaque colonne se trie ; les filtres couvrent le statut, le client, la société, une plage de dates et une recherche sur la référence. La liste affiche 50 devis par page et propose les actions Afficher et Supprimer, y compris sur une sélection. Un employé ne voit que les devis des boutiques de son contexte.
La fiche du devis rassemble :
- l’en-tête : référence, statut, date de la demande, date d’envoi de la proposition, date de réponse, source, langue et boutique ;
- le client : nom avec lien vers sa fiche, e-mail, société, numéro de TVA et date du consentement ;
- le message du client, avec ses retours à la ligne ;
- les lignes : produit avec lien, référence, quantité, prix catalogue unitaire HT au moment de la demande, prix unitaire négocié HT, taux de taxe et total HT de la ligne ;
- les totaux HT, taxes et TTC, recalculés en direct pendant la saisie et par le bouton Recalculer, qui fonctionne aussi sans JavaScript ;
- la date de validité, préremplie avec la validité par défaut ;
- le message au client ;
- le panier et, une fois la commande passée, sa référence avec un lien ;
- l’historique des changements de statut.
Les champs de prix ne sont modifiables que lorsque le statut le permet : Nouveau, Proposition envoyée ou Expiré. Sur un devis accepté ou refusé, la fiche est en lecture seule.
Un prix négocié par ligne, avec les totaux HT et TTC calculés comme dans le panier
La proposition et les totaux
Vous saisissez le prix unitaire négocié HT de chaque ligne, la date de validité et un message pour le client. Le prix accepte la virgule ou le point comme séparateur décimal ; il doit être positif ou nul, ne pas dépasser 1 000 000 000 et ne pas être inférieur à l’écotaxe de la ligne. La date de validité se situe entre aujourd’hui et trois ans. Le message compte 5 000 caractères au plus.
Les totaux suivent les règles de PrestaShop : le taux de taxe vient du groupe de règles de taxe du produit et de la première adresse du client, ou du pays par défaut de la boutique. Les arrondis utilisent le type et le mode d’arrondi configurés dans la boutique, avec la précision de la devise du devis. Une note sous les totaux rappelle que le TTC dépend de l’adresse du client et que le montant final est calculé à la commande. Tant que les champs ne sont pas valides, rien n’est envoyé.
L’envoi passe le statut à Proposition envoyée et déclenche l’e-mail au client. Tant que le client n’a pas répondu, vous pouvez envoyer une proposition mise à jour avec de nouveaux prix ou une nouvelle date : l’historique conserve chaque version. Un devis expiré accepte une nouvelle proposition avec une nouvelle date.
L’espace client « Mes devis »
Le client retrouve ses demandes dans Mes devis, accessible depuis son compte. Il ouvre un devis, lit la proposition, puis :
- accepte : les produits et quantités du devis sont ajoutés à son panier avec le prix négocié de chaque ligne, posé comme un prix spécifique natif lié à ce panier et à ce client, puis il est redirigé vers la commande ;
- refuse, avec un motif facultatif de 1 000 caractères au plus ; le statut passe à Refusé et votre équipe reçoit une notification.
Avant d’accepter, le module vérifie que chaque produit existe toujours, qu’il est actif et commandable, que la déclinaison appartient au produit, que la quantité atteint le minimum et que le stock suffit, sauf si les commandes en rupture sont autorisées. Si un produit pose problème, rien n’est ajouté, le devis revient à « Proposition envoyée » et le client lit le nom du produit concerné.
L’acceptation ne vide pas le panier : les articles déjà présents restent, et une ligne du même produit et de la même déclinaison est remontée à la quantité du devis si elle est plus faible, jamais descendue. Le panier prend la devise du devis. Les prix négociés sont valables jusqu’à la fin de la date de validité, ou 24 heures après l’acceptation si cette date est plus lointaine, pour qu’un client qui accepte tard dans la soirée puisse encore payer. Deux clics simultanés ne créent qu’un panier ; le second est renvoyé vers le panier avec un message.
Le client lit la proposition et l’accepte depuis son compte
Après l’acceptation, dans le panier
Le client peut encore ajouter d’autres produits au prix catalogue, retirer une ligne, baisser une quantité ou l’augmenter. Une quantité inférieure à celle du devis repasse au prix catalogue ; au-dessus, le prix unitaire négocié reste appliqué. Les bons de réduction de la boutique s’appliquent comme pour une commande créée dans le back-office. Les prix négociés ne valent que pour ce panier : une nouvelle commande, y compris depuis l’historique des commandes, repart aux prix catalogue.
Un devis accepté mais pas encore commandé propose Remettre les produits dans mon panier au client qui a perdu son panier : les anciens prix spécifiques sont retirés et les produits sont ajoutés au panier courant aux prix négociés, si la proposition est encore valable. Une fois la commande passée, la fiche du devis affiche sa référence avec un lien.
Après acceptation, les produits sont dans le panier aux prix négociés, prêts à commander
Les e-mails
Trois e-mails accompagnent le devis, dans la langue du client :
- Accusé de réception — à l’enregistrement de la demande : référence, lignes et lien vers le devis. Il ne reprend jamais le message ni la société saisis par l’expéditeur.
- Proposition — à l’envoi ou à la mise à jour : lignes avec les prix négociés, totaux HT et TTC, date de validité, votre message et un lien pour accepter ou refuser.
- Notification d’équipe — aux destinataires configurés, ou à l’adresse de la boutique si la liste est vide : nouvelle demande, acceptation ou refus, avec les coordonnées du client et le détail.
La langue du client est utilisée quand le modèle existe ; sinon, le modèle anglais prend le relais. La notification d’équipe part dans la langue par défaut de la boutique. Un e-mail qui ne peut pas être envoyé est journalisé et n’annule jamais le devis.
Réglages, sécurité et données
Les Réglages du module permettent de :
- activer ou désactiver les demandes de devis ;
- choisir les groupes de clients autorisés ;
- afficher ou masquer le bouton sur la fiche produit et sur la page panier ;
- fixer la validité par défaut d’une proposition, 30 jours à l’installation, entre 1 et 365 jours ;
- saisir jusqu’à 10 adresses de notification, séparées par des virgules ; une liste vide utilise l’adresse de la boutique ;
- personnaliser, dans chaque langue de la boutique, le libellé du bouton (60 caractères), le texte en haut du formulaire (1 000 caractères) et le texte du consentement (500 caractères) ; un champ vide reprend le texte traduit par défaut ;
- choisir de supprimer ou non les devis à la désinstallation, option désactivée par défaut ;
- consulter un diagnostic : versions de PrestaShop et de PHP, type de thème, mode catalogue, disponibilité des prix spécifiques, méthode d’envoi des e-mails et nombre de devis par statut.
Côté sécurité, chaque devis est vérifié par propriétaire et par boutique, chaque action passe par un jeton, aucun prix n’est accepté depuis le navigateur et les pages du module ne sont ni indexées ni mises en cache. Côté données, les devis sont conservés à la désinstallation sauf si vous choisissez de les supprimer ; ils sont supprimés avec le compte client, y compris par les outils RGPD de PrestaShop. En multiboutique, chaque boutique a ses devis et ses réglages.
Installation
- Téléchargez l’archive du module depuis votre compte client WePresta.
- Dans le back-office, ouvrez Modules > Gestionnaire de modules et cliquez sur Installer un module.
- Sélectionnez le fichier ZIP ; PrestaShop installe le module.
- Cliquez sur Configurer et activez votre licence, puis ouvrez le module depuis le menu WePresta > Devis B2B sur PrestaShop 9, ou Modules > Devis B2B sur PrestaShop 1.7.8 et 8.
L’installation crée trois tables (devis, lignes, historique) et l’entrée de menu. Si une table ne peut pas être créée, l’installation est annulée : aucun module à moitié installé ne reste en place.
Configuration et premier devis
- Dans Réglages, activez les demandes, choisissez les groupes autorisés et les emplacements du bouton, réglez la validité par défaut et les destinataires des notifications, puis adaptez les textes de la boutique dans chaque langue.
- Vérifiez le Diagnostic : versions, thème, mode catalogue, prix spécifiques et méthode d’envoi des e-mails. Si les e-mails sont désactivés sur la boutique, les devis fonctionnent mais aucune notification ne part.
- Côté client, connectez-vous avec un compte du groupe autorisé, ouvrez un produit ou le panier et cliquez sur Demander un devis. Vérifiez la quantité (modifiable depuis une fiche produit, reprise du panier avec un lien pour le modifier), la société, le numéro de TVA et le message, cochez le consentement et envoyez.
- Dans Devis B2B > Devis, filtrez sur le statut Nouveau et ouvrez la demande. Saisissez le prix unitaire négocié HT de chaque ligne, la date de validité et votre message, cliquez sur Recalculer pour vérifier les totaux, puis sur Envoyer la proposition.
- Le client reçoit l’e-mail, ouvre Mes devis et accepte. Les produits passent dans son panier aux prix négociés ; il commande avec les transporteurs et les moyens de paiement de la boutique.
- Dans le back-office, le devis passe à Accepté ; le panier puis la référence de commande apparaissent sur la fiche, et l’historique garde chaque étape. Un refus y ajoute le motif donné par le client.
En multiboutique, choisissez la boutique en haut de la page avant de régler le module ou d’ouvrir un devis : chaque boutique a ses demandes, ses textes et ses réglages.
Cas d’usage
Un tarif au volume pour un grossiste. Un revendeur demande un prix pour une grande quantité. Vous répondez avec un prix unitaire négocié, une date de validité et vos conditions de livraison dans le message. Il accepte depuis son compte et commande immédiatement, sans nouvel échange d’e-mails.
Une commande pour un chantier ou une collectivité. Un artisan prépare un panier avec plusieurs références, puis demande un devis pour l’ensemble. Vous ajustez chaque ligne selon les quantités et les remises convenues. Le client accepte et retrouve tous les produits dans son panier.
Une proposition à renouveler. Un client revient après la date de validité. Le devis est passé à Expiré ; vous envoyez une nouvelle proposition avec de nouveaux prix et une nouvelle date, et l’historique conserve la première version.
Un client qui a perdu son panier. Il a accepté la proposition mais n’a pas commandé, puis a vidé son panier ou changé d’appareil. Le bouton Remettre les produits dans mon panier remet les produits aux prix négociés tant que la proposition est valable.
Une équipe commerciale avec des droits distincts. Un employé en lecture seule consulte les devis, un commercial disposant du droit de modification envoie les propositions, et la suppression reste réservée aux profils autorisés.
Prérequis et limites
- PrestaShop 1.7.8, 8.0+ et 9.0+, PHP 7.4 ou plus.
- Thèmes Classic et Hummingbird ; le bouton et l’espace client s’adaptent au thème.
- Interface et e-mails en français, anglais, espagnol, italien et polonais ; les textes de la boutique se saisissent dans chaque langue de la boutique.
- Un compte client est nécessaire pour demander un devis et y répondre.
- Le mode catalogue doit être désactivé : sans panier, aucun devis ne peut aboutir.
- Aucun service externe : les e-mails partent avec PrestaShop et le paiement utilise les moyens déjà installés sur la boutique.
- Multiboutique : devis et réglages par boutique.
Ce que la version 1.0.0 ne fait pas :
- pas de devis pour un visiteur sans compte ni de lien sécurisé par e-mail ;
- pas de PDF, de bon de commande signé ni de pièces jointes ;
- pas de contre-offre ni de messagerie : le client accepte ou refuse la proposition ;
- pas de devis créé par le marchand, ni d’ajout ou de retrait de lignes dans la proposition ;
- pas de masquage des prix ni de remplacement du bouton « Ajouter au panier » ;
- pas de frais de port négociés : la livraison suit les transporteurs de la boutique ;
- pas de relances automatiques ni d’expiration par tâche planifiée : l’expiration est vérifiée à l’ouverture du devis et à l’acceptation ;
- pas d’export CSV, de prix par groupe client, de paiement à terme ni de validation à plusieurs niveaux.
FAQ
Faut-il un compte client pour demander un devis ?
Oui. Le bouton est visible selon les groupes autorisés ; un visiteur non connecté est invité à se connecter ou à créer un compte, puis revient au formulaire. Les devis pour visiteurs sans compte, envoyés par un lien sécurisé, ne font pas partie de la version 1.0.0.
Comment envoyer une proposition à un client ?
Ouvrez le devis dans Devis B2B > Devis, saisissez le prix unitaire négocié HT de chaque ligne, la date de validité et votre message, vérifiez les totaux avec Recalculer, puis cliquez sur Envoyer la proposition. Le client reçoit un e-mail dans sa langue avec un lien vers le devis, et le statut passe à Proposition envoyée.
Que se passe-t-il quand le client accepte ?
Les produits et quantités du devis sont ajoutés à son panier avec le prix négocié de chaque ligne, posé comme un prix spécifique natif lié à ce panier et à ce client. Les articles déjà dans le panier restent. Le client est redirigé vers la commande et paie avec les moyens de la boutique ; la fiche du devis affiche ensuite la référence de la commande.
Combien de temps une proposition est-elle valable ?
La date de validité est choisie sur chaque devis ; elle est préremplie avec la validité par défaut, 30 jours à l’installation. La proposition est valable jusqu’à la fin de cette date. L’expiration est vérifiée quand le devis est ouvert et quand le client tente d’accepter : aucune tâche planifiée n’est nécessaire.
Que se passe-t-il si le client modifie son panier après avoir accepté ?
Il peut retirer une ligne, baisser une quantité ou ajouter d’autres produits. Une quantité inférieure à celle du devis repasse au prix catalogue ; les autres produits gardent leur prix habituel. Le prix négocié ne s’applique qu’à ce panier et expire avec la proposition.
Les prix négociés s’appliquent-ils aux commandes suivantes ?
Non. Ils sont liés au panier créé à l’acceptation et au client. Une nouvelle commande, y compris depuis l’historique des commandes, repart aux prix catalogue.
Puis-je envoyer un PDF, créer un devis dans le back-office ou répondre à une contre-offre ?
Non, ces fonctions ne font pas partie de la version 1.0.0. Le module couvre la demande, la proposition, l’acceptation ou le refus, et la commande. Il ne produit pas de PDF, n’accepte pas de pièces jointes et ne permet pas au marchand de créer un devis ou de modifier les lignes.
Les frais de port peuvent-ils être négociés ?
Non. La livraison suit les transporteurs et les tarifs de la boutique ; le devis porte sur le prix des produits. Les prix par groupe client et le paiement à terme ne sont pas inclus non plus.
Pourquoi une remise catalogue apparaît-elle à côté du prix négocié dans le panier ?
Quand un produit a aussi une remise catalogue, PrestaShop affiche son badge de remise sur la ligne du panier, car il lit les prix catalogue sans connaître le devis. Le montant facturé reste le prix négocié du devis, et les lignes de la commande reprennent ce prix.
Quelles versions de PrestaShop, quels thèmes et quel fonctionnement en multiboutique ?
Le module fonctionne sur PrestaShop 1.7.8, 8.0+ et 9.0+, avec PHP 7.4 minimum, sur les thèmes Classic et Hummingbird. En multiboutique, chaque boutique a ses devis et ses réglages. Sans licence active, les clients continuent de demander des devis et de répondre aux propositions déjà envoyées ; l’administration des devis attend l’activation.
Support
Pour toute aide, contactez-nous depuis votre compte client WePresta ou par e-mail à mail@wepresta.shop, selon l’option de support de votre formule.
Avant d’écrire, préparez :
- les versions de PrestaShop et de PHP ;
- le thème utilisé ;
- la référence du devis concerné ;
- l’adresse de la page et une capture du problème.
Changelog
Version 1.0.0
- Demandez un devis depuis la fiche produit, avec la déclinaison et la quantité, ou depuis le panier avec toutes ses lignes.
- Renseignez la société, le numéro de TVA et un message, avec consentement, contrôle anti-spam et jeton de sécurité.
- Retrouvez chaque demande dans une liste filtrable par statut, client, société, date et référence.
- Envoyez un prix unitaire négocié HT par ligne, une date de validité et un message au client.
- Vérifiez les totaux HT, taxes et TTC calculés avec les règles de taxe de la boutique avant l’envoi.
- Laissez le client accepter ou refuser la proposition depuis son compte, dans « Mes devis ».
- Remplissez son panier aux prix négociés à l’acceptation, avec les prix spécifiques natifs de PrestaShop.
- Suivez chaque devis par un statut, un historique et les références du panier et de la commande.
- Recevez une notification à chaque nouvelle demande, acceptation ou refus, et un e-mail au client dans sa langue.
- Réglez les groupes autorisés, les emplacements du bouton, la validité par défaut, les destinataires et les textes dans chaque langue.
- Travaillez en multiboutique, avec des devis et des réglages par boutique.
- Installez le module sur PrestaShop 1.7.8, 8.0+ et 9.0+ avec PHP 7.4 minimum.