Sale Order Type

sale_order_type
REPOSITORY
REPOSITORYOCA/sale-workflow
GIT
GIThttps://github.com/OCA/sale-workflow.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/sale-workflow/tree/19.0/sale_order_type
VERSION
VERSION 1.6.0
CATEGORY
CATEGORYSales Management
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSTecnativa, Odoo Community Association (OCA), AvanzOSC, Agile Business Group, Grupo Vermon, Niboo
MAINTAINERS
MAINTAINERSTecnativa, Odoo Community Association (OCA), AvanzOSC, Agile Business Group, Grupo Vermon, Niboo
COMMITTERS
COMMITTERSJordiMForgeFlow, Weblate, OCA-git-bot, oca-ci, Maksym Yankin, r.perez, Franco Leyes
WEBSITE
WEBSITEhttps://github.com/OCA/sale-workflow
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 19:40:48
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - sale_stock
    - 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
    - stock_account
    - stock
    - barcodes_gs1_nomenclature
    - barcodes
    - sale_management
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
This module adds a typology for the sales orders. In each different
type, you can define, invoicing and refunding journal, a warehouse, a
stock route, a sequence, the shipping policy, the invoicing policy, a
payment term, a pricelist and an incoterm.

You can see sale types as lines of business.

You are able to select a sales order type by partner so that when you
add a partner to a sales order it will get the related info to it.

When no partner or context default applies, the first available sale
order type by sequence is used as the default.

Additionally, it adds a warning message to notify users when there is a mismatch between the partner's default pricelist
and the effective pricelist set by the sales order type. This ensures clarity when creating sales orders, as the
effective pricelist (determined by the sales order type) will take precedence over the partner's default pricelist.
The warning is only visible for companies without a parent and when there is a mismatch between the two pricelists.

![Pricelist Conflict Warning Note](../static/description/pricelist_conflict_warning_note.png)

Code Analysis

Views touched (13)
XML IDNameModelTypeStatus
res_config_settings_view_form res.config.settings.view.form res.config.settings setting Inherits sale.res_config_settings_view_form
res_partner_sale_type_form_view res.partner.sale_type.form res.partner group Inherits base.view_partner_form
sot_invoice_form account.move.form.sot account.move label Inherits account.view_move_form
sot_invoice_list account.invoice.list.sot account.move field Inherits account.view_invoice_tree
sot_invoice_search account.invoice.search.sot account.move field Inherits account.view_account_invoice_filter
sot_sale_order_type_form_view sale.order.type.form.view sale.order.type form New
sot_sale_order_type_search_view sale.order.type.search.view sale.order.type search New
sot_sale_order_type_tree_view sale.order.type.list.view sale.order.type list New
sot_view_order_form sale.order.form sale.order field Inherits sale.view_order_form
sot_view_order_list sale.order.list.sot sale.order field Inherits sale.view_order_tree
view_account_invoice_report_search account.invoice.report filter Inherits account.view_account_invoice_report_search
view_order_product_search sale.report filter Inherits sale.view_order_product_search
view_sales_order_filter sale.order field Inherits sale.view_sales_order_filter
Models touched (11)

New fields (1)
  • sale_type_id Many2one → sale.order.type
    comodel_name='sale.order.type' string='Sale Order Type'
Public methods (0)

No public methods.

New fields (1)
  • sale_type_id Many2one → sale.order.type
    comodel_name='sale.order.type' compute='_compute_sale_type_id' copy=True ondelete='restrict' precompute=True readonly=False store=True string='Sale Type'
Public methods (0)

No public methods.

New fields (1)
  • sale_order_type_required Boolean
    default=True help='If checked, the sale orders will require a type.'
Public methods (0)

No public methods.

New fields (1)
  • sale_order_type_required Boolean
    readonly=False related='company_id.sale_order_type_required'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (2)
  • effective_pricelist_id Many2one → product.pricelist
    comodel_name='product.pricelist' related='sale_type.pricelist_id' string='Sale Effective Pricelist'
  • sale_type Many2one → sale.order.type
    comodel_name='sale.order.type' company_dependent=True copy=True string='Sale Order Type'
Public methods (1)
  • copy_data(self, default=None)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (4)
  • incoterm Many2one
    compute='_compute_incoterm' readonly=False store=True
  • order_type_required Boolean
    related='company_id.sale_order_type_required'
  • picking_policy Selection
    compute='_compute_picking_policy' readonly=False store=True
  • type_id Many2one → sale.order.type
    check_company=True comodel_name='sale.order.type' compute='_compute_sale_type_id' copy=True ondelete='restrict' precompute=True readonly=False store=True string='Type'
Public methods (2)
  • create(self, vals_list)
    @api.model_create_multi
  • write(self, vals)
    A sale type could have a different order sequence, so we could need to change it accordingly

New fields (1)
  • route_ids Many2many
    compute='_compute_route_ids' precompute=True readonly=False store=True
Public methods (0)

No public methods.

New fields (16)
  • active Boolean
    default=True
  • company_id Many2one → res.company
    comodel_name='res.company' default=<expr> store=True
  • description Text
    translate=True
  • incoterm_id Many2one → account.incoterms
    comodel_name='account.incoterms' string='Incoterm'
  • journal_id Many2one → account.journal
    check_company=True comodel_name='account.journal' domain="[('type', '=', 'sale')]" string='Billing Journal'
  • name Char
    required=True translate=True
  • payment_term_id Many2one → account.payment.term
    check_company=True comodel_name='account.payment.term' string='Payment Term'
  • picking_policy Selection
    default=<expr> selection=<expr> string='Shipping Policy'
  • pricelist_id Many2one → product.pricelist
    check_company=True comodel_name='product.pricelist' string='Pricelist'
  • quotation_validity_days Integer
    string='Quotation Validity (Days)'
  • route_ids Many2many → stock.route
    check_company=True domain=[('sale_selectable', '=', True)] ondelete='restrict' string='Routes' args: 'stock.route'
  • sequence Integer
    default=10
  • sequence_id Many2one → ir.sequence
    comodel_name='ir.sequence' copy=False domain=<expr> string='Entry Sequence'
  • team_id Many2one → crm.team
    check_company=True comodel_name='crm.team' string='Sales Team'
  • user_id Many2one → res.users
    check_company=True comodel_name='res.users' domain=<expr> string='Salesperson'
  • warehouse_id Many2one → stock.warehouse
    check_company=True comodel_name='stock.warehouse' string='Warehouse'
Public methods (0)

No public methods.

New fields (1)
  • type_id Many2one → sale.order.type
    comodel_name='sale.order.type' string='Type'
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYOCA/sale-workflow
GIT
GIThttps://github.com/OCA/sale-workflow.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/sale-workflow/tree/18.0/sale_order_type
VERSION
VERSION 1.3.0
CATEGORY
CATEGORYSales Management
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSTecnativa, Odoo Community Association (OCA), AvanzOSC, Agile Business Group, Grupo Vermon, Niboo
MAINTAINERS
MAINTAINERSTecnativa, Odoo Community Association (OCA), AvanzOSC, Agile Business Group, Grupo Vermon, Niboo
COMMITTERS
COMMITTERSPedro M. Baeza, Denis Roussel, sergio-teruel, lfreeke, Weblate, OCA-git-bot, oca-ci, Rocío Vega, Franco Leyes, Matias Peralta, Axel PREL
WEBSITE
WEBSITEhttps://github.com/OCA/sale-workflow
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 19:30:11
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - sale_stock
    - 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
    - stock_account
    - stock
    - barcodes_gs1_nomenclature
    - barcodes
    - sale_management
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
This module adds a typology for the sales orders. In each different
type, you can define, invoicing and refunding journal, a warehouse, a
stock route, a sequence, the shipping policy, the invoicing policy, a
payment term, a pricelist and an incoterm.

