Sales

sale_management
REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/19.0/sale_management
VERSION
VERSION 1.0
CATEGORY
CATEGORYSales/Sales
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONYes
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo S.A.
MAINTAINERS
MAINTAINERSOdoo S.A.
COMMITTERS
COMMITTERSRaphael 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
WEBSITEhttps://www.odoo.com/app/sales
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 01:51:40
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - sale
    - sales_team
    - base
    - mail
    - base_setup
    - web
    - bus
    - web_tour
    - html_editor
    - account_payment
    - account
    - onboarding
    - product
    - uom
    - analytic
    - portal
    - http_routing
    - auth_signup
    - digest
    - resource
    - payment
    - utm
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
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)
    

Code Analysis

Views touched (8)
XML IDNameModelTypeStatus
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
Models touched (7)

New fields (2)
  • kpi_all_sale_total Boolean
    args: 'All Sales'
  • kpi_all_sale_total_value Monetary
    compute='_compute_kpi_sale_total_value'
Public methods (0)

No public methods.

New fields (1)
  • 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'
Public methods (0)

No public methods.

New fields (2)
  • 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'
Public methods (1)
  • set_values(self)

New fields (1)
  • 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'
Public methods (1)
  • action_confirm(self)

New fields (1)
  • is_optional Boolean
    copy=True default=False string='Optional Line'
Public methods (0)

No public methods.

New fields (12)
  • 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
Public methods (2)
  • create(self, vals_list)
    @api.model_create_multi
  • write(self, vals)

New fields (11)
  • 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'
Public methods (2)
  • create(self, vals_list)
    @api.model_create_multi
  • write(self, vals)
REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/18.0/sale_management
VERSION
VERSION 1.0
CATEGORY
CATEGORYSales/Sales
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONYes
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORS
MAINTAINERS
MAINTAINERS
COMMITTERS
COMMITTERSOdoo 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
WEBSITEhttps://www.odoo.com/app/sales
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 01:25:53
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - sale
    - sales_team
    - base
    - mail
    - base_setup
    - web
    - bus
    - web_tour
    - html_editor
    - account_payment
    - account
    - onboarding
    - product
    - uom
    - analytic
    - portal
    - web_editor
    - http_routing
    - auth_signup
    - digest
    - resource
    - payment
    - utm
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
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)
    

Code Analysis

Views touched (8)
XML IDNameModelTypeStatus
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
Models touched (9)

New fields (2)
  • kpi_all_sale_total Boolean
    args: 'All Sales'
  • kpi_all_sale_total_value Monetary
    compute='_compute_kpi_sale_total_value'
Public methods (0)

No public methods.

New fields (1)
  • 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'
Public methods (0)

No public methods.

New fields (2)
  • 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'
Public methods (1)
  • set_values(self)

New fields (2)
  • 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'
Public methods (1)
  • action_confirm(self)

New fields (1)
  • sale_order_option_ids One2many → sale.order.option
    args: 'sale.order.option', 'line_id', 'Optional Products Lines'
Public methods (0)

No public methods.

New fields (11)
  • 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'
Public methods (2)
  • add_option_to_order(self)
  • button_add_to_order(self)

New fields (13)
  • 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
Public methods (2)
  • create(self, vals_list)
    @api.model_create_multi
  • write(self, vals)

New fields (9)
  • 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'
Public methods (2)
  • create(self, vals_list)
    @api.model_create_multi
  • write(self, values)

New fields (7)
  • 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'
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/17.0/sale_management
VERSION
VERSION 1.0
CATEGORY
CATEGORYSales/Sales
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONYes
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORS
MAINTAINERS
MAINTAINERS
COMMITTERS
COMMITTERSOdoo 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
WEBSITEhttps://www.odoo.com/app/sales
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 01:02:04
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - 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
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)
    

Code Analysis

Views touched (8)
XML IDNameModelTypeStatus
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
Models touched (9)

New fields (2)
  • kpi_all_sale_total Boolean
    args: 'All Sales'
  • kpi_all_sale_total_value Monetary
    compute='_compute_kpi_sale_total_value'
