Sale - Product variants

sale_variant_configurator
REPOSITORY
REPOSITORYOCA/product-variant
GIT
GIThttps://github.com/OCA/product-variant.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/product-variant/tree/19.0/sale_variant_configurator
VERSION
VERSION
CATEGORY
CATEGORYSales Management
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSTecnativa, Odoo Community Association (OCA), AvanzOSC, OdooMRP team
MAINTAINERS
MAINTAINERSTecnativa, Odoo Community Association (OCA), AvanzOSC, OdooMRP team
COMMITTERS
COMMITTERSOCA-git-bot, oca-ci, Andrii9090-tecnativa
WEBSITE
WEBSITEhttps://github.com/OCA/product-variant
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 19:40:48
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/product-variant:
    - product_variant_configurator
odoo/odoo:
    - sale
    - sales_team
    - base
    - mail
    - base_setup
    - web
    - bus
    - web_tour
    - html_editor
    - account_payment
    - account
    - onboarding
    - product
    - uom
    - analytic
    - portal
    - http_routing
    - auth_signup
    - digest
    - resource
    - payment
    - utm
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
This module allows you to create the product variant when a sale order 
is confirmed. It adds to the sale line a product configurator, 
so that selecting a product and its attributes can serve for creating/selecting the product variant.

Code Analysis

Views touched (3)
XML IDNameModelTypeStatus
view_order_form sale.order xpath Inherits sale.view_order_form
view_order_line_tree sale.order.line field Inherits sale.view_order_line_tree
view_sales_order_line_filter sale.order.line field Inherits sale.view_sales_order_line_filter
Models touched (2)

New fields (0)

No new fields.

Public methods (1)
  • action_confirm(self)
    Create possible product variants not yet created.

New fields (1)
  • product_tmpl_id Many2one
    readonly=False related=False store=True string='Product Template (no related)'
Public methods (1)
  • create(self, vals_list)
    @api.model_create_multi
    Create product if not exist when the sales order is already confirmed and a line is added.
REPOSITORY
REPOSITORYOCA/product-variant
GIT
GIThttps://github.com/OCA/product-variant.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/product-variant/tree/18.0/sale_variant_configurator
VERSION
VERSION 1.0.4
CATEGORY
CATEGORYSales Management
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSTecnativa, Odoo Community Association (OCA), AvanzOSC, OdooMRP team
MAINTAINERS
MAINTAINERSTecnativa, Odoo Community Association (OCA), AvanzOSC, OdooMRP team
COMMITTERS
COMMITTERSVíctor Martínez, Weblate, OCA-git-bot, oca-ci, Andrii9090-tecnativa, Bhavesh Heliconia
WEBSITE
WEBSITEhttps://github.com/OCA/product-variant
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-05 23:09:24
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/product-variant:
    - product_variant_configurator
odoo/odoo:
    - sale
    - sales_team
    - base
    - mail
    - 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
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (3)
XML IDNameModelTypeStatus
view_order_form sale.order xpath Inherits sale.view_order_form
view_order_line_tree sale.order.line field Inherits sale.view_order_line_tree
view_sales_order_line_filter sale.order.line field Inherits sale.view_sales_order_line_filter
Models touched (2)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (2)
  • product_id Many2one
    required=False
  • product_tmpl_id Many2one
    readonly=False related=False store=True string='Product Template (no related)'
Public methods (1)
  • create(self, vals_list)
    @api.model_create_multi
    Create product if not exist when the sales order is already confirmed and a line is added.
REPOSITORY
REPOSITORYOCA/product-variant
GIT
GIThttps://github.com/OCA/product-variant.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/product-variant/tree/16.0/sale_variant_configurator
VERSION
VERSION 1.0.4
CATEGORY
CATEGORYSales Management
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSTecnativa, Odoo Community Association (OCA), AvanzOSC, OdooMRP team
MAINTAINERS
MAINTAINERSTecnativa, Odoo Community Association (OCA), AvanzOSC, OdooMRP team
COMMITTERS
COMMITTERSVíctor Martínez, Weblate, OCA-git-bot, oca-ci, Carolina Fernandez
WEBSITE
WEBSITEhttps://github.com/OCA/product-variant
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:53:48
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/product-variant:
    - product_variant_configurator