You can see sale types as lines of business.

You are able to select a sales order type by partner so that when you
add a partner to a sales order it will get the related info to it.

Code Analysis

Views touched (13)
XML IDNameModelTypeStatus
res_config_settings_view_form res.config.settings.view.form res.config.settings setting Inherits sale.res_config_settings_view_form
res_partner_sale_type_form_view res.partner.sale_type.form res.partner group Inherits base.view_partner_form
sot_invoice_form account.move.form.sot account.move label Inherits account.view_move_form
sot_invoice_list account.invoice.list.sot account.move field Inherits account.view_invoice_tree
sot_invoice_search account.invoice.search.sot account.move field Inherits account.view_account_invoice_filter
sot_sale_order_type_form_view sale.order.type.form.view sale.order.type form New
sot_sale_order_type_search_view sale.order.type.search.view sale.order.type search New
sot_sale_order_type_tree_view sale.order.type.list.view sale.order.type list New
sot_view_order_form sale.order.form sale.order field Inherits sale.view_order_form
sot_view_order_list sale.order.list.sot sale.order field Inherits sale.view_order_tree
view_account_invoice_report_search account.invoice.report filter Inherits account.view_account_invoice_report_search
view_order_product_search sale.report filter Inherits sale.view_order_product_search
view_sales_order_filter sale.order field Inherits sale.view_sales_order_filter
Models touched (11)

New fields (1)
  • sale_type_id Many2one → sale.order.type
    comodel_name='sale.order.type' string='Sale Order Type'
Public methods (0)

No public methods.

New fields (1)
  • sale_type_id Many2one → sale.order.type
    comodel_name='sale.order.type' compute='_compute_sale_type_id' copy=True ondelete='restrict' precompute=True readonly=False store=True string='Sale Type'
Public methods (0)

No public methods.

New fields (1)
  • sale_order_type_required Boolean
    default=True help='If checked, the sale orders will require a type.'
Public methods (0)

No public methods.

New fields (1)
  • sale_order_type_required Boolean
    readonly=False related='company_id.sale_order_type_required'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (1)
  • sale_type Many2one → sale.order.type
    comodel_name='sale.order.type' company_dependent=True copy=True string='Sale Order Type'
Public methods (1)
  • copy_data(self, default=None)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (4)
  • incoterm Many2one
    compute='_compute_incoterm' readonly=False store=True
  • order_type_required Boolean
    related='company_id.sale_order_type_required'
  • picking_policy Selection
    compute='_compute_picking_policy' readonly=False store=True
  • type_id Many2one → sale.order.type
    check_company=True comodel_name='sale.order.type' compute='_compute_sale_type_id' copy=True ondelete='restrict' precompute=True readonly=False store=True string='Type'
Public methods (2)
  • create(self, vals_list)
    @api.model_create_multi
  • write(self, vals)
    A sale type could have a different order sequence, so we could need to change it accordingly

New fields (1)
  • route_id Many2one
    compute='_compute_route_id' readonly=False store=True
Public methods (0)

No public methods.

New fields (16)
  • active Boolean
    default=True
  • analytic_account_id Many2one → account.analytic.account
    check_company=True comodel_name='account.analytic.account' string='Analytic account'
  • company_id Many2one → res.company
    comodel_name='res.company' default=<expr> store=True
  • description Text
    translate=True
  • incoterm_id Many2one → account.incoterms
    comodel_name='account.incoterms' string='Incoterm'
  • journal_id Many2one → account.journal
    check_company=True comodel_name='account.journal' domain="[('type', '=', 'sale'), '|', ('company_id', '=', False), ('company_id', '=', company_id)]" string='Billing Journal'
  • name Char
    required=True translate=True
  • payment_term_id Many2one → account.payment.term
    check_company=True comodel_name='account.payment.term' string='Payment Term'
  • picking_policy Selection
    default=<expr> selection=<expr> string='Shipping Policy'
  • pricelist_id Many2one → product.pricelist
    check_company=True comodel_name='product.pricelist' string='Pricelist'
  • quotation_validity_days Integer
    string='Quotation Validity (Days)'
  • route_id Many2one → stock.route
    check_company=True domain=[('sale_selectable', '=', True)] ondelete='restrict' string='Route' args: 'stock.route'
  • sequence_id Many2one → ir.sequence
    comodel_name='ir.sequence' copy=False domain=<expr> string='Entry Sequence'
  • team_id Many2one → crm.team
    check_company=True comodel_name='crm.team' string='Sales Team'
  • user_id Many2one → res.users
    check_company=True comodel_name='res.users' domain=<expr> string='Salesperson'
  • warehouse_id Many2one → stock.warehouse
    check_company=True comodel_name='stock.warehouse' string='Warehouse'
Public methods (0)

No public methods.

New fields (1)
  • type_id Many2one → sale.order.type
    comodel_name='sale.order.type' string='Type'
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYOCA/sale-workflow
GIT
GIThttps://github.com/OCA/sale-workflow.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/sale-workflow/tree/17.0/sale_order_type
VERSION
VERSION 1.1.1
CATEGORY
CATEGORYSales Management
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSTecnativa, Odoo Community Association (OCA), AvanzOSC, Agile Business Group, Grupo Vermon, Niboo
MAINTAINERS
MAINTAINERSTecnativa, Odoo Community Association (OCA), AvanzOSC, Agile Business Group, Grupo Vermon, Niboo
COMMITTERS
COMMITTERSGitHub, Weblate, OCA-git-bot, oca-ci, Rocío Vega, r.perez, docker-odoo, trisdoan, Matias Peralta
WEBSITE
WEBSITEhttps://github.com/OCA/sale-workflow
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 19:20:05
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - sale_stock
    - sale
    - sales_team
    - base
    - mail
    - base_setup
    - web
    - bus
    - web_tour
    - account_payment
    - account
    - onboarding
    - product
    - uom
    - analytic
    - portal
    - web_editor
    - http_routing
    - auth_signup
    - digest
    - resource
    - payment
    - utm
    - stock_account
    - stock
    - barcodes_gs1_nomenclature
    - barcodes
    - sale_management
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
This module adds a typology for the sales orders. 
In each different type, you can define, invoicing and refunding journal, a warehouse, a stock route, a sequence, the shipping policy, the invoicing policy, a payment term, a pricelist and an incoterm.

You can see sale types as lines of business.

You are able to select a sales order type:
- by Sale Order: directly select the type you want in the dedicated sale order
- by Partner: so that when you
add a partner to a sales order it will get the related info to it.

Additionally, it adds a warning message to notify users when there is a mismatch between the partner's default pricelist
and the effective pricelist set by the sales order type. This ensures clarity when creating sales orders, as the
effective pricelist (determined by the sales order type) will take precedence over the partner's default pricelist.
The warning is only visible for companies without a parent and when there is a mismatch between the two pricelists.

![Pricelist Conflict Warning Note](../static/description/pricelist_conflict_warning_note.png)

Code Analysis

Views touched (9)
XML IDNameModelTypeStatus
res_partner_sale_type_form_view res.partner.sale_type.form res.partner group Inherits base.view_partner_form
sot_invoice_form account.move.form.sot account.move label Inherits account.view_move_form
sot_sale_order_type_form_view sale.order.type.form.view sale.order.type form New
sot_sale_order_type_search_view sale.order.type.search.view sale.order.type search New
sot_sale_order_type_tree_view sale.order.type.tree.view sale.order.type tree New
sot_view_order_form sale.order.form sale.order field Inherits sale.view_order_form
view_account_invoice_report_search account.invoice.report filter Inherits account.view_account_invoice_report_search
view_order_product_search sale.report filter Inherits sale.view_order_product_search
view_sales_order_filter sale.order field Inherits sale.view_sales_order_filter
Models touched (9)