Public methods (0)

No public methods.

New fields (1)
  • 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'
Public methods (0)

No public methods.

New fields (2)
  • 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'
Public methods (1)
  • set_values(self)

New fields (2)
  • 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'
Public methods (1)
  • action_confirm(self)

New fields (1)
  • sale_order_option_ids One2many → sale.order.option
    args: 'sale.order.option', 'line_id', 'Optional Products Lines'
Public methods (0)

No public methods.

New fields (11)
  • 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'
Public methods (2)
  • add_option_to_order(self)
  • button_add_to_order(self)

New fields (12)
  • 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'
Public methods (2)
  • create(self, vals_list)
    @api.model_create_multi
  • write(self, vals)

New fields (9)
  • 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'
Public methods (2)
  • create(self, vals_list)
    @api.model_create_multi
  • write(self, values)

New fields (7)
  • 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'
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/16.0/sale_management
VERSION
VERSION 1.0
CATEGORY
CATEGORYSales/Sales
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONYes
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORS
MAINTAINERS
MAINTAINERS
COMMITTERS
COMMITTERSRaphael 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
WEBSITEhttps://www.odoo.com/app/sales
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:40:46
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - sale
    - sales_team
    - base
    - mail
    - base_setup
    - web
    - bus
    - web_tour
    - account_payment
    - account
    - product
    - uom
    - analytic
    - portal
    - web_editor
    - http_routing
    - auth_signup
    - digest
    - resource
    - payment
    - utm
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
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)
    

Code Analysis

Views touched (9)
XML IDNameModelTypeStatus
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
Models touched (9)

New fields (2)
  • kpi_all_sale_total Boolean
    args: 'All Sales'
  • kpi_all_sale_total_value Monetary
    compute='_compute_kpi_sale_total_value'
Public methods (0)

No public methods.

New fields (1)
  • 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'
Public methods (0)

No public methods.

New fields (3)
  • 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
    args: 'Quotation Builder'
Public methods (1)
  • set_values(self)

New fields (2)
  • 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'
Public methods (1)
  • action_confirm(self)

New fields (1)
  • sale_order_option_ids One2many → sale.order.option
    args: 'sale.order.option', 'line_id', 'Optional Products Lines'
Public methods (0)

No public methods.

New fields (11)
  • 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'
Public methods (2)
  • add_option_to_order(self)
  • button_add_to_order(self)

New fields (10)
  • 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'
Public methods (2)
  • create(self, vals_list)
    @api.model_create_multi
  • write(self, vals)

New fields (9)
  • 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'
Public methods (2)
  • create(self, vals_list)
    @api.model_create_multi
  • write(self, values)

New fields (7)
  • 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'
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/15.0/sale_management
VERSION
VERSION 1.0
CATEGORY
CATEGORYSales/Sales
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONYes
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORS
MAINTAINERS
MAINTAINERS
COMMITTERS
COMMITTERSOdoo 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
WEBSITEhttps://www.odoo.com/app/sales
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:25:26
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - sale
    - sales_team
    - base
    - mail
    - base_setup
    - web
    - bus
    - web_tour
    - payment
    - account
    - product
    - uom
    - analytic
    - portal
    - web_editor
    - http_routing
    - auth_signup
    - digest
    - resource
    - utm
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
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)
    

Code Analysis

Views touched (9)
XML IDNameModelTypeStatus
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
Models touched (9)

New fields (2)
  • kpi_all_sale_total Boolean
    args: 'All Sales'
  • kpi_all_sale_total_value Monetary
    compute='_compute_kpi_sale_total_value'
Public methods (0)

No public methods.

New fields (1)
  • 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'
Public methods (0)

No public methods.

New fields (3)
  • 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
    args: 'Quotation Builder'
Public methods (1)
  • set_values(self)

New fields (2)
  • 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'
