B2B Quote Pipeline — User Guide
📖 User Guide

B2B Quote Pipeline

Complete guide to installing, configuring, and operating the B2B Quote Pipeline plugin — from your first quote request through to order conversion.

📦 Version 1.0.0
🛒 WooCommerce 8.0+
🐘 PHP 8.1+
🏢 ByteForgeLab
Chapter 01

Introduction

B2B Quote Pipeline adds a complete B2B quoting workflow on top of WooCommerce. Customers submit pricing requests, your team manages them through a visual Kanban pipeline, and accepted quotes convert to WooCommerce orders automatically — with a full email notification system throughout.

How It Works

StageActorWhat Happens
RequestCustomerAdds products to the Quote Cart and submits company details
ReviewAdminOpens quote in Pipeline, moves to Under Review
PriceAdminSets quoted prices per item, applies discount, sends quote
RespondCustomerAccepts, declines, or requests changes from My Account
ConvertAdminClicks "Convert to Order" — WC order created automatically

Pipeline at a Glance

New Request
Under Review
Quote Sent
Negotiating
Accepted
Converted
Chapter 02

Installation

System Requirements

WordPress
6.2.0 or higher
WooCommerce
8.0.0 or higher
PHP
8.1.0 or higher
WP-Cron / Server Cron
Required for auto-expiry

Installation Steps

1
Upload the plugin — Go to Plugins → Add New → Upload Plugin. Select b2b-quote-pipeline-v1.0.0.zip and click Install Now.
2
Activate — Click "Activate Plugin" on the success screen.
3
Automatic setup — The plugin creates "Request a Quote" and "My Quotes" pages, registers the My Account tab, and schedules the daily cron job.
4
Configure — Go to WooCommerce → Quote Settings to set your email addresses and company details before going live.

Permalinks flush needed? If the My Quotes account tab doesn't appear, go to Settings → Permalinks and click Save Changes to flush rewrite rules.

What Activation Creates

  • "Request a Quote" page — contains [bqp_quote_cart] shortcode at /request-quote/
  • "My Quotes" page — contains [bqp_my_quotes] shortcode at /my-quotes/
  • My Quotes tab — in the WooCommerce My Account sidebar
  • 3 database tablesbqp_quotes, bqp_quote_items, bqp_quote_history
  • Daily cron job — via Action Scheduler for auto-expiry and warning emails
Chapter 03

Settings & Configuration

All settings are at WooCommerce → Quote Settings — four tabs: General, Pipeline Labels, Email Notifications, Company / PDF.

General Tab

SettingDescription
Enable Quote SystemMaster on/off toggle for the entire plugin
Quote Button TextLabel on the quote button. Default: "Request a Quote"
Button PositionReplace Add to Cart, or show both buttons simultaneously
Eligible ProductsAll products, specific categories, or specific product IDs
Allow Guest QuotesPermit non-logged-in visitors to submit requests
Quote Number PrefixE.g. "QT-" produces QT-A4BC7D3E. Customise to match your format.
Auto-Expire AfterDays until a sent quote expires. Default: 14. Warning email at day 11.
Admin Notification EmailsComma-separated list — all receive new quote, acceptance, rejection alerts
From Name / From EmailSender identity for all outgoing transactional emails

Pipeline Labels Tab

Rename any pipeline stage to match your terminology. Changes apply everywhere: the Kanban board, status badges, customer My Account, and emails.

Status KeyDefault LabelRename Example
draftNew Request"Enquiry Received"
pendingUnder Review"Pricing in Progress"
quotedQuote Sent"Proposal Sent"
negotiatingNegotiating"In Discussion"
acceptedAccepted"Approved"
orderedConverted"Order Placed"
rejectedRejected"Declined"
expiredExpired"Lapsed"

Email Token Reference