New fields (1)
  • sale_type_id Many2one → sale.order.type
    comodel_name='sale.order.type' string='Sale Order Type'
Public methods (0)

No public methods.

New fields (1)
  • sale_type_id Many2one → sale.order.type
    comodel_name='sale.order.type' compute='_compute_sale_type_id' copy=True ondelete='restrict' precompute=True readonly=False store=True string='Sale Type'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (2)
  • effective_pricelist_id Many2one → product.pricelist
    comodel_name='product.pricelist' related='sale_type.pricelist_id' string='Sale Effective Pricelist'
  • sale_type Many2one → sale.order.type
    comodel_name='sale.order.type' company_dependent=True string='Sale Order Type'
Public methods (1)
  • copy_data(self, default=None)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (4)
  • analytic_account_id Many2one
    compute='_compute_analytic_account_id' readonly=False store=True
  • incoterm Many2one
    compute='_compute_incoterm' readonly=False store=True
  • picking_policy Selection
    compute='_compute_picking_policy' readonly=False store=True
  • type_id Many2one → sale.order.type
    check_company=True comodel_name='sale.order.type' compute='_compute_sale_type_id' copy=True ondelete='restrict' precompute=True readonly=False store=True string='Type'
Public methods (2)
  • create(self, vals_list)
    @api.model_create_multi
  • write(self, vals)
    A sale type could have a different order sequence, so we could need to change it accordingly

New fields (1)
  • route_id Many2one
    compute='_compute_route_id' readonly=False store=True
Public methods (0)

No public methods.

New fields (14)
  • active Boolean
    default=True
  • analytic_account_id Many2one → account.analytic.account
    check_company=True comodel_name='account.analytic.account' string='Analytic account'
  • company_id Many2one → res.company
    comodel_name='res.company' default=<expr> store=True
  • description Text
    translate=True
  • incoterm_id Many2one → account.incoterms
    comodel_name='account.incoterms' string='Incoterm'
  • journal_id Many2one → account.journal
    check_company=True comodel_name='account.journal' domain="[('type', '=', 'sale'), '|', ('company_id', '=', False), ('company_id', '=', company_id)]" string='Billing Journal'
  • name Char
    required=True translate=True
  • payment_term_id Many2one → account.payment.term
    check_company=True comodel_name='account.payment.term' string='Payment Term'
  • picking_policy Selection
    default=<expr> selection=<expr> string='Shipping Policy'
  • pricelist_id Many2one → product.pricelist
    check_company=True comodel_name='product.pricelist' string='Pricelist'
  • quotation_validity_days Integer
    string='Quotation Validity (Days)'
  • route_id Many2one → stock.route
    check_company=True domain=[('sale_selectable', '=', True)] ondelete='restrict' string='Route' args: 'stock.route'
  • sequence_id Many2one → ir.sequence
    comodel_name='ir.sequence' copy=False domain=<expr> string='Entry Sequence'
  • warehouse_id Many2one → stock.warehouse
    check_company=True comodel_name='stock.warehouse' string='Warehouse'
Public methods (0)

No public methods.

New fields (1)
  • type_id Many2one → sale.order.type
    comodel_name='sale.order.type' string='Type'
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYOCA/sale-workflow
GIT
GIThttps://github.com/OCA/sale-workflow.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/sale-workflow/tree/16.0/sale_order_type
VERSION
VERSION 1.1.2
CATEGORY
CATEGORYSales Management
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSTecnativa, Odoo Community Association (OCA), AvanzOSC, Agile Business Group, Grupo Vermon, Niboo
MAINTAINERS
MAINTAINERSTecnativa, Odoo Community Association (OCA), AvanzOSC, Agile Business Group, Grupo Vermon, Niboo
COMMITTERS
COMMITTERSVíctor Martínez, Weblate, OCA-git-bot, Isaac Gallart Bochons, oca-ci, pilarvargas-tecnativa, Diego Paradeda, Stefan, augusto-weiss, sbiosca-s73, jok-adhoc
WEBSITE
WEBSITEhttps://github.com/OCA/sale-workflow
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:53:45
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - sale_stock
    - 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
    - stock_account
    - stock
    - barcodes_gs1_nomenclature
    - barcodes
    - sale_management
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (9)
XML IDNameModelTypeStatus
res_partner_sale_type_form_view res.partner.sale_type.form res.partner group Inherits base.view_partner_form
sot_invoice_form account.move.form.sot account.move label Inherits account.view_move_form
sot_sale_order_type_form_view sale.order.type.form.view sale.order.type form New
sot_sale_order_type_search_view sale.order.type.search.view sale.order.type search New
sot_sale_order_type_tree_view sale.order.type.tree.view sale.order.type tree New
sot_view_order_form sale.order.form sale.order field Inherits sale.view_order_form
view_account_invoice_report_search account.invoice.report filter Inherits account.view_account_invoice_report_search
view_order_product_search sale.report filter Inherits sale.view_order_product_search
view_sales_order_filter sale.order field Inherits sale.view_sales_order_filter
Models touched (9)

New fields (1)
  • sale_type_id Many2one → sale.order.type
    comodel_name='sale.order.type' string='Sale Order Type'
Public methods (0)

No public methods.

New fields (1)
  • sale_type_id Many2one → sale.order.type
    comodel_name='sale.order.type' compute='_compute_sale_type_id' copy=True ondelete='restrict' precompute=True readonly=True states={'draft': [('readonly', False)]} store=True string='Sale Type'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (1)
  • sale_type Many2one → sale.order.type
    comodel_name='sale.order.type' company_dependent=True string='Sale Order Type'
Public methods (1)
  • copy_data(self, default=None)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (4)
  • analytic_account_id Many2one
    compute='_compute_analytic_account_id' readonly=False store=True
  • incoterm Many2one
    compute='_compute_incoterm' readonly=False store=True
  • picking_policy Selection
    compute='_compute_picking_policy' readonly=False store=True
  • type_id Many2one → sale.order.type
    check_company=True comodel_name='sale.order.type' compute='_compute_sale_type_id' copy=True ondelete='restrict' precompute=True readonly=False states={'sale': [('readonly', True)], 'done': [('readonly', True)], 'cancel': [('readonly', True)]} store=True string='Type'
Public methods (2)
  • create(self, vals_list)
    @api.model_create_multi
  • write(self, vals)
    A sale type could have a different order sequence, so we could need to change it accordingly

New fields (1)
  • route_id Many2one
    compute='_compute_route_id' readonly=False store=True
Public methods (0)

No public methods.

New fields (14)
  • active Boolean
    default=True
  • analytic_account_id Many2one → account.analytic.account
    check_company=True comodel_name='account.analytic.account' string='Analytic account'
  • company_id Many2one → res.company
    comodel_name='res.company' default=<expr> store=True
  • description Text
    translate=True
  • incoterm_id Many2one → account.incoterms
    comodel_name='account.incoterms' string='Incoterm'
  • journal_id Many2one → account.journal
    check_company=True comodel_name='account.journal' domain="[('type', '=', 'sale'), '|', ('company_id', '=', False), ('company_id', '=', company_id)]" string='Billing Journal'
  • name Char
    required=True translate=True
  • payment_term_id Many2one → account.payment.term
    check_company=True comodel_name='account.payment.term' string='Payment Term'
  • picking_policy Selection
    default=<expr> selection=<expr> string='Shipping Policy'
  • pricelist_id Many2one → product.pricelist
    check_company=True comodel_name='product.pricelist' string='Pricelist'
  • quotation_validity_days Integer
    string='Quotation Validity (Days)'
  • route_id Many2one → stock.route
    check_company=True domain=[('sale_selectable', '=', True)] ondelete='restrict' string='Route' args: 'stock.route'
  • sequence_id Many2one → ir.sequence
    comodel_name='ir.sequence' copy=False domain=<expr> string='Entry Sequence'
  • warehouse_id Many2one → stock.warehouse
    check_company=True comodel_name='stock.warehouse' string='Warehouse'
