TIP: You can type at any time to perform a new search.
Sale Elaboration
sale_elaboration · OCA/sale-workflow
- Repository
- OCA/sale-workflow · module folder · Try on Runboat
- Module version
- 1.0.0
- Category
- Sale
- Folder size
- 0.16 MB
- License
- AGPL-3
- Application
- No
- Auto-installable
- No
- Website
- https://github.com/OCA/sale-workflow
- Last tracking update
- 2026-08-07 09:06:23
- Authors
- Odoo Community Association (OCA), Tecnativa
- Maintainers
- Odoo Community Association (OCA), Tecnativa
- Committers
- OCA-git-bot, oca-ci, Bhavesh Heliconia
- Odoo dependencies
- Python dependencies
- None
- System dependencies
- None
- Required by
- product_customerinfo_elaboration
- Description
This module extends the functionality of sales orders to allow to set an elaboration on lines that will add an extra order line with an elaboration product linked to it when the delivery order is validated. An **elaboration** is a process that needs to be done over the product, usually on picking/handling phase. It doesn't modify too much the product for needing an specific product, but it adds a surcharge on the final price. If the elaboration has a defined route, selecting the elaboration, it is set on the order line, which will result in the generation of multiple delivery notes depending on the established route.
Code Analysis ⓘ
Views touched (21)
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
elaboration_notes |
elaboration_notes | ir.ui.view | qweb | New |
elaboration_view_form |
Elaborations | product.elaboration | form | New |
elaboration_view_search |
Elaborations | product.elaboration | search | New |
elaboration_view_tree |
Elaborations | product.elaboration | list | New |
product_elaboration_profile_form_view |
product.elaboration.profile.form.view | product.elaboration.profile | form | New |
product_elaboration_profile_tree_view |
product.elaboration.profile.tree.view | product.elaboration.profile | list | New |
product_template_form_view |
product.template | form | Inherits product.product_template_form_view | |
product_template_only_form_view |
product.template | form | Inherits product.product_template_only_form_view | |
report_delivery_document |
report_delivery_document | ir.ui.view | qweb | Inherits stock.report_delivery_document |
report_picking |
report_picking | ir.ui.view | qweb | Inherits stock.report_picking |
report_stock_move_elaboration_view_tree |
Elaborations | stock.move | list | New |
res_config_settings_view |
res.config.settings | form | Inherits stock.res_config_settings_view_form | |
sale_elaboration_product_category_view_form_inherit_elaboration_id |
product.category.view.form.sale.elaboration | product.category | form | Inherits product.product_category_form_view |
sale_order_line_view_form_readonly |
sale.order.line | form | Inherits sale.sale_order_line_view_form_readonly | |
stock_report_delivery_has_serial_move_line |
stock_report_delivery_has_serial_move_line | ir.ui.view | qweb | Inherits stock.stock_report_delivery_has_serial_move_line |
view_move_line_tree_detailed |
stock.move.line | tree | Inherits stock.view_move_line_tree_detailed | |
view_move_search |
stock.move | search | Inherits stock.view_move_search | |
view_order_form |
Sale Elaboration | sale.order | form | Inherits sale.view_order_form |
view_picking_form |
stock.picking | form | Inherits stock.view_picking_form | |
view_stock_move_line_detailed_operation_tree |
stock.move.line | tree | Inherits stock.view_stock_move_line_detailed_operation_tree | |
view_stock_move_line_operation_tree |
stock.move.line | tree | Inherits stock.view_stock_move_line_operation_tree |
HTTP endpoints (0)
No HTTP endpoints found for this module.
Models touched (13)
New fields (1)
-
elaboration_profile_idMany2one → product.elaboration.profilecomodel_name='product.elaboration.profile'string='Elaboration Profile'
No public methods.
New fields (6)
-
activeBooleandefault=Truehelp='If unchecked, it will allow you to hide the product elaborations without removing it.' -
codeCharstring='Short Code' -
nameCharrequired=Truetranslate=True -
product_idMany2one → product.productcomodel_name='product.product'domain=[('type', '=', 'service'), ('is_elaboration', '=', True)]ondelete='restrict'required=Truestring='Product' -
profile_idsMany2many → product.elaboration.profilecolumn1='elaboration_id'column2='profile_id'comodel_name='product.elaboration.profile'relation='product_elaboration_profile_rel' -
route_idsMany2many → stock.routecomodel_name='stock.route'domain=[('sale_selectable', '=', True)]ondelete='restrict'string='Routes'
-
name_search(self, name, args=None, operator='ilike', limit=100)@api.modelGive preference to codes on name search, appending the rest of the results after.
New fields (3)
-
elaboration_idsMany2many → product.elaborationcomodel_name='product.elaboration'string='Elaborations' -
elaboration_noteChar -
is_elaborationBooleancompute='_compute_is_elaboration'readonly=Falsestore=True
-
onchange_elaboration_ids(self)@api.onchange('elaboration_ids')Use onchange method instead of compute because if any other data of any line force a recompute of all lines and the elaboration custom notes are reset.
New fields (4)
-
activeBooleandefault=True -
codeCharstring='Short Code' -
elaboration_idsMany2many → product.elaborationcolumn1='profile_id'column2='elaboration_id'comodel_name='product.elaboration'relation='product_elaboration_profile_rel'string='Elaborations' -
nameCharrequired=Truetranslate=True
No public methods.
New fields (1)
-
elaboration_profile_idMany2one → product.elaboration.profilecomodel_name='product.elaboration.profile'help='Keep this field empty to use the default value from the product category.'ondelete='restrict'
No public methods.
New fields (2)
-
elaboration_profile_idMany2one → product.elaboration.profilecomodel_name='product.elaboration.profile'compute='_compute_elaboration_profile_id'help='Keep this field empty to use the default value from the product category.'inverse='_inverse_elaboration_profile_id'store=True -
is_elaborationBoolean
-
create(self, vals_list)@api.model_create_multi
New fields (2)
-
group_elaboration_note_on_delivery_slipBooleanimplied_group='sale_elaboration.group_elaboration_note_on_delivery_slip' args: 'Display Elaboration notes on Delivery Slips' -
group_elaboration_note_on_picking_operationsBooleanimplied_group='sale_elaboration.group_elaboration_note_on_picking_operations' args: 'Display Elaboration notes on Picking Operations'
No public methods.
New fields (0)
No new fields.
Public methods (0)No public methods.
New fields (4)
-
date_orderDatetimerelated='order_id.date_order'string='Date' -
elaboration_price_unitFloatcompute='_compute_elaboration_price_unit'store=True args: 'Elab. Price' -
elaboration_profile_idMany2one → product.elaboration.profilecomodel_name='product.elaboration.profile'compute='_compute_elaboration_profile_id' -
route_idMany2one → stock.routecomodel_name='stock.route'compute='_compute_route_id'readonly=Falsestore=True
-
get_elaboration_stock_route(self)
New fields (4)
-
order_dateDatetimecompute='_compute_sale_related_data' -
sale_idMany2one → sale.ordercomodel_name='sale.order'compute='_compute_sale_related_data' -
salesman_idMany2one → res.userscomodel_name='res.users'compute='_compute_sale_related_data' -
sequence_codeCharcompute='_compute_sale_related_data'
-
write(self, vals)
New fields (2)
-
elaboration_idsMany2manyrelated='move_id.elaboration_ids' -
elaboration_noteCharrelated='move_id.elaboration_note'
No public methods.
New fields (0)
No new fields.
Public methods (0)No public methods.
New fields (0)
No new fields.
Public methods (0)No public methods.
Loading…
Loading…
Loading…
Loading…
Loading…
Loading…
Loading…
Loading…