B2B Quote Pipeline
Complete guide to installing, configuring, and operating the B2B Quote Pipeline plugin — from your first quote request through to order conversion.
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
| Stage | Actor | What Happens |
|---|---|---|
| Request | Customer | Adds products to the Quote Cart and submits company details |
| Review | Admin | Opens quote in Pipeline, moves to Under Review |
| Price | Admin | Sets quoted prices per item, applies discount, sends quote |
| Respond | Customer | Accepts, declines, or requests changes from My Account |
| Convert | Admin | Clicks "Convert to Order" — WC order created automatically |
Pipeline at a Glance
Installation
System Requirements
Installation Steps
b2b-quote-pipeline-v1.0.0.zip and click Install Now.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 tables —
bqp_quotes,bqp_quote_items,bqp_quote_history - Daily cron job — via Action Scheduler for auto-expiry and warning emails
Settings & Configuration
All settings are at WooCommerce → Quote Settings — four tabs: General, Pipeline Labels, Email Notifications, Company / PDF.
General Tab
| Setting | Description |
|---|---|
| Enable Quote System | Master on/off toggle for the entire plugin |
| Quote Button Text | Label on the quote button. Default: "Request a Quote" |
| Button Position | Replace Add to Cart, or show both buttons simultaneously |
| Eligible Products | All products, specific categories, or specific product IDs |
| Allow Guest Quotes | Permit non-logged-in visitors to submit requests |
| Quote Number Prefix | E.g. "QT-" produces QT-A4BC7D3E. Customise to match your format. |
| Auto-Expire After | Days until a sent quote expires. Default: 14. Warning email at day 11. |
| Admin Notification Emails | Comma-separated list — all receive new quote, acceptance, rejection alerts |
| From Name / From Email | Sender 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 Key | Default Label | Rename Example |
|---|---|---|
| draft | New Request | "Enquiry Received" |
| pending | Under Review | "Pricing in Progress" |
| quoted | Quote Sent | "Proposal Sent" |
| negotiating | Negotiating | "In Discussion" |
| accepted | Accepted | "Approved" |
| ordered | Converted | "Order Placed" |
| rejected | Rejected | "Declined" |
| expired | Expired | "Lapsed" |
Email Token Reference
| Token | Replaced 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}}"
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
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
| Button | What It Sends |
|---|---|
| Send Quote to Customer | Full priced quote email with item table. Use when first setting prices. |
| Notify Customer of Update | Update notification. Use when revising after already sending. |
| Send Expiry Warning | Manual expiry reminder for non-responsive customers. |
Converting to a WooCommerce Order
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.
Status Reference
| Status | Label | Description |
|---|---|---|
| draft | New Request | Submitted by customer. Admin notified. Awaiting review. |
| pending | Under Review | Admin picked it up and is working on pricing. |
| quoted | Quote Sent | Prices set and sent to customer. Expiry countdown begins. |
| negotiating | Negotiating | Customer requested changes. Both parties discussing terms. |
| accepted | Accepted | Customer accepted. Ready for admin order conversion. |
| ordered | Converted | WooCommerce order created. Terminal — no further changes. |
| rejected | Rejected | Customer declined or admin rejected. Can be re-opened. |
| expired | Expired | Auto-set when valid_until passes. Customer was warned at T−3 days. |
Allowed Transitions
| From | Admin Can Move To | Customer Can Move To |
|---|---|---|
| draft | pending, quoted, rejected | No action |
| pending | quoted, rejected | No action |
| quoted | negotiating, accepted, rejected | accepted, rejected, negotiating |
| negotiating | quoted, accepted, rejected | accepted, rejected |
| accepted | ordered (convert) | Awaiting admin |
| rejected | pending (re-open) | No action |
| ordered | Terminal — no further changes | |
| expired | pending (re-open) | No action |
Customer Guide
This chapter covers the quote experience from the customer's perspective.
Adding Products to the Quote Cart
Submitting Your Quote Request
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.
| Action | What It Does |
|---|---|
| Accept Quote | Formally accepts the pricing. Admin is notified and will convert to an order. |
| Decline Quote | Rejects the pricing. Admin is notified. The quote can be re-opened. |
| Request Changes | Moves 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.
Email Notification Reference
| To | Trigger | |
|---|---|---|
quote_received | Admin | New quote submitted by customer |
quote_quoted | Customer | Admin sets status to Quote Sent — includes full item table |
quote_accepted | Admin | Customer clicks Accept |
quote_rejected | Admin | Customer clicks Decline |
quote_expiring | Customer | Cron — 3 days before expiry. Sent once only. |
quote_expired | Customer | Cron — valid_until date has passed |
quote_ordered | Customer | Admin converts quote to WooCommerce order |
quote_updated | Customer | Admin modifies a quote already in Quoted status |
Shortcodes
| Shortcode | Parameters | Description |
|---|---|---|
[bqp_quote_button] | product_id, text, class | Renders a quote CTA button for a specific product anywhere on the site |
[bqp_quote_cart] | none | Full quote cart + submission form. Used on the Request a Quote page. |
[bqp_my_quotes] | none | Link to the My Account → My Quotes tab |
Example: [bqp_quote_button product_id="42" text="Get a Price" class="button alt"]
REST API
Base path: /wp-json/b2b-quote-pipeline/v1/
| Method | Endpoint | Auth | Purpose |
|---|---|---|---|
| GET | /quotes | Admin | List with filters & search |
| GET | /quotes/{id} | Owner/Admin | Full quote + items + history |
| POST | /quotes | Logged-in/Guest* | Create from session cart |
| PUT | /quotes/{id} | Admin | Update quote fields |
| POST | /quotes/{id}/status | Owner/Admin | Change status (validates transitions) |
| POST | /quotes/{id}/convert | Admin | Convert to WooCommerce order |
| POST | /quotes/{id}/send | Admin | Manually send email type |
| PUT | /quotes/{id}/items/{item_id} | Admin | Update item qty/price |
| DELETE | /quotes/{id}/items/{item_id} | Admin | Remove line item |
* Guest POST requires Allow Guest Quotes enabled in settings.
Troubleshooting
| Issue | Solution |
|---|---|
| Quote button not showing | Check Enable Quote System is on. If using specific categories/products, verify the product is included. |
| My Quotes tab missing | Settings → Permalinks → Save Changes to flush rewrite rules. |
| Emails not received | Check email type is enabled in settings. Verify admin email address. Use manual send buttons on quote detail to test. |
| Quotes not auto-expiring | Verify WP-Cron is enabled. Check Tools → Scheduled Actions for bqp_check_expiring_quotes. |
| Quote cart page 404 | Create page manually with [bqp_quote_cart] shortcode and flush permalinks. |
| "Convert to Order" not appearing | Button only shows on Accepted quotes. Verify status and check the quote isn't already converted. |
| Database tables missing | Deactivate and reactivate the plugin to re-run the Activator. |
Getting Support
- CodeCanyon — Submit a ticket on the item page. Response within 2 business days.
- Email — hello@byteforgelab.com
- Website — byteforgelab.com
When contacting support, please include: WordPress version, WooCommerce version, PHP version, plugin version, and any error messages from WooCommerce → Status → Logs.