Public methods (0)

No public methods.

New fields (1)
  • type_id Many2one → sale.order.type
    comodel_name='sale.order.type' string='Type'
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYOCA/sale-workflow
GIT
GIThttps://github.com/OCA/sale-workflow.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/sale-workflow/tree/15.0/sale_order_type
VERSION
VERSION 2.1.4
CATEGORY
CATEGORYSales Management
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSTecnativa, Odoo Community Association (OCA), AvanzOSC, Agile Business Group, Grupo Vermon, Niboo
MAINTAINERS
MAINTAINERSTecnativa, Odoo Community Association (OCA), AvanzOSC, Agile Business Group, Grupo Vermon, Niboo
COMMITTERS
COMMITTERSPedro M. Baeza, Carlos Dauden, david, OCA Transbot, sergio-teruel, Víctor Martínez, Weblate, OCA-git-bot, oca-ci, pilarvargas-tecnativa, josep-tecnativa, Juan Pablo Garza
WEBSITE
WEBSITEhttps://github.com/OCA/sale-workflow
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:46:33
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - sale_stock
    - 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
    - stock_account
    - stock
    - barcodes
    - sale_management
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (9)
XML IDNameModelTypeStatus
res_partner_sale_type_form_view res.partner.sale_type.form res.partner group Inherits base.view_partner_form
sot_invoice_form account.move.form.sot account.move label Inherits account.view_move_form
sot_sale_order_type_form_view sale.order.type.form.view sale.order.type form New
sot_sale_order_type_search_view sale.order.type.search.view sale.order.type search New
sot_sale_order_type_tree_view sale.order.type.tree.view sale.order.type tree New
sot_view_order_form sale.order.form sale.order field Inherits sale.view_order_form
view_account_invoice_report_search account.invoice.report filter Inherits account.view_account_invoice_report_search
view_order_product_search sale.report filter Inherits sale.view_order_product_search
view_sales_order_filter sale.order field Inherits sale.view_sales_order_filter
Models touched (8)

New fields (1)
  • sale_type_id Many2one → sale.order.type
    comodel_name='sale.order.type' string='Sale Order Type'
Public methods (0)

No public methods.

New fields (1)
  • sale_type_id Many2one → sale.order.type
    comodel_name='sale.order.type' compute='_compute_sale_type_id' copy=True ondelete='restrict' readonly=True states={'draft': [('readonly', False)]} store=True string='Sale Type'
Public methods (1)
  • onchange_sale_type_id(self)
    @api.onchange('sale_type_id')

New fields (1)
  • sale_type Many2one → sale.order.type
    check_company=True comodel_name='sale.order.type' company_dependent=True string='Sale Order Type'
Public methods (1)
  • copy_data(self, default=None)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (1)
  • type_id Many2one → sale.order.type
    check_company=True comodel_name='sale.order.type' compute='_compute_sale_type_id' copy=True ondelete='restrict' readonly=False states={'sale': [('readonly', True)], 'done': [('readonly', True)], 'cancel': [('readonly', True)]} store=True string='Type'
Public methods (4)
  • copy_data(self, default=None)
  • create(self, vals)
    @api.model
  • onchange_type_id(self)
    @api.onchange('type_id')
  • write(self, vals)
    A sale type could have a different order sequence, so we could need to change it accordingly

New fields (0)

No new fields.

Public methods (1)
  • product_id_change(self)
    @api.onchange('product_id')

New fields (14)
  • active Boolean
    default=True
  • analytic_account_id Many2one → account.analytic.account
    check_company=True comodel_name='account.analytic.account' string='Analytic account'
  • company_id Many2one → res.company
    comodel_name='res.company' default=<expr> store=True
  • description Text
    translate=True
  • incoterm_id Many2one → account.incoterms
    comodel_name='account.incoterms' string='Incoterm'
  • journal_id Many2one → account.journal
    check_company=True comodel_name='account.journal' domain="[('type', '=', 'sale'), '|', ('company_id', '=', False), ('company_id', '=', company_id)]" string='Billing Journal'
  • name Char
    required=True translate=True
  • payment_term_id Many2one → account.payment.term
    check_company=True comodel_name='account.payment.term' string='Payment Term'
  • picking_policy Selection
    default=default_picking_policy selection='_get_selection_picking_policy' string='Shipping Policy'
  • pricelist_id Many2one → product.pricelist
    check_company=True comodel_name='product.pricelist' string='Pricelist'
  • quotation_validity_days Integer
    string='Quotation Validity (Days)'
  • route_id Many2one → stock.location.route
    check_company=True domain=[('sale_selectable', '=', True)] ondelete='restrict' string='Route' args: 'stock.location.route'
  • sequence_id Many2one → ir.sequence
    comodel_name='ir.sequence' copy=False domain=_get_domain_sequence_id string='Entry Sequence'
  • warehouse_id Many2one → stock.warehouse
    check_company=True comodel_name='stock.warehouse' string='Warehouse'
Public methods (1)
  • default_picking_policy(self)
    @api.model

New fields (1)
  • type_id Many2one → sale.order.type
    comodel_name='sale.order.type' string='Type'
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYOCA/sale-workflow
GIT
GIThttps://github.com/OCA/sale-workflow.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/sale-workflow/tree/14.0/sale_order_type
VERSION
VERSION 3.2.0
CATEGORY
CATEGORYSales Management
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSTecnativa, Odoo Community Association (OCA), AvanzOSC, Agile Business Group, Grupo Vermon, Niboo
MAINTAINERS
MAINTAINERSTecnativa, Odoo Community Association (OCA), AvanzOSC, Agile Business Group, Grupo Vermon, Niboo
COMMITTERS
COMMITTERSPedro M. Baeza, david, OCA Transbot, sergio-teruel, Víctor Martínez, oca-travis, Weblate, OCA-git-bot, Oihane Crucelaegui, Ethan Hildick, Isaac Gallart Bochons, oca-ci, Stephan Keller, Christopher Ormaza, Carlos Serra-Toro, pilarvargas-tecnativa, David Alonso // Solvos, Hai Lang, rafamar
WEBSITE
WEBSITEhttps://github.com/OCA/sale-workflow
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:40:57
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - sale_stock
    - 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
    - stock_account
    - stock
    - barcodes
    - sale_management
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (9)
XML IDNameModelTypeStatus
res_partner_sale_type_form_view res.partner.sale_type.form res.partner group Inherits base.view_partner_form
sot_invoice_form account.move.form.sot account.move label Inherits account.view_move_form
sot_sale_order_type_form_view sale.order.type.form.view sale.order.type form New
sot_sale_order_type_search_view sale.order.type.search.view sale.order.type search New
sot_sale_order_type_tree_view sale.order.type.tree.view sale.order.type tree New
sot_view_order_form sale.order.form sale.order field Inherits sale.view_order_form
view_account_invoice_report_search account.invoice.report filter Inherits account.view_account_invoice_report_search
view_order_product_search sale.report filter Inherits sale.view_order_product_search
view_sales_order_filter sale.order field Inherits sale.view_sales_order_filter
Models touched (8)