Public methods (7)
  • action_confirm(self)
  • copy(self, default=None)
    @api.returns('self', <expr>)
  • default_get(self, fields_list)
    @api.model
  • get_access_action(self, access_uid=None)
    Instead of the classic form view, redirect to the online quote if it exists.
  • onchange_partner_id(self)
    @api.onchange('partner_id')
  • onchange_sale_order_template_id(self)
    @api.onchange('sale_order_template_id')
  • update_prices(self)

New fields (1)
  • sale_order_option_ids One2many → sale.order.option
    args: 'sale.order.option', 'line_id', 'Optional Products Lines'
Public methods (1)
  • product_id_change(self)
    @api.onchange('product_id')

New fields (11)
  • 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 '
Public methods (2)
  • add_option_to_order(self)
  • button_add_to_order(self)

New fields (10)
  • 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'
Public methods (3)
  • create(self, vals_list)
    @api.model_create_multi
  • create_or_update_translations(self, model_name, lang_code, res_id, src, value)
  • write(self, vals)

New fields (9)
  • 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'
Public methods (2)
  • create(self, values)
    @api.model
  • write(self, values)

New fields (7)
  • 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 '
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/14.0/sale_management
VERSION
VERSION 1.0
CATEGORY
CATEGORYSales/Sales
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONYes
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORS
MAINTAINERS
MAINTAINERS
COMMITTERS
COMMITTERSOdoo 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
WEBSITEhttps://www.odoo.com/page/sales
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:14:27
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - sale
    - sales_team
    - base
    - mail
    - base_setup
    - web
    - bus
    - web_tour
    - payment
    - account
    - product
    - uom
    - analytic
    - portal
    - web_editor
    - http_routing
    - auth_signup
    - digest
    - resource
    - utm
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
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)
    

Code Analysis

Views touched (10)
XML IDNameModelTypeStatus
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
Models touched (9)

New fields (2)
  • kpi_all_sale_total Boolean
    args: 'All Sales'
  • kpi_all_sale_total_value Monetary
    compute='_compute_kpi_sale_total_value'
Public methods (0)

No public methods.

New fields (1)
  • 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'
Public methods (0)

No public methods.

New fields (3)
  • 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
    args: 'Quotation Builder'
Public methods (1)
  • set_values(self)

New fields (2)
  • 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'
Public methods (7)
  • action_confirm(self)
  • copy(self, default=None)
    @api.returns('self', <expr>)
  • default_get(self, fields_list)
    @api.model
  • get_access_action(self, access_uid=None)
    Instead of the classic form view, redirect to the online quote if it exists.
  • onchange_partner_id(self)
    @api.onchange('partner_id')
  • onchange_sale_order_template_id(self)
    @api.onchange('sale_order_template_id')
  • update_prices(self)

New fields (1)
  • sale_order_option_ids One2many → sale.order.option
    args: 'sale.order.option', 'line_id', 'Optional Products Lines'
Public methods (1)
  • product_id_change(self)
    @api.onchange('product_id')

New fields (11)
  • 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 '
Public methods (2)
  • add_option_to_order(self)
  • button_add_to_order(self)

New fields (10)
  • 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'
Public methods (3)
  • create(self, vals_list)
    @api.model_create_multi
  • create_or_update_translations(self, model_name, lang_code, res_id, src, value)
  • write(self, vals)

New fields (9)
  • 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'
Public methods (2)
  • create(self, values)
    @api.model
  • write(self, values)

New fields (7)
  • 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 '
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/13.0/sale_management
VERSION
VERSION 1.0
CATEGORY
CATEGORYSales/Sales
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONYes
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORS
MAINTAINERS
MAINTAINERS
COMMITTERS
COMMITTERSOdoo 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
WEBSITEhttps://www.odoo.com/page/sales
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:06:41
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - sale
    - sales_team
    - base
    - mail
    - base_setup
    - web
    - bus
    - web_tour
    - payment
    - account
    - product
    - uom
    - analytic
    - portal
    - web_editor
    - http_routing
    - auth_signup
    - digest
    - resource
    - utm
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
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)
    

Code Analysis

Views touched (10)
XML IDNameModelTypeStatus
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
Models touched (8)

New fields (2)
  • kpi_all_sale_total Boolean
    args: 'All Sales'
  • kpi_all_sale_total_value Monetary
    compute='_compute_kpi_sale_total_value'
