TIP: You can type at any time to perform a new search.
Sales
sale · odoo/odoo
Security findings
- Repository
- odoo/odoo · module folder
- Module version
- 1.2
- Category
- Sales/Sales
- Folder size
- 15.75 MB
- License
- LGPL-3
- Application
- No
- Auto-installable
- No
- Website
- None
- Last tracking update
- 2026-10-05 00:19:50
- Authors
- Odoo S.A.
- Maintainers
- Odoo S.A.
- Committers
- Xavier Morel, Xavier ALT, Raphael Collet, Thibault Delavallée, odoo, Odoo Translation Bot, Christophe Matthieu, Joren Van Onder, qdp-odoo, Aaron Bohy, Géry Debongnie, Odoo Online, Arnold Moyaux, Julien Castiaux, Aurélien Warnon, Xavier-Do, Victor Feyens, Adrien Dieudonné, William Henrotin, Julien Mougenot, Anh Thao Pham (pta), svs-odoo, Prakash Prajapati, Rémy Voet (ryv), Tiffany Chang (tic), Gorash, Pierre Paridans, Romain Estievenart, Miquel Raïch, william-andre, Víctor Martínez, John Laterre (jol), Antoine Vandevenne (anv), luvi, Renaud Thiry, Vincent Larcin, Victor Piryns (pivi), amdi-odoo, Yosua Nicolaus, Levi Siuzdak (sile), Dylan Kiss (dyki), Jinane Maksoud, Chong Wang (cwg), Anita (anko), Xavier Bol (xbo), Brieuc-brd, Sarah Bellefroid, Arnaud Sibille, omra-odoo, Andrzej(pian), Quentin Wolfs, Louis (loti), reka-odoo, Julien Carion (juca), kcv-odoo, odoostan, mano-odoo, Harsh Shah, thle-odoo, Patricia Daloze (pda), Xavier Luyckx (xlu), guce, Elisabeth Dickinson, Stéphane Diez, dhha-odoo, Claire (clbr), Antoine (anso), Abdo Mongy, Léo Gizard, Hesham Saleh, Saif (segn), dija-odoo, AhmedElemary57, roto-odoo, Trinh Ngoc Hung, David Van Droogenbroeck (DROD), pkgu-odoo, Mohammad Abdulmoneim (abdu), djameltouati, khsr-odoo, Pierre Lamotte (pila), Pierre Pulinckx, Michaël Mattiello, Corentin Heinix (cohe), Allesio, Valeriya (vchu), Shrey Mehta, Carmine, pish-odoo, Mahdi Alijani (malj), anko-odoo, bona-odoo, lse-odoo, Krzysztof Magusiak (krma), devp-odoo, Florian Malfroid, Omar (OSAH), Ajit Singh, Armin-FalDiS, krip-odoo, Hazem Ibrahim, Maeva De Keyser (MDEK), utma-odoo, Tyler Landivar (tylan), nsirjacobs, bhna-odoo, defl, igbe, Lancelot Semal, Laurent Smet (LAS), Julien Launois (jula), Laetitia (ldau), Yagnik ✗ (yagp), path-odoo, Waleed Elgamal, steji, malb, Saurabh, Victor Decleire, Amr Elkhatieb, Nisarg (nipl), assh-odoo, cro, Leila Kerroum Balaguer, Lionel Piraux (lipi), livaios, Ai Lin Zuccarello (aizu), YoussefM890, maap-odoo, Ravij Parikh, Arnav Varshney, jand-odoo, Merlin Guillaume, Mazen, srap-odoo, pkri-odoo, Omar Khalil (omkha), assk-odoo, Séna Nshimiyimana, Atovange, Zachary (zavan), sako-odoo, Youssef (abyo), alan-odoo, Kadam Darji, soza-odoo, mson-odoo, Julien Carion, ELCO, Moamen(msho), Khaj-odoo, khaj-odoo, chpa-odoo, Oussema Heni, Krishna Patel, Sanket Tank(stan), Abdullah (abye), vifu-odoo, jeanschoenlaub, Laura (yanla), makb-odoo, djhan, Mark Orban (maorb), keluu-odoo, Julien Piron, Lucas Gvasalia, Jean Schoenlaub, Corentin Deruyck, pusu-odoo, Ahmed Hamila, Cezar Bulancea (cebul), mekot-odoo, patsh-odoo, lkerroum
- Odoo dependencies
- Python dependencies
- None
- System dependencies
- None
- Required by
- delivery, l10n_br_sales, l10n_din5008_sale, l10n_ec_sale, l10n_fi_sale, l10n_gr_edi_delivery_note, l10n_in_sale, l10n_it_edi_doi, l10n_it_edi_sale, l10n_kr_sale, l10n_ph_sale, l10n_tw_edi_ecpay_sale, mass_mailing_sale, partnership, sale_crm, sale_edi_ubl, sale_gelato, sale_loyalty, sale_management, sale_product_matrix, sale_purchase, sale_sms, sale_stock, spreadsheet_dashboard_sale, storage_image_product, website_sale
- Description
This module contains all the common features of Sales Management and eCommerce.
Code Analysis
Views touched (81)
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
account_invoice_form |
Account Invoice | account.move | form | Inherits account.view_move_form |
account_invoice_groupby_inherit |
account.move.groupby | account.move | Inherits account.view_account_invoice_filter | |
account_invoice_report_view_tree |
account.invoice.report.view.list.inherit.sale | account.invoice.report | list | Inherits account.account_invoice_report_view_tree |
account_invoice_view_tree |
account.move.list.inherit.sale | account.move | list | Inherits account.view_invoice_tree |
crm_team_view_kanban_dashboard |
crm.team.view.kanban.dashboard.inherit.sale | crm.team | kanban | Inherits sales_team.crm_team_view_kanban_dashboard |
document_tax_totals |
document_tax_totals | ir.ui.view | qweb | Inherits account.document_tax_totals_template |
mass_cancel_orders_view_form |
sale.mass.cancel.orders.form | sale.mass.cancel.orders | form | New |
payment_form_hide_tokens_heading |
payment_form_hide_tokens_heading | ir.ui.view | qweb | Inherits payment.form |
payment_link_wizard_view_form |
payment.link.wizard.form | payment.link.wizard | form | Inherits payment.payment_link_wizard_view_form |
payment_provider_form |
payment.provider.form.inherit.sale | payment.provider | form | Inherits payment.payment_provider_form |
portal_my_home_menu_sale |
Portal layout : sales menu entries | ir.ui.view | qweb | Inherits portal.portal_breadcrumbs |
portal_my_orders |
My Sales Orders | ir.ui.view | qweb | New |
portal_my_quotations |
My Quotations | ir.ui.view | qweb | New |
product_document_form |
product.document.form.sale | product.document | form | Inherits product.product_document_form |
product_document_kanban |
product.document.kanban.sale | product.document | kanban | Inherits product.product_document_kanban |
product_document_list |
product.document.list.sale | product.document | list | Inherits product.product_document_list |
product_document_search |
product.document.search.sale | product.document | search | Inherits product.product_document_search |
product_form_view_sale_order_button |
product.product.sale.order | product.product | form | Inherits product.product_normal_form_view |
product_product_sale_tree_view |
product.product.sale.list | product.product | list | Inherits product.product_product_tree_view |
product_template_form_view |
product.template.form.view.inherit.sale | product.template | form | Inherits product.product_template_form_view |
product_template_form_view_sale |
product.template.sale.property.form.inherit | product.template | form | Inherits product.product_template_form_view |
product_template_form_view_sale_order_button |
product.template.sale.order.button | product.template | form | Inherits product.product_template_only_form_view |
product_template_sale_tree_view |
product.template.sale.list | product.product | list | Inherits product.product_template_tree_view |
product_template_view_form |
product.template.form.inherit.sale.product.configurator | product.template | form | Inherits product.product_template_form_view |
product_view_kanban_catalog |
product.view.kanban.catalog.inherit.sale | product.product | kanban | Inherits product.product_view_kanban_catalog |
product_view_search_catalog |
product.view.search.catalog.inherit.sale | product.product | search | Inherits product.product_view_search_catalog |
quote_document_layout_preview |
quote_document_layout_preview | ir.ui.view | qweb | New |
report_saleorder |
report_saleorder | ir.ui.view | qweb | New |
report_saleorder_document |
report_saleorder_document | ir.ui.view | qweb | New |
report_saleorder_pro_forma |
report_saleorder_pro_forma | ir.ui.view | qweb | New |
report_saleorder_raw |
report_saleorder_raw | ir.ui.view | qweb | New |
res_config_settings_view_form |
res.config.settings.view.form.inherit.sale | res.config.settings | form | Inherits base.res_config_settings_view_form |
res_config_settings_view_form_sale_inherit |
res.config.settings.view.form.inherit.sale | res.config.settings | form | Inherits account.res_config_settings_view_form |
res_partner_view_buttons |
res.partner.view.buttons | res.partner | form | Inherits base.view_partner_form |
res_partner_view_form_payment_defaultcreditcard |
res.partner.view.form.payment.defaultcreditcard | res.partner | form | Inherits payment.view_partners_form_payment_defaultcreditcard |
res_partner_view_form_property_inherit |
res.partner.view.form.property.inherit | res.partner | form | Inherits account.view_partner_property_form |
sale_order_kanban_upload |
sale.order.kanban.upload (orders) | sale.order | kanban | Inherits view_sale_order_kanban |
sale_order_kanban_with_dashboard |
sale.order.kanban.dashboard | sale.order | kanban | Inherits sale.view_sale_order_kanban |
sale_order_line_view_form_readonly |
sale.order.line.form.readonly | sale.order.line | form | New |
sale_order_line_view_kanban |
sale.order.line.kanban | sale.order.line | kanban | New |
sale_order_line_wizard_form |
sale.order.discount.form | sale.order.discount | form | New |
sale_order_list_upload |
sale.order.tree.upload (orders) | sale.order | list | Inherits view_order_tree |
sale_order_list_with_dashboard |
sale.order.list.quotation.dashboard | sale.order | list | Inherits sale.view_quotation_tree |
sale_order_portal_content |
Sales Order Portal Content | ir.ui.view | qweb | New |
sale_order_portal_content_totals_table |
sale_order_portal_content_totals_table | ir.ui.view | qweb | New |
sale_order_portal_pay_modal |
Sales Order Portal Pay Modal | ir.ui.view | qweb | New |
sale_order_portal_pay_modal_amount_selector |
Sales Order Portal Pay Modal Amounts Selector | ir.ui.view | qweb | New |
sale_order_portal_sign_modal |
Sales Order Portal Sign Modal | ir.ui.view | qweb | New |
sale_order_portal_template |
Sales Order | ir.ui.view | qweb | Inherits portal.portal_sidebar |
sale_order_tree |
sale.order.list | sale.order | list | New |
sale_order_view_activity |
sale.order.activity | sale.order | activity | New |
sale_order_view_search_inherit_quotation |
sale.order.search.inherit.quotation | sale.order | search | Inherits sale.view_sales_order_filter |
sale_order_view_search_inherit_sale |
sale.order.search.inherit.sale | sale.order | search | Inherits sale.view_sales_order_filter |
sale_report_graph_bar |
sale.report.graph.bar | sale.report | graph | Inherits view_order_product_graph |
sale_report_graph_pie |
sale.report.graph.pie | sale.report | graph | Inherits view_order_product_graph |
sale_report_view_tree |
sale.report.view.list | sale.report | list | New |
transaction_form_inherit_sale |
payment.transaction.form.inherit.sale.payment | payment.transaction | form | Inherits payment.payment_transaction_form |
utm_campaign_view_form |
utm.campaign.view.form | utm.campaign | form | Inherits utm.utm_campaign_view_form |
utm_campaign_view_kanban |
utm.campaign.view.kanban | utm.campaign | kanban | Inherits utm.utm_campaign_view_kanban |
view_account_invoice_report_search_inherit |
account.invoice.report.search.inherit | account.invoice.report | search | Inherits account.view_account_invoice_report_search |
view_analytic_lines_service_list |
account.analytic.line.service.list | account.analytic.line | list | New |
view_analytic_lines_service_search |
account.analytic.line.services.search | account.analytic.line | search | New |
view_category_property_form |
product.category.property.form.inherit.sale | product.category | form | Inherits account.view_category_property_form |
view_order_form |
sale.order.form | sale.order | form | New |
view_order_form_mandatory_product |
sale.order.form.mandatory.product | sale.order | form | Inherits sale.view_order_form |
view_order_line_tree |
sale.order.line.list | sale.order.line | list | New |
view_order_product_graph |
sale.report.graph | sale.report | graph | New |
view_order_product_pivot |
sale.report.pivot | sale.report | pivot | New |
view_order_product_search |
sale.report.search | sale.report | search | New |
view_order_tree |
sale.order.list (orders) | sale.order | list | Inherits sale_order_tree |
view_partner_tree_inherit |
res.partner.list.inherit | res.partner | list | Inherits base.view_partner_tree |
view_quotation_kanban_with_onboarding |
sale.order.kanban | sale.order | kanban | Inherits view_sale_order_kanban |
view_quotation_tree |
sale.order.list (quotes) | sale.order | list | Inherits sale_order_tree |
view_quotation_tree_with_onboarding |
sale.order.list | sale.order | list | Inherits view_quotation_tree |
view_sale_advance_payment_inv |
Invoice Orders | sale.advance.payment.inv | form | New |
view_sale_order_calendar |
sale.order.calendar | sale.order | calendar | New |
view_sale_order_graph |
sale.order.graph | sale.order | graph | New |
view_sale_order_kanban |
sale.order.kanban | sale.order | kanban | New |
view_sale_order_pivot |
sale.order.pivot | sale.order | pivot | New |
view_sales_order_filter |
sale.order.list.select | sale.order | search | New |
view_sales_order_line_filter |
sale.order.line.select | sale.order.line | search | New |
HTTP endpoints (14)
| Route(s) | Handler | Auth | Type | Methods | Flags |
|---|---|---|---|---|---|
/my/orders, /my/orders/page/<int:page> |
CustomerPortal.portal_my_orders |
user | http | ALL | website |
/my/quotes, /my/quotes/page/<int:page> |
CustomerPortal.portal_my_quotes |
user | http | ALL | website |
/my/orders/<int:order_id>/download_edi |
CustomerPortal.portal_my_sale_order_download_edi |
public | http | ALL | website |
/my/orders/<int:order_id> |
CustomerPortal.portal_order_page |
public | http | ALL | website |
/my/orders/<int:order_id>/accept |
CustomerPortal.portal_quote_accept |
public | jsonrpc | ALL | sudo website |
/my/orders/<int:order_id>/decline |
CustomerPortal.portal_quote_decline |
public | http | POST | website |
/my/orders/<int:order_id>/document/<int:document_id> |
CustomerPortal.portal_quote_document |
public | http | ALL | sudo |
/my/orders/<int:order_id>/transaction |
PaymentPortal.portal_order_transaction |
public | jsonrpc | ALL | |
| (inherited route override) | SaleComboConfiguratorController.sale_combo_configurator_get_data |
user | jsonrpc | ALL | sudo |
| (inherited route override) | SaleComboConfiguratorController.sale_combo_configurator_get_price |
user | jsonrpc | ALL | |
| (inherited route override) | SaleProductConfiguratorController.sale_product_configurator_create_product |
user | jsonrpc | POST | |
| (inherited route override) | SaleProductConfiguratorController.sale_product_configurator_get_optional_products |
user | jsonrpc | ALL | |
| (inherited route override) | SaleProductConfiguratorController.sale_product_configurator_get_values |
user | jsonrpc | ALL | |
| (inherited route override) | SaleProductConfiguratorController.sale_product_configurator_update_combination |
user | jsonrpc | POST |
Models touched (30)
New fields (0)
No new fields.
Public methods (0)No public methods.
New fields (1)
-
business_domainSelectionondelete={'sale_order': 'cascade'}selection_add=[('sale_order', 'Sale Order')]
No public methods.
New fields (3)
-
order_idMany2one → sale.ordercomodel_name='sale.order'compute='_compute_order_id'index=Trueinit_storage=<expr>readonly=Falsestore=Truestring='Customer Order' -
reinvoice_move_idMany2one → account.movecomodel_name='account.move'copy=Falsehelp='Invoice created from related SO line'index='btree_not_null'readonly=Truestring='Invoice' -
so_lineMany2one → sale.order.linecomodel_name='sale.order.line'compute='_compute_so_line'domain=<expr>index='btree_not_null'init_storage=<expr>readonly=Falsestore=Truestring='Sales Order Item'
-
create(self, vals_list)@api.model_create_multi -
write(self, vals)
New fields (2)
-
source_idMany2one → utm.sourcecomodel_name='utm.source'readonly=Truestring='Source' -
team_idMany2one → crm.teamcomodel_name='crm.team'string='Sales Team'
No public methods.
New fields (7)
-
campaign_idMany2oneondelete='set null' -
medium_idMany2oneondelete='set null' -
sale_order_countIntegercompute='_compute_origin_so_count'compute_sudo=Truestring='Sale Order Count' -
sale_warning_textTextcompute='_compute_sale_warning_text'help='Internal warning for the partner or the products as set by the user.'string='Sale Warning' -
service_line_countIntegercompute='_compute_service_line_count'compute_sudo=True -
source_idMany2oneondelete='set null' -
team_idMany2one → crm.teamcompute='_compute_team_id'domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]"ondelete='set null'readonly=Falsestore=Truestring='Sales Team'tracking=True args: 'crm.team'
-
action_post(self) -
action_view_services_analytic_lines(self) -
action_view_source_sale_orders(self) -
button_cancel(self) -
button_draft(self) -
unlink(self)
New fields (3)
-
is_downpaymentBoolean -
sale_line_idsMany2many → sale.order.linecolumn1='invoice_line_id'column2='order_line_id'comodel_name='sale.order.line'copy=Falsereadonly=Truerelation='sale_order_line_invoice_rel'string='Sales Order Lines' -
sale_line_warn_msgTextcompute='_compute_sale_line_warn_msg'
No public methods.
New fields (0)
No new fields.
Public methods (0)No public methods.
New fields (1)
-
sale_order_countIntegercompute='_compute_sale_order_count'string='# Sale Orders'
-
action_primary_channel_button(self)
New fields (0)
No new fields.
Public methods (0)No public methods.
New fields (0)
No new fields.
Public methods (3)-
create(self, vals_list)@api.model_create_multi -
unlink(self) -
write(self, vals)
New fields (3)
-
amount_paidMonetaryreadonly=Truestring='Already Paid' -
confirmation_messageCharcompute='_compute_confirmation_message'string='Confirmation Message' -
prepayment_amountMonetarycurrency_field='currency_id'string='Prepayment Amount'
No public methods.
New fields (1)
-
so_reference_typeSelectiondefault='so_name'help='You can set here the communication type that will appear on sales orders.The communication will be given to the customer when they choose the payment method.'selection=[('so_name', 'Based on Document Reference'), ('partner', 'Based on Customer ID')]string='Communication'
No public methods.
New fields (2)
-
sale_order_idsMany2many → sale.ordercolumn1='transaction_id'column2='sale_order_id'comodel_name='sale.order'copy=Falsereadonly=Truerelation='sale_order_transaction_rel'string='Sales Orders' -
sale_order_ids_nbrIntegercompute='_compute_sale_order_ids_nbr'string='# of Sales Orders'
-
action_view_sales_orders(self)@api.readonly
New fields (1)
-
sale_order_line_idMany2one → sale.order.lineindex='btree_not_null'ondelete='cascade'string='Sales Order Line' args: 'sale.order.line'
No public methods.
New fields (4)
-
property_account_invoiced_not_delivered_activeBooleanrelated='property_account_invoiced_not_delivered_id.active'string='Invoiced Not Delivered Account Active' -
property_account_invoiced_not_delivered_idMany2one → account.accountcheck_company=Truecompany_dependent=Truehelp='Account holding the accrued value of the goods invoiced but not delivered yet. With perpetual valuation, it counterbalances the stock valuation account at closing.'ondelete='restrict' args: 'account.account', 'Invoiced Not Delivered Account' -
property_account_invoices_to_issue_activeBooleanrelated='property_account_invoices_to_issue_id.active'string='Invoices to be Issued Account Active' -
property_account_invoices_to_issue_idMany2one → account.accountcheck_company=Truecompany_dependent=Truehelp='Account holding the accrued value of the goods delivered but not invoiced yet. With perpetual valuation, it counterbalances the stock valuation account at closing.'ondelete='restrict' args: 'account.account', 'Invoices to be Issued Account'
No public methods.
New fields (1)
-
attached_on_saleSelectiondefault='hidden'groups='sales_team.group_sale_salesman'help='Allows you to share the document with your customers within a sale.\nFrom Quotation: the document will be sent to and accessible by customers at any time.\ne.g. this option can be useful to share Product description files.\nOn Order Confirmation: the document will be sent to and accessible by customers.\ne.g. this option can be useful to share User Manual or digital content bought on ecommerce. 'required=Trueselection=[('hidden', 'Never'), ('quotation', 'From Quotation'), ('sale_order', 'On Order Confirmation')]string='Accessible'
No public methods.
New fields (0)
No new fields.
Public methods (0)No public methods.
New fields (2)
-
previously_bought_by_customerBooleansearch='_search_previously_bought_by_customer'store=False -
sales_countFloatcompute='_compute_sales_count'digits='Product Unit'string='Sold'
-
action_view_sales(self)@api.readonly
New fields (8)
-
invoice_policySelectioncompute='_compute_invoice_policy'help='Ordered Quantity: Invoice quantities ordered by the customer.\nDelivered Quantity: Invoice quantities delivered to the customer.'precompute=Truereadonly=Falserequired=Trueselection=SALE_INVOICE_POLICYstore=Truestring='Invoicing Policy'tracking=True -
optional_product_idsMany2many → product.templatecheck_company=Truecolumn1='src_id'column2='dest_id'comodel_name='product.template'help='Optional Products are suggested whenever the customer hits *Add to Cart* (cross-sell strategy, e.g. for computers: warranty, software, etc.).'relation='product_optional_rel'string='Optional Products' -
reinvoice_policySelectioncompute='_compute_reinvoice_policy'default='no'help='Validated expenses, vendor bills, or stock pickings (set up to track costs) can be invoiced to the customer at either cost or sales price.'readonly=Falseselection=[('no', 'No'), ('cost', 'At cost'), ('sales_price', 'At Sales price')]store=Truestring='Re-Invoice Costs' -
sale_delayIntegercompany_dependent=Truedefault=0help="Delivery lead time, in days. It's the number of days, promised to the customer, between the confirmation of the sales order and the delivery." args: 'Delivery Time' -
sale_line_warn_msgTextstring='Sales Order Line Warning' -
sales_countFloatcompute='_compute_sales_count'digits='Product Unit'string='Sold' -
service_typeSelectioncompute='_compute_service_type'help='Manually set quantities on order: Invoice based on the manually entered quantity, without creating an analytic account.\nTimesheets on contract: Invoice based on the tracked hours on the related timesheet.\nCreate a task and track hours: Create a task on the sales order validation and track the work hours.'precompute=Truereadonly=Falseselection=[('manual', 'Manually set quantities on order')]store=Truestring='Track Service' -
visible_reinvoice_policyBooleancompute='_compute_visible_reinvoice_policy'string='Re-Invoice Policy visible'
-
action_view_sales(self)@api.readonly -
get_import_templates(self)@api.model -
get_single_product_variant(self)Override of `product` to provide additional data. The product configurator also has to be opened when the template has optional products, regardless of whether the template is configurable or not. Also, depending on the product type, the combo configurator might be needed instead of the standard product configurator.
New fields (13)
-
account_invoiced_not_delivered_idMany2one → account.accountcheck_company=Truestring='Invoiced Not Delivered Account' args: 'account.account' -
account_invoices_to_issue_idMany2one → account.accountcheck_company=Truestring='Invoices to be Issued Account' args: 'account.account' -
display_product_images_on_soBooleanstring='Display Product Images' -
downpayment_account_idMany2one → account.accountcomodel_name='account.account'domain=[('account_type', 'in', ('income', 'income_other', 'liability_current'))]help='This account will be used on Downpayment invoices.'string='Downpayment Account'tracking=True -
portal_confirmation_payBooleanstring='Online Payment' -
portal_confirmation_signBooleandefault=Truestring='Online Signature' -
prepayment_percentFloatdefault=1.0help='The percentage of the amount needed to be paid to confirm quotations.'string='Prepayment' -
quotation_validity_daysIntegerdefault=30help='Days between quotation proposal and expiration. 0 days means automatic expiration is disabled'string='Default Quotation Validity' -
sale_automatic_invoiceBooleanhelp='The invoice is generated automatically and available in the customer portal when the transaction is confirmed by the payment provider.\nThe invoice is marked as paid and the payment is registered in the payment journal defined in the configuration of the payment provider.\nThis mode is advised if you issue the final invoice at the order and not after the delivery.'string='Automatic Invoicing' -
sale_discount_product_idMany2one → product.productcheck_company=Truecomodel_name='product.product'domain=[('type', '=', 'service'), ('invoice_policy', '=', 'order')]help='Default product used for discounts'string='Discount Product' -
sale_invoice_policySelectiondefault='order'required=Trueselection=SALE_INVOICE_POLICYstring='Invoicing Policy' -
sale_onboarding_payment_methodSelectionselection=[('digital_signature', 'Sign online'), ('paypal', 'PayPal'), ('stripe', 'Stripe'), ('other', 'Pay with another payment provider'), ('manual', 'Manual Payment')]string='Sale onboarding selected payment method' -
show_sol_numbersBooleanhelp='Display line numbers on Sales Orders.'string='Line Numbers'
-
create(self, vals_list)@api.model_create_multi -
write(self, vals)
New fields (26)
-
display_product_images_on_soBooleanreadonly=Falserelated='company_id.display_product_images_on_so' -
downpayment_account_activeBooleanrelated='downpayment_account_id.active'string='Down payment Account Active' -
downpayment_account_idMany2onereadonly=Falserelated='company_id.downpayment_account_id' -
group_auto_done_settingBooleanimplied_group='sale.group_auto_done_setting'string='Lock Confirmed Sales' -
group_discount_per_so_lineBooleanimplied_group='sale.group_discount_per_so_line'string='Discounts' -
group_proforma_salesBooleanhelp='Allows you to send pro forma invoice.'implied_group='sale.group_proforma_sales'string='Pro Forma Invoice' -
group_services_and_materialBooleanimplied_group='sale.group_services_and_material'string='Services & Materials' -
group_warning_saleBooleanimplied_group='sale.group_warning_sale'string='Sale Order Warnings' -
invoice_mail_template_idMany2one → mail.templatecomodel_name='mail.template'config_parameter='sale.default_invoice_email_template'domain=[('model', '=', 'account.move')]help='Email sent to the customer once the invoice is available.'string='Email Template' -
module_deliveryBooleanargs: 'Delivery Methods' -
module_product_email_templateBooleanargs: 'Specific Email' -
module_sale_amazonBooleanargs: 'Amazon Sync' -
module_sale_commissionBooleanargs: 'Commissions' -
module_sale_gelatoBooleanargs: 'Gelato' -
module_sale_loyaltyBooleanargs: 'Coupons & Loyalty' -
module_sale_pdf_quote_builderBooleanargs: 'PDF Quote builder' -
module_sale_product_matrixBooleanargs: 'Sales Grid Entry' -
module_sale_shopeeBooleanargs: 'Shopee Sync' -
portal_confirmation_payBooleanreadonly=Falserelated='company_id.portal_confirmation_pay' -
portal_confirmation_signBooleanreadonly=Falserelated='company_id.portal_confirmation_sign' -
prepayment_percentFloatreadonly=Falserelated='company_id.prepayment_percent' -
quotation_validity_daysIntegerreadonly=Falserelated='company_id.quotation_validity_days' -
sale_automatic_invoiceBooleanreadonly=Falserelated='company_id.sale_automatic_invoice' -
sale_invoice_policySelectionreadonly=Falserelated='company_id.sale_invoice_policy' -
sale_order_mandatory_productBooleanconfig_parameter='sale.mandatory_product'string='Mandatory Product' -
show_sol_numbersBooleanreadonly=Falserelated='company_id.show_sol_numbers'string='Line Numbers'
-
action_sale_start_payment_onboarding(self) -
set_values(self)
New fields (0)
No new fields.
Public methods (0)No public methods.
New fields (5)
-
incoterm_idMany2one → account.incotermscomodel_name='account.incoterms'help='International Commercial Terms are a series of predefined commercial terms used in international transactions.'string='Incoterm' -
incoterm_locationCharstring='Incoterm Location' -
sale_order_countIntegercompute='_compute_sale_order_count'groups='sales_team.group_sale_salesman'string='Sale Order Count' -
sale_order_idsOne2many → sale.orderargs: 'sale.order', 'partner_id', 'Sales Order' -
sale_warn_msgTextargs: 'Message for Sales Order'
No public methods.
New fields (14)
-
advance_payment_methodSelectiondefault='delivered'help='A standard invoice is issued with all the order lines ready for invoicing,according to their invoicing policy (based on ordered or delivered quantity).'required=Trueselection=[('delivered', 'Regular invoice'), ('percentage', 'Down payment (percentage)'), ('fixed', 'Down payment (fixed amount)')]string='Create Invoice' -
allow_invoice_overagesBooleancompute='_compute_allow_invoice_overages' -
amountFloathelp='The percentage of amount to be invoiced in advance.'string='Down Payment' -
amount_invoicedMonetarycompute='_compute_invoice_amounts'help='Only confirmed down payments are considered.'string='Already invoiced' -
company_idMany2one → res.companycomodel_name='res.company'compute='_compute_company_id'store=True -
consolidated_billingBooleandefault=Truehelp='Create one invoice for all orders related to same customer, same invoicing address and same delivery address.'string='Consolidated Billing' -
countIntegercompute='_compute_count'string='Order Count' -
currency_idMany2one → res.currencycomodel_name='res.currency'compute='_compute_currency_id'store=True -
deduct_down_paymentsBooleandefault=Truestring='Deduct down payments' -
display_draft_invoice_warningBooleancompute='_compute_display_draft_invoice_warning' -
fixed_amountMonetaryhelp='The fixed amount to be invoiced in advance.'string='Down Payment Amount (Fixed)' -
has_down_paymentsBooleancompute='_compute_has_down_payments'string='Has down payments' -
invoice_overagesBooleancompute='_compute_invoice_overages'inverse='_inverse_invoice_overages' -
sale_order_idsMany2many → sale.orderdefault=<expr> args: 'sale.order'
-
create_invoices(self) -
view_draft_invoices(self)
New fields (3)
-
has_confirmed_orderBooleancompute='_compute_has_confirmed_order' -
sale_order_idsMany2many → sale.ordercomodel_name='sale.order'default=<expr>relation='sale_order_mass_cancel_wizard_rel'string='Sale orders to cancel' -
sale_orders_countIntegercompute='_compute_sale_orders_count'
-
action_mass_cancel(self)
New fields (77)
-
amount_invoicedMonetarycompute='_compute_amount_invoiced'string='Already invoiced' -
amount_paidFloatcompute='_compute_amount_paid'compute_sudo=Truehelp="Sum of transactions made in through the online payment form that are in the state 'done' or 'authorized' and linked to this order."string='Payment Transactions Amount' -
amount_taxMonetarycompute='_compute_amounts'store=Truestring='Taxes' -
amount_to_invoiceMonetarycompute='_compute_amount_to_invoice'string='Un-invoiced Balance' -
amount_totalMonetarycompute='_compute_amounts'store=Truestring='Total'tracking=4 -
amount_unpaidMonetarycompute='_compute_amount_unpaid'help='Amount left to pay to avoid double payment or double invoicing.'store=Truestring='Amount Remaining' -
amount_untaxedMonetarycompute='_compute_amounts'store=Truestring='Untaxed Amount'tracking=5 -
analytic_account_idMany2one → account.analytic.accountcomodel_name='account.analytic.account'string='Analytic Account' -
authorized_transaction_idsMany2many → payment.transactioncomodel_name='payment.transaction'compute='_compute_authorized_transaction_ids'compute_sudo=Truecopy=Falsegroups='account.group_account_invoice'string='Authorized Transactions' -
campaign_idMany2oneondelete='set null' -
client_order_refCharcopy=Falsestring='Customer Reference' -
commitment_dateDatetimecopy=Falsehelp='This is the delivery date promised to the customer. If set, the delivery order will be scheduled based on this date rather than product lead times.'string='Promised Delivery' -
company_idMany2one → res.companycomodel_name='res.company'default=<expr>index=Truerequired=True -
company_price_includeSelectionrelated='company_id.account_price_include' -
country_codeCharrelated='company_id.account_fiscal_country_id.code'string='Country code' -
create_dateDatetimeindex=Truereadonly=Truestring='Creation Date' -
currency_idMany2one → res.currencycomodel_name='res.currency'compute='_compute_currency_id'ondelete='restrict'precompute=Truestore=True -
currency_rateFloatcompute='_compute_currency_rate'digits=0precompute=Truestore=Truestring='Currency Rate' -
date_orderDatetimecopy=Falsedefault=fields.Datetime.nowhelp='Creation date of draft/sent orders,\nConfirmation date of confirmed orders.'required=Truestring='Order Date' -
delivery_dateDatetimecompute='_compute_delivery_date'string='Delivery Date' -
delivery_statusSelectioncompute='_compute_delivery_status'help='Blue: Not Delivered/Started\n Orange: Partially Delivered\n Green: Fully Delivered'store=Truestring='Delivery Status' args: [('pending', 'Not Delivered'), ('started', 'Started'), ('partial', 'Partially Delivered'), ('full', 'Fully Delivered')] -
document_tax_modeSelectioncompute='_compute_document_tax_mode'precompute=Truereadonly=Falserequired=Trueselection=[('tax_excluded', 'Tax Excl.'), ('tax_included', 'Tax Incl.')]store=True -
duplicated_order_idsMany2many → sale.ordercomodel_name='sale.order'compute='_compute_duplicated_order_ids' -
expected_dateDatetimecompute='_compute_expected_date'help='Delivery date you can promise to the customer, computed from the minimum lead time of the order lines.'store=Falsestring='Expected Date' -
extra_total_fieldsJsoncompute='_compute_extra_total_fields' -
fiscal_position_idMany2one → account.fiscal.positioncheck_company=Truecomodel_name='account.fiscal.position'compute='_compute_fiscal_position_id'help='Fiscal positions are used to adapt taxes and accounts for particular customers or sales orders/invoices. The default value comes from the customer.'precompute=Truereadonly=Falsestore=Truestring='Fiscal Position' -
has_active_pricelistBooleancompute='_compute_has_active_pricelist' -
has_archived_productsBooleancompute='_compute_has_archived_products' -
has_authorized_transaction_idsBooleancompute='_compute_authorized_transaction_ids'compute_sudo=Truestring='Has Authorized Transactions' -
has_overagesBooleancompute='_compute_has_overages' -
incotermMany2one → account.incotermscomodel_name='account.incoterms'compute='_compute_incoterm'help='International Commercial Terms are a series of predefined commercial terms used in international transactions.'precompute=Truereadonly=Falsestore=Truestring='Incoterm' -
incoterm_locationCharcompute='_compute_incoterm_location'precompute=Truereadonly=Falsestore=Truestring='Incoterm Location' -
invoice_countIntegercompute='_get_invoiced'string='Invoice Count' -
invoice_idsMany2many → account.movecomodel_name='account.move'compute='_get_invoiced'copy=Falsesearch='_search_invoice_ids'string='Invoices' -
invoice_overagesBoolean -
invoice_statusSelectioncompute='_compute_invoice_status'selection=INVOICE_STATUSstore=Truestring='Invoice Status' -
invoicing_closedBooleancopy=Falsehelp='If enabled, the order is considered fully invoiced regardless of lines.'string='Manually Closed For Invoicing' -
is_expiredBooleancompute='_compute_is_expired'search='_search_is_expired'string='Is Expired' -
is_unfulfilledBooleansearch='_search_is_unfulfilled'store=Falsestring='Unfulfilled Orders' -
journal_idMany2one → account.journalcheck_company=Truecomodel_name='account.journal'compute='_compute_journal_id'domain=[('type', '=', 'sale')]help='If set, the SO will invoice in this journal; otherwise the sales journal with the lowest sequence is used.'precompute=Truereadonly=Falsestore=Truestring='Journal' -
lockedBooleancopy=Falsedefault=Falsehelp='Locked orders cannot be modified.'tracking=True -
medium_idMany2oneondelete='set null' -
nameCharcopy=Falsedefault=<expr>index='trigram'readonly=Falserequired=Truestring='Order Reference' -
noteHtmlcompute='_compute_note'inverse='_inverse_note'precompute=Truereadonly=Falsestore=Truestring='Terms and conditions' -
order_lineOne2many → sale.order.linebypass_search_access=Truecomodel_name='sale.order.line'copy=Trueinverse_name='order_id'string='Order Lines' -
originCharhelp='Reference of the document that generated this sales order request'string='Source Document' -
partner_credit_warningTextcompute='_compute_partner_credit_warning' -
partner_idMany2one → res.partnerchange_default=Truecheck_company=Truecomodel_name='res.partner'index=Truerequired=Truestring='Customer'tracking=1 -
partner_invoice_idMany2one → res.partnercheck_company=Truecomodel_name='res.partner'compute='_compute_partner_invoice_id'index='btree_not_null'precompute=Truereadonly=Falserequired=Truestore=Truestring='Invoice Address' -
partner_shipping_idMany2one → res.partnercheck_company=Truecomodel_name='res.partner'compute='_compute_partner_shipping_id'index='btree_not_null'precompute=Truereadonly=Falserequired=Truestore=Truestring='Delivery Address' -
payment_term_idMany2one → account.payment.termcheck_company=Truecomodel_name='account.payment.term'compute='_compute_payment_term_id'domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]"precompute=Truereadonly=Falsestore=Truestring='Payment Terms' -
pending_email_template_idMany2one → mail.templatecomodel_name='mail.template'ondelete='set null'readonly=Truestring='Pending Email Template' -
preferred_payment_method_line_idMany2one → account.payment.method.linecheck_company=Truecomodel_name='account.payment.method.line'compute='_compute_preferred_payment_method_line_id'domain="[('payment_type', '=', 'inbound'), ('company_id', '=', company_id)]"precompute=Truereadonly=Falsestore=Truestring='Payment Method' -
prepayment_amountMonetarycompute='_compute_prepayment_amount'currency_field='currency_id'help='The amount that must be paid by the customer to confirm the order.'inverse='_inverse_prepayment_amount'readonly=Falsestring='Prepayment Amount' -
prepayment_percentFloatcompute='_compute_prepayment_percent'help='The percentage of the amount that must be paid by the customer to confirm the order.'precompute=Truereadonly=Falsestore=Truestring='Prepayment' -
pricelist_idMany2one → product.pricelistcheck_company=Truecomodel_name='product.pricelist'compute='_compute_pricelist_id'domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]"help='If you change the pricelist, the prices of all order lines will be updated accordingly.'precompute=Truereadonly=Falsestore=Truestring='Pricelist'tracking=1 -
referenceCharcopy=Falsehelp='The payment communication of this sale order.'string='Payment Ref.' -
require_signatureBooleancompute='_compute_require_signature'help='Request a online signature from the customer to confirm the order.'precompute=Truereadonly=Falsestore=Truestring='Online signature' -
sale_warning_textTextcompute='_compute_sale_warning_text'help='Internal warning for the partner or the products as set by the user.' args: 'Sale Warning' -
show_ship_buttonBooleancompute='_compute_show_ship_button' -
show_sol_numbersBooleanrelated='company_id.show_sol_numbers' -
signatureImageattachment=Truecopy=Falsemax_height=1024max_width=1024string='Signature' -
signed_byCharcopy=Falsestring='Signed By' -
signed_onDatetimecopy=Falsestring='Signed On' -
source_idMany2oneondelete='set null' -
stateSelectioncopy=Falsedefault='draft'group_expand=Trueindex=Truereadonly=Trueselection=SALE_ORDER_STATEstring='Status'tracking=3 -
tag_idsMany2many → crm.tagcolumn1='order_id'column2='tag_id'comodel_name='crm.tag'groups='sales_team.group_sale_salesman'relation='sale_order_tag_rel'string='Tags' -
tax_calculation_rounding_methodSelectiondepends=['company_id']related='company_id.tax_calculation_rounding_method' -
tax_country_idMany2one → res.countrycomodel_name='res.country'compute='_compute_tax_country_id'compute_sudo=True -
tax_totalsJsoncompute='_compute_tax_totals'exportable=False -
team_idMany2one → crm.teamchange_default=Truecheck_company=Truecomodel_name='crm.team'compute='_compute_team_id'domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]"index=Trueondelete='set null'precompute=Truereadonly=Falsestore=Truestring='Sales Team'tracking=True -
terms_typeSelectionrelated='company_id.terms_type' -
transaction_countIntegercompute='_compute_transaction_count' -
transaction_idsMany2many → payment.transactioncolumn1='sale_order_id'column2='transaction_id'comodel_name='payment.transaction'copy=Falsegroups='account.group_account_invoice'readonly=Truerelation='sale_order_transaction_rel'string='Transactions' -
type_nameCharcompute='_compute_type_name'string='Type Name' -
user_idMany2one → res.userscomodel_name='res.users'compute='_compute_user_id'domain=<expr>index=Trueprecompute=Truereadonly=Falsestore=Truestring='Salesperson'tracking=2 -
validity_dateDatecompute='_compute_validity_date'copy=Falsehelp='Validity of the quotation. After this date, you will no longer be able to sign and pay it.'precompute=Truereadonly=Falsestore=Truestring='Expiration'
-
action_cancel(self)Cancel sales order and related draft invoices. -
action_close_invoicing(self)Mark sales orders as manually closed for invoicing. -
action_confirm(self)Confirm the given quotation(s) and set their confirmation dates. If the corresponding setting is enabled, also locks the Sale Order. :return: True :rtype: bool :raise: UserError if trying to confirm cancelled SO's -
action_draft(self) -
action_lock(self) -
action_open_business_doc(self)@api.readonly -
action_open_discount_wizard(self)@api.readonly -
action_preview_sale_order(self)@api.readonly -
action_quotation_send(self)Open a wizard to compose an email, with relevant mail template loaded by default. -
action_quotation_sent(self)Mark the given draft quotation(s) as sent. :raise: UserError if any given SO is not in draft state. -
action_reopen_order(self)Reopen invoicing for manually closed sales orders. -
action_unlock(self) -
action_view_invoice(self, invoices=False)@api.readonly -
action_view_payment_transaction(self) -
batch_onchange_sol(self, lines_data, order_changes, fields_spec)@api.modelBatch `sale.order.line` onchange calls into a single RPC. :param dict lines_data: {line_id: {"ids", "changes", "field_name"}}, one entry per line :param dict fields_spec: onchange fields spec, shared by every line :return: {line_id: recomputed values} :rtype: dict -
copy_data(self, default=None) -
create(self, vals_list)@api.model_create_multi -
create_document_from_attachment(self, attachment_ids)Create the sale orders from given attachment_ids and redirect newly create order view. :param list attachment_ids: List of attachments process. :return: An action redirecting to related sale order view. :rtype: dict -
deliver_sold_quantity(self) -
get_empty_list_help(self, help_message)@api.model -
get_import_templates(self)@api.model -
get_portal_last_transaction(self) -
message_post(self, **kwargs) -
onchange(self, values, field_names, fields_spec) -
payment_action_capture(self)Capture all transactions linked to this sale order. -
payment_action_void(self)Void all transactions linked to this sale order. -
retrieve_sale_dashboard(self, period_days)@api.modelRetrieve statistics for the Sales dashboard for a given period (number of days). :param int period_days: The number of days used to filter orders. :return: A dictionary containing all computed dashboard statistics. :rtype: dict -
write(self, vals)
New fields (6)
-
company_idMany2onerelated='sale_order_id.company_id' -
currency_idMany2onerelated='sale_order_id.currency_id' -
discount_amountMonetarystring='Amount' -
discount_percentageFloatstring='Percentage' -
discount_typeSelectiondefault='sol_discount'selection=[('sol_discount', 'On All Order Lines'), ('so_discount', 'Global Discount'), ('amount', 'Fixed Amount')] -
sale_order_idMany2one → sale.orderdefault=<expr>required=True args: 'sale.order'
-
action_apply_discount(self)
New fields (82)
-
accrual_move_idsMany2many → account.movecolumn1='order_line_id'column2='move_id'comodel_name='account.move'copy=Falsehelp="Accrual entries generated for this line, so it isn't accrued again while one is still standing (posted, not yet reversed or cancelled)."relation='sale_order_line_accrual_move_rel'string='Accrual Entries' -
allowed_uom_idsMany2many → uom.uomcompute='_compute_allowed_uom_ids' args: 'uom.uom' -
amount_invoicedMonetarycompute='_compute_amount_invoiced'compute_sudo=Truestring='Invoiced Amount' -
amount_to_invoiceMonetarycompute='_compute_amount_to_invoice'compute_sudo=Truestring='Un-invoiced Balance' -
amount_to_invoice_at_dateFloatcompute='_compute_amount_to_invoice_at_date'string='Amount' -
analytic_line_idsOne2many → account.analytic.linecomodel_name='account.analytic.line'inverse_name='so_line'string='Analytic lines' -
categ_idMany2onerelated='product_id.categ_id' -
collapse_compositionBooleancopy=Truedefault=Falsestring='Collapse Composition' -
collapse_pricesBooleancopy=Truedefault=Falsestring='Collapse Prices' -
combo_item_idMany2one → product.combo.itemcomodel_name='product.combo.item' -
company_idMany2oneindex=Trueprecompute=Truerelated='order_id.company_id'store=True -
company_price_includeSelectionrelated='company_id.account_price_include' -
currency_idMany2onedepends=['order_id.currency_id']precompute=Truerelated='order_id.currency_id'store=True -
customer_leadIntegercompute='_compute_customer_lead'help='Number of days between the order confirmation and the shipping of the products'precompute=Truereadonly=Falserequired=Truestore=Truestring='Lead Time' -
deferred_revenueBooleansearch='_search_deferred_revenue'store=Falsestring='Deferred Revenue' -
discountFloatcompute='_compute_discount'digits='Discount'precompute=Truereadonly=Falsestore=Truestring='Discount (%)' -
display_qty_widgetBooleancompute='_compute_display_qty_widget' -
display_typeSelectiondefault=Falseselection=[('line_section', 'Section'), ('line_subsection', 'Subsection'), ('line_note', 'Note')] -
document_tax_modeSelectionrelated='order_id.document_tax_mode' -
extra_tax_dataJson -
invoice_linesMany2many → account.move.linecolumn1='order_line_id'column2='invoice_line_id'comodel_name='account.move.line'copy=Falserelation='sale_order_line_invoice_rel'string='Invoice Lines' -
invoice_policySelectioncompute='_compute_invoice_policy'search='_search_invoice_policy'selection=[('order', 'Ordered quantities'), ('delivery', 'Delivered quantities')]string='Invoicing Policy' -
invoice_statusSelectioncompute='_compute_invoice_status'selection=[('upselling', 'Upselling Opportunity'), ('invoiced', 'Fully Invoiced'), ('to invoice', 'To Invoice'), ('no', 'Nothing to Invoice')]store=Truestring='Invoice Status' -
invoice_to_be_issuedBooleansearch='_search_invoice_to_be_issued'store=Falsestring='Invoice to be Issued' -
is_configurable_productBooleandepends=['product_template_id']related='product_template_id.has_configurable_attributes'string='Is the product configurable?' -
is_downpaymentBooleanhelp='Down payments are made when creating invoices from a sales order. They are not copied when duplicating a sales order.'string='Is a down payment' -
is_expenseBooleanhelp='Is true if the sales order line comes from an expense or a vendor bills'string='Is expense' -
is_product_archivedBooleancompute='_compute_is_product_archived' -
is_storableBooleanrelated='product_id.is_storable' -
labelTextcompute='_compute_label'inverse='_inverse_label'string='Label' -
linked_line_idMany2one → sale.order.linecomodel_name='sale.order.line'copy=Falsedomain="[('order_id', '=', order_id)]"index=Trueondelete='cascade'string='Linked Order Line' -
linked_line_idsOne2many → sale.order.linecomodel_name='sale.order.line'inverse_name='linked_line_id'string='Linked Order Lines' -
linked_virtual_idChar -
mandatory_productBooleancompute='_compute_mandatory_product'string='Is Product Mandatory' -
nameTextcompute='_compute_name'precompute=Truereadonly=Falsestore=Truestring='Description' -
order_idMany2one → sale.ordercomodel_name='sale.order'copy=Falseindex=Trueondelete='cascade'required=Truestring='Order Reference' -
order_partner_idMany2oneindex=Trueprecompute=Truerelated='order_id.partner_id'store=Truestring='Customer' -
parent_idMany2one → sale.order.linecomodel_name='sale.order.line'compute='_compute_parent_id'string='Parent Section Line' -
price_reduce_taxexclMonetarycompute='_compute_price_reduce_taxexcl'precompute=Truestore=Truestring='Price Reduce Tax excl' -
price_reduce_taxincMonetarycompute='_compute_price_reduce_taxinc'precompute=Truestore=Truestring='Price Reduce Tax incl' -
price_subtotalMonetarycompute='_compute_amount'precompute=Truestore=Truestring='Subtotal' -
price_taxFloatcompute='_compute_amount'precompute=Truestore=Truestring='Total Tax' -
price_totalMonetarycompute='_compute_amount'precompute=Truestore=Truestring='Total' -
price_unitFloatcompute='_compute_price_unit'min_display_digits='Product Price'precompute=Truereadonly=Falserequired=Truestore=Truestring='Unit Price' -
pricelist_item_idMany2one → product.pricelist.itemcomodel_name='product.pricelist.item'compute='_compute_pricelist_item_id' -
product_custom_attribute_value_idsOne2many → product.attribute.custom.valuecomodel_name='product.attribute.custom.value'compute='_compute_custom_attribute_values'copy=Trueinverse_name='sale_order_line_id'precompute=Truereadonly=Falsestore=Truestring='Custom Values' -
product_idMany2one → product.productchange_default=Truecheck_company=Truecomodel_name='product.product'domain=<expr>index='btree_not_null'ondelete='restrict'string='Product' -
product_no_variant_attribute_value_idsMany2many → product.template.attribute.valuecomodel_name='product.template.attribute.value'compute='_compute_no_variant_attribute_values'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_typeSelectiondepends=['product_id']related='product_id.type' -
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 []"ondelete='restrict'precompute=Truereadonly=Falsestore=Truestring='Unit' -
product_uom_qtyFloatcompute='_compute_product_uom_qty'default=1.0digits='Product Unit'precompute=Truereadonly=Falserequired=Truestore=Truestring='Quantity' -
product_uom_readonlyBooleancompute='_compute_product_uom_readonly' -
product_updatableBooleancompute='_compute_product_updatable'string='Can Edit Product' -
qty_available_todayFloatcompute='_compute_qty_at_date' -
qty_deliveredFloatcompute='_compute_qty_delivered'copy=Falsedefault=0.0digits='Product Unit'readonly=Falsestore=Truestring='Delivery Quantity' -
qty_delivered_at_dateFloatcompute='_compute_qty_delivered_at_date'digits='Product Unit'string='Delivered' -
qty_delivered_methodSelectioncompute='_compute_qty_delivered_method'help='According to product configuration, the delivered quantity can be automatically computed by mechanism:\n - Manual: the quantity is set manually on the line\n - Analytic From expenses: the quantity is the quantity sum from posted expenses\n - Timesheet: the quantity is the sum of hours recorded on tasks linked to this line\n - Stock Moves: the quantity comes from confirmed pickings\n'precompute=Trueselection=[('manual', 'Manual'), ('analytic', 'Analytic From Expenses')]store=Truestring='Method to update delivered qty' -
qty_delivered_percentFloatcompute='_compute_qty_delivered_percent'readonly=Falsestring='Delivered (%)' -
qty_invoicedFloatcompute='_compute_qty_invoiced'digits='Product Unit'store=Truestring='Invoiced Quantity' -
qty_invoiced_at_dateFloatcompute='_compute_qty_invoiced_at_date'digits='Product Unit'string='Invoiced' -
qty_invoiced_postedFloatcompute='_compute_qty_invoiced_posted'digits='Product Unit'string='Invoiced Quantity (posted)' -
qty_overageFloatcompute='_compute_qty_overage'digits='Product Unit' -
qty_to_invoiceFloatcompute='_compute_qty_to_invoice'digits='Product Unit'store=Truestring='Quantity To Invoice' -
sale_line_warn_msgTextcompute='_compute_sale_line_warn_msg' -
salesman_idMany2oneprecompute=Truerelated='order_id.user_id'store=Truestring='Salesperson' -
scheduled_dateDatetimecompute='_compute_qty_at_date'string='Delivery Date' -
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' -
selected_combo_itemsCharstore=False -
sequenceIntegerdefault=10string='Sequence' -
service_trackingSelectiondepends=['product_id']related='product_id.service_tracking' -
stateSelectioncopy=Falseprecompute=Truerelated='order_id.state'store=Truestring='Order Status' -
tax_calculation_rounding_methodSelectionreadonly=Truerelated='company_id.tax_calculation_rounding_method'string='Tax calculation rounding method' -
tax_country_idMany2onerelated='order_id.tax_country_id' -
tax_idsMany2many → account.taxcheck_company=Truecomodel_name='account.tax'compute='_compute_tax_ids'context={'active_test': False, 'hide_original_tax_ids': True}domain="[('type_tax_use', '=', 'sale'), ('country_id', '=', tax_country_id)]"precompute=Truereadonly=Falsestore=Truestring='Taxes' -
technical_price_unitFloat -
untaxed_amount_invoicedMonetarycompute='_compute_untaxed_amount_invoiced'store=Truestring='Untaxed Invoiced Amount' -
untaxed_amount_to_invoiceMonetarycompute='_compute_untaxed_amount_to_invoice'store=Truestring='Untaxed Amount To Invoice' -
virtual_available_at_dateFloatcompute='_compute_qty_at_date'digits='Product Unit' -
virtual_idChar
-
action_add_from_catalog(self)@api.readonly -
compute_uom_qty(self, new_qty, stock_move, rounding=True) -
create(self, vals_list)@api.model_create_multi -
onchange(self, values, field_names, fields_spec) -
write(self, vals)
New fields (43)
-
campaign_idMany2one → utm.campaigncomodel_name='utm.campaign'readonly=Truestring='Campaign' -
categ_idMany2one → product.categorycomodel_name='product.category'readonly=Truestring='Product Category' -
commercial_partner_idMany2one → res.partnercomodel_name='res.partner'readonly=Truestring='Customer Entity' -
company_idMany2one → res.companycomodel_name='res.company'readonly=True -
country_idMany2one → res.countrycomodel_name='res.country'readonly=Truestring='Customer Country' -
currency_idMany2one → res.currencycomodel_name='res.currency'readonly=True -
dateDatetimereadonly=Truestring='Order Date' -
discountFloataggregator='avg'readonly=Truestring='Discount %' -
discount_amountMonetaryreadonly=Truestring='Discount Amount' -
industry_idMany2one → res.partner.industrycomodel_name='res.partner.industry'readonly=Truestring='Customer Industry' -
invoice_statusSelectionreadonly=Trueselection=[('upselling', 'Upselling Opportunity'), ('invoiced', 'Fully Invoiced'), ('to invoice', 'To Invoice'), ('no', 'Nothing to Invoice')]string='Order Invoice Status' -
line_invoice_statusSelectionreadonly=Trueselection=[('upselling', 'Upselling Opportunity'), ('invoiced', 'Fully Invoiced'), ('to invoice', 'To Invoice'), ('no', 'Nothing to Invoice')]string='Invoice Status' -
line_nameCharreadonly=Truestring='Order Line Name' -
medium_idMany2one → utm.mediumcomodel_name='utm.medium'readonly=Truestring='Medium' -
nameCharreadonly=Truestring='Order Reference' -
nbrIntegerreadonly=Truestring='# of Lines' -
order_referenceReferenceaggregator='count_distinct'selection=[('sale.order', 'Sales Order')]string='Order' -
partner_idMany2one → res.partnercomodel_name='res.partner'readonly=Truestring='Customer' -
partner_tag_idsMany2manyreadonly=Truerelated='partner_id.category_id'string='Customer Tags' -
partner_zipCharreadonly=Truestring='Customer ZIP' -
price_subtotalMonetaryreadonly=Truestring='Untaxed Total' -
price_totalMonetaryreadonly=Truestring='Total' -
price_unitMonetaryaggregator='avg'readonly=Truestring='Unit Price' -
pricelist_idMany2one → product.pricelistcomodel_name='product.pricelist'readonly=True -
product_idMany2one → product.productcomodel_name='product.product'readonly=Truestring='Product Variant' -
product_tmpl_idMany2one → product.templatecomodel_name='product.template'readonly=Truestring='Product' -
product_uom_idMany2one → uom.uomcomodel_name='uom.uom'readonly=Truestring='Unit' -
product_uom_qtyFloatreadonly=Truestring='Qty Ordered' -
qty_deliveredFloatreadonly=Truestring='Qty Delivered' -
qty_invoicedFloatreadonly=Truestring='Qty Invoiced' -
qty_to_deliverFloatreadonly=Truestring='Qty To Deliver' -
qty_to_invoiceFloatreadonly=Truestring='Qty To Invoice' -
source_idMany2one → utm.sourcecomodel_name='utm.source'readonly=Truestring='Source' -
stateSelectionreadonly=Trueselection=SALE_ORDER_STATEstring='Status' -
state_idMany2one → res.country.statecomodel_name='res.country.state'readonly=Truestring='Customer State' -
team_idMany2one → crm.teamcomodel_name='crm.team'readonly=Truestring='Sales Team' -
untaxed_amount_invoicedMonetaryreadonly=Truestring='Untaxed Amount Invoiced' -
untaxed_amount_to_invoiceMonetaryreadonly=Truestring='Untaxed Amount To Invoice' -
untaxed_delivered_amountMonetaryreadonly=Truestring='Untaxed Amount Delivered' -
user_idMany2one → res.userscomodel_name='res.users'readonly=Truestring='Salesperson' -
utm_referenceReferenceselection='_selection_target_model'string='UTM Reference' -
volumeFloatreadonly=Truestring='Volume' -
weightFloatreadonly=Truestring='Gross Weight'
-
action_open_order(self)@api.readonly
New fields (3)
-
currency_idMany2one → res.currencycompute='_compute_currency_id'compute_sql='_compute_sql_currency_id'compute_sudo=Truestring='Currency' args: 'res.currency' -
invoiced_amountMonetarycompute='_compute_sale_invoiced_amount'compute_sudo=Truecurrency_field='currency_id'groups='sales_team.group_sale_salesman'string='Revenues generated by the campaign' -
quotation_countIntegercompute='_compute_quotation_count'compute_sudo=Truegroups='sales_team.group_sale_salesman' args: 'Quotation Count'
-
action_redirect_to_invoiced(self) -
action_redirect_to_quotations(self)
Loading…
Loading…
Loading…
Loading…
Loading…
Loading…
Loading…
Loading…
Loading…
Loading…
Loading…
Loading…
Loading…
Loading…