New fields (1)
  • sale_type_id Many2one → sale.order.type
    comodel_name='sale.order.type' string='Sale Order Type'
Public methods (0)

No public methods.

New fields (1)
  • sale_type_id Many2one → sale.order.type
    comodel_name='sale.order.type' compute='_compute_sale_type_id' copy=True ondelete='restrict' readonly=True states={'draft': [('readonly', False)]} store=True string='Sale Type'
Public methods (1)
  • onchange_sale_type_id(self)
    @api.onchange('sale_type_id')

New fields (1)
  • sale_type Many2one → sale.order.type
    comodel_name='sale.order.type' company_dependent=True string='Sale Order Type'
Public methods (1)
  • copy_data(self, default=None)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (1)
  • type_id Many2one → sale.order.type
    check_company=True comodel_name='sale.order.type' compute='_compute_sale_type_id' copy=True ondelete='restrict' readonly=False states={'sale': [('readonly', True)], 'done': [('readonly', True)], 'cancel': [('readonly', True)]} store=True string='Type'
Public methods (3)
  • create(self, vals)
    @api.model
  • onchange_type_id(self)
    @api.onchange('type_id')
  • write(self, vals)
    A sale type could have a different order sequence, so we could need to change it accordingly

New fields (0)

No new fields.

Public methods (1)
  • product_id_change(self)
    @api.onchange('product_id')

New fields (14)
  • active Boolean
    default=True
  • analytic_account_id Many2one → account.analytic.account
    check_company=True comodel_name='account.analytic.account' string='Analytic account'
  • company_id Many2one → res.company
    comodel_name='res.company' default=<expr> store=True
  • description Text
    translate=True
  • incoterm_id Many2one → account.incoterms
    comodel_name='account.incoterms' string='Incoterm'
  • journal_id Many2one → account.journal
    check_company=True comodel_name='account.journal' domain="[('type', '=', 'sale'), '|', ('company_id', '=', False), ('company_id', '=', company_id)]" string='Billing Journal'
  • name Char
    required=True translate=True
  • payment_term_id Many2one → account.payment.term
    check_company=True comodel_name='account.payment.term' string='Payment Term'
  • picking_policy Selection
    default=default_picking_policy selection='_get_selection_picking_policy' string='Shipping Policy'
  • pricelist_id Many2one → product.pricelist
    check_company=True comodel_name='product.pricelist' string='Pricelist'
  • quotation_validity_days Integer
    string='Quotation Validity (Days)'
  • route_id Many2one → stock.location.route
    check_company=True domain=[('sale_selectable', '=', True)] ondelete='restrict' string='Route' args: 'stock.location.route'
  • sequence_id Many2one → ir.sequence
    comodel_name='ir.sequence' copy=False domain=_get_domain_sequence_id string='Entry Sequence'
  • warehouse_id Many2one → stock.warehouse
    check_company=True comodel_name='stock.warehouse' string='Warehouse'
Public methods (1)
  • default_picking_policy(self)
    @api.model

New fields (1)
  • type_id Many2one → sale.order.type
    comodel_name='sale.order.type' string='Type'
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYOCA/sale-workflow
GIT
GIThttps://github.com/OCA/sale-workflow.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/sale-workflow/tree/13.0/sale_order_type
VERSION
VERSION 1.8.0
CATEGORY
CATEGORYSales Management
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSTecnativa, Odoo Community Association (OCA), AvanzOSC, Agile Business Group, Grupo Vermon, Niboo
MAINTAINERS
MAINTAINERSTecnativa, Odoo Community Association (OCA), AvanzOSC, Agile Business Group, Grupo Vermon, Niboo
COMMITTERS
COMMITTERSPedro M. Baeza, Carlos Dauden, Akim Juillerat, david, Ivàn Todorovich, OCA Transbot, sergio-teruel, Nicolás Mac Rouillon, oca-travis, Weblate, OCA-git-bot, oca-ci, ntsirintanis, David Alonso // Solvos
WEBSITE
WEBSITEhttps://github.com/OCA/sale-workflow
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:34:12
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - sale_stock
    - 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
    - stock_account
    - stock
    - barcodes
    - sale_management
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (7)
XML IDNameModelTypeStatus
res_partner_sale_type_form_view res.partner.sale_type.form res.partner group Inherits base.view_partner_form
sot_invoice_form account.move.form.sot account.move field Inherits account.view_move_form
sot_sale_order_type_form_view sale.order.type.form.view sale.order.type form New
sot_sale_order_type_search_view sale.order.type.search.view sale.order.type search New
sot_sale_order_type_tree_view sale.order.type.tree.view sale.order.type tree New
sot_view_order_form sale.order.form sale.order field Inherits sale.view_order_form
view_sales_order_filter sale.order field Inherits sale.view_sales_order_filter
Models touched (5)

New fields (1)
  • sale_type_id Many2one → sale.order.type
    comodel_name='sale.order.type' compute='_compute_sale_type_id' copy=True readonly=False states={'posted': [('readonly', True)], 'cancel': [('readonly', True)]} store=True string='Sale Type'
Public methods (1)
  • onchange_sale_type_id(self)
    @api.onchange('sale_type_id')

New fields (1)
  • sale_type Many2one → sale.order.type
    comodel_name='sale.order.type' company_dependent=True string='Sale Order Type'
Public methods (0)

No public methods.

New fields (1)
  • type_id Many2one → sale.order.type
    check_company=True comodel_name='sale.order.type' compute='_compute_sale_type_id' copy=True default=<expr> ondelete='restrict' readonly=False states={'sale': [('readonly', True)], 'done': [('readonly', True)], 'cancel': [('readonly', True)]} store=True string='Type'
Public methods (3)
  • create(self, vals)
    @api.model
  • onchange_type_id(self)
    @api.onchange('type_id')
  • write(self, vals)
    A sale type could have a different order sequence, so we could need to change it accordingly

New fields (0)

No new fields.

Public methods (1)
  • product_id_change(self)
    @api.onchange('product_id')

New fields (14)
  • active Boolean
    default=True
  • analytic_account_id Many2one → account.analytic.account
    check_company=True comodel_name='account.analytic.account' string='Analytic account'
  • company_id Many2one → res.company
    comodel_name='res.company' default=<expr> store=True
  • description Text
    translate=True
  • incoterm_id Many2one → account.incoterms
    comodel_name='account.incoterms' string='Incoterm'
  • journal_id Many2one → account.journal
    check_company=True comodel_name='account.journal' domain="[('type', '=', 'sale'), '|', ('company_id', '=', False), ('company_id', '=', company_id)]" string='Billing Journal'
  • name Char
    required=True translate=True
  • payment_term_id Many2one → account.payment.term
    check_company=True comodel_name='account.payment.term' string='Payment Term'
  • picking_policy Selection
    default=default_picking_policy selection='_get_selection_picking_policy' string='Shipping Policy'
  • pricelist_id Many2one → product.pricelist
    check_company=True comodel_name='product.pricelist' strint='Pricelist'
  • quotation_validity_days Integer
    string='Quotation Validity (Days)'
  • route_id Many2one → stock.location.route
    check_company=True domain=[('sale_selectable', '=', True)] ondelete='restrict' string='Route' args: 'stock.location.route'
  • sequence_id Many2one → ir.sequence
    comodel_name='ir.sequence' copy=False domain=_get_domain_sequence_id string='Entry Sequence'
  • warehouse_id Many2one → stock.warehouse
    check_company=True comodel_name='stock.warehouse' string='Warehouse'