TokenReplaced With
{{quote_number}}Quote reference e.g. QT-A4BC7D3E
{{company_name}}Company name from submission form
{{total}}Formatted grand total with currency symbol
{{valid_until}}Expiry date in your site's date format
{{quote_url}}Direct link to the quote in My Account
{{order_url}}WooCommerce order link (quote_ordered email only)
{{site_name}}Your WordPress site name
💡

Example subject: "Your Quote {{quote_number}} — valid until {{valid_until}}"

Chapter 04

Managing Quotes — Admin Guide

Navigating the Admin

After activation, three items appear under WooCommerce in the sidebar: ↳ Quote Pipeline (Kanban board), ↳ All Quotes (table view), and ↳ Quote Settings.

The Pipeline Board (Kanban)

The Pipeline board groups all active quotes into columns by status. Each card shows: quote number, company name, item count, total value, age, and assigned team member. A warning icon flags quotes expiring within 3 days.

💡

Quick Status Move: Each card has a "— Move to" dropdown for instant status changes without opening the full detail page. Great for batch triage.

Quote Detail Editor

Status & Actions Toolbar

  • Current status badge with colour coding
  • Change Status dropdown — only shows valid transitions from current status
  • Optional note field — internal note attached to the status change
  • Convert to Order button — appears on Accepted quotes only

Editing Line Items

1
Click the Quoted Price field for any item and enter the negotiated price. The List Price column shows the original WooCommerce price for reference.
2
Change Qty if needed. Both fields auto-save with a short debounce — the Grand Total recalculates instantly.
3
Remove items with the × button. The total updates immediately.

Applying a Discount

Use the Discount section below the items table. Choose Percentage (%) or Fixed amount, enter the value, and click Apply. The Grand Total recalculates and the discount appears as a separate footer line.

Sidebar — Company Details, Settings & Notes

  • Company Details — edit name, email, phone. Click "Save Details".
  • Quote Settings — set/change Valid Until date; assign to a team member.
  • Admin Notes — internal notes, never shown to the customer.

Sending Emails Manually

ButtonWhat It Sends
Send Quote to CustomerFull priced quote email with item table. Use when first setting prices.
Notify Customer of UpdateUpdate notification. Use when revising after already sending.
Send Expiry WarningManual expiry reminder for non-responsive customers.

Converting to a WooCommerce Order

1
Open the quote detail for an accepted quote.
2
Click 🛒 Convert to Order in the actions toolbar and confirm.
3
A WooCommerce order is created in Pending Payment status with all quoted prices applied. You are redirected to the order editor.
4
The customer automatically receives an order confirmation email. The quote moves to ordered and cannot be modified.

Payment: The order is created in Pending Payment status. The customer completes payment through your normal WooCommerce checkout — the plugin does not handle payment collection.

Chapter 05

Status Reference

StatusLabelDescription
draftNew RequestSubmitted by customer. Admin notified. Awaiting review.
pendingUnder ReviewAdmin picked it up and is working on pricing.
quotedQuote SentPrices set and sent to customer. Expiry countdown begins.
negotiatingNegotiatingCustomer requested changes. Both parties discussing terms.
acceptedAcceptedCustomer accepted. Ready for admin order conversion.
orderedConvertedWooCommerce order created. Terminal — no further changes.
rejectedRejectedCustomer declined or admin rejected. Can be re-opened.
expiredExpiredAuto-set when valid_until passes. Customer was warned at T−3 days.

Allowed Transitions

FromAdmin Can Move ToCustomer Can Move To
draftpending, quoted, rejectedNo action
pendingquoted, rejectedNo action
quotednegotiating, accepted, rejectedaccepted, rejected, negotiating
negotiatingquoted, accepted, rejectedaccepted, rejected
acceptedordered (convert)Awaiting admin
rejectedpending (re-open)No action
orderedTerminal — no further changes
expiredpending (re-open)No action
Chapter 06

Customer Guide

This chapter covers the quote experience from the customer's perspective.

