Module · LNK Devis
  • PrestaShop

Vos clients demandent un devis et commandent au prix convenu

LNK Devis ajoute la demande de devis à votre boutique PrestaShop, du bouton jusqu'à la commande. Votre client demande un devis depuis la fiche produit ou depuis son panier ; vous fixez vos prix hors taxes ligne par ligne au back-office ; il accepte dans son compte et commande au prix du devis par le tunnel de commande habituel. Rien à ressaisir, aucun code promo à bricoler.

  • Version 1.1.0 · PrestaShop 1.7.6 à 8.x
  • Version 1.9.0 · PrestaShop 9
  • PrestaShop 1.7.7 à 9.x
  • PHP 7.1 à 8.4
  • Aucun override

Points clés

  • Bouton « Demander un devis » sur la fiche produit, avec la déclinaison et la quantité choisies
  • Devis de tout le panier en un clic
  • Fichier joint (PDF ou image, 5 Mo), rangé à l'abri et ré-encodé
  • Proposition ligne par ligne au back-office : prix hors taxes, quantités, validité, message
  • « Mes devis » dans le compte client, avec le statut de chaque devis
  • Commande au prix du devis par les prix spécifiques natifs, limités à ce panier
  • Commande reliée au devis, expiration sans tâche planifiée
  • Produits « devis seulement », sans modifier le produit
  • E-mails au marchand et au client, chacun dans sa langue
  • 1,4 Ko compressés en tout, seulement sur la fiche, le panier et la demande
  • Français, anglais, arabe de droite à gauche
  • PrestaShop 1.7.7 à 9.x, PHP 7.1 à 8.4, sans override, multiboutique

Un devis demandé en quelques secondes

Un bouton « Demander un devis » s'affiche sur la fiche produit, à côté de l'ajout au panier, avec la déclinaison et la quantité que le client a choisies. Dans le panier, « Demander un devis pour ce panier » reprend toutes ses lignes. Le formulaire de demande les montre avec leur prix actuel : le client ajuste les quantités, retire une ligne, écrit un message et peut joindre un fichier (plan, cahier des charges, photo).

La demande est réservée aux clients connectés, puisqu'un devis accepté devient un panier de leur compte. Un visiteur est envoyé vers la connexion, puis ramené au formulaire avec le produit, la déclinaison et la quantité qu'il avait choisis. Vous recevez un e-mail, le client un accusé de réception.

Votre proposition, ligne par ligne

Les demandes arrivent dans Commandes, LNK Devis, filtrées par statut. Pour chaque devis, vous voyez le client, sa société, son message et son fichier joint. Vous fixez la quantité et le prix unitaire hors taxes de chaque ligne, préremplis avec le prix que le client voyait, puis la date de validité (30 jours par défaut, réglable de 1 à 365) et un message. « Envoyer la proposition » part par e-mail au client, avec les lignes, les prix, le total hors taxes et le lien vers son devis.

Vous pouvez renvoyer une proposition corrigée tant que le client ne l'a pas acceptée, ou refuser la demande avec un message. Un devis accepté ou clos passe en lecture seule.

Accepté, puis commandé au prix du devis

Dans son compte, le client retrouve « Mes devis » : référence, date, montant hors taxes et statut de chaque devis (envoyée, proposition reçue, acceptée, commandée, refusée, expirée). Sur le détail, « Accepter et commander » crée son panier avec les lignes du devis et ouvre la commande native de PrestaShop. Il choisit sa livraison et son paiement comme d'habitude ; vos taxes et vos transporteurs s'appliquent.

Les prix du devis passent par les prix spécifiques natifs de PrestaShop, limités à ce panier, à ce client et à cette boutique, à partir de la quantité proposée. Ils ne servent à aucune autre commande ni à aucun autre client. La commande validée est reliée au devis, qui passe « commandé », et vous l'ouvrez d'un clic depuis le devis.

