TIP: You can type at any time to perform a new search.

Security findings

Repository
odoo/odoo · module folder
Module version
0.1.0
Category
Sales/Sales
Folder size
2.03 MB
License
LGPL-3
Application
Yes
Auto-installable
No
Website
https://www.odoo.com/app/sales
Last tracking update
2026-10-05 00:19:42
Authors
Odoo S.A.
Maintainers
Odoo S.A.
Committers
Raphael Collet, Odoo Translation Bot, Christophe Matthieu, Géry Debongnie, Victor Feyens, Tiffany Chang (tic), Romain Estievenart, william-andre, Antoine Vandevenne (anv), luvi, Victor Piryns (pivi), Pierre-Yves Dufays, Robin Lejeune (role), Dylan Kiss (dyki), Xavier Luyckx (xlu), pkgu-odoo, Mohammad Abdulmoneim (abdu), Michaël Mattiello, Shrey Mehta, Carmine, Mahdi Alijani (malj), Krzysztof Magusiak (krma), krip-odoo, nsirjacobs, Lancelot Semal, Julien Launois (jula), Waleed Elgamal, Nisarg (nipl), assh-odoo, Merlin Guillaume, Julien Carion, ELCO, Khaj-odoo, khaj-odoo, chpa-odoo, Nuno, Krishna Patel, Jean Schoenlaub, Corentin Deruyck, Ahmed Hamila, Cezar Bulancea (cebul), mekot-odoo, Mahiv Ram
Odoo dependencies
Python dependencies
None
System dependencies
None
Required by
event_sale, pos_sale, repair, sale_expense, sale_margin, sale_pdf_quote_builder, sale_project, sale_service, test_sale_product_configurators
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 info_outline

Views touched (9)
XML IDNameModelTypeStatus
digest_digest_view_form digest.digest.view.form.inherit.sale_management digest.digest form Inherits digest.digest_digest_view_form
res_config_settings_view_form res.config.settings.view.form.inherit.sale.management res.config.settings form Inherits sale.res_config_settings_view_form
sale_order_form_quote sale.order.form.inherit.sale_management sale.order form 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_form_mandatory_product sale.order.template.form.mandatory.product sale.order.template form Inherits sale_management.sale_order_template_view_form
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
HTTP endpoints (1)
Route(s)HandlerAuthTypeMethodsFlags
/my/orders/<int:order_id>/update_line_dict CustomerPortal.portal_quote_option_update public jsonrpc ALL sudo website
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_line_id Many2one → sale.order.template.line
    index='btree_not_null' ondelete='cascade' string='Quotation Template Line' args: 'sale.order.template.line'
Public methods (0)

No public methods.

New fields (0)

No new fields.

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' domain="[\n ('template_type', '=', 'quotation'),\n '|',\n ('company_id', '=', False),\n ('company_id', '=', company_id),\n ]" index='btree_not_null' readonly=False store=True string='Template'
Public methods (2)
  • action_confirm(self)
  • action_create_quotation_template(self)

New fields (1)
  • is_optional Boolean
    copy=True default=False string='Optional Line'
Public methods (1)
  • save_section_template(self)
    Create a `sale.order.template` from a section and its related lines. Given a section line of a sale order, this method collects the section itself and all its related lines, and stores them as an inactive ``sale.order.template`` with template_type ``section``. If a template with the same name and user already exists, its lines are replaced; otherwise, a new template is created. :return: created/updated section template values

New fields (17)
  • active Boolean
    default=True help='If unchecked, it will allow you to hide the Order template without removing it.'
  • company_id Many2one → res.company
    comodel_name='res.company' default=<expr>
  • currency_id Many2one → res.currency
    comodel_name='res.currency' string='Currency'
  • has_productless_lines Boolean
    compute='_compute_has_productless_lines'
  • journal_id Many2one → account.journal
    check_company=True comodel_name='account.journal' 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='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='Template' translate=True
  • 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'
  • 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
  • share_template Boolean
    default=True string='Share'
  • team_ids Many2many → crm.team
    comodel_name='crm.team' string='Sales Team'
  • template_type Selection
    default='quotation' required=True selection=[('quotation', 'Quotation'), ('section', 'Section')] string='Type'
  • user_has_access Boolean
    compute='_compute_user_has_access' search='_search_user_has_access' string='Can User access'