Public methods (1)
  • compute_kpis_actions(self, company, user)

New fields (3)
  • 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
    args: 'Quotation Builder'
Public methods (0)

No public methods.

New fields (2)
  • 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'
Public methods (5)
  • action_confirm(self)
  • copy(self, default=None)
    @api.returns('self', <expr>)
  • get_access_action(self, access_uid=None)
    Instead of the classic form view, redirect to the online quote if it exists.
  • onchange_partner_id(self)
    @api.onchange('partner_id')
  • onchange_sale_order_template_id(self)
    @api.onchange('sale_order_template_id')

New fields (1)
  • sale_order_option_ids One2many → sale.order.option
    args: 'sale.order.option', 'line_id', 'Optional Products Lines'
Public methods (1)
  • product_id_change(self)
    @api.onchange('product_id')

New fields (11)
  • 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 '
Public methods (2)
  • add_option_to_order(self)
  • button_add_to_order(self)

New fields (10)
  • 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'
Public methods (3)
  • create(self, vals_list)
    @api.model_create_multi
  • create_or_update_translations(self, model_name, lang_code, res_id, src, value)
  • write(self, vals)

New fields (11)
  • 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'
Public methods (2)
  • create(self, values)
    @api.model
  • write(self, values)

New fields (9)
  • 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 '
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/12.0/sale_management
VERSION
VERSION 1.0
CATEGORY
CATEGORYSales
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONYes
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORS
MAINTAINERS
MAINTAINERS
COMMITTERS
COMMITTERSOdoo 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
WEBSITEhttps://www.odoo.com/page/sales
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-05 23:57:00
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - sale
    - sales_team
    - base
    - mail
    - 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)
    

Code Analysis

Views touched (14)
XML IDNameModelTypeStatus
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
Models touched (8)

New fields (2)
  • kpi_all_sale_total Boolean
    args: 'All Sales'
  • kpi_all_sale_total_value Monetary
    compute='_compute_kpi_sale_total_value'
Public methods (1)
  • compute_kpis_actions(self, company, user)

New fields (3)
  • 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
    args: 'Quotation Builder'
Public methods (0)

No public methods.

New fields (2)
  • 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'
Public methods (5)
  • action_confirm(self)
    @api.multi
  • copy(self, default=None)
    @api.multi@api.returns('self', <expr>)
  • get_access_action(self, access_uid=None)
    @api.multi
    Instead of the classic form view, redirect to the online quote if it exists.
  • onchange_partner_id(self)
    @api.onchange('partner_id')
  • onchange_sale_order_template_id(self)
    @api.onchange('sale_order_template_id')

New fields (1)
  • sale_order_option_ids One2many → sale.order.option
    args: 'sale.order.option', 'line_id', 'Optional Products Lines'
Public methods (1)
  • product_id_change(self)
    @api.onchange('product_id')

New fields (9)
  • 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 '
Public methods (2)
  • add_option_to_order(self)
    @api.multi
  • button_add_to_order(self)
    @api.multi

New fields (9)
  • 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'
Public methods (1)
  • write(self, vals)
    @api.multi

New fields (9)
  • 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
    args: 'uom.uom', 'Unit of Measure'
  • 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'
Public methods (2)
  • create(self, values)
    @api.model
  • write(self, values)
    @api.multi

New fields (7)
  • 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 '
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/11.0/sale_management
VERSION
VERSION 1.0
CATEGORY
CATEGORYSales
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONYes
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORS
MAINTAINERS
MAINTAINERS
COMMITTERS
COMMITTERSOdoo Translation Bot, Martin Trigaux, Christophe Simonis, GitHub, Yannick Tivisse, Odoo Online, Adrian Torres
WEBSITE
WEBSITEhttps://www.odoo.com/page/sales
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-05 23:53:42
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - sale
    - sales_team
    - base
    - mail
    - 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)
    

Code Analysis

Views touched (4)
XML IDNameModelTypeStatus
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
Models touched (0)

No models found for this module.