Adding Products to the Quote Cart

1
Visit any product page. Click "Request a Quote". For variable products, select your variation first.
2
The product is added to your quote cart (separate from the regular shopping cart). A confirmation link lets you view your cart.
3
Continue browsing and add as many products as needed. Your cart persists across pages.

Submitting Your Quote Request

1
Navigate to the Request a Quote page. Review cart items, update quantities, or remove products.
2
Fill in Company Name (required), Email Address (required), and optional phone and shipping address fields.
3
Use the Notes field to describe delivery requirements, project context, or volume expectations — this helps the team price accurately.
4
Click "Submit Quote Request". A success message shows your quote reference number. You receive a confirmation email.

Responding to a Priced Quote

When the sales team sends pricing, you receive an email. Log in → My Account → My Quotes → View to see the full quote with line items and totals.

ActionWhat It Does
Accept QuoteFormally accepts the pricing. Admin is notified and will convert to an order.
Decline QuoteRejects the pricing. Admin is notified. The quote can be re-opened.
Request ChangesMoves to Negotiating. Add a note explaining what you need changed.

Expiry: Quotes have a validity period shown on the detail page. You must respond before the expiry date — you'll receive a reminder email 3 days before.

Chapter 07

Email Notification Reference

EmailToTrigger
quote_receivedAdminNew quote submitted by customer
quote_quotedCustomerAdmin sets status to Quote Sent — includes full item table
quote_acceptedAdminCustomer clicks Accept
quote_rejectedAdminCustomer clicks Decline
quote_expiringCustomerCron — 3 days before expiry. Sent once only.
quote_expiredCustomerCron — valid_until date has passed
quote_orderedCustomerAdmin converts quote to WooCommerce order
quote_updatedCustomerAdmin modifies a quote already in Quoted status
Chapter 08

Shortcodes

ShortcodeParametersDescription
[bqp_quote_button]product_id, text, classRenders a quote CTA button for a specific product anywhere on the site
[bqp_quote_cart]noneFull quote cart + submission form. Used on the Request a Quote page.
[bqp_my_quotes]noneLink to the My Account → My Quotes tab

Example: [bqp_quote_button product_id="42" text="Get a Price" class="button alt"]

Chapter 09

REST API

Base path: /wp-json/b2b-quote-pipeline/v1/

MethodEndpointAuthPurpose
GET/quotesAdminList with filters & search
GET/quotes/{id}Owner/AdminFull quote + items + history
POST/quotesLogged-in/Guest*Create from session cart
PUT/quotes/{id}AdminUpdate quote fields
POST/quotes/{id}/statusOwner/AdminChange status (validates transitions)
POST/quotes/{id}/convertAdminConvert to WooCommerce order
POST/quotes/{id}/sendAdminManually send email type
PUT/quotes/{id}/items/{item_id}AdminUpdate item qty/price
DELETE/quotes/{id}/items/{item_id}AdminRemove line item

* Guest POST requires Allow Guest Quotes enabled in settings.

Chapter 10

Troubleshooting

IssueSolution
Quote button not showingCheck Enable Quote System is on. If using specific categories/products, verify the product is included.
My Quotes tab missingSettings → Permalinks → Save Changes to flush rewrite rules.
Emails not receivedCheck email type is enabled in settings. Verify admin email address. Use manual send buttons on quote detail to test.
Quotes not auto-expiringVerify WP-Cron is enabled. Check Tools → Scheduled Actions for bqp_check_expiring_quotes.
Quote cart page 404Create page manually with [bqp_quote_cart] shortcode and flush permalinks.
"Convert to Order" not appearingButton only shows on Accepted quotes. Verify status and check the quote isn't already converted.
Database tables missingDeactivate and reactivate the plugin to re-run the Activator.

Getting Support

When contacting support, please include: WordPress version, WooCommerce version, PHP version, plugin version, and any error messages from WooCommerce → Status → Logs.