TIP: You can type at any time to perform a new search.
Sale Order Type
sale_order_type · OCA/sale-workflow
- Repository
- OCA/sale-workflow · module folder · Try on Runboat
- Module version
- 1.6.0
- Category
- Sales Management
- Folder size
- 1.1 MB
- License
- AGPL-3
- Application
- No
- Auto-installable
- No
- Website
- https://github.com/OCA/sale-workflow
- Last tracking update
- 2026-08-07 09:06:23
- Authors
- Odoo Community Association (OCA), Agile Business Group, AvanzOSC, Tecnativa, Grupo Vermon, Niboo
- Maintainers
- Odoo Community Association (OCA), Agile Business Group, AvanzOSC, Tecnativa, Grupo Vermon, Niboo
- Committers
- JordiMForgeFlow, Maksym Yankin, Weblate, Franco Leyes, OCA-git-bot, oca-ci, r.perez
- Odoo dependencies
- Python dependencies
- None
- System dependencies
- None
- Required by
- website_sale_order_type
- 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. 
Code Analysis ⓘ
Views touched (13)
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
res_config_settings_view_form |
res.config.settings.view.form | res.config.settings | form | Inherits sale.res_config_settings_view_form |
res_partner_sale_type_form_view |
res.partner.sale_type.form | res.partner | form | Inherits base.view_partner_form |
sot_invoice_form |
account.move.form.sot | account.move | form | Inherits account.view_move_form |
sot_invoice_list |
account.invoice.list.sot | account.move | list | Inherits account.view_invoice_tree |
sot_invoice_search |
account.invoice.search.sot | account.move | search | 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 | form | Inherits sale.view_order_form |
sot_view_order_list |
sale.order.list.sot | sale.order | list | Inherits sale.view_order_tree |
view_account_invoice_report_search |
account.invoice.report | search | Inherits account.view_account_invoice_report_search | |
view_order_product_search |
sale.report | search | Inherits sale.view_order_product_search | |
view_sales_order_filter |
sale.order | Inherits sale.view_sales_order_filter |
HTTP endpoints (0)
No HTTP endpoints found for this module.
Models touched (11)
New fields (1)
-
sale_type_idMany2one → sale.order.typecomodel_name='sale.order.type'string='Sale Order Type'
No public methods.
New fields (1)
-
sale_type_idMany2one → sale.order.typecomodel_name='sale.order.type'compute='_compute_sale_type_id'copy=Trueondelete='restrict'precompute=Truereadonly=Falsestore=Truestring='Sale Type'
No public methods.
New fields (1)
-
sale_order_type_requiredBooleandefault=Truehelp='If checked, the sale orders will require a type.'
No public methods.
New fields (1)
-
sale_order_type_requiredBooleanreadonly=Falserelated='company_id.sale_order_type_required'
No public methods.
New fields (0)
No new fields.
Public methods (0)No public methods.
New fields (2)
-
effective_pricelist_idMany2one → product.pricelistcomodel_name='product.pricelist'related='sale_type.pricelist_id'string='Sale Effective Pricelist' -
sale_typeMany2one → sale.order.typecomodel_name='sale.order.type'company_dependent=Truecopy=Truestring='Sale Order Type'
-
copy_data(self, default=None)
New fields (0)
No new fields.
Public methods (0)No public methods.
New fields (4)
-
incotermMany2onecompute='_compute_incoterm'readonly=Falsestore=True -
order_type_requiredBooleanrelated='company_id.sale_order_type_required' -
picking_policySelectioncompute='_compute_picking_policy'readonly=Falsestore=True -
type_idMany2one → sale.order.typecheck_company=Truecomodel_name='sale.order.type'compute='_compute_sale_type_id'copy=Trueondelete='restrict'precompute=Truereadonly=Falsestore=Truestring='Type'
-
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_idsMany2manycompute='_compute_route_ids'precompute=Truereadonly=Falsestore=True
No public methods.
New fields (16)
-
activeBooleandefault=True -
company_idMany2one → res.companycomodel_name='res.company'default=<expr>store=True -
descriptionTexttranslate=True -
incoterm_idMany2one → account.incotermscomodel_name='account.incoterms'string='Incoterm' -
journal_idMany2one → account.journalcheck_company=Truecomodel_name='account.journal'domain="[('type', '=', 'sale')]"string='Billing Journal' -
nameCharrequired=Truetranslate=True -
payment_term_idMany2one → account.payment.termcheck_company=Truecomodel_name='account.payment.term'string='Payment Term' -
picking_policySelectiondefault=<expr>selection=<expr>string='Shipping Policy' -
pricelist_idMany2one → product.pricelistcheck_company=Truecomodel_name='product.pricelist'string='Pricelist' -
quotation_validity_daysIntegerstring='Quotation Validity (Days)' -
route_idsMany2many → stock.routecheck_company=Truedomain=[('sale_selectable', '=', True)]ondelete='restrict'string='Routes' args: 'stock.route' -
sequenceIntegerdefault=10 -
sequence_idMany2one → ir.sequencecomodel_name='ir.sequence'copy=Falsedomain=<expr>string='Entry Sequence' -
team_idMany2one → crm.teamcheck_company=Truecomodel_name='crm.team'string='Sales Team' -
user_idMany2one → res.userscheck_company=Truecomodel_name='res.users'domain=<expr>string='Salesperson' -
warehouse_idMany2one → stock.warehousecheck_company=Truecomodel_name='stock.warehouse'string='Warehouse'
No public methods.
New fields (1)
-
type_idMany2one → sale.order.typecomodel_name='sale.order.type'string='Type'
No public methods.
Loading…
Loading…
Loading…
Loading…
Loading…
Loading…
Loading…
Loading…
Loading…
Loading…
Loading…