Repository
OCA/sale-workflow · module folder · Try on Runboat
Module version
1.0.3
Category
Sale
Folder size
0.08 MB
License
AGPL-3
Application
No
Auto-installable
No
Website
https://github.com/OCA/sale-workflow
Last tracking update
2026-08-07 08:42:48
Authors
Odoo Community Association (OCA), Tecnativa
Maintainers
Odoo Community Association (OCA), Tecnativa
Committers
Carlos Roca, Weblate, OCA-git-bot, oca-ci, christian-ramos-tecnativa
Odoo dependencies
Python dependencies
None
System dependencies
None
Required by
sale_commission_oca_product_criteria_semaphore, sale_report_delivered_semaphore
Description
This module adds a commercial semaphore to help sales teams assess
whether a quoted price stays within the discount policy defined for a
product or product category.

For each product you can define three discount thresholds, expressed as
a percentage over the public sale price:

- **Green**: price is within the preferred commercial margin.
- **Yellow**: price is still acceptable, but already close to the limit.
- **Red**: price is below the warning threshold and should be reviewed.

The semaphore is displayed directly on sales order lines and propagated
to customer invoice lines and reporting models, so the same visual
indicator is available during the full sales flow.

When no product-specific configuration exists, the module can also reuse
the thresholds defined on the product category.

Code Analysis

Views touched (7)
XML IDNameModelTypeStatus
product_category_form_view product.category form Inherits product.product_category_form_view
product_template_form_view product.template form Inherits product.product_template_form_view
sale_order_line_view_form_readonly sale.order.line form Inherits sale.sale_order_line_view_form_readonly
view_account_invoice_report_search account.invoice.report search Inherits account.view_account_invoice_report_search
view_move_form account.move form Inherits account.view_move_form
view_order_form sale.order form Inherits sale.view_order_form
view_order_product_search sale.report search Inherits sale.view_order_product_search
HTTP endpoints (0)

No HTTP endpoints found for this module.

Models touched (8)

New fields (1)
  • semaphore Selection
    readonly=True args: [('success', '🟢'), ('warning', '🟡'), ('danger', '🔴')]
Public methods (0)

No public methods.

New fields (1)
  • semaphore Selection
    args: [('success', '🟢'), ('warning', '🟡'), ('danger', '🔴')]
Public methods (0)

No public methods.

New fields (4)
  • semaphore_active Boolean
  • semaphore_discount_danger Float
    string='Discount Danger'
  • semaphore_discount_success Float
    string='Discount Success'
  • semaphore_discount_warning Float
    string='Discount Warning'
Public methods (0)

No public methods.

New fields (4)
  • semaphore_active Selection
    help='If the value is blank, it will be inherited from the category.' selection=[('yes', 'Yes'), ('no', 'No')]
  • semaphore_discount_danger Float
    string='Discount Danger'
  • semaphore_discount_success Float
    string='Discount Success'
  • semaphore_discount_warning Float
    string='Discount Warning'
Public methods (0)

No public methods.

New fields (4)
  • semaphore_active Selection
    compute='_compute_semaphore_values' help='If the value is blank, it will be inherited from the category.' inverse='_inverse_semaphore_active' selection=[('yes', 'Yes'), ('no', 'No')]
  • semaphore_discount_danger Float
    compute='_compute_semaphore_values' inverse='_inverse_semaphore_discount_danger' string='Discount Danger'
  • semaphore_discount_success Float
    compute='_compute_semaphore_values' inverse='_inverse_semaphore_discount_success' string='Discount Success'
  • semaphore_discount_warning Float
    compute='_compute_semaphore_values' inverse='_inverse_semaphore_discount_warning' string='Discount Warning'
Public methods (0)

No public methods.

New fields (1)
  • price_below_semaphore Boolean
    compute='_compute_price_below_semaphore'
Public methods (1)
  • action_confirm(self)

New fields (6)
  • price_below_semaphore Boolean
    compute='_compute_price_below_semaphore'
  • semaphore Selection
    compute='_compute_semaphore' store=True args: [('success', '🟢'), ('warning', '🟡'), ('danger', '🔴')]
  • semaphore_active Boolean
    compute='_compute_semaphore' store=True
  • semaphore_max_price_danger Float
    compute='_compute_semaphore_max_prices'
  • semaphore_max_price_success Float
    compute='_compute_semaphore_max_prices'
  • semaphore_max_price_warning Float
    compute='_compute_semaphore_max_prices'
Public methods (1)
  • write(self, vals)

New fields (1)
  • semaphore Selection
    args: [('success', '🟢'), ('warning', '🟡'), ('danger', '🔴')]
Public methods (0)

No public methods.

Loading…

Status
Open migration PR — not merged yet for this version
CI status
green — ready to merge
Open since
43 days ago
Last activity
29 days ago
Repository
OCA/sale-workflow
Pull request
[19.0][MIG] sale_semaphore : Migration to 19.0. (#4456)