| REPOSITORY | |
|---|---|
| REPOSITORY | odoo/odoo |
| GIT | |
| GIT | https://github.com/odoo/odoo.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/odoo/odoo/tree/19.0/sale_management |
| VERSION | |
| VERSION | 1.0 |
| CATEGORY | |
| CATEGORY | Sales/Sales |
| LICENSE | |
| LICENSE | LGPL-3 |
| APPLICATION | |
| APPLICATION | Yes |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | Odoo S.A. |
| MAINTAINERS | |
| MAINTAINERS | Odoo S.A. |
| COMMITTERS | |
| COMMITTERS | Raphael Collet, Odoo Translation Bot, Thibault Delavallée, Géry Debongnie, Julien Castiaux, Victor Feyens, Achraf (abz), Tiffany Chang (tic), Gorash, William Braeckman, william-andre, Valentin Chevalier, Louis Wicket (wil), Victor Piryns (pivi), Levi Siuzdak (sile), Dylan Kiss (dyki), sesn-odoo, jobl, kcv-odoo, Pierre Pulinckx (PIPU), st-yes, pkgu-odoo, Mohammad Abdulmoneim (abdu), Michaël Mattiello, Krzysztof Magusiak (krma), Mahdi Alijani (malj), nipl-odoo, krip-odoo, Lancelot Semal, adip-odoo, Nisarg (nipl), Merlin Guillaume, saurabh, chpa-odoo |
| WEBSITE | |
| WEBSITE | https://www.odoo.com/app/sales |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 01:51:40 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
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 |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES | Not have |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION |
Manage sales quotations and orders
==================================
This application allows you to manage your sales goals in an effective and efficient manner by keeping track of all sales orders and history.
It handles the full sales workflow:
* **Quotation** -> **Sales order** -> **Invoice**
Preferences (only with Warehouse Management installed)
------------------------------------------------------
If you also installed the Warehouse Management, you can deal with the following preferences:
* Shipping: Choice of delivery at once or partial delivery
* Invoicing: choose how invoices will be paid
* Incoterms: International Commercial terms
With this module you can personnalize the sales order and invoice report with
categories, subtotals or page-breaks.
The Dashboard for the Sales Manager will include
------------------------------------------------
* My Quotations
* Monthly Turnover (Graph)
|
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
digest_digest_view_form |
digest.digest.view.form.inherit.sale_management | digest.digest | group | Inherits digest.digest_digest_view_form |
res_config_settings_view_form |
res.config.settings.view.form.inherit.sale.management | res.config.settings | setting | Inherits sale.res_config_settings_view_form |
sale_order_form_quote |
sale.order.form.inherit.sale_management | sale.order | field | Inherits sale.view_order_form |
sale_order_portal_content_inherit_sale_management |
Order Options | ir.ui.view | qweb | Inherits sale.sale_order_portal_content |
sale_order_portal_optional_product_quantity |
Order Quantity | ir.ui.view | qweb | New |
sale_order_template_view_form |
sale.order.template.form | sale.order.template | form | New |
sale_order_template_view_search |
sale.order.template.search | sale.order.template | search | New |
sale_order_template_view_tree |
sale.order.template.list | sale.order.template | list | New |
kpi_all_sale_total
Boolean
kpi_all_sale_total_value
Monetary
compute='_compute_kpi_sale_total_value'
No public methods.
sale_order_template_id
Many2one → sale.order.template
check_company=True
domain="['|', ('company_id', '=', False), ('company_id', '=', id)]"
string='Default Sale Template'
args: 'sale.order.template'
No public methods.
company_so_template_id
Many2one
domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]"
readonly=False
related='company_id.sale_order_template_id'
string='Default Template'
group_sale_order_template
Boolean
implied_group='sale_management.group_sale_order_template'
args: 'Quotation Templates'
set_values(self)
sale_order_template_id
Many2one → sale.order.template
check_company=True
comodel_name='sale.order.template'
compute='_compute_sale_order_template_id'
domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]"
precompute=True
readonly=False
store=True
string='Quotation Template'
action_confirm(self)
is_optional
Boolean
copy=True
default=False
string='Optional Line'
No public methods.
active
Boolean
default=True
help='If unchecked, it will allow you to hide the quotation template without removing it.'
company_id
Many2one → res.company
comodel_name='res.company'
default=<expr>
journal_id
Many2one → account.journal
check_company=True
company_dependent=True
domain=[('type', '=', 'sale')]
help='If set, SO with this template will invoice in this journal; otherwise the sales journal with the lowest sequence is used.'
string='Invoicing Journal'
args: 'account.journal'
mail_template_id
Many2one → mail.template
comodel_name='mail.template'
domain=[('model', '=', 'sale.order')]
help='This e-mail template will be sent on confirmation. Leave empty to send nothing.'
string='Confirmation Mail'
name
Char
required=True
string='Quotation Template'
note
Html
string='Terms and conditions'
translate=True
number_of_days
Integer
help='Number of days for the validity date computation of the quotation'
string='Quotation Duration'
prepayment_percent
Float
compute='_compute_prepayment_percent'
help='The percentage of the amount needed to be paid to confirm quotations.'
readonly=False
store=True
string='Prepayment percentage'
require_payment
Boolean
compute='_compute_require_payment'
help='Request an online payment to the customer in order to confirm orders automatically.'
readonly=False
store=True
string='Online Payment'
require_signature
Boolean
compute='_compute_require_signature'
help='Request a online signature to the customer in order to confirm orders automatically.'
readonly=False
store=True
string='Online Signature'
sale_order_template_line_ids
One2many → sale.order.template.line
comodel_name='sale.order.template.line'
copy=True
inverse_name='sale_order_template_id'
string='Lines'
sequence
Integer
default=10
create(self, vals_list)
write(self, vals)
allowed_uom_ids
Many2many → uom.uom
compute='_compute_allowed_uom_ids'
args: 'uom.uom'
company_id
Many2one
index=True
related='sale_order_template_id.company_id'
store=True
display_type
Selection
default=False
args: [('line_section', 'Section'), ('line_subsection', 'Subsection'), ('line_note', 'Note')]
is_optional
Boolean
copy=True
default=False
string='Optional Line'
name
Text
string='Description'
translate=True
parent_id
Many2one → sale.order.template.line
comodel_name='sale.order.template.line'
compute='_compute_parent_id'
string='Parent Section Line'
product_id
Many2one → product.product
check_company=True
comodel_name='product.product'
domain=<expr>
product_uom_id
Many2one → uom.uom
comodel_name='uom.uom'
compute='_compute_product_uom_id'
domain="[('id', 'in', allowed_uom_ids)]"
precompute=True
readonly=False
store=True
string='Unit'
product_uom_qty
Float
default=1
digits='Product Unit'
required=True
string='Quantity'
sale_order_template_id
Many2one → sale.order.template
comodel_name='sale.order.template'
index=True
ondelete='cascade'
required=True
string='Quotation Template Reference'
sequence
Integer
default=10
help='Gives the sequence order when displaying a list of sale quote lines.'
string='Sequence'
create(self, vals_list)
write(self, vals)
| REPOSITORY | |
|---|---|
| REPOSITORY | odoo/odoo |
| GIT | |
| GIT | https://github.com/odoo/odoo.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/odoo/odoo/tree/18.0/sale_management |
| VERSION | |
| VERSION | 1.0 |
| CATEGORY | |
| CATEGORY | Sales/Sales |
| LICENSE | |
| LICENSE | LGPL-3 |
| APPLICATION | |
| APPLICATION | Yes |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | |
| MAINTAINERS | |
| MAINTAINERS | |
| COMMITTERS | |
| COMMITTERS | Odoo Translation Bot, Martin Trigaux, Thibault Delavallée, Christophe Simonis, Xavier Morel, Aaron Bohy, Damien Bouvy, Yannick Tivisse, Odoo Online, Victor Feyens, Achraf (abz), Tiffany Chang (tic), Gorash, Florian Damhaut, Krzysztof Magusiak, Louis Wicket (wil), Mylyna Hy, Levi Siuzdak (sile), Dylan Kiss (dyki), AH-Yussef, Arnaud Sibille, omra-odoo, sesn-odoo, Youssef Bashandy, Ethan Vincent, Louis (loti), vava-odoo, kcv-odoo, dere-odoo, Lina (liew), Louis (wil), Pierre Pulinckx (PIPU), st-yes, nikj-odoo, jeep-odoo, krip-odoo, saurabh |
| WEBSITE | |
| WEBSITE | https://www.odoo.com/app/sales |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 01:25:53 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
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 |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES | Not have |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION |
Manage sales quotations and orders
==================================
This application allows you to manage your sales goals in an effective and efficient manner by keeping track of all sales orders and history.
It handles the full sales workflow:
* **Quotation** -> **Sales order** -> **Invoice**
Preferences (only with Warehouse Management installed)
------------------------------------------------------
If you also installed the Warehouse Management, you can deal with the following preferences:
* Shipping: Choice of delivery at once or partial delivery
* Invoicing: choose how invoices will be paid
* Incoterms: International Commercial terms
With this module you can personnalize the sales order and invoice report with
categories, subtotals or page-breaks.
The Dashboard for the Sales Manager will include
------------------------------------------------
* My Quotations
* Monthly Turnover (Graph)
|
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
digest_digest_view_form |
digest.digest.view.form.inherit.sale.order | digest.digest | group | Inherits digest.digest_digest_view_form |
report_saleorder_document_inherit_sale_management |
report_saleorder_document_inherit_sale_management | ir.ui.view | qweb | Inherits sale.report_saleorder_document |
res_config_settings_view_form |
res.config.settings.view.form.inherit.sale.management | res.config.settings | setting | Inherits sale.res_config_settings_view_form |
sale_order_form_quote |
sale.order.form.inherit.sale_management | sale.order | page | Inherits sale.view_order_form |
sale_order_portal_content_inherit_sale_management |
Order Options | ir.ui.view | qweb | Inherits sale.sale_order_portal_content |
sale_order_template_view_form |
sale.order.template.form | sale.order.template | form | New |
sale_order_template_view_search |
sale.order.template.search | sale.order.template | search | New |
sale_order_template_view_tree |
sale.order.template.list | sale.order.template | list | New |
kpi_all_sale_total
Boolean
kpi_all_sale_total_value
Monetary
compute='_compute_kpi_sale_total_value'
No public methods.
sale_order_template_id
Many2one → sale.order.template
check_company=True
domain="['|', ('company_id', '=', False), ('company_id', '=', id)]"
string='Default Sale Template'
args: 'sale.order.template'
No public methods.
company_so_template_id
Many2one
domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]"
readonly=False
related='company_id.sale_order_template_id'
string='Default Template'
group_sale_order_template
Boolean
implied_group='sale_management.group_sale_order_template'
args: 'Quotation Templates'
set_values(self)
sale_order_option_ids
One2many → sale.order.option
comodel_name='sale.order.option'
copy=True
inverse_name='order_id'
string='Optional Products Lines'
sale_order_template_id
Many2one → sale.order.template
check_company=True
comodel_name='sale.order.template'
compute='_compute_sale_order_template_id'
domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]"
precompute=True
readonly=False
store=True
string='Quotation Template'
action_confirm(self)
sale_order_option_ids
One2many → sale.order.option
No public methods.
discount
Float
compute='_compute_discount'
digits='Discount'
precompute=True
readonly=False
store=True
string='Discount (%)'
is_present
Boolean
compute='_compute_is_present'
help="This field will be checked if the option line's product is already present in the quotation."
search='_search_is_present'
string='Present on Quotation'
line_id
Many2one → sale.order.line
comodel_name='sale.order.line'
copy=False
ondelete='set null'
name
Text
compute='_compute_name'
precompute=True
readonly=False
required=True
store=True
string='Description'
order_id
Many2one → sale.order
index=True
ondelete='cascade'
args: 'sale.order', 'Sales Order Reference'
price_unit
Float
compute='_compute_price_unit'
min_display_digits='Product Price'
precompute=True
readonly=False
required=True
store=True
string='Unit Price'
product_id
Many2one → product.product
comodel_name='product.product'
domain=<expr>
required=True
product_uom_category_id
Many2one
related='product_id.uom_id.category_id'
quantity
Float
default=1
digits='Product Unit of Measure'
required=True
string='Quantity'
sequence
Integer
help='Gives the sequence order when displaying a list of optional products.'
string='Sequence'
uom_id
Many2one → uom.uom
comodel_name='uom.uom'
compute='_compute_uom_id'
domain="[('category_id', '=', product_uom_category_id)]"
precompute=True
readonly=False
required=True
store=True
string='Unit of Measure'
add_option_to_order(self)
button_add_to_order(self)
active
Boolean
default=True
help='If unchecked, it will allow you to hide the quotation template without removing it.'
company_id
Many2one → res.company
comodel_name='res.company'
default=<expr>
journal_id
Many2one → account.journal
check_company=True
company_dependent=True
domain=[('type', '=', 'sale')]
help='If set, SO with this template will invoice in this journal; otherwise the sales journal with the lowest sequence is used.'
string='Invoicing Journal'
args: 'account.journal'
mail_template_id
Many2one → mail.template
comodel_name='mail.template'
domain=[('model', '=', 'sale.order')]
help='This e-mail template will be sent on confirmation. Leave empty to send nothing.'
string='Confirmation Mail'
name
Char
required=True
string='Quotation Template'
note
Html
string='Terms and conditions'
translate=True
number_of_days
Integer
help='Number of days for the validity date computation of the quotation'
string='Quotation Duration'
prepayment_percent
Float
compute='_compute_prepayment_percent'
help='The percentage of the amount needed to be paid to confirm quotations.'
readonly=False
store=True
string='Prepayment percentage'
require_payment
Boolean
compute='_compute_require_payment'
help='Request an online payment to the customer in order to confirm orders automatically.'
readonly=False
store=True
string='Online Payment'
require_signature
Boolean
compute='_compute_require_signature'
help='Request a online signature to the customer in order to confirm orders automatically.'
readonly=False
store=True
string='Online Signature'
sale_order_template_line_ids
One2many → sale.order.template.line
comodel_name='sale.order.template.line'
copy=True
inverse_name='sale_order_template_id'
string='Lines'
sale_order_template_option_ids
One2many → sale.order.template.option
comodel_name='sale.order.template.option'
copy=True
inverse_name='sale_order_template_id'
string='Optional Products'
sequence
Integer
default=10
create(self, vals_list)
write(self, vals)
company_id
Many2one
index=True
related='sale_order_template_id.company_id'
store=True
display_type
Selection
default=False
args: [('line_section', 'Section'), ('line_note', 'Note')]
name
Text
string='Description'
translate=True
product_id
Many2one → product.product
check_company=True
comodel_name='product.product'
domain=<expr>
product_uom_category_id
Many2one
related='product_id.uom_id.category_id'
product_uom_id
Many2one → uom.uom
comodel_name='uom.uom'
compute='_compute_product_uom_id'
domain="[('category_id', '=', product_uom_category_id)]"
precompute=True
readonly=False
store=True
string='Unit of Measure'
product_uom_qty
Float
default=1
digits='Product Unit of Measure'
required=True
string='Quantity'
sale_order_template_id
Many2one → sale.order.template
comodel_name='sale.order.template'
index=True
ondelete='cascade'
required=True
string='Quotation Template Reference'
sequence
Integer
default=10
help='Gives the sequence order when displaying a list of sale quote lines.'
string='Sequence'
create(self, vals_list)
write(self, values)
company_id
Many2one
index=True
related='sale_order_template_id.company_id'
store=True
name
Text
compute='_compute_name'
precompute=True
readonly=False
required=True
store=True
string='Description'
translate=True
product_id
Many2one → product.product
check_company=True
comodel_name='product.product'
domain=<expr>
required=True
product_uom_category_id
Many2one
related='product_id.uom_id.category_id'
quantity
Float
default=1
digits='Product Unit of Measure'
required=True
string='Quantity'
sale_order_template_id
Many2one → sale.order.template
comodel_name='sale.order.template'
index=True
ondelete='cascade'
required=True
string='Quotation Template Reference'
uom_id
Many2one → uom.uom
comodel_name='uom.uom'
compute='_compute_uom_id'
domain="[('category_id', '=', product_uom_category_id)]"
precompute=True
readonly=False
required=True
store=True
string='Unit of Measure'
No public methods.
| REPOSITORY | |
|---|---|
| REPOSITORY | odoo/odoo |
| GIT | |
| GIT | https://github.com/odoo/odoo.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/odoo/odoo/tree/17.0/sale_management |
| VERSION | |
| VERSION | 1.0 |
| CATEGORY | |
| CATEGORY | Sales/Sales |
| LICENSE | |
| LICENSE | LGPL-3 |
| APPLICATION | |
| APPLICATION | Yes |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | |
| MAINTAINERS | |
| MAINTAINERS | |
| COMMITTERS | |
| COMMITTERS | Odoo Translation Bot, Martin Trigaux, Thibault Delavallée, Denis Ledoux, Xavier ALT, Christophe Simonis, Nicolas Lempereur, qdp-odoo, Aaron Bohy, Damien Bouvy, Yannick Tivisse, Odoo Online, Jorge Pinna Puissant, Lucas Perais, Victor Feyens, std-odoo, Achraf (abz), Ivan Yelizariev, Tiffany Chang (tic), Gorash, Pierre Paridans, Guillaume (guva), Hubert Van de Walle (huvw), Florian Damhaut, Florian Charlier, Jinjiu Liu, Demesmaeker, niyasraphy, Andro Gvivradze, Louis Wicket (wil), Mylyna Hy, Valentin Vallaeys (vava), Levi Siuzdak (sile), Dylan Kiss (dyki), Michael (mcm), Horacio Tellez, Brieuc-brd, AH-Yussef, Leonardo Pavan Rocha, Youssef Bashandy, Ethan Vincent, kcv-odoo, dere-odoo, Louis (wil), st-yes, nikj-odoo, Bastien PIERRE, krip-odoo |
| WEBSITE | |
| WEBSITE | https://www.odoo.com/app/sales |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 01:02:04 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
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 |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES | Not have |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION |
Manage sales quotations and orders
==================================
This application allows you to manage your sales goals in an effective and efficient manner by keeping track of all sales orders and history.
It handles the full sales workflow:
* **Quotation** -> **Sales order** -> **Invoice**
Preferences (only with Warehouse Management installed)
------------------------------------------------------
If you also installed the Warehouse Management, you can deal with the following preferences:
* Shipping: Choice of delivery at once or partial delivery
* Invoicing: choose how invoices will be paid
* Incoterms: International Commercial terms
With this module you can personnalize the sales order and invoice report with
categories, subtotals or page-breaks.
The Dashboard for the Sales Manager will include
------------------------------------------------
* My Quotations
* Monthly Turnover (Graph)
|
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
digest_digest_view_form |
digest.digest.view.form.inherit.sale.order | digest.digest | group | Inherits digest.digest_digest_view_form |
report_saleorder_document_inherit_sale_management |
report_saleorder_document_inherit_sale_management | ir.ui.view | qweb | Inherits sale.report_saleorder_document |
res_config_settings_view_form |
res.config.settings.view.form.inherit.sale.management | res.config.settings | setting | Inherits sale.res_config_settings_view_form |
sale_order_form_quote |
sale.order.form.inherit.sale_management | sale.order | page | Inherits sale.view_order_form |
sale_order_portal_content_inherit_sale_management |
Order Options | ir.ui.view | qweb | Inherits sale.sale_order_portal_content |
sale_order_template_view_form |
sale.order.template.form | sale.order.template | form | New |
sale_order_template_view_search |
sale.order.template.search | sale.order.template | search | New |
sale_order_template_view_tree |
sale.order.template.tree | sale.order.template | tree | New |
kpi_all_sale_total
Boolean
kpi_all_sale_total_value
Monetary
compute='_compute_kpi_sale_total_value'
No public methods.
sale_order_template_id
Many2one → sale.order.template
check_company=True
domain="['|', ('company_id', '=', False), ('company_id', '=', id)]"
string='Default Sale Template'
args: 'sale.order.template'
No public methods.
company_so_template_id
Many2one
domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]"
readonly=False
related='company_id.sale_order_template_id'
string='Default Template'
group_sale_order_template
Boolean
implied_group='sale_management.group_sale_order_template'
args: 'Quotation Templates'
set_values(self)
sale_order_option_ids
One2many → sale.order.option
comodel_name='sale.order.option'
copy=True
inverse_name='order_id'
string='Optional Products Lines'
sale_order_template_id
Many2one → sale.order.template
check_company=True
comodel_name='sale.order.template'
compute='_compute_sale_order_template_id'
domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]"
precompute=True
readonly=False
store=True
string='Quotation Template'
action_confirm(self)
sale_order_option_ids
One2many → sale.order.option
No public methods.
discount
Float
compute='_compute_discount'
digits='Discount'
precompute=True
readonly=False
store=True
string='Discount (%)'
is_present
Boolean
compute='_compute_is_present'
help="This field will be checked if the option line's product is already present in the quotation."
search='_search_is_present'
string='Present on Quotation'
line_id
Many2one → sale.order.line
comodel_name='sale.order.line'
copy=False
ondelete='set null'
name
Text
compute='_compute_name'
precompute=True
readonly=False
required=True
store=True
string='Description'
order_id
Many2one → sale.order
index=True
ondelete='cascade'
args: 'sale.order', 'Sales Order Reference'
price_unit
Float
compute='_compute_price_unit'
digits='Product Price'
precompute=True
readonly=False
required=True
store=True
string='Unit Price'
product_id
Many2one → product.product
comodel_name='product.product'
domain=<expr>
required=True
product_uom_category_id
Many2one
related='product_id.uom_id.category_id'
quantity
Float
default=1
digits='Product Unit of Measure'
required=True
string='Quantity'
sequence
Integer
help='Gives the sequence order when displaying a list of optional products.'
string='Sequence'
uom_id
Many2one → uom.uom
comodel_name='uom.uom'
compute='_compute_uom_id'
domain="[('category_id', '=', product_uom_category_id)]"
precompute=True
readonly=False
required=True
store=True
string='Unit of Measure'
add_option_to_order(self)
button_add_to_order(self)
active
Boolean
default=True
help='If unchecked, it will allow you to hide the quotation template without removing it.'
company_id
Many2one → res.company
comodel_name='res.company'
default=<expr>
journal_id
Many2one → account.journal
check_company=True
company_dependent=True
domain=[('type', '=', 'sale')]
help='If set, SO with this template will invoice in this journal; otherwise the sales journal with the lowest sequence is used.'
string='Invoicing Journal'
args: 'account.journal'
mail_template_id
Many2one → mail.template
comodel_name='mail.template'
domain=[('model', '=', 'sale.order')]
help='This e-mail template will be sent on confirmation. Leave empty to send nothing.'
string='Confirmation Mail'
name
Char
required=True
string='Quotation Template'
note
Html
string='Terms and conditions'
translate=True
number_of_days
Integer
help='Number of days for the validity date computation of the quotation'
string='Quotation Duration'
prepayment_percent
Float
compute='_compute_prepayment_percent'
help='The percentage of the amount needed to be paid to confirm quotations.'
readonly=False
store=True
string='Prepayment percentage'
require_payment
Boolean
compute='_compute_require_payment'
help='Request an online payment to the customer in order to confirm orders automatically.'
readonly=False
store=True
string='Online Payment'
require_signature
Boolean
compute='_compute_require_signature'
help='Request a online signature to the customer in order to confirm orders automatically.'
readonly=False
store=True
string='Online Signature'
sale_order_template_line_ids
One2many → sale.order.template.line
comodel_name='sale.order.template.line'
copy=True
inverse_name='sale_order_template_id'
string='Lines'
sale_order_template_option_ids
One2many → sale.order.template.option
comodel_name='sale.order.template.option'
copy=True
inverse_name='sale_order_template_id'
string='Optional Products'
create(self, vals_list)
write(self, vals)
company_id
Many2one
index=True
related='sale_order_template_id.company_id'
store=True
display_type
Selection
default=False
args: [('line_section', 'Section'), ('line_note', 'Note')]
name
Text
compute='_compute_name'
precompute=True
readonly=False
required=True
store=True
string='Description'
translate=True
product_id
Many2one → product.product
check_company=True
comodel_name='product.product'
domain=<expr>
product_uom_category_id
Many2one
related='product_id.uom_id.category_id'
product_uom_id
Many2one → uom.uom
comodel_name='uom.uom'
compute='_compute_product_uom_id'
domain="[('category_id', '=', product_uom_category_id)]"
precompute=True
readonly=False
store=True
string='Unit of Measure'
product_uom_qty
Float
default=1
digits='Product Unit of Measure'
required=True
string='Quantity'
sale_order_template_id
Many2one → sale.order.template
comodel_name='sale.order.template'
index=True
ondelete='cascade'
required=True
string='Quotation Template Reference'
sequence
Integer
default=10
help='Gives the sequence order when displaying a list of sale quote lines.'
string='Sequence'
create(self, vals_list)
write(self, values)
company_id
Many2one
index=True
related='sale_order_template_id.company_id'
store=True
name
Text
compute='_compute_name'
precompute=True
readonly=False
required=True
store=True
string='Description'
translate=True
product_id
Many2one → product.product
check_company=True
comodel_name='product.product'
domain=<expr>
required=True
product_uom_category_id
Many2one
related='product_id.uom_id.category_id'
quantity
Float
default=1
digits='Product Unit of Measure'
required=True
string='Quantity'
sale_order_template_id
Many2one → sale.order.template
comodel_name='sale.order.template'
index=True
ondelete='cascade'
required=True
string='Quotation Template Reference'
uom_id
Many2one → uom.uom
comodel_name='uom.uom'
compute='_compute_uom_id'
domain="[('category_id', '=', product_uom_category_id)]"
precompute=True
readonly=False
required=True
store=True
string='Unit of Measure'
No public methods.
| REPOSITORY | |
|---|---|
| REPOSITORY | odoo/odoo |
| GIT | |
| GIT | https://github.com/odoo/odoo.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/odoo/odoo/tree/16.0/sale_management |
| VERSION | |
| VERSION | 1.0 |
| CATEGORY | |
| CATEGORY | Sales/Sales |
| LICENSE | |
| LICENSE | LGPL-3 |
| APPLICATION | |
| APPLICATION | Yes |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | |
| MAINTAINERS | |
| MAINTAINERS | |
| COMMITTERS | |
| COMMITTERS | Raphael Collet, Odoo Translation Bot, Martin Trigaux, Fabien Pinckaers, Thibault Delavallée, Denis Ledoux, Christophe Simonis, Nicolas Lempereur, GitHub, Yannick Tivisse, SEINLET Nicolas, Xavier-Do, Romeo Fragomeli, Victor Feyens, Ivan Yelizariev, Tiffany Chang (tic), Arnaud Joset, roen-odoo, Hubert Van de Walle (huvw), Florian Damhaut, mafo-odoo, Antoine Vandevenne (anv), Jinjiu Liu, Demesmaeker, Mylyna Hy, Tom De Caluwé, Levi Siuzdak (sile), Horacio Tellez, Chong Wang (cwg), Leonardo Pavan Rocha, Ethan Vincent, dere-odoo |
| WEBSITE | |
| WEBSITE | https://www.odoo.com/app/sales |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 00:40:46 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
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 |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES | Not have |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION |
Manage sales quotations and orders
==================================
This application allows you to manage your sales goals in an effective and efficient manner by keeping track of all sales orders and history.
It handles the full sales workflow:
* **Quotation** -> **Sales order** -> **Invoice**
Preferences (only with Warehouse Management installed)
------------------------------------------------------
If you also installed the Warehouse Management, you can deal with the following preferences:
* Shipping: Choice of delivery at once or partial delivery
* Invoicing: choose how invoices will be paid
* Incoterms: International Commercial terms
With this module you can personnalize the sales order and invoice report with
categories, subtotals or page-breaks.
The Dashboard for the Sales Manager will include
------------------------------------------------
* My Quotations
* Monthly Turnover (Graph)
|
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
digest_digest_view_form |
digest.digest.view.form.inherit.sale.order | digest.digest | group | Inherits digest.digest_digest_view_form |
report_saleorder_document_inherit_sale_management |
report_saleorder_document_inherit_sale_management | ir.ui.view | qweb | Inherits sale.report_saleorder_document |
res_config_settings_view_form |
res.config.settings.view.form.inherit.sale.management | res.config.settings | xpath | Inherits sale.res_config_settings_view_form |
res_config_settings_view_form_inherit_sale_management |
res.config.settings.view.form.inherit.sale.management | res.config.settings | xpath | Inherits sale.res_config_settings_view_form |
sale_order_form_quote |
sale.order.form.inherit.sale_management | sale.order | page | Inherits sale.view_order_form |
sale_order_portal_content_inherit_sale_management |
Order Options | ir.ui.view | qweb | Inherits sale.sale_order_portal_content |
sale_order_template_view_form |
sale.order.template.form | sale.order.template | form | New |
sale_order_template_view_search |
sale.order.template.search | sale.order.template | search | New |
sale_order_template_view_tree |
sale.order.template.tree | sale.order.template | tree | New |
kpi_all_sale_total
Boolean
kpi_all_sale_total_value
Monetary
compute='_compute_kpi_sale_total_value'
No public methods.
sale_order_template_id
Many2one → sale.order.template
check_company=True
domain="['|', ('company_id', '=', False), ('company_id', '=', id)]"
string='Default Sale Template'
args: 'sale.order.template'
No public methods.
company_so_template_id
Many2one
domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]"
readonly=False
related='company_id.sale_order_template_id'
string='Default Template'
group_sale_order_template
Boolean
implied_group='sale_management.group_sale_order_template'
args: 'Quotation Templates'
module_sale_quotation_builder
Boolean
set_values(self)
sale_order_option_ids
One2many → sale.order.option
comodel_name='sale.order.option'
copy=True
inverse_name='order_id'
states=READONLY_FIELD_STATES
string='Optional Products Lines'
sale_order_template_id
Many2one → sale.order.template
check_company=True
comodel_name='sale.order.template'
compute='_compute_sale_order_template_id'
domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]"
precompute=True
readonly=False
states=READONLY_FIELD_STATES
store=True
string='Quotation Template'
action_confirm(self)
sale_order_option_ids
One2many → sale.order.option
No public methods.
discount
Float
compute='_compute_discount'
digits='Discount'
precompute=True
readonly=False
store=True
string='Discount (%)'
is_present
Boolean
compute='_compute_is_present'
help="This field will be checked if the option line's product is already present in the quotation."
search='_search_is_present'
string='Present on Quotation'
line_id
Many2one → sale.order.line
comodel_name='sale.order.line'
copy=False
ondelete='set null'
name
Text
compute='_compute_name'
precompute=True
readonly=False
required=True
store=True
string='Description'
order_id
Many2one → sale.order
index=True
ondelete='cascade'
args: 'sale.order', 'Sales Order Reference'
price_unit
Float
compute='_compute_price_unit'
digits='Product Price'
precompute=True
readonly=False
required=True
store=True
string='Unit Price'
product_id
Many2one → product.product
comodel_name='product.product'
domain=[('sale_ok', '=', True)]
required=True
product_uom_category_id
Many2one
related='product_id.uom_id.category_id'
quantity
Float
default=1
digits='Product Unit of Measure'
required=True
string='Quantity'
sequence
Integer
help='Gives the sequence order when displaying a list of optional products.'
string='Sequence'
uom_id
Many2one → uom.uom
comodel_name='uom.uom'
compute='_compute_uom_id'
domain="[('category_id', '=', product_uom_category_id)]"
precompute=True
readonly=False
required=True
store=True
string='Unit of Measure'
add_option_to_order(self)
button_add_to_order(self)
active
Boolean
default=True
help='If unchecked, it will allow you to hide the quotation template without removing it.'
company_id
Many2one → res.company
comodel_name='res.company'
mail_template_id
Many2one → mail.template
comodel_name='mail.template'
domain=[('model', '=', 'sale.order')]
help='This e-mail template will be sent on confirmation. Leave empty to send nothing.'
string='Confirmation Mail'
name
Char
required=True
string='Quotation Template'
note
Html
string='Terms and conditions'
translate=True
number_of_days
Integer
help='Number of days for the validity date computation of the quotation'
string='Quotation Duration'
require_payment
Boolean
compute='_compute_require_payment'
help='Request an online payment to the customer in order to confirm orders automatically.'
readonly=False
store=True
string='Online Payment'
require_signature
Boolean
compute='_compute_require_signature'
help='Request a online signature to the customer in order to confirm orders automatically.'
readonly=False
store=True
string='Online Signature'
sale_order_template_line_ids
One2many → sale.order.template.line
comodel_name='sale.order.template.line'
copy=True
inverse_name='sale_order_template_id'
string='Lines'
sale_order_template_option_ids
One2many → sale.order.template.option
comodel_name='sale.order.template.option'
copy=True
inverse_name='sale_order_template_id'
string='Optional Products'
create(self, vals_list)
write(self, vals)
company_id
Many2one
index=True
related='sale_order_template_id.company_id'
store=True
display_type
Selection
default=False
args: [('line_section', 'Section'), ('line_note', 'Note')]
name
Text
compute='_compute_name'
precompute=True
readonly=False
required=True
store=True
string='Description'
translate=True
product_id
Many2one → product.product
check_company=True
comodel_name='product.product'
domain="[('sale_ok', '=', True), ('company_id', 'in', [company_id, False])]"
product_uom_category_id
Many2one
related='product_id.uom_id.category_id'
product_uom_id
Many2one → uom.uom
comodel_name='uom.uom'
compute='_compute_product_uom_id'
domain="[('category_id', '=', product_uom_category_id)]"
precompute=True
readonly=False
store=True
string='Unit of Measure'
product_uom_qty
Float
default=1
digits='Product Unit of Measure'
required=True
string='Quantity'
sale_order_template_id
Many2one → sale.order.template
comodel_name='sale.order.template'
index=True
ondelete='cascade'
required=True
string='Quotation Template Reference'
sequence
Integer
default=10
help='Gives the sequence order when displaying a list of sale quote lines.'
string='Sequence'
create(self, vals_list)
write(self, values)
company_id
Many2one
index=True
related='sale_order_template_id.company_id'
store=True
name
Text
compute='_compute_name'
precompute=True
readonly=False
required=True
store=True
string='Description'
translate=True
product_id
Many2one → product.product
check_company=True
comodel_name='product.product'
domain="[('sale_ok', '=', True), ('company_id', 'in', [company_id, False])]"
required=True
product_uom_category_id
Many2one
related='product_id.uom_id.category_id'
quantity
Float
default=1
digits='Product Unit of Measure'
required=True
string='Quantity'
sale_order_template_id
Many2one → sale.order.template
comodel_name='sale.order.template'
index=True
ondelete='cascade'
required=True
string='Quotation Template Reference'
uom_id
Many2one → uom.uom
comodel_name='uom.uom'
compute='_compute_uom_id'
domain="[('category_id', '=', product_uom_category_id)]"
precompute=True
readonly=False
required=True
store=True
string='Unit of Measure'
No public methods.
| REPOSITORY | |
|---|---|
| REPOSITORY | odoo/odoo |
| GIT | |
| GIT | https://github.com/odoo/odoo.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/odoo/odoo/tree/15.0/sale_management |
| VERSION | |
| VERSION | 1.0 |
| CATEGORY | |
| CATEGORY | Sales/Sales |
| LICENSE | |
| LICENSE | LGPL-3 |
| APPLICATION | |
| APPLICATION | Yes |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | |
| MAINTAINERS | |
| MAINTAINERS | |
| COMMITTERS | |
| COMMITTERS | Odoo Translation Bot, Martin Trigaux, Thibault Delavallée, Christophe Simonis, Goffin Simon, Nicolas Martinelli, Nicolas Lempereur, Yannick Tivisse, Adrian Torres, Xavier-Do, Victor Feyens, Andrea Grazioso (agr-odoo), Julien Mougenot, Anh Thao Pham (pta), Swapnesh Shah, roen-odoo, Florian Damhaut, mafo-odoo, Michael Mattiello (mcm), Tom De Caluwé, krha-odoo |
| WEBSITE | |
| WEBSITE | https://www.odoo.com/app/sales |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 00:25:26 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
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 |
Manage sales quotations and orders
==================================
This application allows you to manage your sales goals in an effective and efficient manner by keeping track of all sales orders and history.
It handles the full sales workflow:
* **Quotation** -> **Sales order** -> **Invoice**
Preferences (only with Warehouse Management installed)
------------------------------------------------------
If you also installed the Warehouse Management, you can deal with the following preferences:
* Shipping: Choice of delivery at once or partial delivery
* Invoicing: choose how invoices will be paid
* Incoterms: International Commercial terms
With this module you can personnalize the sales order and invoice report with
categories, subtotals or page-breaks.
The Dashboard for the Sales Manager will include
------------------------------------------------
* My Quotations
* Monthly Turnover (Graph)
|
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
digest_digest_view_form |
digest.digest.view.form.inherit.sale.order | digest.digest | xpath | Inherits digest.digest_digest_view_form |
report_saleorder_document_inherit_sale_management |
report_saleorder_document_inherit_sale_management | ir.ui.view | qweb | Inherits sale.report_saleorder_document |
res_config_settings_view_form |
res.config.settings.view.form.inherit.sale.management | res.config.settings | xpath | Inherits sale.res_config_settings_view_form |
res_config_settings_view_form_inherit_sale_management |
res.config.settings.view.form.inherit.sale.management | res.config.settings | xpath | Inherits sale.res_config_settings_view_form |
sale_order_form_quote |
sale.order.form.payment | sale.order | xpath | Inherits sale.view_order_form |
sale_order_portal_content_inherit_sale_management |
Order Options | ir.ui.view | qweb | Inherits sale.sale_order_portal_content |
sale_order_template_view_form |
sale.order.template.form | sale.order.template | form | New |
sale_order_template_view_search |
sale.order.template.search | sale.order.template | search | New |
sale_order_template_view_tree |
sale.order.template.tree | sale.order.template | tree | New |
kpi_all_sale_total
Boolean
kpi_all_sale_total_value
Monetary
compute='_compute_kpi_sale_total_value'
No public methods.
sale_order_template_id
Many2one → sale.order.template
check_company=True
domain="['|', ('company_id', '=', False), ('company_id', '=', id)]"
string='Default Sale Template'
args: 'sale.order.template'
No public methods.
company_so_template_id
Many2one
domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]"
readonly=False
related='company_id.sale_order_template_id'
string='Default Template'
group_sale_order_template
Boolean
implied_group='sale_management.group_sale_order_template'
args: 'Quotation Templates'
module_sale_quotation_builder
Boolean
set_values(self)
sale_order_option_ids
One2many → sale.order.option
copy=True
readonly=True
states={'draft': [('readonly', False)], 'sent': [('readonly', False)]}
args: 'sale.order.option', 'order_id', 'Optional Products Lines'
sale_order_template_id
Many2one → sale.order.template
check_company=True
domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]"
readonly=True
states={'draft': [('readonly', False)], 'sent': [('readonly', False)]}
args: 'sale.order.template', 'Quotation Template'
action_confirm(self)
copy(self, default=None)
default_get(self, fields_list)
get_access_action(self, access_uid=None)
onchange_partner_id(self)
onchange_sale_order_template_id(self)
update_prices(self)
sale_order_option_ids
One2many → sale.order.option
product_id_change(self)
discount
Float
digits='Discount'
args: 'Discount (%)'
is_present
Boolean
compute='_compute_is_present'
help="This field will be checked if the option line's product is already present in the quotation."
search='_search_is_present'
string='Present on Quotation'
line_id
Many2one → sale.order.line
copy=False
ondelete='set null'
args: 'sale.order.line'
name
Text
required=True
args: 'Description'
order_id
Many2one → sale.order
index=True
ondelete='cascade'
args: 'sale.order', 'Sales Order Reference'
price_unit
Float
digits='Product Price'
required=True
args: 'Unit Price'
product_id
Many2one → product.product
domain=[('sale_ok', '=', True)]
required=True
args: 'product.product', 'Product'
product_uom_category_id
Many2one
readonly=True
related='product_id.uom_id.category_id'
quantity
Float
default=1
digits='Product Unit of Measure'
required=True
args: 'Quantity'
sequence
Integer
help='Gives the sequence order when displaying a list of optional products.'
args: 'Sequence'
uom_id
Many2one → uom.uom
domain="[('category_id', '=', product_uom_category_id)]"
required=True
args: 'uom.uom', 'Unit of Measure '
add_option_to_order(self)
button_add_to_order(self)
active
Boolean
default=True
help='If unchecked, it will allow you to hide the quotation template without removing it.'
company_id
Many2one → res.company
string='Company'
args: 'res.company'
mail_template_id
Many2one → mail.template
domain=[('model', '=', 'sale.order')]
help='This e-mail template will be sent on confirmation. Leave empty to send nothing.'
args: 'mail.template', 'Confirmation Mail'
name
Char
required=True
args: 'Quotation Template'
note
Html
translate=True
args: 'Terms and conditions'
number_of_days
Integer
help='Number of days for the validity date computation of the quotation'
args: 'Quotation Duration'
require_payment
Boolean
default=_get_default_require_payment
help='Request an online payment to the customer in order to confirm orders automatically.'
args: 'Online Payment'
require_signature
Boolean
default=_get_default_require_signature
help='Request a online signature to the customer in order to confirm orders automatically.'
args: 'Online Signature'
sale_order_template_line_ids
One2many → sale.order.template.line
copy=True
args: 'sale.order.template.line', 'sale_order_template_id', 'Lines'
sale_order_template_option_ids
One2many → sale.order.template.option
copy=True
args: 'sale.order.template.option', 'sale_order_template_id', 'Optional Products'
create(self, vals_list)
create_or_update_translations(self, model_name, lang_code, res_id, src, value)
write(self, vals)
company_id
Many2one → res.company
index=True
related='sale_order_template_id.company_id'
store=True
args: 'res.company'
display_type
Selection
default=False
help='Technical field for UX purpose.'
args: [('line_section', 'Section'), ('line_note', 'Note')]
name
Text
required=True
translate=True
args: 'Description'
product_id
Many2one → product.product
check_company=True
domain=[('sale_ok', '=', True)]
args: 'product.product', 'Product'
product_uom_category_id
Many2one
readonly=True
related='product_id.uom_id.category_id'
product_uom_id
Many2one → uom.uom
domain="[('category_id', '=', product_uom_category_id)]"
args: 'uom.uom', 'Unit of Measure'
product_uom_qty
Float
default=1
digits='Product Unit of Measure'
required=True
args: 'Quantity'
sale_order_template_id
Many2one → sale.order.template
index=True
ondelete='cascade'
required=True
args: 'sale.order.template', 'Quotation Template Reference'
sequence
Integer
default=10
help='Gives the sequence order when displaying a list of sale quote lines.'
args: 'Sequence'
create(self, values)
write(self, values)
company_id
Many2one → res.company
index=True
related='sale_order_template_id.company_id'
store=True
args: 'res.company'
name
Text
required=True
translate=True
args: 'Description'
product_id
Many2one → product.product
check_company=True
domain=[('sale_ok', '=', True)]
required=True
args: 'product.product', 'Product'
product_uom_category_id
Many2one
readonly=True
related='product_id.uom_id.category_id'
quantity
Float
default=1
digits='Product Unit of Measure'
required=True
args: 'Quantity'
sale_order_template_id
Many2one → sale.order.template
index=True
ondelete='cascade'
required=True
args: 'sale.order.template', 'Quotation Template Reference'
uom_id
Many2one → uom.uom
domain="[('category_id', '=', product_uom_category_id)]"
required=True
args: 'uom.uom', 'Unit of Measure '
No public methods.
| REPOSITORY | |
|---|---|
| REPOSITORY | odoo/odoo |
| GIT | |
| GIT | https://github.com/odoo/odoo.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/odoo/odoo/tree/14.0/sale_management |
| VERSION | |
| VERSION | 1.0 |
| CATEGORY | |
| CATEGORY | Sales/Sales |
| LICENSE | |
| LICENSE | LGPL-3 |
| APPLICATION | |
| APPLICATION | Yes |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | |
| MAINTAINERS | |
| MAINTAINERS | |
| COMMITTERS | |
| COMMITTERS | Odoo Translation Bot, Martin Trigaux, Olivier Dony, Thibault Delavallée, Christophe Simonis, Xavier Morel, Goffin Simon, Nicolas Martinelli, GitHub, Damien Bouvy, Barad Mahendra, Yannick Tivisse, Laurent Smet, Adrian Torres, Xavier-Do, jvm-odoo, Victor Feyens, Andrea Grazioso (agr-odoo), Jason Van Malder, fw-bot, Anh Thao Pham (pta), Rémy Baranx (bar), Swapnesh Shah, Arnaud Joset, Kevin Baptiste, Florian Damhaut, mafo-odoo, jpr-odoo, nda-odoo, Maximilien (malb) |
| WEBSITE | |
| WEBSITE | https://www.odoo.com/page/sales |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 00:14:27 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
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 |
Manage sales quotations and orders
==================================
This application allows you to manage your sales goals in an effective and efficient manner by keeping track of all sales orders and history.
It handles the full sales workflow:
* **Quotation** -> **Sales order** -> **Invoice**
Preferences (only with Warehouse Management installed)
------------------------------------------------------
If you also installed the Warehouse Management, you can deal with the following preferences:
* Shipping: Choice of delivery at once or partial delivery
* Invoicing: choose how invoices will be paid
* Incoterms: International Commercial terms
With this module you can personnalize the sales order and invoice report with
categories, subtotals or page-breaks.
The Dashboard for the Sales Manager will include
------------------------------------------------
* My Quotations
* Monthly Turnover (Graph)
|
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
assets_frontend |
Website Quote frontend assets | ir.ui.view | qweb | Inherits web.assets_frontend |
digest_digest_view_form |
digest.digest.view.form.inherit.sale.order | digest.digest | xpath | Inherits digest.digest_digest_view_form |
report_saleorder_document_inherit_sale_management |
report_saleorder_document_inherit_sale_management | ir.ui.view | qweb | Inherits sale.report_saleorder_document |
res_config_settings_view_form |
res.config.settings.view.form.inherit.sale.management | res.config.settings | xpath | Inherits sale.res_config_settings_view_form |
res_config_settings_view_form_inherit_sale_management |
res.config.settings.view.form.inherit.sale.management | res.config.settings | xpath | Inherits sale.res_config_settings_view_form |
sale_order_form_quote |
sale.order.form.payment | sale.order | xpath | Inherits sale.view_order_form |
sale_order_portal_content_inherit_sale_management |
Order Options | ir.ui.view | qweb | Inherits sale.sale_order_portal_content |
sale_order_template_view_form |
sale.order.template.form | sale.order.template | form | New |
sale_order_template_view_search |
sale.order.template.search | sale.order.template | search | New |
sale_order_template_view_tree |
sale.order.template.tree | sale.order.template | tree | New |
kpi_all_sale_total
Boolean
kpi_all_sale_total_value
Monetary
compute='_compute_kpi_sale_total_value'
No public methods.
sale_order_template_id
Many2one → sale.order.template
check_company=True
domain="['|', ('company_id', '=', False), ('company_id', '=', id)]"
string='Default Sale Template'
args: 'sale.order.template'
No public methods.
company_so_template_id
Many2one
domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]"
readonly=False
related='company_id.sale_order_template_id'
string='Default Template'
group_sale_order_template
Boolean
implied_group='sale_management.group_sale_order_template'
args: 'Quotation Templates'
module_sale_quotation_builder
Boolean
set_values(self)
sale_order_option_ids
One2many → sale.order.option
copy=True
readonly=True
states={'draft': [('readonly', False)], 'sent': [('readonly', False)]}
args: 'sale.order.option', 'order_id', 'Optional Products Lines'
sale_order_template_id
Many2one → sale.order.template
check_company=True
domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]"
readonly=True
states={'draft': [('readonly', False)], 'sent': [('readonly', False)]}
args: 'sale.order.template', 'Quotation Template'
action_confirm(self)
copy(self, default=None)
default_get(self, fields_list)
get_access_action(self, access_uid=None)
onchange_partner_id(self)
onchange_sale_order_template_id(self)
update_prices(self)
sale_order_option_ids
One2many → sale.order.option
product_id_change(self)
discount
Float
digits='Discount'
args: 'Discount (%)'
is_present
Boolean
compute='_compute_is_present'
help="This field will be checked if the option line's product is already present in the quotation."
search='_search_is_present'
string='Present on Quotation'
line_id
Many2one → sale.order.line
copy=False
ondelete='set null'
args: 'sale.order.line'
name
Text
required=True
args: 'Description'
order_id
Many2one → sale.order
index=True
ondelete='cascade'
args: 'sale.order', 'Sales Order Reference'
price_unit
Float
digits='Product Price'
required=True
args: 'Unit Price'
product_id
Many2one → product.product
domain=[('sale_ok', '=', True)]
required=True
args: 'product.product', 'Product'
product_uom_category_id
Many2one
readonly=True
related='product_id.uom_id.category_id'
quantity
Float
default=1
digits='Product Unit of Measure'
required=True
args: 'Quantity'
sequence
Integer
help='Gives the sequence order when displaying a list of optional products.'
args: 'Sequence'
uom_id
Many2one → uom.uom
domain="[('category_id', '=', product_uom_category_id)]"
required=True
args: 'uom.uom', 'Unit of Measure '
add_option_to_order(self)
button_add_to_order(self)
active
Boolean
default=True
help='If unchecked, it will allow you to hide the quotation template without removing it.'
company_id
Many2one → res.company
string='Company'
args: 'res.company'
mail_template_id
Many2one → mail.template
domain=[('model', '=', 'sale.order')]
help='This e-mail template will be sent on confirmation. Leave empty to send nothing.'
args: 'mail.template', 'Confirmation Mail'
name
Char
required=True
args: 'Quotation Template'
note
Text
translate=True
args: 'Terms and conditions'
number_of_days
Integer
help='Number of days for the validity date computation of the quotation'
args: 'Quotation Duration'
require_payment
Boolean
default=_get_default_require_payment
help='Request an online payment to the customer in order to confirm orders automatically.'
args: 'Online Payment'
require_signature
Boolean
default=_get_default_require_signature
help='Request a online signature to the customer in order to confirm orders automatically.'
args: 'Online Signature'
sale_order_template_line_ids
One2many → sale.order.template.line
copy=True
args: 'sale.order.template.line', 'sale_order_template_id', 'Lines'
sale_order_template_option_ids
One2many → sale.order.template.option
copy=True
args: 'sale.order.template.option', 'sale_order_template_id', 'Optional Products'
create(self, vals_list)
create_or_update_translations(self, model_name, lang_code, res_id, src, value)
write(self, vals)
company_id
Many2one → res.company
index=True
related='sale_order_template_id.company_id'
store=True
args: 'res.company'
display_type
Selection
default=False
help='Technical field for UX purpose.'
args: [('line_section', 'Section'), ('line_note', 'Note')]
name
Text
required=True
translate=True
args: 'Description'
product_id
Many2one → product.product
check_company=True
domain=[('sale_ok', '=', True)]
args: 'product.product', 'Product'
product_uom_category_id
Many2one
readonly=True
related='product_id.uom_id.category_id'
product_uom_id
Many2one → uom.uom
domain="[('category_id', '=', product_uom_category_id)]"
args: 'uom.uom', 'Unit of Measure'
product_uom_qty
Float
default=1
digits='Product Unit of Measure'
required=True
args: 'Quantity'
sale_order_template_id
Many2one → sale.order.template
index=True
ondelete='cascade'
required=True
args: 'sale.order.template', 'Quotation Template Reference'
sequence
Integer
default=10
help='Gives the sequence order when displaying a list of sale quote lines.'
args: 'Sequence'
create(self, values)
write(self, values)
company_id
Many2one → res.company
index=True
related='sale_order_template_id.company_id'
store=True
args: 'res.company'
name
Text
required=True
translate=True
args: 'Description'
product_id
Many2one → product.product
check_company=True
domain=[('sale_ok', '=', True)]
required=True
args: 'product.product', 'Product'
product_uom_category_id
Many2one
readonly=True
related='product_id.uom_id.category_id'
quantity
Float
default=1
digits='Product Unit of Measure'
required=True
args: 'Quantity'
sale_order_template_id
Many2one → sale.order.template
index=True
ondelete='cascade'
required=True
args: 'sale.order.template', 'Quotation Template Reference'
uom_id
Many2one → uom.uom
domain="[('category_id', '=', product_uom_category_id)]"
required=True
args: 'uom.uom', 'Unit of Measure '
No public methods.
| REPOSITORY | |
|---|---|
| REPOSITORY | odoo/odoo |
| GIT | |
| GIT | https://github.com/odoo/odoo.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/odoo/odoo/tree/13.0/sale_management |
| VERSION | |
| VERSION | 1.0 |
| CATEGORY | |
| CATEGORY | Sales/Sales |
| LICENSE | |
| LICENSE | LGPL-3 |
| APPLICATION | |
| APPLICATION | Yes |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | |
| MAINTAINERS | |
| MAINTAINERS | |
| COMMITTERS | |
| COMMITTERS | Odoo Translation Bot, Martin Trigaux, Thibault Delavallée, Denis Ledoux, Christophe Simonis, David Monjoie, Xavier Morel, Goffin Simon, Nicolas Martinelli, Damien Bouvy, Barad Mahendra, Yannick Tivisse, qsm-odoo, Odoo Online, Pierre Masereel, jem-odoo, Adrian Torres, Aurélien Warnon, Xavier-Do, jvm-odoo, Victor Feyens, Andrea Grazioso (agr-odoo), Sébastien Theys, Jason Van Malder, Anh Thao Pham (pta), Nicolas Galler, Arnaud Joset, Hetashree Chauhan, Romain Estievenart, asa-odoo, Mitali Patel, Vanneri |
| WEBSITE | |
| WEBSITE | https://www.odoo.com/page/sales |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 00:06:41 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
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 |
Manage sales quotations and orders
==================================
This application allows you to manage your sales goals in an effective and efficient manner by keeping track of all sales orders and history.
It handles the full sales workflow:
* **Quotation** -> **Sales order** -> **Invoice**
Preferences (only with Warehouse Management installed)
------------------------------------------------------
If you also installed the Warehouse Management, you can deal with the following preferences:
* Shipping: Choice of delivery at once or partial delivery
* Invoicing: choose how invoices will be paid
* Incoterms: International Commercial terms
With this module you can personnalize the sales order and invoice report with
categories, subtotals or page-breaks.
The Dashboard for the Sales Manager will include
------------------------------------------------
* My Quotations
* Monthly Turnover (Graph)
|
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
assets_frontend |
Website Quote frontend assets | ir.ui.view | qweb | Inherits web.assets_frontend |
digest_digest_view_form |
digest.digest.view.form.inherit.sale.order | digest.digest | xpath | Inherits digest.digest_digest_view_form |
report_saleorder_document_inherit_sale_management |
report_saleorder_document_inherit_sale_management | ir.ui.view | qweb | Inherits sale.report_saleorder_document |
res_config_settings_view_form |
res.config.settings.view.form.inherit.sale.management | res.config.settings | xpath | Inherits sale.res_config_settings_view_form |
res_config_settings_view_form_inherit_sale_management |
res.config.settings.view.form.inherit.sale.management | res.config.settings | xpath | Inherits sale.res_config_settings_view_form |
sale_order_form_quote |
sale.order.form.payment | sale.order | xpath | Inherits sale.view_order_form |
sale_order_portal_content_inherit_sale_management |
Order Options | ir.ui.view | qweb | Inherits sale.sale_order_portal_content |
sale_order_template_view_form |
sale.order.template.form | sale.order.template | form | New |
sale_order_template_view_search |
sale.order.template.search | sale.order.template | search | New |
sale_order_template_view_tree |
sale.order.template.tree | sale.order.template | tree | New |
kpi_all_sale_total
Boolean
kpi_all_sale_total_value
Monetary
compute='_compute_kpi_sale_total_value'
compute_kpis_actions(self, company, user)
default_sale_order_template_id
Many2one → sale.order.template
default_model='sale.order'
string='Default Template'
args: 'sale.order.template'
group_sale_order_template
Boolean
implied_group='sale_management.group_sale_order_template'
args: 'Quotation Templates'
module_sale_quotation_builder
Boolean
No public methods.
sale_order_option_ids
One2many → sale.order.option
copy=True
readonly=True
states={'draft': [('readonly', False)], 'sent': [('readonly', False)]}
args: 'sale.order.option', 'order_id', 'Optional Products Lines'
sale_order_template_id
Many2one → sale.order.template
check_company=True
domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]"
readonly=True
states={'draft': [('readonly', False)], 'sent': [('readonly', False)]}
args: 'sale.order.template', 'Quotation Template'
action_confirm(self)
copy(self, default=None)
get_access_action(self, access_uid=None)
onchange_partner_id(self)
onchange_sale_order_template_id(self)
sale_order_option_ids
One2many → sale.order.option
product_id_change(self)
discount
Float
digits='Discount'
args: 'Discount (%)'
is_present
Boolean
compute='_compute_is_present'
help="This field will be checked if the option line's product is already present in the quotation."
search='_search_is_present'
string='Present on Quotation'
line_id
Many2one → sale.order.line
copy=False
ondelete='set null'
args: 'sale.order.line'
name
Text
required=True
args: 'Description'
order_id
Many2one → sale.order
index=True
ondelete='cascade'
args: 'sale.order', 'Sales Order Reference'
price_unit
Float
digits='Product Price'
required=True
args: 'Unit Price'
product_id
Many2one → product.product
domain=[('sale_ok', '=', True)]
required=True
args: 'product.product', 'Product'
product_uom_category_id
Many2one
readonly=True
related='product_id.uom_id.category_id'
quantity
Float
default=1
digits='Product UoS'
required=True
args: 'Quantity'
sequence
Integer
help='Gives the sequence order when displaying a list of optional products.'
args: 'Sequence'
uom_id
Many2one → uom.uom
domain="[('category_id', '=', product_uom_category_id)]"
required=True
args: 'uom.uom', 'Unit of Measure '
add_option_to_order(self)
button_add_to_order(self)
active
Boolean
default=True
help='If unchecked, it will allow you to hide the quotation template without removing it.'
company_id
Many2one → res.company
string='Company'
args: 'res.company'
mail_template_id
Many2one → mail.template
domain=[('model', '=', 'sale.order')]
help='This e-mail template will be sent on confirmation. Leave empty to send nothing.'
args: 'mail.template', 'Confirmation Mail'
name
Char
required=True
args: 'Quotation Template'
note
Text
translate=True
args: 'Terms and conditions'
number_of_days
Integer
help='Number of days for the validity date computation of the quotation'
args: 'Quotation Duration'
require_payment
Boolean
default=_get_default_require_payment
help='Request an online payment to the customer in order to confirm orders automatically.'
args: 'Online Payment'
require_signature
Boolean
default=_get_default_require_signature
help='Request a online signature to the customer in order to confirm orders automatically.'
args: 'Online Signature'
sale_order_template_line_ids
One2many → sale.order.template.line
copy=True
args: 'sale.order.template.line', 'sale_order_template_id', 'Lines'
sale_order_template_option_ids
One2many → sale.order.template.option
copy=True
args: 'sale.order.template.option', 'sale_order_template_id', 'Optional Products'
create(self, vals_list)
create_or_update_translations(self, model_name, lang_code, res_id, src, value)
write(self, vals)
company_id
Many2one → res.company
index=True
related='sale_order_template_id.company_id'
store=True
args: 'res.company'
discount
Float
default=0.0
digits='Discount'
args: 'Discount (%)'
display_type
Selection
default=False
help='Technical field for UX purpose.'
args: [('line_section', 'Section'), ('line_note', 'Note')]
name
Text
required=True
translate=True
args: 'Description'
price_unit
Float
digits='Product Price'
required=True
args: 'Unit Price'
product_id
Many2one → product.product
check_company=True
domain=[('sale_ok', '=', True)]
args: 'product.product', 'Product'
product_uom_category_id
Many2one
readonly=True
related='product_id.uom_id.category_id'
product_uom_id
Many2one → uom.uom
domain="[('category_id', '=', product_uom_category_id)]"
args: 'uom.uom', 'Unit of Measure'
product_uom_qty
Float
default=1
digits='Product UoS'
required=True
args: 'Quantity'
sale_order_template_id
Many2one → sale.order.template
index=True
ondelete='cascade'
required=True
args: 'sale.order.template', 'Quotation Template Reference'
sequence
Integer
default=10
help='Gives the sequence order when displaying a list of sale quote lines.'
args: 'Sequence'
create(self, values)
write(self, values)
company_id
Many2one → res.company
index=True
related='sale_order_template_id.company_id'
store=True
args: 'res.company'
discount
Float
digits='Discount'
args: 'Discount (%)'
name
Text
required=True
translate=True
args: 'Description'
price_unit
Float
digits='Product Price'
required=True
args: 'Unit Price'
product_id
Many2one → product.product
check_company=True
domain=[('sale_ok', '=', True)]
required=True
args: 'product.product', 'Product'
product_uom_category_id
Many2one
readonly=True
related='product_id.uom_id.category_id'
quantity
Float
default=1
digits='Product UoS'
required=True
args: 'Quantity'
sale_order_template_id
Many2one → sale.order.template
index=True
ondelete='cascade'
required=True
args: 'sale.order.template', 'Quotation Template Reference'
uom_id
Many2one → uom.uom
domain="[('category_id', '=', product_uom_category_id)]"
required=True
args: 'uom.uom', 'Unit of Measure '
No public methods.
| REPOSITORY | |
|---|---|
| REPOSITORY | odoo/odoo |
| GIT | |
| GIT | https://github.com/odoo/odoo.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/odoo/odoo/tree/12.0/sale_management |
| VERSION | |
| VERSION | 1.0 |
| CATEGORY | |
| CATEGORY | Sales |
| LICENSE | |
| LICENSE | LGPL-3 |
| APPLICATION | |
| APPLICATION | Yes |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | |
| MAINTAINERS | |
| MAINTAINERS | |
| COMMITTERS | |
| COMMITTERS | Odoo Translation Bot, Martin Trigaux, Fabien Pinckaers, Thibault Delavallée, Denis Ledoux, Christophe Simonis, Goffin Simon, Nicolas Martinelli, Nicolas Lempereur, Jeremy Kersten, GitHub, Lucas Perais (lpe), Yannick Tivisse, Alexandre Kühn, qsm-odoo, Romain Derie, RomainLibert, Christophe Monniez, Nans Lefebvre, Aurélien Warnon, Xavier-Do, Victor Feyens, Sébastien Theys, Luis González, Hubert (huvw) |
| WEBSITE | |
| WEBSITE | https://www.odoo.com/page/sales |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-05 23:57:00 |
| 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 |
Manage sales quotations and orders
==================================
This application allows you to manage your sales goals in an effective and efficient manner by keeping track of all sales orders and history.
It handles the full sales workflow:
* **Quotation** -> **Sales order** -> **Invoice**
Preferences (only with Warehouse Management installed)
------------------------------------------------------
If you also installed the Warehouse Management, you can deal with the following preferences:
* Shipping: Choice of delivery at once or partial delivery
* Invoicing: choose how invoices will be paid
* Incoterms: International Commercial terms
With this module you can personnalize the sales order and invoice report with
categories, subtotals or page-breaks.
The Dashboard for the Sales Manager will include
------------------------------------------------
* My Quotations
* Monthly Turnover (Graph)
|
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
assets_backend_inherit_sale_management |
Sale management backend assets | ir.ui.view | qweb | Inherits web.assets_backend |
assets_frontend |
Website Quote frontend assets | ir.ui.view | qweb | Inherits web.assets_frontend |
digest_digest_view_form |
digest.digest.view.form.inherit.sale.order | digest.digest | xpath | Inherits digest.digest_digest_view_form |
product_template_sale_form_view |
product.template.sales | product.template | xpath | Inherits product.product_template_form_view |
report_saleorder_document_inherit_sale_management |
report_saleorder_document_inherit_sale_management | ir.ui.view | qweb | Inherits sale.report_saleorder_document |
res_config_settings_view_form |
res.config.settings.view.form.inherit.sale.management | res.config.settings | xpath | Inherits sale.res_config_settings_view_form |
res_config_settings_view_form_inherit_sale_management |
res.config.settings.view.form.inherit.sale.management | res.config.settings | xpath | Inherits sale.res_config_settings_view_form |
sale_order_form_quote |
sale.order.form.payment | sale.order | xpath | Inherits sale.view_order_form |
sale_order_portal_content_inherit_sale_management |
Order Options | ir.ui.view | qweb | Inherits sale.sale_order_portal_content |
sale_order_template_view_form |
sale.order.template.form | sale.order.template | form | New |
sale_order_template_view_search |
sale.order.template.search | sale.order.template | search | New |
sale_order_template_view_tree |
sale.order.template.tree | sale.order.template | tree | New |
sale_order_view_form |
sale.order.form | sale.order | xpath | Inherits sale.view_order_form |
sale_order_view_tree |
sale.order.tree | sale.order | field | Inherits sale.view_order_tree |
kpi_all_sale_total
Boolean
kpi_all_sale_total_value
Monetary
compute='_compute_kpi_sale_total_value'
compute_kpis_actions(self, company, user)
default_sale_order_template_id
Many2one → sale.order.template
default_model='sale.order'
string='Default Template'
args: 'sale.order.template'
group_sale_order_template
Boolean
implied_group='sale_management.group_sale_order_template'
args: 'Quotation Templates'
module_sale_quotation_builder
Boolean
No public methods.
sale_order_option_ids
One2many → sale.order.option
copy=True
readonly=True
states={'draft': [('readonly', False)], 'sent': [('readonly', False)]}
args: 'sale.order.option', 'order_id', 'Optional Products Lines'
sale_order_template_id
Many2one → sale.order.template
readonly=True
states={'draft': [('readonly', False)], 'sent': [('readonly', False)]}
args: 'sale.order.template', 'Quotation Template'
action_confirm(self)
copy(self, default=None)
get_access_action(self, access_uid=None)
onchange_partner_id(self)
onchange_sale_order_template_id(self)
sale_order_option_ids
One2many → sale.order.option
product_id_change(self)
discount
Float
digits=dp.get_precision('Discount')
args: 'Discount (%)'
line_id
Many2one → sale.order.line
on_delete='set null'
args: 'sale.order.line'
name
Text
required=True
args: 'Description'
order_id
Many2one → sale.order
index=True
ondelete='cascade'
args: 'sale.order', 'Sales Order Reference'
price_unit
Float
digits=dp.get_precision('Product Price')
required=True
args: 'Unit Price'
product_id
Many2one → product.product
domain=[('sale_ok', '=', True)]
required=True
args: 'product.product', 'Product'
quantity
Float
default=1
digits=dp.get_precision('Product UoS')
required=True
args: 'Quantity'
sequence
Integer
help='Gives the sequence order when displaying a list of optional products.'
args: 'Sequence'
uom_id
Many2one → uom.uom
required=True
args: 'uom.uom', 'Unit of Measure '
add_option_to_order(self)
button_add_to_order(self)
active
Boolean
default=True
help='If unchecked, it will allow you to hide the quotation template without removing it.'
mail_template_id
Many2one → mail.template
domain=[('model', '=', 'sale.order')]
help='This e-mail template will be sent on confirmation. Leave empty to send nothing.'
args: 'mail.template', 'Confirmation Mail'
name
Char
required=True
args: 'Quotation Template'
note
Text
translate=True
args: 'Terms and conditions'
number_of_days
Integer
help='Number of days for the validity date computation of the quotation'
args: 'Quotation Duration'
require_payment
Boolean
default=_get_default_require_payment
help='Request an online payment to the customer in order to confirm orders automatically.'
args: 'Online Payment'
require_signature
Boolean
default=_get_default_require_signature
help='Request a online signature to the customer in order to confirm orders automatically.'
args: 'Online Signature'
sale_order_template_line_ids
One2many → sale.order.template.line
copy=True
args: 'sale.order.template.line', 'sale_order_template_id', 'Lines'
sale_order_template_option_ids
One2many → sale.order.template.option
copy=True
args: 'sale.order.template.option', 'sale_order_template_id', 'Optional Products'
write(self, vals)
discount
Float
default=0.0
digits=dp.get_precision('Discount')
args: 'Discount (%)'
display_type
Selection
default=False
help='Technical field for UX purpose.'
args: [('line_section', 'Section'), ('line_note', 'Note')]
name
Text
required=True
translate=True
args: 'Description'
price_unit
Float
digits=dp.get_precision('Product Price')
required=True
args: 'Unit Price'
product_id
Many2one → product.product
domain=[('sale_ok', '=', True)]
args: 'product.product', 'Product'
product_uom_id
Many2one → uom.uom
product_uom_qty
Float
default=1
digits=dp.get_precision('Product UoS')
required=True
args: 'Quantity'
sale_order_template_id
Many2one → sale.order.template
index=True
ondelete='cascade'
required=True
args: 'sale.order.template', 'Quotation Template Reference'
sequence
Integer
default=10
help='Gives the sequence order when displaying a list of sale quote lines.'
args: 'Sequence'
create(self, values)
write(self, values)
discount
Float
digits=dp.get_precision('Discount')
args: 'Discount (%)'
name
Text
required=True
translate=True
args: 'Description'
price_unit
Float
digits=dp.get_precision('Product Price')
required=True
args: 'Unit Price'
product_id
Many2one → product.product
domain=[('sale_ok', '=', True)]
required=True
args: 'product.product', 'Product'
quantity
Float
default=1
digits=dp.get_precision('Product UoS')
required=True
args: 'Quantity'
sale_order_template_id
Many2one → sale.order.template
index=True
ondelete='cascade'
required=True
args: 'sale.order.template', 'Quotation Template Reference'
uom_id
Many2one → uom.uom
required=True
args: 'uom.uom', 'Unit of Measure '
No public methods.
| REPOSITORY | |
|---|---|
| REPOSITORY | odoo/odoo |
| GIT | |
| GIT | https://github.com/odoo/odoo.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/odoo/odoo/tree/11.0/sale_management |
| VERSION | |
| VERSION | 1.0 |
| CATEGORY | |
| CATEGORY | Sales |
| LICENSE | |
| LICENSE | LGPL-3 |
| APPLICATION | |
| APPLICATION | Yes |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | |
| MAINTAINERS | |
| MAINTAINERS | |
| COMMITTERS | |
| COMMITTERS | Odoo Translation Bot, Martin Trigaux, Christophe Simonis, GitHub, Yannick Tivisse, Odoo Online, Adrian Torres |
| WEBSITE | |
| WEBSITE | https://www.odoo.com/page/sales |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-05 23:53:42 |
| 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 - account_invoicing |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES | Not have |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION |
Manage sales quotations and orders
==================================
This application allows you to manage your sales goals in an effective and efficient manner by keeping track of all sales orders and history.
It handles the full sales workflow:
* **Quotation** -> **Sales order** -> **Invoice**
Preferences (only with Warehouse Management installed)
------------------------------------------------------
If you also installed the Warehouse Management, you can deal with the following preferences:
* Shipping: Choice of delivery at once or partial delivery
* Invoicing: choose how invoices will be paid
* Incoterms: International Commercial terms
You can choose flexible invoicing methods:
* *On Demand*: Invoices are created manually from Sales Orders when needed
* *On Delivery Order*: Invoices are generated from picking (delivery)
* *Before Delivery*: A Draft invoice is created and must be paid before delivery
With this module you can personnalize the sales order and invoice report with
categories, subtotals or page-breaks.
The Dashboard for the Sales Manager will include
------------------------------------------------
* My Quotations
* Monthly Turnover (Graph)
|
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
assets_backend |
project assets | ir.ui.view | qweb | Inherits sales_team.assets_backend |
res_config_settings_view_form_inherit_sale_management |
res.config.settings.view.form.inherit.sale.management | res.config.settings | xpath | Inherits sale.res_config_settings_view_form |
sale_order_view_form |
sale.order.form | sale.order | xpath | Inherits sale.view_order_form |
sale_order_view_tree |
sale.order.tree | sale.order | field | Inherits sale.view_order_tree |
No models found for this module.