Public methods (3)
  • get_section_templates(self, company_id)
    @api.model
    Return section templates created by the current user for the given company and its accessible branches. :param int company_id: ID of the company to fetch templates for :return: Section templates :rtype: list[dict]
  • prepare_section_template_order_lines(self, order_changes, fiscal_position_id, company_id, currency_id, fields_spec)
    Prepare `sale.order.line` value dicts from a section template. Builds order line values from the given section template, applies `sale.order.line` onchange with provided order-level changes, and returns the resulting values ready for insertion. :param dict order_changes: Order values to consider for onchange :param int fiscal_position_id: fiscal position of the order :param int company_id: company of the order :param int currency_id: currency of the order :param dict fields_spec: Fields specification for onchange :return: Prepared sale order line values :rtype: list[dict]
  • unlink_section_template(self)
    Unlink the template with sudo if it is a section template. :return: Whether the template was unlinked :rtype: bool

New fields (25)
  • allowed_uom_ids Many2many → uom.uom
    compute='_compute_allowed_uom_ids' args: 'uom.uom'
  • collapse_composition Boolean
  • collapse_prices Boolean
  • company_id Many2one
    index=True related='sale_order_template_id.company_id' store=True
  • discount Float
    digits='Discount' string='Discount (%)'
  • display_type Selection
    default=False args: [('line_section', 'Section'), ('line_subsection', 'Subsection'), ('line_note', 'Note')]
  • is_configurable_product Boolean
    depends=['product_template_id'] related='product_template_id.has_configurable_attributes' string='Is the product configurable?'
  • is_optional Boolean
    copy=True default=False string='Optional Line'
  • label Text
    compute='_compute_label' inverse='_inverse_label' string='Label'
  • mandatory_product Boolean
    compute='_compute_mandatory_product' string='Is Product Mandatory'
  • name Text
    compute='_compute_name' precompute=True readonly=False store=True 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'
  • price_unit Float
    digits='Product Price' min_display_digits='Product Price' string='Unit Price'
  • product_custom_attribute_value_ids One2many → product.attribute.custom.value
    comodel_name='product.attribute.custom.value' compute='_compute_custom_attribute_values' copy=True inverse_name='sale_order_template_line_id' precompute=True readonly=False store=True string='Custom Values'
  • product_id Many2one → product.product
    check_company=True comodel_name='product.product' domain=<expr>
  • product_no_variant_attribute_value_ids Many2many → product.template.attribute.value
    comodel_name='product.template.attribute.value' compute='_compute_no_variant_attribute_values' init_storage=<expr> ondelete='restrict' precompute=True readonly=False store=True string='Extra Values'
  • product_template_attribute_value_ids Many2many
    depends=['product_id'] related='product_id.product_template_attribute_value_ids'
  • product_template_id Many2one → product.template
    comodel_name='product.template' compute='_compute_product_template_id' domain=<expr> readonly=False search='_search_product_template_id' string='Product Template'
  • product_uom_id Many2one → uom.uom
    comodel_name='uom.uom' compute='_compute_product_uom_id' domain="[('id', 'in', allowed_uom_ids)] if allowed_uom_ids or mandatory_product else []" 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'
  • section_qty Float
    compute='_compute_section_qty' digits='Product Unit' precompute=True readonly=False store=True string='Section Quantity'
  • section_uom_id Many2one → uom.uom
    comodel_name='uom.uom' compute='_compute_section_uom_id' precompute=True readonly=False store=True string='Section Unit of Measure'
  • sequence Integer
    default=10 help='Gives the sequence order when displaying a list of sale quote lines.' string='Sequence'
  • tax_ids Many2many → account.tax
    check_company=True comodel_name='account.tax' string='Taxes'
Public methods (3)
  • action_add_from_catalog(self)
  • create(self, vals_list)
    @api.model_create_multi
  • write(self, vals)

Loading…

Loading…

Loading…

Loading…

Loading…

Loading…

Loading…

Loading…

Loading…