B2B quotes on PrestaShop: requests, negotiated prices and orders

The full path of a B2B quote in PrestaShop: settings, a proposal with negotiated prices, acceptance, cart and the limits of the module.

Devis B2B sur PrestaShop : demandes, prix négociés et commande

A trade customer asks for a price on 200 units, then waits for an answer by e-mail. The agreed price gets lost in an inbox, the order is typed again in the back office, and the customer sometimes ends up paying the catalogue price. The B2B Quote Requests module records the request, the proposal and the acceptance inside the shop, then puts the products in the cart at the negotiated prices. Here is how to install it, set the options that matter and follow a quote through to the order.

What does a B2B quote module do in a PrestaShop store?

It turns a price request into a dated proposal, then into a cart at the negotiated prices, with no retyping in the back office.

In a B2B store, negotiation is part of the sale. A wholesaler, a manufacturer, a craftsman or a distributor buying to resell or for a project wants a price for a precise quantity, and a clear answer: how much, for what quantity, until when. Without a dedicated tool, that conversation lives outside the shop and leaves no usable record.

The module is for stores that sell to businesses and already negotiate, even occasionally. It is not useful to a store that only sells at catalogue prices, with no negotiated quantity or business account: a contact form is enough there. It does not replace the shop's payment methods or carriers, which still apply at checkout.

It runs on PrestaShop 1.7.8, 8.0+ and 9.0+, with PHP 7.4 or later, on the Classic and Hummingbird themes. No external service is needed for quotes, e-mails or PDFs; only the license is checked with the license server. The B2B Quote Requests module page lists the features, and the documentation describes each screen.

How do you enable quote requests, step by step?

Install the archive, activate the license on the configuration page, then set the allowed groups and the button locations.

In the back office, open Modules > Module Manager, click Upload a module and select the ZIP file. Then click Configure and enter the license key and secret. The module appears under WePresta > B2B quotes on PrestaShop 9, or under Modules > B2B quotes on PrestaShop 1.7.8 and 8.

Open Settings and enable the requests. Choose the customer groups allowed to request a quote, then show or hide the button on the product page and on the cart page. Set the default validity of a proposal, the notification recipients and, if needed, a default discount for each customer group.

Decide who can ask for a quote. Signed-in customers of an allowed group see the button. To open the quote request form to visitors without an account, enable guest quotes, keep the Guest group allowed and set the lifetime of the signed links sent by e-mail.

Then set what customers can send and receive: attachments and file types, customer messages, the PDF attached to the proposal, approval above an amount and catalog mode. In the Scheduled task section, copy the address or the command into your cron manager, then check the last run after the first pass. The Diagnostic shows versions, theme, e-mail method, storage and task state.

How do you answer a request and send a proposal?

Open the quote in B2B quotes > Quotes, enter a negotiated unit price excluding tax or a discount per line, then click Send the proposal.

The list shows the reference, customer, company, status, owner, total excluding tax and unread messages. Filter on the New status and open the request. On the quote page, each line keeps the catalogue price at the time of the request. Enter the negotiated price or a discount percentage: one updates the other. Add a validity date, a message to the customer and, when agreed, the Free shipping option.

Click Recalculate to check the totals excluding tax, taxes and including tax. They follow the shop's tax and rounding rules, and a note reminds you that the tax-inclusive amount depends on the customer's address. Each send creates a version kept with its PDF, attached to the e-mail in the customer's language when the option is on.

The customer can reply with a message and a target price per line, and attach files when messaging and attachments are enabled. The counter-offer stays in the conversation, and the latest target price of each line appears next to the negotiated price. A reseller asks for a price on a full pallet: you answer with a negotiated price and a validity date, and the customer accepts and orders the same day. For a request received by phone, New quote creates a draft for an existing account or a new contact; the draft stays invisible to the customer until it is sent.

What happens when the customer accepts the quote?

The quoted products and quantities go into the customer's cart at the negotiated prices, set as native specific prices tied to that cart and that customer.

Before accepting, the module checks that each product still exists, is active and orderable, that the combination belongs to the product and that stock is sufficient, unless backorders are allowed. If a product fails, nothing is added, the quote returns to Proposal sent and the customer reads the name of the product concerned.

Acceptance does not empty the cart. Products already there stay, and a line for the same product is raised to the quoted quantity when the quantity already in the cart is lower, never lowered. Free shipping, when granted, is applied by a native cart rule named after the quote. The customer is redirected to checkout and pays with the shop's payment methods.

Negotiated prices stay valid until the end of the validity date, or 24 hours after acceptance when that date is further away. They apply to that cart only: a later order, including from the order history, starts again at catalogue prices, and a quantity below the quoted one returns to the catalogue price.

Can you hide prices and sell by quote only?