Public methods (1)
  • default_picking_policy(self)
    @api.model
REPOSITORY
REPOSITORYOCA/sale-workflow
GIT
GIThttps://github.com/OCA/sale-workflow.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/sale-workflow/tree/12.0/sale_order_type
VERSION
VERSION 1.3.0
CATEGORY
CATEGORYSales Management
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSTecnativa, Odoo Community Association (OCA), AvanzOSC, Agile Business Group, Grupo Vermon, Niboo
MAINTAINERS
MAINTAINERSTecnativa, Odoo Community Association (OCA), AvanzOSC, Agile Business Group, Grupo Vermon, Niboo
COMMITTERS
COMMITTERSdavid, OCA Transbot, sergio-teruel, Nicolás Mac Rouillon, angelmoya, oca-travis, Weblate, OCA-git-bot, sergiocorato, Stephan Keller, Giovanni, cpatel
WEBSITE
WEBSITEhttps://github.com/OCA/sale-workflow
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:29:17
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - sale_stock
    - sale
    - sales_team
    - base
    - mail
    - base_setup
    - web
    - bus
    - web_tour
    - payment
    - account
    - product
    - decimal_precision
    - uom
    - analytic
    - portal
    - http_routing
    - digest
    - stock_account
    - stock
    - barcodes
    - sale_management
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (7)
XML IDNameModelTypeStatus
res_partner_sale_type_form_view res.partner.sale_type.form res.partner group Inherits base.view_partner_form
sot_invoice_form account.invoice.form.sot account.invoice field Inherits account.invoice_form
sot_sale_order_type_form_view sale.order.type.form.view sale.order.type form New
sot_sale_order_type_search_view sale.order.type.search.view sale.order.type search New
sot_sale_order_type_tree_view sale.order.type.tree.view sale.order.type tree New
sot_view_order_form sale.order.form sale.order field Inherits sale.view_order_form
view_sales_order_filter sale.order.type.order.search sale.order filter Inherits sale.view_sales_order_filter
Models touched (5)

New fields (1)
  • sale_type_id Many2one → sale.order.type
    comodel_name='sale.order.type' default=_get_order_type readonly=True states={'draft': [('readonly', False)]} string='Sale Type'
Public methods (1)
  • onchange_sale_type_id(self)
    @api.onchange('sale_type_id')

New fields (1)
  • sale_type Many2one → sale.order.type
    comodel_name='sale.order.type' company_dependent=True string='Sale Order Type'
Public methods (0)

No public methods.

New fields (1)
  • type_id Many2one → sale.order.type
    comodel_name='sale.order.type' default=_get_order_type readonly=True states={'draft': [('readonly', False)], 'sent': [('readonly', False)]} string='Type'
Public methods (4)
  • create(self, vals)
    @api.model
  • onchange_partner_id(self)
    @api.multi@api.onchange('partner_id')
  • onchange_type_id(self)
    @api.multi@api.onchange('type_id')
  • write(self, vals)
    @api.multi
    A sale type could have a different order sequence, so we could need to change it accordingly

New fields (0)

No new fields.

Public methods (1)
  • product_id_change(self)
    @api.onchange('product_id')

New fields (13)
  • active Boolean
    default=True
  • analytic_account_id Many2one → account.analytic.account
    check_company=True comodel_name='account.analytic.account' string='Analytic account'
  • company_id Many2one → res.company
    readonly=True related='warehouse_id.company_id' store=True args: 'res.company'
  • description Text
    string='Description' translate=True
  • incoterm_id Many2one → account.incoterms
    args: 'account.incoterms', 'Incoterm'
  • journal_id Many2one → account.journal
    comodel_name='account.journal' domain=[('type', '=', 'sale')] string='Billing Journal'
  • name Char
    required=True string='Name' translate=True
  • payment_term_id Many2one → account.payment.term
    args: 'account.payment.term', 'Payment Term'
  • picking_policy Selection
    default=default_picking_policy selection='_get_selection_picking_policy' string='Shipping Policy'
  • pricelist_id Many2one → product.pricelist
    args: 'product.pricelist', 'Pricelist'
  • route_id Many2one → stock.location.route
    check_company=True domain=[('sale_selectable', '=', True)] ondelete='restrict' string='Route' args: 'stock.location.route'
  • sequence_id Many2one → ir.sequence
    comodel_name='ir.sequence' copy=False domain=_get_domain_sequence_id string='Entry Sequence'
  • warehouse_id Many2one → stock.warehouse
    comodel_name='stock.warehouse' string='Warehouse'
Public methods (1)
  • default_picking_policy(self)
REPOSITORY
REPOSITORYOCA/sale-workflow
GIT
GIThttps://github.com/OCA/sale-workflow.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/sale-workflow/tree/11.0/sale_order_type
VERSION
VERSION 1.4.2
CATEGORY
CATEGORYSales Management
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSTecnativa, Odoo Community Association (OCA), AvanzOSC, Agile Business Group, Grupo Vermon, Niboo
MAINTAINERS
MAINTAINERSTecnativa, Odoo Community Association (OCA), AvanzOSC, Agile Business Group, Grupo Vermon, Niboo
COMMITTERS
COMMITTERSPedro M. Baeza, david, Stéphane Bidoul (ACSONE), OCA Transbot, Nicolás Mac Rouillon, oca-travis, Weblate, OCA-git-bot, SimoRubi, OCA Git Bot, David, oca-ci
WEBSITE
WEBSITEhttps://github.com/OCA/sale-workflow
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:23:57
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - sale_stock
    - sale_management
    - sale
    - sales_team
    - base
    - mail
    - base_setup
    - web
    - bus
    - web_tour
    - account
    - product
    - decimal_precision
    - analytic
    - web_planner
    - portal
    - http_routing
    - account_invoicing
    - stock_account
    - stock
    - barcodes
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (8)
XML IDNameModelTypeStatus
res_partner_sale_type_form_view res.partner.sale_type.form res.partner page Inherits base.view_partner_form
sale_order_type_rule_form Sale order type rule form sale.order.type.rule form New
sale_order_type_rule_tree Sale order type rule tree sale.order.type.rule tree New
sot_invoice_form account.invoice.form.sot account.invoice field Inherits account.invoice_form
sot_sale_order_type_form_view sale.order.type.form.view sale.order.type form New
sot_sale_order_type_search_view sale.order.type.search.view sale.order.type search New
sot_sale_order_type_tree_view sale.order.type.tree.view sale.order.type tree New
sot_view_order_form sale.order.form sale.order field Inherits sale.view_order_form
Models touched (5)

New fields (1)
  • sale_type_id Many2one → sale.order.type
    comodel_name='sale.order.type' default=_get_order_type string='Sale Type'
Public methods (2)
  • match_order_type(self)
    @api.multi
  • onchange_sale_type_id(self)
    @api.onchange('sale_type_id')

New fields (1)
  • sale_type Many2one → sale.order.type
    comodel_name='sale.order.type' company_dependent=True string='Sale Order Type'
Public methods (0)

No public methods.

New fields (1)
  • type_id Many2one → sale.order.type
    comodel_name='sale.order.type' string='Type'
Public methods (4)
  • create(self, vals)
    @api.model
    We trigger onchanges on create to ensure the type mechanics is applied even if the creation of the order isn't invoked from ui as is the case for website orders. We also ensure this way that a contact will be getting his commercial partner type if no type is set on his record
  • match_order_type(self)
    @api.multi
  • onchange_partner_id(self)
    @api.multi@api.onchange('partner_id')
  • onchange_type_id(self)
    @api.multi@api.onchange('type_id')

