Agreements & Call-Offs
Agreements turn approved quote conditions into reusable purchasing arrangements. Customers can start later quote drafts with the agreed products and prices instead of rebuilding the request from scratch.
When To Use Agreements
Use agreements when a quote represents a negotiated framework instead of a one-time purchase.
Typical examples:
- annual purchasing agreements
- blanket orders with fixed item prices
- project-specific quantity commitments
- staged deliveries from one negotiated offer
Agreement Lifecycle
Approved Quote → Agreement → Call-Off Quote → Order
An agreement can be created from a customer quote when the quote has a workflow state that is eligible for conversion:
| Quote State | Agreement Creation |
|---|---|
| Approved | Allowed |
| Accepted | Allowed |
| Ordered | Allowed |
| Draft / Submitted / Review | Not allowed |
| Rejected / Cancelled / Expired | Not allowed |
The quote must belong to a customer and contain items. Guest quotes and empty quotes cannot be converted into agreements.
Agreement Statuses
| Status | Meaning |
|---|---|
active |
Available for call-off ordering |
inactive |
Kept for reference, but not available for call-offs |
exhausted |
Quantities are fully consumed |
expired |
Validity date has passed or the agreement was closed by date |
Only active agreements can start a call-off quote.
Agreement Data
Each agreement stores:
- agreement number
- name
- customer
- optional project
- source quote
- store scope
- validity dates
- notes
Each agreement item stores:
- product, SKU, and name
- agreed quantity
- consumed quantity
- agreed price
- optional item validity dates
- notes
Customer Workflow
Customers can open My Agreements in their account area.
Customers can also create an agreement themselves from one of their own quotes once that quote has reached an eligible state (approved, accepted or ordered — see the lifecycle table above). The action is offered on the customer's quote view; the extension checks that the quote belongs to the signed-in customer before converting it.
From the agreement detail page they can:
- review agreement metadata
- see agreed, consumed, and available quantities
- enter call-off quantities
- start a new draft quote from the selected quantities
The new quote is saved as a draft so the customer can review it before submission. It stores the agreement ID on the quote, the agreement item ID on each selected line, and the agreed item price as the offered price. If the agreement belongs to a project, the draft keeps that project relation.
Quantity Rules
Call-off quantities are validated before a draft quote is created.
| Rule | Behavior |
|---|---|
| no quantity entered | request is rejected |
| quantity above available amount | request is rejected |
| inactive agreement | request is rejected |
| valid quantity | draft quote is created |
Available quantity is calculated as agreed quantity minus consumed quantity. Creating a call-off draft does not increase the consumed quantity in the base package, so the draft does not reserve any part of the agreement. The consumed quantity is synchronized automatically once an order created from the call-off quote is submitted, and it is restored again when such an order is cancelled.
Admin Workflow
Admins can manage agreements in the Magento admin under B2B Quotes > Agreements.
Admins can:
- create agreements manually
- convert eligible quotes into agreements
- edit agreement metadata
- add or update agreement items
- set status and validity dates
- delete agreements when no longer needed
See Agreement Management for the admin UI details.
Database Tables
Agreements use these tables:
| Table | Purpose |
|---|---|
b2b_quote_agreement |
Agreement header records |
b2b_quote_agreement_item |
Agreement item quantities and prices |
The base quote tables also contain agreement references:
| Table | Column | Purpose |
|---|---|---|
b2b_quote |
agreement_id |
Links a quote to the source agreement |
b2b_quote_item |
agreement_item_id |
Links quote lines to agreement items |