odoo/odoo:
    - sale
    - sales_team
    - base
    - mail
    - base_setup
    - web
    - bus
    - web_tour
    - account_payment
    - account
    - product
    - uom
    - analytic
    - portal
    - web_editor
    - http_routing
    - auth_signup
    - digest
    - resource
    - payment
    - utm
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (3)
XML IDNameModelTypeStatus
view_order_form sale.order xpath Inherits sale.view_order_form
view_order_line_tree sale.order.line field Inherits sale.view_order_line_tree
view_sales_order_line_filter sale.order.line field Inherits sale.view_sales_order_line_filter
Models touched (2)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (3)
  • product_id Many2one
    required=False
  • product_tmpl_id Many2one
    readonly=False related=False store=True string='Product Template (no related)'
  • product_uom_category_id Many2one → uom.category
    comodel_name='uom.category' compute='_compute_product_uom_category_id' related=False
Public methods (1)
  • create(self, vals_list)
    @api.model_create_multi
    Create product if not exist when the sales order is already confirmed and a line is added.
REPOSITORY
REPOSITORYOCA/product-variant
GIT
GIThttps://github.com/OCA/product-variant.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/product-variant/tree/13.0/sale_variant_configurator
VERSION
VERSION 1.0.1
CATEGORY
CATEGORYSales Management
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSTecnativa, Odoo Community Association (OCA), AvanzOSC, OdooMRP team
MAINTAINERS
MAINTAINERSTecnativa, Odoo Community Association (OCA), AvanzOSC, OdooMRP team
COMMITTERS
COMMITTERSPedro M. Baeza, david, OCA Transbot, oca-travis, Weblate
WEBSITE
WEBSITEhttps://github.com/OCA/product-variant
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:34:14
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/product-variant:
    - product_variant_configurator
odoo/odoo:
    - sale
    - sales_team
    - base
    - mail
    - 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

Code Analysis

Views touched (3)
XML IDNameModelTypeStatus
view_order_form sale.order xpath Inherits sale.view_order_form
view_order_line_tree sale.order.line field Inherits sale.view_order_line_tree
view_sales_order_line_filter sale.order.line field Inherits sale.view_sales_order_line_filter
Models touched (2)

New fields (0)

No new fields.

Public methods (1)
  • action_confirm(self)
    Create possible product variants not yet created.

New fields (2)
  • product_id Many2one
    required=False
  • product_tmpl_id Many2one
    readonly=False related=False store=True string='Product Template (no related)'
Public methods (3)
  • create(self, vals)
    @api.model
    Create product if not exist when the sales order is already confirmed and a line is added.
  • product_id_change(self)
    @api.onchange('product_id')
    Call again the configurator onchange after this main onchange for making sure the SO line description is correct. It also puts the proper lang in context for getting the product and attributes in the customer language.
  • product_uom_change(self)
    @api.onchange('product_uom', 'product_uom_qty')
    Update price for having into account changes due to qty
REPOSITORY
REPOSITORYOCA/product-variant
GIT
GIThttps://github.com/OCA/product-variant.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/product-variant/tree/11.0/sale_variant_configurator
VERSION
VERSION 1.2.0
CATEGORY
CATEGORYSales Management
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSTecnativa, Odoo Community Association (OCA), AvanzOSC, OdooMRP team
MAINTAINERS
MAINTAINERSTecnativa, Odoo Community Association (OCA), AvanzOSC, OdooMRP team
COMMITTERS
COMMITTERSAlexandre Fayolle, Pedro M. Baeza, GitHub, cubells, OCA Transbot, oca-travis, Weblate, OCA-git-bot, José L. S. A
WEBSITE
WEBSITEhttps://github.com/OCA/product-variant
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:23:58
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/product-variant:
    - product_variant_configurator