Le client peut aussi refuser la proposition. Une fois la date de validité passée, le devis passe « expiré » et ses prix spécifiques sont retirés, sans tâche planifiée à installer : le module le vérifie à chaque consultation des devis.

Des produits vendus seulement sur devis

Un interrupteur « Devis seulement » dans l'onglet Modules de la fiche produit, enregistré dès que vous le basculez. Le produit reste en ligne, mais l'ajout au panier est désactivé sur sa fiche et dans les listes de produits (le thème grise ou masque le bouton), et le bouton de devis devient le bouton principal. Le module ne modifie pas le produit : éteignez l'interrupteur ou désactivez le module, et l'ajout au panier revient.

Un garde-fou côté serveur retire ce produit de tout panier qui n'est pas celui d'un devis accepté, quel que soit le chemin d'ajout (fiche, liste, commande rapide, autre module). Le client voit un message qui l'invite à demander un devis.

Vous pouvez aussi n'afficher le bouton de devis que sur ces produits : réglage « Bouton « Demander un devis » ».

Les fichiers joints à l'abri

Un PDF ou une image (JPEG, PNG, WebP), 5 Mo au plus. Les images sont vérifiées puis entièrement ré-encodées, ce qui efface tout contenu caché ; chaque fichier reçoit un nom aléatoire. Ils sont rangés hors du dossier du module, dans var/lnk_quote/, et seul le back-office les télécharge. Sous Apache, un .htaccess refuse tout accès direct. Nginx ignore les .htaccess : ajoutez le bloc donné dans la FAQ à la configuration de votre serveur. Le fichier joint se coupe d'un interrupteur dans les réglages.

Un client supprimé, par vous ou à la suite d'une demande RGPD, emporte ses devis, leurs fichiers joints et les prix spécifiques de son panier de devis. Une commande déjà passée garde sa trace dans PrestaShop.

Léger et rapide

Chiffres mesurés sur le module livré, compressé en gzip (niveau 9). Le script : 1,0 Ko (997 octets), chargé sur les fiches produit, la page panier et la page de demande de devis. La feuille de style : 0,4 Ko (428 octets), chargée seulement sur la page de demande de devis. Rien sur l'accueil ni les catégories ; les pages « Mes devis » et le détail d'un devis n'ajoutent ni feuille de style ni script du module. Aucune bibliothèque, sans jQuery, aucune ressource extérieure : le thème habille le bouton et les pages.

Un écran de réglages clair

Quatre réglages visibles, sur l'habillage commun des modules LNK : où afficher le bouton (tous les produits ou les produits en devis seulement), la validité par défaut d'un devis, l'e-mail qui reçoit les nouvelles demandes (celui de la boutique s'il reste vide) et le fichier joint. Deux réglages rares sont repliés sous « Avancé ». La page du module, les pages client et les e-mails se lisent de droite à gauche en arabe.

Pour les thèmes et les intégrateurs

Contrat de thème lnk.quote.button/1, pensé pour le thème LNK B2B et utilisable par tout thème :

  • {hook h='displayLnkQuoteButton' product=$product context='product'} sur la fiche ;
  • {hook h='displayLnkQuoteButton' context='cart'} dans le panier (rien si le panier est vide) ;
  • événements JavaScript lnk:quote:added et lnk:quote:sent ;
  • gabarits du bouton, du formulaire, de « Mes devis » et du détail surchargeables dans le thème.

Sans le contrat, le bouton de la fiche s'affiche à l'emplacement natif displayProductAdditionalInfo (classic, hummingbird, thèmes tiers). Le bouton du panier demande l'appel du crochet dans le gabarit du panier. Un thème qui place lui-même le bouton coupe l'emplacement natif dans son theme.yml (LNK_QUOTE_NATIVE_HOOKS: 0), ou depuis « Avancé ».

Multiboutique

Chaque devis appartient à sa boutique : le client ne voit que les siens dans la boutique où il est, et le back-office liste les devis des boutiques choisies. Réglages par boutique, avec la portée toujours affichée ; l'interrupteur « Devis seulement » s'applique aux boutiques choisies. Une boutique supprimée emporte ses devis.

