=== Boring Quote - Request a Quote for WooCommerce ===
Contributors: 3dworkshop
Tags: request a quote, woocommerce quote, b2b, catalog mode, quote
Requires at least: 6.5
Tested up to: 7.1
Requires PHP: 8.0
WC requires at least: 9.0
Stable tag: 1.0.0
License: GPLv3
License URI: https://www.gnu.org/licenses/gpl-3.0.html

Let customers collect products into a quote list and send you a quote request. Lightweight, block-theme ready, HPOS compatible.

== Description ==

Boring Quote adds a "Request a quote" flow to WooCommerce without the bloat. It does one job and does it quietly.

= Features =

* "Request a quote" button on product pages (simple and variable products)
* Works with classic AND block themes out of the box
* Quote list with instant quantity update and removal (REST API, no admin-ajax)
* Works without JavaScript too (graceful fallback)
* Quote request page created automatically on activation
* Request form with a configurable GDPR consent checkbox (linked to your privacy policy) and invisible spam protection: honeypot, minimum fill time and per-IP rate limit
* Privacy tools: quote requests are included in WordPress personal data export and erasure, plus suggested privacy policy text
* Quote list counter for your header: `[bbquote_count]` shortcode or block, page-cache friendly
* "Quote list" block for block themes
* Emails sent through the WooCommerce mailer: admin notification (Reply-To set to the customer) and customer confirmation, both editable in WooCommerce > Settings > Emails
* Every request is saved in WooCommerce > Quote Requests, visible only to administrators and shop managers
* Optionally hide prices and "Add to cart" buttons (catalog mode)
* Hide the button on individual products
* Sessions stored in a dedicated table (no wp_options bloat), no plugin framework
* Translation ready (translations via translate.wordpress.org)

= Boring Quote Pro =

Turn requests into paid orders: edit prices and send offers, customers accept with one click and pay through your normal checkout. Custom form fields, quote button on shop and category pages. [Learn more](https://boringdev.pl)

= Shortcodes =

* `[bbquote_quote_list]` - quote list and request form
* `[bbquote_button product="123"]` - quote button anywhere
* `[bbquote_count label="Quote"]` - link to the quote page with the number of items

= For developers =

Override templates in `yourtheme/boring-quote/`.

Actions: `boring_quote_loaded`, `bbquote_item_added`, `bbquote_quote_created`, `bbquote_quote_submitted`, `bbquote_before_button`, `bbquote_admin_quote_view`, `bbquote_admin_status_box_actions`, `bbquote_quote_page_before`.

Filters: `bbquote_show_button`, `bbquote_item_is_valid`, `bbquote_form_fields`, `bbquote_submit_errors`, `bbquote_quote_statuses`, `bbquote_selectable_statuses`, `bbquote_settings_fields`, `bbquote_render_default_quote_view`, `bbquote_page_url`, `bbquote_session_expiration`, `bbquote_session_use_secure_cookie`, `bbquote_session_renew_threshold`, `bbquote_quote_page_takeover`, `bbquote_submit_min_seconds`, `bbquote_submit_rate_limit`, `bbquote_show_pro_note`, `bbquote_getting_started_steps`.

JavaScript event: `bbquote:updated` on `document`, `detail.count` holds the number of items.

Cookies: `bbquote_session` (signed session id, HttpOnly, set only when a product is added) and `bbquote_count` (number of items, read by JavaScript).

== Installation ==

1. Upload the plugin and activate it (WooCommerce must be active).
2. A "Request a Quote" page is created automatically.
3. Configure options in WooCommerce > Settings > Boring Quote.

== Frequently Asked Questions ==

= The button does not add products for logged-out visitors =

If you use full page caching, exclude the quote page and make sure product pages do not serve a cached security nonce older than 12 hours.

= Where are the requests? =

WooCommerce > Quote Requests.

== Screenshots ==

1. "Request a quote" button on the product page (Twenty Twenty-Five). Products are added without reloading the page.
2. The quote list with the request form: quantities, variations and GDPR consent.
3. All quote requests in WooCommerce > Quote Requests, with statuses.
4. A single quote request: customer details, products and status.
5. Settings in WooCommerce > Settings > Boring Quote.

== Changelog ==

= 1.0.0 =
* First public release.
* Quote statuses: New, In progress, Offer sent, Accepted, Rejected and Expired, all can be set by hand (filter `bbquote_selectable_statuses`).
* Buttons and forms follow the theme style in classic and block themes (Twenty Twenty-Five, Storefront).
* Quote requests use their own capabilities (administrators and shop managers only).
* GDPR: personal data exporter and eraser, privacy policy text, configurable consent label with privacy policy link.
* Spam protection: minimum fill time and per-IP rate limit next to the honeypot.
* Variable products can be added only with a chosen variation.
* `[bbquote_count]` shortcode and blocks: Quote list, Quote list counter.
* "Hide Add to cart" also hides the button in block-theme product collections.
* Getting started screen (WooCommerce > Quote setup) with a setup checklist, opened once after the first activation, plus a Help tab on plugin screens.
* Quote page: list and form side by side on wide layouts, product cards on phones, quantity buttons, clear empty and thank-you screens.
* Admin: status labels in Quote Requests, customer details with a "Reply by email" button, product thumbnails.
* Emails: product thumbnails, total quantity and a button to the request in the dashboard.