odoo/odoo:
    - sale
    - sales_team
    - base
    - mail
    - 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

Code Analysis

Views touched (3)
XML IDNameModelTypeStatus
view_order_form sale.order xpath Inherits sale.view_order_form
view_order_line_tree sale.order.line field Inherits sale.view_order_line_tree
view_sales_order_line_filter sale.order.line field Inherits sale.view_sales_order_line_filter
Models touched (2)

New fields (0)

No new fields.

Public methods (1)
  • action_confirm(self)
    @api.multi
    Create possible product variants not yet created.

New fields (3)
  • partner_id Many2one → res.partner
    comodel_name='res.partner' readonly=True related='order_id.partner_id'
  • product_id Many2one
    required=False
  • product_tmpl_id Many2one
    readonly=False related=False store=True
Public methods (3)
  • create(self, vals)
    @api.model
    Create product if not exist when the sales order is already confirmed and a line is added.
  • product_id_change(self)
    @api.onchange('product_id')
    Call again the configurator onchange after this main onchange for making sure the SO line description is correct.
  • product_uom_change(self)
    @api.onchange('product_uom', 'product_uom_qty')
    Update price for having into account changes due to qty
REPOSITORY
REPOSITORYOCA/product-variant
GIT
GIThttps://github.com/OCA/product-variant.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/product-variant/tree/10.0/sale_variant_configurator
VERSION
VERSION 2.1.1
CATEGORY
CATEGORYSales Management
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSTecnativa, Odoo Community Association (OCA), AvanzOSC, OdooMRP team
MAINTAINERS
MAINTAINERSTecnativa, Odoo Community Association (OCA), AvanzOSC, OdooMRP team
COMMITTERS
COMMITTERSPedro M. Baeza, GitHub, cubells, OCA Transbot, oca-travis, Weblate, OCA-git-bot, Isaac Gallart Bochons
WEBSITE
WEBSITEhttp://www.odoomrp.com
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:19:57
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/product-variant:
    - product_variant_configurator
odoo/odoo:
    - sale
    - sales_team
    - base
    - mail
    - 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

Code Analysis

Views touched (3)
XML IDNameModelTypeStatus
view_order_form sale.order xpath Inherits sale.view_order_form
view_order_line_tree sale.order.line field Inherits sale.view_order_line_tree
view_sales_order_line_filter sale.order.line field Inherits sale.view_sales_order_line_filter
Models touched (2)

New fields (0)

No new fields.

Public methods (2)
  • action_confirm(self)
    @api.multi
    Create possible product variants not yet created.
  • fields_view_get(self, view_id=None, view_type='form', toolbar=False, submenu=False)
    @api.model
    Avoid to have 2 times the field product_tmpl_id, as modules like sale_stock adds this field as invisible, so we can't trust the order of them. We also override the modifiers to avoid a readonly field.

New fields (3)
  • partner_id Many2one → res.partner
    comodel_name='res.partner' readonly=True related='order_id.partner_id'
  • product_id Many2one
    required=False
  • product_tmpl_id Many2one
    readonly=False related=False store=True
Public methods (3)
  • create(self, vals)
    @api.model
    Create product if not exist when the sales order is already confirmed and a line is added.
  • product_id_change(self)
    @api.onchange('product_id')
    Call again the configurator onchange after this main onchange for making sure the SO line description is correct.
  • product_uom_change(self)
    @api.onchange('product_uom', 'product_uom_qty')
    Update price for having into account changes due to qty
STATUS
STATUSOpen migration PR - not merged yet for this version
REPOSITORY
REPOSITORYOCA/product-variant
PULL REQUEST
PULL REQUEST[17.0][MIG] sale_variant_configurator: Migration to 17.0 (#381)