Deal Approval & Discount
Discount-threshold approvals and margin-floor enforcement on sales quotes
Reps under quota pressure quietly over-discount, eroding gross margin and sometimes selling below cost, and by the time finance notices the damage is done. Sales leaders, revenue-operations and finance teams need enforceable controls, not after-the-fact reports. This module enforces a configurable tiered approval matrix on sale.order based on effective discount and computed margin, and blocks confirmation of any quote below the company margin floor until the right approver signs off. Discounts and margins are calculated automatically from the order lines, so governance happens on real numbers.
Key Features
Tiered Discount Approval Matrix
A per-company deal.approval.policy holds ordered deal.approval.tier rows, each with a discount threshold_pct and a required_level of manager, director or CFO. required_level_for_discount picks the highest tier the effective discount reaches, so escalating discounts demand escalating sign-off.
Automatic Discount & Margin Metrics
_compute_deal_metrics on sale.order derives the weighted deal_discount_pct from list price versus net, and deal_margin and deal_margin_pct from each line's standard_price cost. Stored and refreshed on every line change, governance runs on real numbers rather than rep estimates.
Hard Confirmation Block
action_confirm calls _governance_blocks_confirm and raises a UserError that explains exactly why: discount needs a given approver level, margin is below floor, or the deal sells below cost. No quote breaching policy can be confirmed without an approved request.
Margin Floor & Below-Cost Guard
res.company exposes deal_margin_floor, deal_governance_enabled and deal_block_below_cost. Quotes under the floor need approval, and with below-cost blocking on, negative-margin deals are hard-blocked even from approvers, protecting the company from loss-making orders.
Audited Approval Workflow
deal.approval.request runs draft, pending, approved, rejected and cancel states on mail.thread, capturing the salesperson, justification reason, discount, margin, decision user and timestamp. Every discount exception leaves a complete, tracked audit trail of who approved what and why.
Authorisation Check on Decision
_check_can_decide restricts approve/reject to the Deal Approval Manager group or the tier's specific approver_group_id. A constraint also blocks more than one open request per quotation, so approvals reach the right authority and cannot be duplicated.
Submit & Decide Wizards
The deal.submit.approval wizard creates and submits a request pre-filled with the matched tier, discount and margin, while deal.decide.approval lets an approver record approve or reject with a note in one step. Reps and approvers each get a focused, guided action.
Live Order Indicators
Each sale.order shows deal_required_level, deal_below_floor and deal_is_approved as stored computed flags, with a smart button to its approval requests. Reps and managers see at a glance whether a quote needs sign-off before they ever try to confirm it.
Use Cases
Screenshots
Approval Policies
Approval Requests
Submit For Approval
Why Choose This Module
This module enforces a configurable approval matrix on sales quotations based on the effective discount percentage and the deal margin, and blocks confirmation of any quote that falls below the company margin floor until the right approver signs off. Margins and discounts are computed automatically from the order lines, so governance happens on real numbers, not estimates.
Specifications
- Compatible: Odoo 18.0 / 19.0
- License: OPL-1
- Languages: English
- Author: Pokutsoft
- Dependencies: sale_management
- Support: support@pokutsoft.com
Update date: 2026-07-02