Compatibilité PrestaShop 1.7.7, 8 et 9

PrestaShop 1.7.7 → 9.x
PHP 7.1 → 8.4
Livraison Deux archives : 1.9.N pour PrestaShop 9, 1.1.N pour 1.7.7 à 8.x
Contient un override Non
Multiboutique Oui
Appels extérieurs Aucun

Le paquet 1.9.0 a été essayé sur PrestaShop 9.2 (thème classic) : demande, proposition, acceptation, commande reliée au devis, expiration, produits en devis seulement. Le paquet 1.1.0 l'a été sur PrestaShop 8.1. En 1.7.7, le bouton d'ajout au panier reste visible sur un produit en devis seulement, et le garde-fou du serveur refuse l'ajout.

Questions fréquentes

Comment mes clients demandent-ils un devis ?

Par le bouton « Demander un devis » de la fiche produit, qui reprend la déclinaison et la quantité choisies, ou par « Demander un devis pour ce panier », qui reprend toutes les lignes du panier. Le formulaire de demande permet d'ajuster les quantités, de retirer une ligne, d'écrire un message et de joindre un fichier. Vous recevez un e-mail, le client un accusé de réception.

Faut-il un compte client pour demander un devis ?

Oui. Un devis accepté devient un panier du compte du client, la demande est donc réservée aux clients connectés. Un visiteur est envoyé vers la page de connexion, puis ramené au formulaire avec le produit, la déclinaison et la quantité qu'il avait choisis.

Comment répondre à une demande de devis ?

Dans Commandes, LNK Devis, ouvrez la demande : vous fixez la quantité et le prix unitaire hors taxes de chaque ligne, la date de validité et un message, puis « Envoyer la proposition ». Le client la reçoit par e-mail avec un lien vers son devis. Vous pouvez la renvoyer corrigée tant qu'il ne l'a pas acceptée, ou refuser la demande avec un message.

Comment le client passe-t-il commande au prix du devis ?

Dans son compte, « Mes devis », il ouvre le devis et clique sur « Accepter et commander ». Le module crée son panier avec les lignes du devis et ouvre la commande native : il choisit sa livraison et son paiement comme d'habitude. La commande validée est reliée au devis, qui passe « commandé ».

Le prix du devis peut-il profiter à un autre client ou à une autre commande ?

Non. Chaque prix passe par un prix spécifique natif de PrestaShop limité au panier du devis, au client et à la boutique, à partir de la quantité proposée. En dessous de cette quantité, le prix habituel revient. Le prix spécifique est retiré si le devis est refusé ou expire.

Que se passe-t-il quand la date de validité est passée ?

Le devis passe « expiré » et ses prix spécifiques sont retirés : le client ne peut plus l'accepter. Aucune tâche planifiée à installer, le module le vérifie à chaque consultation des devis, côté client comme au back-office. La validité proposée par défaut est de 30 jours, réglable de 1 à 365.

Comment vendre un produit seulement sur devis ?

Basculez l'interrupteur « Devis seulement » dans l'onglet Modules de sa fiche au back-office. L'ajout au panier est désactivé sur la fiche et dans les listes (le thème grise ou masque le bouton), et le bouton de devis devient le bouton principal. Un garde-fou côté serveur retire aussi ce produit de tout panier qui n'est pas celui d'un devis accepté, quel que soit le chemin d'ajout. Le produit lui-même n'est pas modifié.

Mon thème doit-il être modifié ?

Pour la fiche produit, non : le bouton s'affiche à l'emplacement natif des informations produit (classic, hummingbird, la plupart des thèmes). Le bouton du panier demande une ligne dans le gabarit du panier : {hook h='displayLnkQuoteButton' context='cart'}. Le thème LNK B2B appelle déjà les deux.

Le module contient-il un override ?

Aucun override. Ce module n'apporte aucune modification au cœur de PrestaShop : les prix du devis passent par les prix spécifiques natifs, la commande par le tunnel natif.

