TIP: You can type at any time to perform a new search.
Sale Semaphore
sale_semaphore · OCA/sale-workflow
- 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 ID | Name | Model | Type | Status |
|---|---|---|---|---|
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)
-
semaphoreSelectionreadonly=True args: [('success', '🟢'), ('warning', '🟡'), ('danger', '🔴')]
No public methods.
New fields (1)
-
semaphoreSelectionargs: [('success', '🟢'), ('warning', '🟡'), ('danger', '🔴')]
No public methods.
New fields (4)
-
semaphore_activeBoolean -
semaphore_discount_dangerFloatstring='Discount Danger' -
semaphore_discount_successFloatstring='Discount Success' -
semaphore_discount_warningFloatstring='Discount Warning'
No public methods.
New fields (4)
-
semaphore_activeSelectionhelp='If the value is blank, it will be inherited from the category.'selection=[('yes', 'Yes'), ('no', 'No')] -
semaphore_discount_dangerFloatstring='Discount Danger' -
semaphore_discount_successFloatstring='Discount Success' -
semaphore_discount_warningFloatstring='Discount Warning'
No public methods.
New fields (4)
-
semaphore_activeSelectioncompute='_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_dangerFloatcompute='_compute_semaphore_values'inverse='_inverse_semaphore_discount_danger'string='Discount Danger' -
semaphore_discount_successFloatcompute='_compute_semaphore_values'inverse='_inverse_semaphore_discount_success'string='Discount Success' -
semaphore_discount_warningFloatcompute='_compute_semaphore_values'inverse='_inverse_semaphore_discount_warning'string='Discount Warning'
No public methods.
New fields (1)
-
price_below_semaphoreBooleancompute='_compute_price_below_semaphore'
-
action_confirm(self)
New fields (6)
-
price_below_semaphoreBooleancompute='_compute_price_below_semaphore' -
semaphoreSelectioncompute='_compute_semaphore'store=True args: [('success', '🟢'), ('warning', '🟡'), ('danger', '🔴')] -
semaphore_activeBooleancompute='_compute_semaphore'store=True -
semaphore_max_price_dangerFloatcompute='_compute_semaphore_max_prices' -
semaphore_max_price_successFloatcompute='_compute_semaphore_max_prices' -
semaphore_max_price_warningFloatcompute='_compute_semaphore_max_prices'
-
write(self, vals)
New fields (1)
-
semaphoreSelectionargs: [('success', '🟢'), ('warning', '🟡'), ('danger', '🔴')]
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)