TIP: You can type at any time to perform a new search.
Sales
sale_management · odoo/odoo
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
Views touched (9)
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
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) | Handler | Auth | Type | Methods | Flags |
|---|---|---|---|---|---|
/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_totalBooleanargs: 'All Sales' -
kpi_all_sale_total_valueMonetarycompute='_compute_kpi_sale_total_value'
No public methods.
New fields (1)
-
sale_order_template_line_idMany2one → sale.order.template.lineindex='btree_not_null'ondelete='cascade'string='Quotation Template Line' args: 'sale.order.template.line'
No public methods.
New fields (0)
No new fields.
Public methods (1)-
set_values(self)
New fields (1)
-
sale_order_template_idMany2one → sale.order.templatecheck_company=Truecomodel_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=Falsestore=Truestring='Template'
-
action_confirm(self) -
action_create_quotation_template(self)
New fields (1)
-
is_optionalBooleancopy=Truedefault=Falsestring='Optional Line'
-
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)
-
activeBooleandefault=Truehelp='If unchecked, it will allow you to hide the Order template without removing it.' -
company_idMany2one → res.companycomodel_name='res.company'default=<expr> -
currency_idMany2one → res.currencycomodel_name='res.currency'string='Currency' -
has_productless_linesBooleancompute='_compute_has_productless_lines' -
journal_idMany2one → account.journalcheck_company=Truecomodel_name='account.journal'company_dependent=Truedomain=[('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_idMany2one → mail.templatecomodel_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' -
nameCharrequired=Truestring='Template'translate=True -
noteHtmlstring='Terms and conditions'translate=True -
number_of_daysIntegerhelp='Number of days for the validity date computation of the quotation'string='Quotation Duration' -
prepayment_percentFloatcompute='_compute_prepayment_percent'help='The percentage of the amount needed to be paid to confirm quotations.'readonly=Falsestore=Truestring='Prepayment' -
require_signatureBooleancompute='_compute_require_signature'help='Request a online signature to the customer in order to confirm orders automatically.'readonly=Falsestore=Truestring='Online Signature' -
sale_order_template_line_idsOne2many → sale.order.template.linecomodel_name='sale.order.template.line'copy=Trueinverse_name='sale_order_template_id'string='Lines' -
sequenceIntegerdefault=10 -
share_templateBooleandefault=Truestring='Share' -
team_idsMany2many → crm.teamcomodel_name='crm.team'string='Sales Team' -
template_typeSelectiondefault='quotation'required=Trueselection=[('quotation', 'Quotation'), ('section', 'Section')]string='Type' -
user_has_accessBooleancompute='_compute_user_has_access'search='_search_user_has_access'string='Can User access'
-
get_section_templates(self, company_id)@api.modelReturn 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_idsMany2many → uom.uomcompute='_compute_allowed_uom_ids' args: 'uom.uom' -
collapse_compositionBoolean -
collapse_pricesBoolean -
company_idMany2oneindex=Truerelated='sale_order_template_id.company_id'store=True -
discountFloatdigits='Discount'string='Discount (%)' -
display_typeSelectiondefault=False args: [('line_section', 'Section'), ('line_subsection', 'Subsection'), ('line_note', 'Note')] -
is_configurable_productBooleandepends=['product_template_id']related='product_template_id.has_configurable_attributes'string='Is the product configurable?' -
is_optionalBooleancopy=Truedefault=Falsestring='Optional Line' -
labelTextcompute='_compute_label'inverse='_inverse_label'string='Label' -
mandatory_productBooleancompute='_compute_mandatory_product'string='Is Product Mandatory' -
nameTextcompute='_compute_name'precompute=Truereadonly=Falsestore=Truestring='Description'translate=True -
parent_idMany2one → sale.order.template.linecomodel_name='sale.order.template.line'compute='_compute_parent_id'string='Parent Section Line' -
price_unitFloatdigits='Product Price'min_display_digits='Product Price'string='Unit Price' -
product_custom_attribute_value_idsOne2many → product.attribute.custom.valuecomodel_name='product.attribute.custom.value'compute='_compute_custom_attribute_values'copy=Trueinverse_name='sale_order_template_line_id'precompute=Truereadonly=Falsestore=Truestring='Custom Values' -
product_idMany2one → product.productcheck_company=Truecomodel_name='product.product'domain=<expr> -
product_no_variant_attribute_value_idsMany2many → product.template.attribute.valuecomodel_name='product.template.attribute.value'compute='_compute_no_variant_attribute_values'init_storage=<expr>ondelete='restrict'precompute=Truereadonly=Falsestore=Truestring='Extra Values' -
product_template_attribute_value_idsMany2manydepends=['product_id']related='product_id.product_template_attribute_value_ids' -
product_template_idMany2one → product.templatecomodel_name='product.template'compute='_compute_product_template_id'domain=<expr>readonly=Falsesearch='_search_product_template_id'string='Product Template' -
product_uom_idMany2one → uom.uomcomodel_name='uom.uom'compute='_compute_product_uom_id'domain="[('id', 'in', allowed_uom_ids)] if allowed_uom_ids or mandatory_product else []"precompute=Truereadonly=Falsestore=Truestring='Unit' -
product_uom_qtyFloatdefault=1digits='Product Unit'required=Truestring='Quantity' -
sale_order_template_idMany2one → sale.order.templatecomodel_name='sale.order.template'index=Trueondelete='cascade'required=Truestring='Quotation Template Reference' -
section_qtyFloatcompute='_compute_section_qty'digits='Product Unit'precompute=Truereadonly=Falsestore=Truestring='Section Quantity' -
section_uom_idMany2one → uom.uomcomodel_name='uom.uom'compute='_compute_section_uom_id'precompute=Truereadonly=Falsestore=Truestring='Section Unit of Measure' -
sequenceIntegerdefault=10help='Gives the sequence order when displaying a list of sale quote lines.'string='Sequence' -
tax_idsMany2many → account.taxcheck_company=Truecomodel_name='account.tax'string='Taxes'
-
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…