Où sont rangés les fichiers joints aux demandes ?

Dans var/lnk_quote/ à la racine de la boutique, jamais dans le dossier du module : une mise à jour ne les efface pas. Ils ne sont jamais servis directement ; seul le back-office les télécharge. Sous Apache, le .htaccess posé à l'installation refuse tout accès. Nginx ignore les .htaccess : ajoutez ce bloc dans le bloc server de votre site.

location ^~ /var/lnk_quote/ { deny all; return 403; }
Quels fichiers mes clients peuvent-ils joindre ?

Un PDF ou une image JPEG, PNG ou WebP, de 5 Mo au plus. Les images sont vérifiées puis entièrement ré-encodées, ce qui efface tout contenu caché, et chaque fichier reçoit un nom aléatoire. Le fichier joint se coupe d'un interrupteur dans les réglages.

Le devis est-il envoyé en PDF ?

Non, pas dans cette version. Le client reçoit la proposition par e-mail, avec les lignes, les prix hors taxes, le total et la date de validité, et la retrouve dans « Mes devis » de son compte.

Le module ralentit-il ma boutique ?

Non. Le script de 1,0 Ko (compressé) se charge sur les fiches produit, le panier et la page de demande de devis ; la feuille de style de 0,4 Ko seulement sur la page de demande. Rien sur l'accueil ni les catégories, sans jQuery ni ressource extérieure.

Fonctionne-t-il en multiboutique ?

Oui. Chaque devis appartient à sa boutique : le client ne voit que les siens dans la boutique où il est, et le back-office liste les devis des boutiques choisies. Les réglages se font par boutique, avec la portée affichée. Une boutique supprimée emporte ses devis.

Que deviennent les devis à la désinstallation ?

Ils sont gardés, avec leurs fichiers joints. Pour tout supprimer, activez sous « Avancé » « Supprimer aussi les devis à la désinstallation », puis cochez la confirmation. Les produits en devis seulement retrouvent leur ajout au panier dès que le module est désactivé, puisqu'il ne les a jamais modifiés.

En quelles langues est-il livré ?

En français, anglais et arabe (de droite à gauche). Chaque e-mail part dans la langue de son destinataire : celle de la boutique pour le marchand, celle de la demande pour le client.

Que deviennent les devis d'un client supprimé ?

Ils sont supprimés avec lui. Quand vous supprimez un client, de vous-même ou à la suite d'une demande RGPD, ses devis, leurs lignes, leurs fichiers joints dans var/lnk_quote/ et les prix spécifiques du panier de devis sont effacés. Une commande déjà passée garde sa trace dans PrestaShop, comme toute commande.

Journal des versions