Yes: the module's catalog mode hides prices and replaces "Add to cart" with "Request a quote" for the chosen groups, categories or products.

Two switches work independently: Hide the prices and Replace "Add to cart" with "Request a quote". A product is covered when the visitor belongs to a chosen group and the product is among the selected categories or products; if neither list is filled, every product of that group is covered.

The cart and the checkout are never modified. A customer with a negotiated cart can still order, and back-office carts and quote acceptance are never blocked. In Hummingbird product lists, the tile shows the theme's "View details" link instead of "Add to cart"; the quote button sits on the product page. PrestaShop's own catalog mode must stay off for an order to complete: the module's catalog mode is separate.

What happens if the license is no longer valid?

Since version 1.1.1, an invalid license disables the module completely, but your quotes, messages, files and settings are kept.

Without a valid license — expired, suspended, revoked, not recognised for this domain or missing — the "Request a quote" buttons and the form no longer open. The "My quotes" page and the quote links sent by e-mail stop working. Catalog mode no longer hides prices and "Add to cart" comes back; e-mails and the scheduled task no longer run, and the quote pages in the back office are closed.

Negotiated prices already in your customers' carts remain valid. The configuration page explains what is stopped and shows the activation form; as soon as the license is valid, the module resumes and orders placed in the meantime from accepted quotes are linked to their quote. The Module Manager refuses to enable the module without a valid license and sends you to that page.

Without a valid license, the configuration page lists what is stopped and asks for the license key and secret.
Without a valid license, the configuration page lists what is stopped and asks for the license key and secret.

A passed end date is checked again with the license server before concluding, so a renewed subscription is not cut. A transient answer — error, rate limit, clock skew or unreachable server — does not expire a valid license: seven days of tolerance are counted from the first failure. A real revocation, suspension or expiry always applies.

License validated: the page confirms the reactivation and shows the masked key, type and expiry date.
License validated: the page confirms the reactivation and shows the masked key, type and expiry date.

What are the module's limits?

It handles the request, the proposal and the acceptance, but not the shipping price, payment terms or a multi-level approval chain.

  • Free shipping only. A proposal can grant free shipping, applied by a native cart rule. The module does not set a shipping amount: other orders follow the shop's carriers and rates, and the proposal message can state the agreed delivery conditions.
  • Shop payment. Payment terms are not part of the module. To invoice on terms with a credit limit and reminders, the B2B Payment Terms module completes the path after acceptance.
  • One approval level. A proposal above the set amount must be approved by one of the chosen profiles; there is no multi-level approval chain.
  • Optional scheduled task. Without the scheduled task, no reminder or alert is sent; expiry is checked when a quote is opened or accepted.
  • Prices tied to the cart. A later order starts again at catalogue prices, even from the order history.
  • VAT and displayed prices. To adapt tax-inclusive prices to the visitor's country in the European Union, the EU VAT OSS module takes over the display; quote totals follow the shop's tax rules.

Frequently asked questions

Do customers need an account to request a quote?
No, provided guest quotes are enabled. A visitor enters a first name, last name and e-mail address, then follows the proposal through a signed link received by e-mail. The link works only while the quote is not attached to an account. If the visitor later creates an account with the same e-mail address in the same browser, the quote joins "My quotes".
How do you hide prices from some customers?
Enable the module's catalog mode, then choose the customer groups, categories or products concerned. The first switch hides prices; the second replaces "Add to cart" with "Request a quote". The cart and the checkout are not modified, so a customer with a negotiated cart can still order. PrestaShop's own catalog mode must stay off.
Does the module produce a PDF and accept attachments?
Yes. Every sent proposal has a PDF with the shop logo, the lines, negotiated prices, totals and validity date. It is attached to the e-mail and can still be downloaded for each version. The customer can attach up to five files, within the types and size you allow; files are checked by content and served as downloads only.
Does an accepted quote become an order?
Yes: acceptance puts the quoted products and quantities in the customer's cart at the negotiated prices, then redirects to checkout. The customer pays with the shop's payment methods, and the quote page then shows the order reference. The cart is not emptied on the way. A later order starts again at catalogue prices.
Can you offer payment terms with this module?
No. The module handles the request, the proposal and the acceptance, but not payment terms: the order uses the payment methods installed in the shop. To invoice on terms, with a credit limit and reminders, you need a payment-terms module. Free shipping is the only delivery condition a proposal can grant.
How do you enable quote requests in PrestaShop?
Install the archive from the Module Manager, click Configure and activate the license. In Settings, enable quote requests, choose the allowed groups and button locations, then set the default validity and notification recipients. Check the Diagnostic and schedule the task if you want expiry, reminders and alerts.

Products in this article

Find the module your store needs

Browse the modules