New fields (12)
  • company_id Many2one → res.company
    readonly=True related='warehouse_id.company_id' store=True args: 'res.company'
  • description Text
    string='Description' translate=True
  • incoterm_id Many2one → stock.incoterms
    args: 'stock.incoterms', 'Incoterm'
  • journal_id Many2one → account.journal
    comodel_name='account.journal' domain=[('type', '=', 'sale')] string='Billing Journal'
  • name Char
    required=True string='Name' translate=True
  • payment_term_id Many2one → account.payment.term
    args: 'account.payment.term', 'Payment Term'
  • picking_policy Selection
    default=default_picking_policy selection='_get_selection_picking_policy' string='Shipping Policy'
  • pricelist_id Many2one → product.pricelist
    args: 'product.pricelist', 'Pricelist'
  • rule_ids One2many → sale.order.type.rule
    comodel_name='sale.order.type.rule' copy=True inverse_name='order_type_id'
  • sequence Integer
    default=10
  • sequence_id Many2one → ir.sequence
    comodel_name='ir.sequence' copy=False domain=_get_domain_sequence_id string='Entry Sequence'
  • warehouse_id Many2one → stock.warehouse
    comodel_name='stock.warehouse' string='Warehouse'
Public methods (3)
  • default_picking_policy(self)
  • matches_invoice(self, invoice)
    @api.multi
  • matches_order(self, order)
    @api.multi

New fields (5)
  • name Char
    required=True
  • order_type_id Many2one → sale.order.type
    comodel_name='sale.order.type' ondelete='cascade'
  • product_category_ids Many2many → product.category
    comodel_name='product.category' string='Product categories'
  • product_ids Many2many → product.product
    comodel_name='product.product' string='Products'
  • sequence Integer
    default=10
Public methods (4)
  • matches_invoice(self, invoice)
    @api.multi
    Return True if the rule matches the invoice, False otherwise
  • matches_order(self, order)
    @api.multi
    Return True if the rule matches the order, False otherwise
  • matches_product_categories(self, categories)
    @api.multi
    Return True if the rule matches any of the categories, False otherwise
  • matches_products(self, products)
    @api.multi
    Return True if the rule matches any of the products, False otherwise
REPOSITORY
REPOSITORYOCA/sale-workflow
GIT
GIThttps://github.com/OCA/sale-workflow.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/sale-workflow/tree/10.0/sale_order_type
VERSION
VERSION 1.1.0
CATEGORY
CATEGORYSales Management
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSTecnativa, Odoo Community Association (OCA), AvanzOSC, Agile Business Group, Grupo Vermon, Niboo
MAINTAINERS
MAINTAINERSTecnativa, Odoo Community Association (OCA), AvanzOSC, Agile Business Group, Grupo Vermon, Niboo
COMMITTERS
COMMITTERSPedro M. Baeza, GitHub, Stéphane Bidoul (ACSONE), cubells, OCA Transbot, oca-travis, Weblate, OCA-git-bot, SimoRubi, oca-ci, Pierre Faniel
WEBSITE
WEBSITEhttps://github.com/OCA/sale-workflow
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:19:56
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - sale_stock
    - sale
    - sales_team
    - base
    - mail
    - base_setup
    - web_kanban
    - web
    - bus
    - web_tour
    - account
    - product
    - decimal_precision
    - report
    - analytic
    - web_planner
    - procurement
    - stock_account
    - stock
    - barcodes
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (8)
XML IDNameModelTypeStatus
res_partner_sale_type_form_view res.partner.sale_type.form res.partner page Inherits base.view_partner_form
sale_order_type_rule_form Sale order type rule form sale.order.type.rule form New
sale_order_type_rule_tree Sale order type rule tree sale.order.type.rule tree New
sot_invoice_form account.invoice.form.sot account.invoice field Inherits account.invoice_form
sot_sale_order_type_form_view sale.order.type.form.view sale.order.type form New
sot_sale_order_type_search_view sale.order.type.search.view sale.order.type search New
sot_sale_order_type_tree_view sale.order.type.tree.view sale.order.type tree New
sot_view_order_form sale.order.form sale.order field Inherits sale.view_order_form
Models touched (5)

New fields (1)
  • sale_type_id Many2one → sale.order.type
    comodel_name='sale.order.type' default=_get_order_type string='Sale Type'
Public methods (2)
  • match_order_type(self)
    @api.multi
  • onchange_sale_type_id(self)
    @api.onchange('sale_type_id')

New fields (1)
  • sale_type Many2one → sale.order.type
    comodel_name='sale.order.type' company_dependent=True string='Sale Order Type'
Public methods (0)

No public methods.

New fields (1)
  • type_id Many2one → sale.order.type
    comodel_name='sale.order.type' default=_get_order_type string='Type'
Public methods (4)
  • create(self, vals)
    @api.model
  • match_order_type(self)
    @api.multi
  • onchange_partner_id(self)
    @api.multi@api.onchange('partner_id')
  • onchange_type_id(self)
    @api.multi@api.onchange('type_id')

New fields (12)
  • company_id Many2one → res.company
    readonly=True related='warehouse_id.company_id' store=True args: 'res.company'
  • description Text
    string='Description' translate=True
  • incoterm_id Many2one → stock.incoterms
    args: 'stock.incoterms', 'Incoterm'
  • journal_id Many2one → account.journal
    comodel_name='account.journal' domain=[('type', '=', 'sale')] string='Billing Journal'
  • name Char
    required=True string='Name' translate=True
  • payment_term_id Many2one → account.payment.term
    args: 'account.payment.term', 'Payment Term'
  • picking_policy Selection
    default=default_picking_policy selection='_get_selection_picking_policy' string='Shipping Policy'
  • pricelist_id Many2one → product.pricelist
    args: 'product.pricelist', 'Pricelist'
  • rule_ids One2many → sale.order.type.rule
    comodel_name='sale.order.type.rule' copy=True inverse_name='order_type_id'
  • sequence Integer
    default=10
  • sequence_id Many2one → ir.sequence
    comodel_name='ir.sequence' copy=False domain=_get_domain_sequence_id string='Entry Sequence'
  • warehouse_id Many2one → stock.warehouse
    comodel_name='stock.warehouse' string='Warehouse'
Public methods (3)
  • default_picking_policy(self)
  • matches_invoice(self, invoice)
    @api.multi
  • matches_order(self, order)
    @api.multi

New fields (5)
  • name Char
    required=True
  • order_type_id Many2one → sale.order.type
    comodel_name='sale.order.type' ondelete='cascade'
  • product_category_ids Many2many → product.category
    comodel_name='product.category' string='Product categories'
  • product_ids Many2many → product.product
    comodel_name='product.product' string='Products'
  • sequence Integer
    default=10
Public methods (4)
  • matches_invoice(self, invoice)
    @api.multi
    Return True if the rule matches the invoice, False otherwise
  • matches_order(self, order)
    @api.multi
    Return True if the rule matches the order, False otherwise
  • matches_product_categories(self, categories)
    @api.multi
    Return True if the rule matches any of the categories, False otherwise
  • matches_products(self, products)
    @api.multi
    Return True if the rule matches any of the products, False otherwise