2 versions publiées pour PrestaShop

  1. Version 1.9.0 PrestaShop 9

    Première version. Branche 9 : PrestaShop 9.0 à 9.x seulement. PrestaShop 1.7.7 à 8.x passent par le paquet 1.1.0.

    Nouveautés

    • Demande de devis depuis la fiche produit (déclinaison et quantité choisies) ou depuis le panier (toutes ses lignes), réservée aux clients connectés, avec retour au formulaire après la connexion ; quantités ajustables, ligne retirable, message et fichier joint.
    • Fichier joint protégé : PDF ou image JPEG, PNG, WebP de 5 Mo au plus, images ré-encodées, nom aléatoire, rangé dans var/lnk_quote/ et téléchargé seulement depuis le back-office.
    • E-mails en français, anglais et arabe : nouvelle demande au marchand, accusé au client, proposition et refus au client, chacun dans la langue de son destinataire.
    • Back-office dans Commandes, LNK Devis : liste filtrée par statut, proposition ligne par ligne (quantité, prix unitaire hors taxes, validité, message), renvoi tant que le devis n'est pas accepté, refus avec message, lien vers la commande passée.
    • « Mes devis » et le détail d'un devis dans le compte client, avec le statut de chaque devis.
    • Acceptation : panier du client aux prix du devis, par des prix spécifiques natifs limités à ce panier, à ce client et à cette boutique, puis commande par le tunnel natif, reliée au devis ; refus par le client.
    • Expiration à la consultation des devis, sans tâche planifiée : prix spécifiques retirés.
    • Produits « devis seulement » : interrupteur dans l'onglet Modules de la fiche, ajout au panier retiré de la fiche et des listes sans modifier le produit, garde-fou du panier quel que soit le chemin d'ajout.
    • Contrat de thème lnk.quote.button/1 : crochet displayLnkQuoteButton (fiche et panier), événements lnk:quote:added et lnk:quote:sent, gabarits surchargeables ; bouton à l'emplacement natif de la fiche pour les thèmes sans contrat, réglage LNK_QUOTE_NATIVE_HOOKS.
    • Multiboutique : devis et réglages par boutique, portée affichée, devis d'une boutique supprimée effacés.
    • Arabe, de droite à gauche, au back-office, sur les pages client et dans les e-mails.
    • Client supprimé (par le marchand ou à la suite d'une demande RGPD) : ses devis, leurs lignes, leurs fichiers joints et les prix spécifiques du panier de devis sont supprimés ; une commande déjà passée garde sa trace dans le cœur.
    • Devis gardés à la désinstallation par défaut ; suppression en deux temps, sous « Avancé ».
  2. Version 1.1.0 PrestaShop 1.7.6 à 8.x

    Première version. Branche legacy : PrestaShop 1.7.7 à 8.x. PrestaShop 9 a son propre paquet (1.9.0), au même code métier.

    Nouveautés

    • Demande de devis depuis la fiche produit (déclinaison et quantité choisies) ou depuis le panier (toutes ses lignes), réservée aux clients connectés, avec retour au formulaire après la connexion ; quantités ajustables, ligne retirable, message et fichier joint.
    • Fichier joint protégé : PDF ou image JPEG, PNG, WebP de 5 Mo au plus, images ré-encodées, nom aléatoire, rangé dans var/lnk_quote/ et téléchargé seulement depuis le back-office.
    • E-mails en français, anglais et arabe : nouvelle demande au marchand, accusé au client, proposition et refus au client, chacun dans la langue de son destinataire.
    • Back-office dans Commandes, LNK Devis : liste filtrée par statut, proposition ligne par ligne (quantité, prix unitaire hors taxes, validité, message), renvoi tant que le devis n'est pas accepté, refus avec message, lien vers la commande passée.
    • « Mes devis » et le détail d'un devis dans le compte client, avec le statut de chaque devis.
    • Acceptation : panier du client aux prix du devis, par des prix spécifiques natifs limités à ce panier, à ce client et à cette boutique, puis commande par le tunnel natif, reliée au devis ; refus par le client.
    • Expiration à la consultation des devis, sans tâche planifiée : prix spécifiques retirés.
    • Produits « devis seulement » : interrupteur dans l'onglet Modules de la fiche, ajout au panier retiré de la fiche et des listes sans modifier le produit, garde-fou du panier quel que soit le chemin d'ajout.
    • Contrat de thème lnk.quote.button/1 : crochet displayLnkQuoteButton (fiche et panier), événements lnk:quote:added et lnk:quote:sent, gabarits surchargeables ; bouton à l'emplacement natif de la fiche pour les thèmes sans contrat, réglage LNK_QUOTE_NATIVE_HOOKS.
    • Multiboutique : devis et réglages par boutique, portée affichée, devis d'une boutique supprimée effacés.
    • Arabe, de droite à gauche, au back-office, sur les pages client et dans les e-mails.
    • Client supprimé (par le marchand ou à la suite d'une demande RGPD) : ses devis, leurs lignes, leurs fichiers joints et les prix spécifiques du panier de devis sont supprimés ; une commande déjà passée garde sa trace dans le cœur.
    • Devis gardés à la désinstallation par défaut ; suppression en deux temps, sous « Avancé ».

Votre panier

Votre panier est vide.