| REPOSITORY | |
|---|---|
| REPOSITORY | OCA/sale-workflow |
| GIT | |
| GIT | https://github.com/OCA/sale-workflow.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/OCA/sale-workflow/tree/19.0/sale_product_set |
| VERSION | |
| VERSION | 1.0.0 |
| CATEGORY | |
| CATEGORY | Sales |
| LICENSE | |
| LICENSE | AGPL-3 |
| APPLICATION | |
| APPLICATION | No |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | Odoo Community Association (OCA), Anybox |
| MAINTAINERS | |
| MAINTAINERS | Odoo Community Association (OCA), Anybox |
| COMMITTERS | |
| COMMITTERS | Weblate, OCA-git-bot, oca-ci, Christopher Rogos |
| WEBSITE | |
| WEBSITE | https://github.com/OCA/sale-workflow |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 19:40:48 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
OCA/product-attribute: - product_set odoo/odoo: - sale - sales_team - base - base_setup - web - bus - web_tour - html_editor - account_payment - account - onboarding - product - uom - analytic - portal - http_routing - auth_signup - digest - resource - payment - utm - sale_management |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES | Not have |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION | A **product set** is a list of products which end customers aren't aware, this list is defined by sales manager. This module aims to load a product set in a sales order though a wizard. The product set is a list of products and quantities that gets inserted as separate sales order lines. After a *product set* is added to the sales order, each line can be updated or removed as any other sales order lines. |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
product_set_add_form_view |
sale.product.set.wizard.form.view | sale.product.set.wizard | form | New |
res_config_settings_inherit_view |
res.config.settings.inherit.view | res.config.settings | xpath | Inherits sale.res_config_settings_view_form |
view_order_stock_form |
sale.order.form.inherit | sale.order | xpath | Inherits sale.view_order_form |
view_product_set_form |
product.set.form | product.set | field | Inherits product_set.view_product_set_form |
view_product_set_line_tree |
product.set.line.list | product.set.line | field | Inherits product_set.view_product_set_line_tree |
discount
Float
default=0.0
digits='Discount'
string='Discount (%)'
prepare_sale_order_line_values(self, order, quantity, sequence=0)
archive_partner_product_sets
Boolean
config_parameter='sale_product_set.archive_partner_product_sets'
help='When a partner is archived or un-archived its product sets are archived or un-archived as well.'
string='Sync product sets active state with partner'
No public methods.
No new fields.
Public methods (1)write(self, vals)
order_id
Many2one → sale.order
default=<expr>
ondelete='cascade'
required=True
args: 'sale.order', 'Sale Order'
partner_id
Many2one
ondelete='cascade'
related='order_id.partner_id'
skip_existing_products
Boolean
default=False
help='Enable this to not add new lines for products already included in SO lines.'
add_set(self)
| REPOSITORY | |
|---|---|
| REPOSITORY | OCA/sale-workflow |
| GIT | |
| GIT | https://github.com/OCA/sale-workflow.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/OCA/sale-workflow/tree/18.0/sale_product_set |
| VERSION | |
| VERSION | 1.0.0 |
| CATEGORY | |
| CATEGORY | Sales |
| LICENSE | |
| LICENSE | AGPL-3 |
| APPLICATION | |
| APPLICATION | No |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | Odoo Community Association (OCA), Anybox |
| MAINTAINERS | |
| MAINTAINERS | Odoo Community Association (OCA), Anybox |
| COMMITTERS | |
| COMMITTERS | Weblate, OCA-git-bot, oca-ci, juancarlosonate-tecnativa |
| WEBSITE | |
| WEBSITE | https://github.com/OCA/sale-workflow |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 19:30:11 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
OCA/product-attribute: - product_set odoo/odoo: - sale - sales_team - base - base_setup - web - bus - web_tour - html_editor - account_payment - account - onboarding - product - uom - analytic - portal - web_editor - http_routing - auth_signup - digest - resource - payment - utm - sale_management |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES | Not have |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION | A **product set** is a list of products which end customers aren't aware, this list is defined by sales manager. This module aims to load a product set in a sales order though a wizard. The product set is a list of products and quantities that gets inserted as separate sales order lines. After a *product set* is added to the sales order, each line can be updated or removed as any other sales order lines. |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
product_set_add_form_view |
sale.product.set.wizard.form.view | sale.product.set.wizard | form | New |
res_config_settings_inherit_view |
res.config.settings.inherit.view | res.config.settings | xpath | Inherits sale.res_config_settings_view_form |
view_order_stock_form |
sale.order.form.inherit | sale.order | xpath | Inherits sale.view_order_form |
view_product_set_form |
product.set.form | product.set | field | Inherits product_set.view_product_set_form |
view_product_set_line_tree |
product.set.line.list | product.set.line | field | Inherits product_set.view_product_set_line_tree |
discount
Float
default=0.0
digits='Discount'
string='Discount (%)'
prepare_sale_order_line_values(self, order, quantity, max_sequence=0)
archive_partner_product_sets
Boolean
config_parameter='sale_product_set.archive_partner_product_sets'
help='When a partner is archived or un-archived its product sets are archived or un-archived as well.'
string='Sync product sets active state with partner'
No public methods.
No new fields.
Public methods (1)write(self, vals)
order_id
Many2one → sale.order
default=<expr>
ondelete='cascade'
required=True
args: 'sale.order', 'Sale Order'
partner_id
Many2one
ondelete='cascade'
related='order_id.partner_id'
skip_existing_products
Boolean
default=False
help='Enable this to not add new lines for products already included in SO lines.'
add_set(self)
prepare_sale_order_line_data(self, set_line, max_sequence=0)
| REPOSITORY | |
|---|---|
| REPOSITORY | OCA/sale-workflow |
| GIT | |
| GIT | https://github.com/OCA/sale-workflow.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/OCA/sale-workflow/tree/17.0/sale_product_set |
| VERSION | |
| VERSION | 1.0.0 |
| CATEGORY | |
| CATEGORY | Sale |
| LICENSE | |
| LICENSE | AGPL-3 |
| APPLICATION | |
| APPLICATION | No |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | Odoo Community Association (OCA), Anybox |
| MAINTAINERS | |
| MAINTAINERS | Odoo Community Association (OCA), Anybox |
| COMMITTERS | |
| COMMITTERS | Weblate, OCA-git-bot, oca-ci, Nils Coenen |
| WEBSITE | |
| WEBSITE | https://github.com/OCA/sale-workflow |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 19:20:05 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
OCA/product-attribute: - product_set odoo/odoo: - sale - sales_team - base - base_setup - web - bus - web_tour - account_payment - account - onboarding - product - uom - analytic - portal - web_editor - http_routing - auth_signup - digest - resource - payment - utm - sale_management |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES | Not have |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION | A **product set** is a list of products which end customers aren't aware, this list is defined by sales manager. This module aims to help salesman to quickly create several sale order lines at once in a quotation. After a *product set* is added to the sale order, each line can be updated or removed as any other sale order lines. This differs from packing products as you don't follow *product set* are not linked to sale order lines once they are added. |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
product_set_add_form_view |
sale.product.set.wizard.form.view | sale.product.set.wizard | form | New |
view_order_stock_form |
sale.order.form.inherit | sale.order | xpath | Inherits sale.view_order_form |
view_product_set_form |
product.set.form | product.set | field | Inherits product_set.view_product_set_form |
view_product_set_line_tree |
product.set.line.tree | product.set.line | field | Inherits product_set.view_product_set_line_tree |
discount
Float
default=0.0
digits='Discount'
string='Discount (%)'
prepare_sale_order_line_values(self, order, quantity, max_sequence=0)
order_id
Many2one → sale.order
default=<expr>
ondelete='cascade'
required=True
args: 'sale.order', 'Sale Order'
partner_id
Many2one
ondelete='cascade'
related='order_id.partner_id'
skip_existing_products
Boolean
default=False
help='Enable this to not add new lines for products already included in SO lines.'
add_set(self)
prepare_sale_order_line_data(self, set_line, max_sequence=0)
| REPOSITORY | |
|---|---|
| REPOSITORY | OCA/sale-workflow |
| GIT | |
| GIT | https://github.com/OCA/sale-workflow.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/OCA/sale-workflow/tree/16.0/sale_product_set |
| VERSION | |
| VERSION | 3.0.1 |
| CATEGORY | |
| CATEGORY | Sale |
| LICENSE | |
| LICENSE | AGPL-3 |
| APPLICATION | |
| APPLICATION | No |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | Odoo Community Association (OCA), Anybox |
| MAINTAINERS | |
| MAINTAINERS | Odoo Community Association (OCA), Anybox |
| COMMITTERS | |
| COMMITTERS | Weblate, OCA-git-bot, oca-ci, pilarvargas-tecnativa, Christopher Rogos, Will Keesler |
| WEBSITE | |
| WEBSITE | https://github.com/OCA/sale-workflow |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 00:53:45 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
OCA/product-attribute: - product_set odoo/odoo: - sale - sales_team - base - base_setup - web - bus - web_tour - account_payment - account - product - uom - analytic - portal - web_editor - http_routing - auth_signup - digest - resource - payment - utm - sale_management |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES | Not have |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION | |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
product_set_add_form_view |
sale.product.set.wizard.form.view | sale.product.set.wizard | form | New |
view_order_stock_form |
sale.order.form.inherit | sale.order | xpath | Inherits sale.view_order_form |
view_product_set_form |
product.set.form | product.set | field | Inherits product_set.view_product_set_form |
view_product_set_line_tree |
product.set.line.tree | product.set.line | field | Inherits product_set.view_product_set_line_tree |
discount
Float
default=0.0
digits='Discount'
string='Discount (%)'
prepare_sale_order_line_values(self, order, quantity, max_sequence=0)
order_id
Many2one → sale.order
default=<expr>
ondelete='cascade'
required=True
args: 'sale.order', 'Sale Order'
partner_id
Many2one
ondelete='cascade'
related='order_id.partner_id'
skip_existing_products
Boolean
default=False
help='Enable this to not add new lines for products already included in SO lines.'
add_set(self)
prepare_sale_order_line_data(self, set_line, max_sequence=0)
| REPOSITORY | |
|---|---|
| REPOSITORY | OCA/sale-workflow |
| GIT | |
| GIT | https://github.com/OCA/sale-workflow.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/OCA/sale-workflow/tree/15.0/sale_product_set |
| VERSION | |
| VERSION | 1.0.1 |
| CATEGORY | |
| CATEGORY | Sale |
| LICENSE | |
| LICENSE | AGPL-3 |
| APPLICATION | |
| APPLICATION | No |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | Odoo Community Association (OCA), Anybox |
| MAINTAINERS | |
| MAINTAINERS | Odoo Community Association (OCA), Anybox |
| COMMITTERS | |
| COMMITTERS | manu, Weblate, OCA-git-bot, oca-ci |
| WEBSITE | |
| WEBSITE | https://github.com/OCA/sale-workflow |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 00:46:34 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
OCA/server-tools: - onchange_helper odoo/odoo: - sale - sales_team - base - base_setup - web - bus - web_tour - payment - account - product - uom - analytic - portal - web_editor - http_routing - auth_signup - digest - resource - utm - sale_management |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES | Not have |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION | |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
product_set_add_form_view |
product.set.add.form.view | product.set.add | form | New |
view_order_stock_form |
sale.order.form.inherit | sale.order | xpath | Inherits sale.view_order_form |
view_product_set_form |
product.set.form | product.set | form | New |
view_product_set_line_search |
product.set.line.search | product.set.line | search | New |
view_product_set_line_tree |
product.set.line.tree | product.set.line | tree | New |
view_product_set_search |
product.set.search | product.set | search | New |
view_product_set_tree |
product.set.tree | product.set | tree | New |
active
Boolean
default=True
company_id
Many2one → res.company
default=<expr>
ondelete='cascade'
args: 'res.company', 'Company'
name
Char
help='Product set name'
required=True
partner_id
Many2one → res.partner
comodel_name='res.partner'
help="You can attache the set to a specific partner or no one. If you don't specify one, it's going to be available for all of them."
index=True
ondelete='cascade'
required=False
ref
Char
copy=False
help='Product set internal reference'
string='Internal Reference'
set_line_ids
One2many → product.set.line
copy=True
string='Products'
args: 'product.set.line', 'product_set_id'
name_get(self)
order_id
Many2one → sale.order
default=<expr>
ondelete='cascade'
required=True
args: 'sale.order', 'Sale Order'
partner_id
Many2one
ondelete='cascade'
related='order_id.partner_id'
product_set_id
Many2one → product.set
ondelete='cascade'
required=True
args: 'product.set', 'Product set'
product_set_line_ids
Many2many → product.set.line
compute='_compute_product_set_line_ids'
ondelete='cascade'
readonly=False
required=True
store=True
string='Product set lines'
args: 'product.set.line'
quantity
Float
default=1.0
digits='Product Unit of Measure'
required=True
skip_existing_products
Boolean
default=False
help='Enable this to not add new lines for products already included in SO lines.'
add_set(self)
prepare_sale_order_line_data(self, set_line, max_sequence=0)
active
Boolean
readonly=True
related='product_set_id.active'
store=True
string='Active'
discount
Float
default=0.0
digits='Discount'
string='Discount (%)'
product_id
Many2one → product.product
comodel_name='product.product'
domain=[('sale_ok', '=', True)]
required=True
string='Product'
product_set_id
Many2one → product.set
ondelete='cascade'
string='Set'
args: 'product.set'
quantity
Float
default=1.0
digits='Product Unit of Measure'
required=True
sequence
Integer
default=0
required=True
prepare_sale_order_line_values(self, order, quantity, max_sequence=0)
| REPOSITORY | |
|---|---|
| REPOSITORY | OCA/sale-workflow |
| GIT | |
| GIT | https://github.com/OCA/sale-workflow.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/OCA/sale-workflow/tree/14.0/sale_product_set |
| VERSION | |
| VERSION | 1.6.0 |
| CATEGORY | |
| CATEGORY | Sale |
| LICENSE | |
| LICENSE | AGPL-3 |
| APPLICATION | |
| APPLICATION | No |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | Odoo Community Association (OCA), Anybox |
| MAINTAINERS | |
| MAINTAINERS | Odoo Community Association (OCA), Anybox |
| COMMITTERS | |
| COMMITTERS | Pedro M. Baeza, Denis Roussel, OCA Transbot, oca-travis, Weblate, OCA-git-bot, Simone Orsi, Anna Janiszewska, oca-ci, Alessandro Uffreduzzi, Hai Lang, Tran Thanh Phuc, oca-git-bot, Mantux11 |
| WEBSITE | |
| WEBSITE | https://github.com/OCA/sale-workflow |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 00:40:58 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
OCA/server-tools: - onchange_helper odoo/odoo: - sale - sales_team - base - base_setup - web - bus - web_tour - payment - account - product - uom - analytic - portal - web_editor - http_routing - auth_signup - digest - resource - utm - sale_management |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES | Not have |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION | |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
product_set_add_form_view |
product.set.add.form.view | product.set.add | form | New |
res_config_settings_inherit_view |
res.config.settings.inherit.view | res.config.settings | xpath | Inherits sale.res_config_settings_view_form |
view_order_stock_form |
sale.order.form.inherit | sale.order | xpath | Inherits sale.view_order_form |
view_product_set_form |
product.set.form | product.set | form | New |
view_product_set_line_search |
product.set.line.search | product.set.line | search | New |
view_product_set_line_tree |
product.set.line.tree | product.set.line | tree | New |
view_product_set_search |
product.set.search | product.set | search | New |
view_product_set_tree |
product.set.tree | product.set | tree | New |
active
Boolean
default=True
string='Active'
company_id
Many2one → res.company
default=<expr>
ondelete='cascade'
args: 'res.company', 'Company'
name
Char
help='Product set name'
required=True
partner_id
Many2one → res.partner
comodel_name='res.partner'
help="You can attache the set to a specific partner or no one. If you don't specify one, it's going to be available for all of them."
index=True
ondelete='cascade'
required=False
ref
Char
copy=False
help='Product set internal reference'
string='Internal Reference'
set_line_ids
One2many → product.set.line
copy=True
string='Products'
args: 'product.set.line', 'product_set_id'
name_get(self)
order_id
Many2one → sale.order
default=<expr>
ondelete='cascade'
required=True
args: 'sale.order', 'Sale Order'
partner_id
Many2one
ondelete='cascade'
related='order_id.partner_id'
product_set_id
Many2one → product.set
ondelete='cascade'
required=True
args: 'product.set', 'Product set'
product_set_line_ids
Many2many → product.set.line
compute='_compute_product_set_line_ids'
ondelete='cascade'
readonly=False
required=True
store=True
string='Product set lines'
args: 'product.set.line'
quantity
Float
default=1.0
digits='Product Unit of Measure'
required=True
skip_existing_products
Boolean
default=False
help='Enable this to not add new lines for products already included in SO lines.'
add_set(self)
prepare_sale_order_line_data(self, set_line, max_sequence=0)
active
Boolean
readonly=True
related='product_set_id.active'
store=True
string='Active'
discount
Float
default=0.0
digits='Discount'
string='Discount (%)'
product_id
Many2one → product.product
comodel_name='product.product'
domain=[('sale_ok', '=', True)]
required=True
string='Product'
product_set_id
Many2one → product.set
ondelete='cascade'
string='Set'
args: 'product.set'
quantity
Float
default=1.0
digits='Product Unit of Measure'
required=True
string='Quantity'
sequence
Integer
default=0
required=True
string='Sequence'
prepare_sale_order_line_values(self, order, quantity, max_sequence=0)
archive_partner_product_sets
Boolean
config_parameter='sale_product_set.archive_partner_product_sets'
help='When a partner is archived or un-archived its product sets are archived or un-archived as well.'
string='Sync product sets active state with partner'
No public methods.
No new fields.
Public methods (1)write(self, vals)
| REPOSITORY | |
|---|---|
| REPOSITORY | OCA/sale-workflow |
| GIT | |
| GIT | https://github.com/OCA/sale-workflow.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/OCA/sale-workflow/tree/13.0/sale_product_set |
| VERSION | |
| VERSION | 1.4.1 |
| CATEGORY | |
| CATEGORY | Sale |
| LICENSE | |
| LICENSE | AGPL-3 |
| APPLICATION | |
| APPLICATION | No |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | Odoo Community Association (OCA), Anybox |
| MAINTAINERS | |
| MAINTAINERS | Odoo Community Association (OCA), Anybox |
| COMMITTERS | |
| COMMITTERS | Pedro M. Baeza, Denis Roussel, Akim Juillerat, OCA Transbot, Víctor Martínez, Thierry Ducrest, oca-travis, Weblate, OCA-git-bot, Simone Orsi, Adrià Gil Sorribes, Carlos Roca |
| WEBSITE | |
| WEBSITE | https://github.com/OCA/sale-workflow |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 00:34:13 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
OCA/server-tools: - onchange_helper odoo/odoo: - sale - sales_team - base - base_setup - web - bus - web_tour - payment - account - product - uom - analytic - portal - web_editor - http_routing - auth_signup - digest - resource - utm |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES | Not have |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION | |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
product_set_add_form_view |
product.set.add.form.view | product.set.add | form | New |
view_order_stock_form |
sale.order.form.inherit | sale.order | xpath | Inherits sale.view_order_form |
view_product_set_form |
product.set.form | product.set | form | New |
view_product_set_line_search |
product.set.line.search | product.set.line | search | New |
view_product_set_line_tree |
product.set.line.tree | product.set.line | tree | New |
view_product_set_search |
product.set.search | product.set | search | New |
view_product_set_tree |
product.set.tree | product.set | tree | New |
active
Boolean
default=True
string='Active'
company_id
Many2one → res.company
default=<expr>
ondelete='cascade'
args: 'res.company', 'Company'
name
Char
help='Product set name'
required=True
partner_id
Many2one → res.partner
comodel_name='res.partner'
help="You can attache the set to a specific partner or no one. If you don't specify one, it's going to be available for all of them."
index=True
ondelete='cascade'
required=False
ref
Char
copy=False
help='Product set internal reference'
string='Internal Reference'
set_line_ids
One2many → product.set.line
copy=True
string='Products'
args: 'product.set.line', 'product_set_id'
name_get(self)
order_id
Many2one → sale.order
default=<expr>
ondelete='cascade'
required=True
args: 'sale.order', 'Sale Order'
partner_id
Many2one
ondelete='cascade'
related='order_id.partner_id'
product_set_id
Many2one → product.set
ondelete='cascade'
required=True
args: 'product.set', 'Product set'
product_set_line_ids
Many2many → product.set.line
compute='_compute_product_set_line_ids'
ondelete='cascade'
readonly=False
required=True
args: 'product.set.line', 'Product set lines'
quantity
Float
default=1.0
digits='Product Unit of Measure'
required=True
skip_existing_products
Boolean
default=False
help='Enable this to not add new lines for products already included in SO lines.'
add_set(self)
prepare_sale_order_line_data(self, set_line, max_sequence=0)
active
Boolean
readonly=True
related='product_set_id.active'
store=True
string='Active'
discount
Float
default=0.0
digits='Discount'
string='Discount (%)'
product_id
Many2one → product.product
comodel_name='product.product'
domain=[('sale_ok', '=', True)]
required=True
string='Product'
product_set_id
Many2one → product.set
ondelete='cascade'
string='Set'
args: 'product.set'
quantity
Float
default=1.0
digits='Product Unit of Measure'
required=True
string='Quantity'
sequence
Integer
default=0
required=True
string='Sequence'
prepare_sale_order_line_values(self, order, quantity, max_sequence=0)
| REPOSITORY | |
|---|---|
| REPOSITORY | OCA/sale-workflow |
| GIT | |
| GIT | https://github.com/OCA/sale-workflow.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/OCA/sale-workflow/tree/12.0/sale_product_set |
| VERSION | |
| VERSION | 1.3.3 |
| CATEGORY | |
| CATEGORY | Sale |
| LICENSE | |
| LICENSE | AGPL-3 |
| APPLICATION | |
| APPLICATION | No |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | Odoo Community Association (OCA), Anybox |
| MAINTAINERS | |
| MAINTAINERS | Odoo Community Association (OCA), Anybox |
| COMMITTERS | |
| COMMITTERS | GitHub, Denis Roussel, sbejaoui, OCA Transbot, sergio-teruel, oca-travis, Weblate, OCA-git-bot, Simone Orsi, Carlos Roca |
| WEBSITE | |
| WEBSITE | https://github.com/OCA/sale-workflow |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 00:29:17 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
odoo/odoo: - sale - sales_team - base - base_setup - web - bus - web_tour - payment - account - product - decimal_precision - uom - analytic - portal - http_routing - digest |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES | Not have |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION | |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
product_set_add_form_view |
product.set.add.form.view | product.set.add | form | New |
view_order_stock_form |
sale.order.form.inherit | sale.order | xpath | Inherits sale.view_order_form |
view_product_set_form |
product.set.form | product.set | form | New |
view_product_set_search |
product.set.search | product.set | search | New |
view_product_set_tree |
product.set.tree | product.set | tree | New |
active
Boolean
default=True
string='Active'
company_id
Many2one → res.company
default=<expr>
ondelete='cascade'
args: 'res.company', 'Company'
name
Char
help='Product set name'
required=True
partner_id
Many2one → res.partner
comodel_name='res.partner'
help="You can attache the set to a specific partner or no one. If you don't specify one, it's going to be available for all of them."
index=True
ondelete='cascade'
required=False
ref
Char
copy=False
help='Product set internal reference'
string='Internal Reference'
set_line_ids
One2many → product.set.line
string='Products'
args: 'product.set.line', 'product_set_id'
name_get(self)
order_id
Many2one → sale.order
default=<expr>
ondelete='cascade'
required=True
args: 'sale.order', 'Sale Order'
partner_id
Many2one
ondelete='cascade'
related='order_id.partner_id'
product_set_id
Many2one → product.set
ondelete='cascade'
required=True
args: 'product.set', 'Product set'
quantity
Float
default=1
digits=dp.get_precision('Product Unit of Measure')
required=True
skip_existing_products
Boolean
default=False
help='Enable this to not add new lines for products already included in SO lines.'
add_set(self)
prepare_sale_order_line_data(self, set_line, max_sequence=0)
active
Boolean
readonly=True
related='product_set_id.active'
store=True
string='Active'
discount
Float
default=0.0
digits=dp.get_precision('Discount')
string='Discount (%)'
product_id
Many2one → product.product
comodel_name='product.product'
domain=[('sale_ok', '=', True)]
required=True
string='Product'
product_set_id
Many2one → product.set
ondelete='cascade'
string='Set'
args: 'product.set'
quantity
Float
default=1
digits=dp.get_precision('Product Unit of Measure')
required=True
string='Quantity'
sequence
Integer
default=0
required=True
string='Sequence'
No public methods.
| REPOSITORY | |
|---|---|
| REPOSITORY | OCA/sale-workflow |
| GIT | |
| GIT | https://github.com/OCA/sale-workflow.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/OCA/sale-workflow/tree/11.0/sale_product_set |
| VERSION | |
| VERSION | 1.1.0 |
| CATEGORY | |
| CATEGORY | Sale |
| LICENSE | |
| LICENSE | AGPL-3 |
| APPLICATION | |
| APPLICATION | No |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | Odoo Community Association (OCA), Anybox |
| MAINTAINERS | |
| MAINTAINERS | Odoo Community Association (OCA), Anybox |
| COMMITTERS | |
| COMMITTERS | Pedro M. Baeza, Stéphane Bidoul (ACSONE), OCA Transbot, oca-travis, Weblate, OCA-git-bot, Simone Orsi |
| WEBSITE | |
| WEBSITE | https://github.com/OCA/sale-workflow |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 00:23:57 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
odoo/odoo: - sale - sales_team - base - base_setup - web - bus - web_tour - account - product - decimal_precision - analytic - web_planner - portal - http_routing |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES | Not have |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION | |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
product_set_add_form_view |
product.set.add.form.view | product.set.add | form | New |
view_order_stock_form |
sale.order.form.inherit | sale.order | xpath | Inherits sale.view_order_form |
view_product_set_form |
product.set.form | product.set | form | New |
view_product_set_search |
product.set.search | product.set | search | New |
view_product_set_tree |
product.set.tree | product.set | tree | New |
name
Char
help='Product set name'
required=True
string='Name'
set_line_ids
One2many → product.set.line
string='Products'
args: 'product.set.line', 'product_set_id'
No public methods.
product_set_id
Many2one → product.set
required=True
args: 'product.set', 'Product set'
quantity
Float
default=1
digits=dp.get_precision('Product Unit of Measure')
required=True
string='Quantity'
add_set(self)
prepare_sale_order_line_data(self, sale_order_id, set, set_line, max_sequence=0)
discount
Float
default=0.0
digits=dp.get_precision('Discount')
string='Discount (%)'
product_id
Many2one → product.product
comodel_name='product.product'
domain=[('sale_ok', '=', True)]
required=True
string='Product'
product_set_id
Many2one → product.set
ondelete='cascade'
string='Set'
args: 'product.set'
quantity
Float
default=1
digits=dp.get_precision('Product Unit of Measure')
required=True
string='Quantity'
sequence
Integer
default=0
required=True
string='Sequence'
No public methods.
| REPOSITORY | |
|---|---|
| REPOSITORY | OCA/sale-workflow |
| GIT | |
| GIT | https://github.com/OCA/sale-workflow.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/OCA/sale-workflow/tree/10.0/sale_product_set |
| VERSION | |
| VERSION | 1.0.2 |
| CATEGORY | |
| CATEGORY | Sale |
| LICENSE | |
| LICENSE | AGPL-3 |
| APPLICATION | |
| APPLICATION | No |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | Odoo Community Association (OCA), Anybox |
| MAINTAINERS | |
| MAINTAINERS | Odoo Community Association (OCA), Anybox |
| COMMITTERS | |
| COMMITTERS | Pedro M. Baeza, Denis Roussel, Stéphane Bidoul (ACSONE), OCA Transbot, Denis Leemann, oca-travis, Weblate, Rafael Blasco |
| WEBSITE | |
| WEBSITE | https://github.com/OCA/sale-workflow |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 00:19:56 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
odoo/odoo: - sale - sales_team - base - base_setup - web_kanban - web - bus - web_tour - account - product - decimal_precision - report - analytic - web_planner - procurement |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES | Not have |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION | |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
product_set_add_form_view |
product.set.add.form.view | product.set.add | form | New |
view_order_stock_form |
sale.order.form.inherit | sale.order | xpath | Inherits sale.view_order_form |
view_product_set_form |
product.set.form | product.set | form | New |
view_product_set_search |
product.set.search | product.set | search | New |
view_product_set_tree |
product.set.tree | product.set | tree | New |
image
Binary
attachment=True
help='Select an image to display for the product set'
string='Image'
name
Char
help='Product set name'
required=True
string='Name'
set_line_ids
One2many → product.set.line
string='Products'
args: 'product.set.line', 'product_set_id'
No public methods.
product_set_id
Many2one → product.set
required=True
args: 'product.set', 'Product set'
quantity
Float
default=1
digits=dp.get_precision('Product Unit of Measure')
required=True
string='Quantity'
add_set(self)
prepare_sale_order_line_data(self, sale_order_id, set, set_line, max_sequence=0)
product_id
Many2one → product.product
domain=[('sale_ok', '=', True)]
required=True
string='Product'
args: 'product.product'
product_set_id
Many2one → product.set
ondelete='cascade'
string='Set'
args: 'product.set'
quantity
Float
default=1
digits=dp.get_precision('Product Unit of Measure')
required=True
string='Quantity'
sequence
Integer
default=0
required=True
string='Sequence'
No public methods.
| REPOSITORY | |
|---|---|
| REPOSITORY | OCA/sale-workflow |
| GIT | |
| GIT | https://github.com/OCA/sale-workflow.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/OCA/sale-workflow/tree/9.0/sale_product_set |
| VERSION | |
| VERSION | 1.0.1 |
| CATEGORY | |
| CATEGORY | Sales |
| LICENSE | |
| LICENSE | AGPL-3 |
| APPLICATION | |
| APPLICATION | No |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | Odoo Community Association (OCA), Anybox |
| MAINTAINERS | |
| MAINTAINERS | Odoo Community Association (OCA), Anybox |
| COMMITTERS | |
| COMMITTERS | Pedro M. Baeza, mreficent, Stéphane Bidoul (ACSONE), OCA Transbot, oca-travis, Weblate, Jonathan Nemry (ACSONE) |
| WEBSITE | |
| WEBSITE | https://odoo-community.org/ |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 00:15:20 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
odoo/odoo: - sale - sales_team - base - base_setup - web_kanban - web - bus - account - product - decimal_precision - report - analytic - web_tip - web_planner - procurement |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES | Not have |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION | |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
product_set_add_form_view |
product.set.add.form.view | product.set.add | form | New |
view_order_stock_form |
sale.order.form.inherit | sale.order | xpath | Inherits sale.view_order_form |
view_product_set_form |
product.set.form | product.set | form | New |
view_product_set_search |
product.set.search | product.set | search | New |
view_product_set_tree |
product.set.tree | product.set | tree | New |
name
Char
help='Product set name'
required=True
set_line_ids
One2many → product.set.line
comodel_name='product.set.line'
inverse_name='product_set_id'
string='Products'
No public methods.
product_set_id
Many2one → product.set
ondelete='cascade'
required=True
string='Product set'
args: 'product.set'
quantity
Float
default=1
digits=dp.get_precision('Product Unit of Measure')
required=True
add_set(self)
prepare_sale_order_line_data(self, sale_order_id, set, set_line, max_sequence=0)
product_id
Many2one → product.product
domain=[('sale_ok', '=', True)]
required=True
string='Product'
args: 'product.product'
product_set_id
Many2one → product.set
copy=False
index=True
ondelete='cascade'
readonly=True
string='Set'
args: 'product.set'
quantity
Float
default=1
digits=dp.get_precision('Product Unit of Measure')
required=True
sequence
Integer
default=0
required=True
No public methods.
| REPOSITORY | |
|---|---|
| REPOSITORY | OCA/sale-workflow |
| GIT | |
| GIT | https://github.com/OCA/sale-workflow.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/OCA/sale-workflow/tree/8.0/sale_product_set |
| VERSION | |
| VERSION | 1.0.0 |
| CATEGORY | |
| CATEGORY | Sale |
| LICENSE | |
| LICENSE | LGPL-3 |
| APPLICATION | |
| APPLICATION | No |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | Odoo Community Association (OCA), Anybox |
| MAINTAINERS | |
| MAINTAINERS | Odoo Community Association (OCA), Anybox |
| COMMITTERS | |
| COMMITTERS | Stéphane Bidoul, Pedro M. Baeza, Stéphane Bidoul (ACSONE), Pierre Verkest, OCA Transbot, oca-travis, Weblate, Matjaž Mozetič |
| WEBSITE | |
| WEBSITE | http://anybox.fr |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 00:11:22 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
odoo/odoo: - sale - sales_team - base - base_setup - web_kanban - web - web_kanban_sparkline - account_voucher - account - product - decimal_precision - report - analytic - board - edi - email_template - procurement |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES | Not have |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION | |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
product_set_add_form_view |
product.set.add.form.view | product.set.add | form | New |
view_order_stock_form |
sale.order.form.inherit | sale.order | xpath | Inherits sale.view_order_form |
view_product_set_form |
product.set.form | product.set | form | New |
view_product_set_search |
product.set.search | product.set | search | New |
view_product_set_tree |
product.set.tree | product.set | tree | New |
name
Char
help='Product set name'
required=True
args: 'Name'
set_line_ids
One2many → product.set.line
copy=True
args: 'product.set.line', 'product_set_id', 'Products'
copy(self, default=None)
product_set_id
Many2one → product.set
required=True
args: 'product.set', _('Product set')
quantity
Float
default=1
digits=dp.get_precision('Product Unit of Measure')
required=True
string=_('Quantity')
add_set(self)
prepare_sale_order_line_data(self, sale_order_id, set, set_line, max_sequence=0)
product_id
Many2one → product.product
domain=[('sale_ok', '=', True)]
required=True
string='Product'
args: 'product.product'
product_set_id
Many2one → product.set
ondelete='cascade'
args: 'product.set', 'Set'
quantity
Float
default=1
digits=dp.get_precision('Product Unit of Measure')
required=True
string='Quantity'
sequence
Integer
default=0
required=True
string='Sequence'
No public methods.