Status and actor matrix
B2B Quote separates a fixed lifecycle state from the store-scoped status label shown in the admin and storefront. The transition table decides which actor may move a quote and whether a note or notification is required.
Lifecycle states
| State | Typical meaning | Usual actor for entry |
|---|---|---|
| Draft | Request is being prepared. | Customer or admin |
| Submitted | Customer sent the request for review. | Customer |
| In review | Merchant or customer is working on the offer. | Admin or customer |
| Approved | Merchant released an offer. | Admin |
| Accepted | Customer accepted the offer. | Customer or permitted admin flow |
| Ordered | An order was created. | System |
| Rejected | The current offer was declined. | Admin or customer, when configured |
| Expired | The expiry process closed the offer. | System |
| Cancelled | The request was cancelled. | Actor allowed by the transition |
Ordered, expired, and cancelled are terminal states in the base lifecycle. Custom statuses still map to one of these states and cannot create a separate state.
Operation matrix
The table describes the normal requirement. A store can narrow it with transitions, ACL, customer-group access, status restrictions, and workflow rules.
| Operation | Customer | Admin | System |
|---|---|---|---|
| Create draft | Yes, for an eligible account | Yes, with quote-save permission | No |
| Add or edit items | Editable customer quote | Editable quote and ACL | Through configured jobs or integrations |
| Submit | Requires customer transition | Can save, but submission is an actor-specific transition | No |
| Offer or approve | No | Requires admin transition and ACL | Workflow rules may trigger related actions |
| Counter-offer | Only when enabled for the current state | Can set the offered price | No |
| Accept | Requires customer transition or guest token permission | Only where the admin action is exposed | Conversion performs the system transition |
| Expire | No | No direct customer action | Expiry job and system transition |
| Create order | No direct order service call | Admin conversion action where available | Validates and writes the order |
Guest access follows the customer column but uses the quote access token. A token does not bypass status, expiry, configuration, or order validation.
Store scope and defaults
Statuses and transitions can be global or scoped to a store view. The resolver uses the quote's store when it looks for a target status and actor permission. Keep one default status for every state used by the workflow. If a target is not explicitly configured, the state default is used; if neither exists, the action fails with an invalid-transition error.
Required notes and notifications
A transition can require a non-empty note. Customer and administrator notifications are independent settings on the transition. A successful status save dispatches side effects after the transaction commits, so a rolled-back change should not send a transition email.
Health check
When an action is missing, check these values in order:
- quote store view and current status;
- target status state and store scope;
- allowed actor on the transition;
- required note setting;
- customer-group and storefront access settings;
- administrator ACL and any status-disabled feature;
- workflow rule conditions and notification configuration.
Do not edit the status column directly. Correct the transition or status configuration and test the same action as the affected actor.