REPOSITORY
REPOSITORYOCA/sale-workflow
GIT
GIThttps://github.com/OCA/sale-workflow.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/sale-workflow/tree/9.0/sale_order_type
VERSION
VERSION 1.2.0
CATEGORY
CATEGORYSales Management
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSTecnativa, Odoo Community Association (OCA), AvanzOSC, Agile Business Group, Grupo Vermon
MAINTAINERS
MAINTAINERSTecnativa, Odoo Community Association (OCA), AvanzOSC, Agile Business Group, Grupo Vermon
COMMITTERS
COMMITTERSeLBati, Pedro M. Baeza, GitHub, Carlos Dauden, Stéphane Bidoul (ACSONE), OCA Transbot, oca-travis, Weblate, Rafael Blasco, OCA-git-bot, Nicolas Mac Rouillon, nicomacr
WEBSITE
WEBSITEhttp://www.odoomrp.com
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:15:20
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - sale_stock
    - sale
    - sales_team
    - base
    - mail
    - base_setup
    - web_kanban
    - web
    - bus
    - account
    - product
    - decimal_precision
    - report
    - analytic
    - web_tip
    - web_planner
    - procurement
    - stock_account
    - stock
    - barcodes
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (6)
XML IDNameModelTypeStatus
res_partner_sale_type_form_view res.partner.sale_type.form res.partner page Inherits base.view_partner_form
sot_invoice_form account.invoice.form.sot account.invoice field Inherits account.invoice_form
sot_sale_order_type_form_view sale.order.type.form.view sale.order.type form New
sot_sale_order_type_search_view sale.order.type.search.view sale.order.type search New
sot_sale_order_type_tree_view sale.order.type.tree.view sale.order.type tree New
sot_view_order_form sale.order.form sale.order field Inherits sale.view_order_form
Models touched (4)

New fields (1)
  • sale_type_id Many2one → sale.order.type
    comodel_name='sale.order.type' default=_get_order_type string='Sale Type'
Public methods (1)
  • onchange_sale_type_id(self)
    @api.onchange('sale_type_id')

New fields (1)
  • sale_type Many2one → sale.order.type
    comodel_name='sale.order.type' company_dependent=True string='Sale Order Type'
Public methods (0)

No public methods.

New fields (1)
  • type_id Many2one → sale.order.type
    comodel_name='sale.order.type' default=_get_order_type string='Type'
Public methods (3)
  • create(self, vals)
    @api.model
  • onchange_partner_id(self)
    @api.multi@api.onchange('partner_id')
  • onchange_type_id(self)
    @api.one@api.onchange('type_id')

New fields (11)
  • company_id Many2one → res.company
    readonly=True related='warehouse_id.company_id' store=True args: 'res.company'
  • description Text
    string='Description' translate=True
  • incoterm_id Many2one → stock.incoterms
    args: 'stock.incoterms', 'Incoterm'
  • journal_id Many2one → account.journal
    comodel_name='account.journal' domain=[('type', '=', 'sale')] string='Billing Journal'
  • name Char
    required=True string='Name' translate=True
  • payment_term_id Many2one → account.payment.term
    args: 'account.payment.term', 'Payment Term'
  • picking_policy Selection
    default=default_picking_policy selection='_get_selection_picking_policy' string='Shipping Policy'
  • pricelist_id Many2one → product.pricelist
    args: 'product.pricelist', 'Pricelist'
  • sequence Integer
    default=10 required=True args: 'Sequence'
  • sequence_id Many2one → ir.sequence
    comodel_name='ir.sequence' copy=False domain=_get_domain_sequence_id string='Entry Sequence'
  • warehouse_id Many2one → stock.warehouse
    comodel_name='stock.warehouse' string='Warehouse'
Public methods (1)
  • default_picking_policy(self)
REPOSITORY
REPOSITORYOCA/sale-workflow
GIT
GIThttps://github.com/OCA/sale-workflow.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/sale-workflow/tree/8.0/sale_order_type
VERSION
VERSION 1.1.0
CATEGORY
CATEGORYSales Management
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), AvanzOSC, Grupo Vermon, OdooMRP team, Serv. Tecnol. Avanzados - Pedro M. Baeza
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), AvanzOSC, Grupo Vermon, OdooMRP team, Serv. Tecnol. Avanzados - Pedro M. Baeza
COMMITTERS
COMMITTERSYannick Vaucher, Lorenzo Battistini, eLBati, Pedro M. Baeza, GitHub, Stéphane Bidoul (ACSONE), Alex Comba, OCA Transbot, oca-travis, Almudena, agaldona, Weblate, oihane, Matjaž Mozetič, Nicolas Mac Rouillon
WEBSITE
WEBSITEhttp://www.odoomrp.com
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:11:22
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - sale
    - sales_team
    - base
    - mail
    - base_setup
    - web_kanban
    - web
    - web_kanban_sparkline
    - account_voucher
    - account
    - product
    - decimal_precision
    - report
    - analytic
    - board
    - edi
    - email_template
    - procurement
    - stock
    - web_kanban_gauge
    - sale_stock
    - stock_account
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (6)
XML IDNameModelTypeStatus
res_partner_sale_type_form_view res.partner.sale_type.form res.partner page Inherits base.view_partner_form
sot_invoice_form account.invoice.form.sot account.invoice field Inherits account.invoice_form
sot_sale_order_type_form_view sale.order.type.form.view sale.order.type form New
sot_sale_order_type_search_view sale.order.type.search.view sale.order.type search New
sot_sale_order_type_tree_view sale.order.type.tree.view sale.order.type tree New
sot_view_order_form sale.order.form sale.order field Inherits sale.view_order_form
Models touched (6)

New fields (1)
  • sale_type_id Many2one → sale.order.type
    comodel_name='sale.order.type' string='Sale Type'
Public methods (2)
  • onchange_partner_id(self, type, partner_id, date_invoice=False, payment_term=False, partner_bank_id=False, company_id=False)
    @api.multi
  • onchange_sale_type_id(self)
    @api.onchange('sale_type_id')

New fields (1)
  • sale_type Many2one → sale.order.type
    comodel_name='sale.order.type' company_dependent=True string='Sale Order Type'
Public methods (0)

No public methods.

New fields (1)
  • type_id Many2one → sale.order.type
    comodel_name='sale.order.type' default=_get_order_type string='Type'
Public methods (3)
  • create(self, vals)
    @api.model
  • onchange_partner_id(self, part)
    @api.multi
  • onchange_type_id(self)
    @api.one@api.onchange('type_id')

New fields (14)
  • company_id Many2one → res.company
    readonly=True related='warehouse_id.company_id' store=True args: 'res.company'
  • description Text
    string='Description' translate=True
  • incoterm_id Many2one → stock.incoterms
    args: 'stock.incoterms', 'Incoterm'
  • invoice_state Selection
    default=default_invoice_state required=True selection='_get_selection_invoice_state' string='Invoice Control'
  • journal_id Many2one → account.journal
    comodel_name='account.journal' domain=[('type', '=', 'sale')] string='Billing Journal'
  • name Char
    required=True string='Name' translate=True
  • order_policy Selection
    default=default_order_policy required=True selection='_get_selection_order_policy' string='Create Invoice'
  • payment_term_id Many2one → account.payment.term
    args: 'account.payment.term', 'Payment Term'
  • picking_policy Selection
    default=default_picking_policy required=True selection='_get_selection_picking_policy' string='Shipping Policy'
  • pricelist_id Many2one → product.pricelist
    args: 'product.pricelist', 'Pricelist'
  • refund_journal_id Many2one → account.journal
    comodel_name='account.journal' domain=[('type', '=', 'sale_refund')] string='Refund Billing Journal'
  • sequence Integer
    default=0 string='Sequence'
  • sequence_id Many2one → ir.sequence
    comodel_name='ir.sequence' copy=False domain=_get_domain_sequence_id string='Entry Sequence'
  • warehouse_id Many2one → stock.warehouse
    comodel_name='stock.warehouse' required=True string='Warehouse'
Public methods (3)
  • default_invoice_state(self)
  • default_order_policy(self)
  • default_picking_policy(self)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.