| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
account_invoice_form |
Account Invoice | account.move | xpath | Inherits account.view_move_form |
account_invoice_groupby_inherit |
account.move.groupby | account.move | field | Inherits account.view_account_invoice_filter |
account_invoice_report_view_tree |
account.invoice.report.view.list.inherit.sale | account.invoice.report | field | Inherits account.account_invoice_report_view_tree |
account_invoice_view_tree |
account.move.list.inherit.sale | account.move | field | Inherits account.view_invoice_tree |
crm_team_salesteams_view_form |
crm.team.form | crm.team | field | Inherits sales_team.crm_team_view_form |
crm_team_view_kanban_dashboard |
crm.team.view.kanban.dashboard.inherit.sale | crm.team | xpath | 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_link_wizard_view_form |
payment.link.wizard.form | payment.link.wizard | field | Inherits payment.payment_link_wizard_view_form |
payment_provider_form |
payment.provider.form.inherit.sale | payment.provider | group | 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_home_sale |
Quotations / Sales Orders | ir.ui.view | qweb | Inherits portal.portal_my_home |
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 | sheet | Inherits product.product_document_form |
product_document_kanban |
product.document.kanban.sale | product.document | xpath | Inherits product.product_document_kanban |
product_document_list |
product.document.list.sale | product.document | field | 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 | div | Inherits product.product_normal_form_view |
product_pricelist_item_form |
product.pricelist.item.view.form.inherit | product.pricelist.item | group | Inherits product.product_pricelist_item_form_view |
product_template_form_view |
product.template.form.view.inherit.sale | product.template | page | Inherits product.product_template_form_view |
product_template_form_view_sale_order_button |
product.template.sale.order.button | product.template | button | Inherits product.product_template_only_form_view |
product_template_view_form |
product.template.form.inherit.sale.product.configurator | product.template | group | Inherits product.product_template_form_view |
product_view_kanban_catalog |
product.view.kanban.catalog.inherit.sale | product.product | xpath | Inherits product.product_view_kanban_catalog |
product_view_search_catalog |
product.view.search.catalog.inherit.sale | product.product | filter | 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 | xpath | Inherits base.res_config_settings_view_form |
res_config_settings_view_form_sale_inherit |
res.config.settings.view.form.inherit.sale | res.config.settings | xpath | Inherits account.res_config_settings_view_form |
res_partner_view_buttons |
res.partner.view.buttons | res.partner | div | Inherits base.view_partner_form |
res_partner_view_form_payment_defaultcreditcard |
res.partner.view.form.payment.defaultcreditcard | res.partner | button | Inherits payment.view_partners_form_payment_defaultcreditcard |
res_partner_view_form_property_inherit |
res.partner.view.form.property.inherit | res.partner | group | 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_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_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 | filter | Inherits sale.view_sales_order_filter |
sale_order_view_search_inherit_sale |
sale.order.search.inherit.sale | sale.order | filter | 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 | xpath | Inherits payment.payment_transaction_form |
utm_campaign_view_form |
utm.campaign.view.form | utm.campaign | xpath | Inherits utm.utm_campaign_view_form |
utm_campaign_view_kanban |
utm.campaign.view.kanban | utm.campaign | xpath | Inherits utm.utm_campaign_view_kanban |
view_account_invoice_report_search_inherit |
account.invoice.report.search.inherit | account.invoice.report | filter | Inherits account.view_account_invoice_report_search |
view_order_form |
sale.order.form | sale.order | form | New |
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_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 |
business_domain
Selection
ondelete={'sale_order': 'cascade'}
selection_add=[('sale_order', 'Sale Order')]
No public methods.
so_line
Many2one → sale.order.line
domain=[('qty_delivered_method', '=', 'analytic')]
index='btree_not_null'
string='Sales Order Item'
args: 'sale.order.line'
No public methods.
No new fields.
Public methods (0)No public methods.
team_id
Many2one → crm.team
comodel_name='crm.team'
string='Sales Team'
No public methods.
campaign_id
Many2one
ondelete='set null'
medium_id
Many2one
ondelete='set null'
sale_order_count
Integer
compute='_compute_origin_so_count'
compute_sudo=True
string='Sale Order Count'
sale_warning_text
Text
compute='_compute_sale_warning_text'
help='Internal warning for the partner or the products as set by the user.'
args: 'Sale Warning'
source_id
Many2one
ondelete='set null'
team_id
Many2one → crm.team
compute='_compute_team_id'
domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]"
ondelete='set null'
readonly=False
store=True
string='Sales Team'
tracking=True
args: 'crm.team'
action_post(self)
action_view_source_sale_orders(self)
button_cancel(self)
button_draft(self)
unlink(self)
is_downpayment
Boolean
sale_line_ids
Many2many → sale.order.line
copy=False
readonly=True
string='Sales Order Lines'
args: 'sale.order.line', 'sale_order_line_invoice_rel', 'invoice_line_id', 'order_line_id'
sale_line_warn_msg
Text
compute='_compute_sale_line_warn_msg'
No public methods.
No new fields.
Public methods (0)No public methods.
invoiced
Float
compute='_compute_invoiced'
help='Invoice revenue for the current month. This is the amount the sales channel has invoiced this month. It is used to compute the progression ratio of the current and target revenue on the kanban view.'
readonly=True
string='Invoiced This Month'
invoiced_target
Float
help='Revenue Target for the current month (untaxed total of paid invoices).'
string='Invoicing Target'
sale_order_count
Integer
compute='_compute_sale_order_count'
string='# Sale Orders'
action_primary_channel_button(self)
update_invoiced_target(self, value)
No new fields.
Public methods (0)No public methods.
No new fields.
Public methods (3)create(self, vals_list)
unlink(self)
write(self, vals)
amount_paid
Monetary
readonly=True
string='Already Paid'
confirmation_message
Char
compute='_compute_confirmation_message'
string='Confirmation Message'
prepayment_amount
Monetary
currency_field='currency_id'
string='Prepayment Amount'
No public methods.
so_reference_type
Selection
default='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.
sale_order_ids
Many2many → sale.order
copy=False
readonly=True
string='Sales Orders'
args: 'sale.order', 'sale_order_transaction_rel', 'transaction_id', 'sale_order_id'
sale_order_ids_nbr
Integer
compute='_compute_sale_order_ids_nbr'
string='# of Sales Orders'
action_view_sales_orders(self)
sale_order_line_id
Many2one → sale.order.line
index='btree_not_null'
ondelete='cascade'
string='Sales Order Line'
args: 'sale.order.line'
No public methods.
attached_on_sale
Selection
default='hidden'
groups='sales_team.group_sale_salesman'
help='Allows you to share the document with your customers within a sale.\nOn quote: 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=True
selection=[('hidden', 'Hidden'), ('quotation', 'On quote'), ('sale_order', 'On confirmed order')]
string='Sale : Visible at'
No public methods.
No new fields.
Public methods (0)No public methods.
product_catalog_product_is_in_sale_order
Boolean
compute='_compute_product_is_in_sale_order'
search='_search_product_is_in_sale_order'
sales_count
Float
compute='_compute_sales_count'
digits='Product Unit'
string='Sold'
action_view_sales(self)
expense_policy
Selection
compute='_compute_expense_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=False
selection=[('no', 'No'), ('cost', 'At cost'), ('sales_price', 'Sales price')]
store=True
string='Re-Invoice Costs'
invoice_policy
Selection
compute='_compute_invoice_policy'
help='Ordered Quantity: Invoice quantities ordered by the customer.\nDelivered Quantity: Invoice quantities delivered to the customer.'
precompute=True
readonly=False
selection=[('order', 'Ordered quantities'), ('delivery', 'Delivered quantities')]
store=True
string='Invoicing Policy'
tracking=True
optional_product_ids
Many2many → product.template
check_company=True
column1='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'
sale_line_warn_msg
Text
string='Sales Order Line Warning'
sales_count
Float
compute='_compute_sales_count'
digits='Product Unit'
string='Sold'
service_type
Selection
compute='_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=True
readonly=False
selection=[('manual', 'Manually set quantities on order')]
store=True
string='Track Service'
visible_expense_policy
Boolean
compute='_compute_visible_expense_policy'
string='Re-Invoice Policy visible'
action_view_sales(self)
get_import_templates(self)
get_single_product_variant(self)
downpayment_account_id
Many2one → account.account
comodel_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_pay
Boolean
string='Online Payment'
portal_confirmation_sign
Boolean
default=True
string='Online Signature'
prepayment_percent
Float
default=1.0
help='The percentage of the amount needed to be paid to confirm quotations.'
string='Prepayment percentage'
quotation_validity_days
Integer
default=30
help='Days between quotation proposal and expiration. 0 days means automatic expiration is disabled'
string='Default Quotation Validity'
sale_discount_product_id
Many2one → product.product
check_company=True
comodel_name='product.product'
domain=[('type', '=', 'service'), ('invoice_policy', '=', 'order')]
help='Default product used for discounts'
string='Discount Product'
sale_onboarding_payment_method
Selection
selection=[('digital_signature', 'Sign online'), ('paypal', 'PayPal'), ('stripe', 'Stripe'), ('other', 'Pay with another payment provider'), ('manual', 'Manual Payment')]
string='Sale onboarding selected payment method'
No public methods.
automatic_invoice
Boolean
config_parameter='sale.automatic_invoice'
help='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 Invoice'
default_invoice_policy
Selection
default='order'
default_model='product.template'
selection=[('order', 'Invoice what is ordered'), ('delivery', 'Invoice what is delivered')]
string='Invoicing Policy'
downpayment_account_id
Many2one
readonly=False
related='company_id.downpayment_account_id'
group_auto_done_setting
Boolean
implied_group='sale.group_auto_done_setting'
string='Lock Confirmed Sales'
group_discount_per_so_line
Boolean
implied_group='sale.group_discount_per_so_line'
string='Discounts'
group_proforma_sales
Boolean
help='Allows you to send pro-forma invoice.'
implied_group='sale.group_proforma_sales'
string='Pro-Forma Invoice'
group_warning_sale
Boolean
implied_group='sale.group_warning_sale'
string='Sale Order Warnings'
invoice_mail_template_id
Many2one → mail.template
comodel_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_delivery
Boolean
module_delivery_bpost
Boolean
module_delivery_dhl
Boolean
module_delivery_easypost
Boolean
module_delivery_envia
Boolean
module_delivery_fedex_rest
Boolean
module_delivery_sendcloud
Boolean
module_delivery_shiprocket
Boolean
module_delivery_starshipit
Boolean
module_delivery_ups_rest
Boolean
module_delivery_usps_rest
Boolean
module_product_email_template
Boolean
module_sale_amazon
Boolean
module_sale_commission
Boolean
module_sale_gelato
Boolean
module_sale_loyalty
Boolean
module_sale_margin
Boolean
module_sale_pdf_quote_builder
Boolean
module_sale_product_matrix
Boolean
module_sale_shopee
Boolean
portal_confirmation_pay
Boolean
readonly=False
related='company_id.portal_confirmation_pay'
portal_confirmation_sign
Boolean
readonly=False
related='company_id.portal_confirmation_sign'
prepayment_percent
Float
readonly=False
related='company_id.prepayment_percent'
quotation_validity_days
Integer
readonly=False
related='company_id.quotation_validity_days'
action_sale_start_payment_onboarding(self)
set_values(self)
sale_order_count
Integer
compute='_compute_sale_order_count'
groups='sales_team.group_sale_salesman'
string='Sale Order Count'
sale_order_ids
One2many → sale.order
sale_warn_msg
Text
can_edit_vat(self)
advance_payment_method
Selection
default='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=True
selection=[('delivered', 'Regular invoice'), ('percentage', 'Down payment (percentage)'), ('fixed', 'Down payment (fixed amount)')]
string='Create Invoice'
amount
Float
help='The percentage of amount to be invoiced in advance.'
string='Down Payment'
amount_invoiced
Monetary
compute='_compute_invoice_amounts'
help='Only confirmed down payments are considered.'
string='Already invoiced'
company_id
Many2one → res.company
comodel_name='res.company'
compute='_compute_company_id'
store=True
consolidated_billing
Boolean
default=True
help='Create one invoice for all orders related to same customer, same invoicing address and same delivery address.'
string='Consolidated Billing'
count
Integer
compute='_compute_count'
string='Order Count'
currency_id
Many2one → res.currency
comodel_name='res.currency'
compute='_compute_currency_id'
store=True
deduct_down_payments
Boolean
default=True
string='Deduct down payments'
display_draft_invoice_warning
Boolean
compute='_compute_display_draft_invoice_warning'
fixed_amount
Monetary
help='The fixed amount to be invoiced in advance.'
string='Down Payment Amount (Fixed)'
has_down_payments
Boolean
compute='_compute_has_down_payments'
string='Has down payments'
sale_order_ids
Many2many → sale.order
default=<expr>
args: 'sale.order'
create_invoices(self)
view_draft_invoices(self)
has_confirmed_order
Boolean
compute='_compute_has_confirmed_order'
sale_order_ids
Many2many → sale.order
comodel_name='sale.order'
default=<expr>
relation='sale_order_mass_cancel_wizard_rel'
string='Sale orders to cancel'
sale_orders_count
Integer
compute='_compute_sale_orders_count'
action_mass_cancel(self)
amount_invoiced
Monetary
compute='_compute_amount_invoiced'
string='Already invoiced'
amount_paid
Float
compute='_compute_amount_paid'
compute_sudo=True
help="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_tax
Monetary
compute='_compute_amounts'
store=True
string='Taxes'
amount_to_invoice
Monetary
compute='_compute_amount_to_invoice'
string='Un-invoiced Balance'
amount_total
Monetary
compute='_compute_amounts'
store=True
string='Total'
tracking=4
amount_undiscounted
Float
compute='_compute_amount_undiscounted'
digits=0
string='Amount Before Discount'
amount_untaxed
Monetary
compute='_compute_amounts'
store=True
string='Untaxed Amount'
tracking=5
authorized_transaction_ids
Many2many → payment.transaction
comodel_name='payment.transaction'
compute='_compute_authorized_transaction_ids'
compute_sudo=True
copy=False
groups='account.group_account_invoice'
string='Authorized Transactions'
campaign_id
Many2one
ondelete='set null'
client_order_ref
Char
copy=False
string='Customer Reference'
commitment_date
Datetime
copy=False
help='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='Delivery Date'
company_id
Many2one → res.company
comodel_name='res.company'
default=<expr>
index=True
required=True
company_price_include
Selection
related='company_id.account_price_include'
country_code
Char
related='company_id.account_fiscal_country_id.code'
string='Country code'
create_date
Datetime
index=True
readonly=True
string='Creation Date'
currency_id
Many2one → res.currency
comodel_name='res.currency'
compute='_compute_currency_id'
ondelete='restrict'
precompute=True
store=True
currency_rate
Float
compute='_compute_currency_rate'
digits=0
precompute=True
store=True
string='Currency Rate'
date_order
Datetime
copy=False
default=fields.Datetime.now
help='Creation date of draft/sent orders,\nConfirmation date of confirmed orders.'
required=True
string='Order Date'
duplicated_order_ids
Many2many → sale.order
comodel_name='sale.order'
compute='_compute_duplicated_order_ids'
expected_date
Datetime
compute='_compute_expected_date'
help='Delivery date you can promise to the customer, computed from the minimum lead time of the order lines.'
store=False
string='Expected Date'
fiscal_position_id
Many2one → account.fiscal.position
check_company=True
comodel_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=True
readonly=False
store=True
string='Fiscal Position'
has_active_pricelist
Boolean
compute='_compute_has_active_pricelist'
has_archived_products
Boolean
compute='_compute_has_archived_products'
has_authorized_transaction_ids
Boolean
compute='_compute_authorized_transaction_ids'
compute_sudo=True
string='Has Authorized Transactions'
invoice_count
Integer
compute='_get_invoiced'
string='Invoice Count'
invoice_ids
Many2many → account.move
comodel_name='account.move'
compute='_get_invoiced'
copy=False
search='_search_invoice_ids'
string='Invoices'
invoice_status
Selection
compute='_compute_invoice_status'
selection=INVOICE_STATUS
store=True
string='Invoice Status'
is_expired
Boolean
compute='_compute_is_expired'
string='Is Expired'
journal_id
Many2one → account.journal
check_company=True
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=True
readonly=False
store=True
string='Invoicing Journal'
args: 'account.journal'
locked
Boolean
copy=False
default=False
help='Locked orders cannot be modified.'
tracking=True
medium_id
Many2one
ondelete='set null'
name
Char
copy=False
default=<expr>
index='trigram'
readonly=False
required=True
string='Order Reference'
note
Html
compute='_compute_note'
precompute=True
readonly=False
store=True
string='Terms and conditions'
order_line
One2many → sale.order.line
bypass_search_access=True
comodel_name='sale.order.line'
copy=True
inverse_name='order_id'
string='Order Lines'
origin
Char
help='Reference of the document that generated this sales order request'
string='Source Document'
partner_credit_warning
Text
compute='_compute_partner_credit_warning'
partner_id
Many2one → res.partner
change_default=True
check_company=True
comodel_name='res.partner'
index=True
required=True
string='Customer'
tracking=1
partner_invoice_id
Many2one → res.partner
check_company=True
comodel_name='res.partner'
compute='_compute_partner_invoice_id'
index='btree_not_null'
precompute=True
readonly=False
required=True
store=True
string='Invoice Address'
partner_shipping_id
Many2one → res.partner
check_company=True
comodel_name='res.partner'
compute='_compute_partner_shipping_id'
index='btree_not_null'
precompute=True
readonly=False
required=True
store=True
string='Delivery Address'
payment_term_id
Many2one → account.payment.term
check_company=True
comodel_name='account.payment.term'
compute='_compute_payment_term_id'
domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]"
precompute=True
readonly=False
store=True
string='Payment Terms'
pending_email_template_id
Many2one → mail.template
comodel_name='mail.template'
ondelete='set null'
readonly=True
string='Pending Email Template'
preferred_payment_method_line_id
Many2one → account.payment.method.line
check_company=True
comodel_name='account.payment.method.line'
compute='_compute_preferred_payment_method_line_id'
domain="[('payment_type', '=', 'inbound'), ('company_id', '=', company_id)]"
precompute=True
readonly=False
store=True
string='Payment Method'
prepayment_percent
Float
compute='_compute_prepayment_percent'
help='The percentage of the amount needed that must be paid by the customer to confirm the order.'
precompute=True
readonly=False
store=True
string='Prepayment percentage'
pricelist_id
Many2one → product.pricelist
check_company=True
comodel_name='product.pricelist'
compute='_compute_pricelist_id'
domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]"
help='If you change the pricelist, only newly added lines will be affected.'
precompute=True
readonly=False
store=True
string='Pricelist'
tracking=1
reference
Char
copy=False
help='The payment communication of this sale order.'
string='Payment Ref.'
require_payment
Boolean
compute='_compute_require_payment'
help='Request a online payment from the customer to confirm the order.'
precompute=True
readonly=False
store=True
string='Online payment'
require_signature
Boolean
compute='_compute_require_signature'
help='Request a online signature from the customer to confirm the order.'
precompute=True
readonly=False
store=True
string='Online signature'
sale_warning_text
Text
compute='_compute_sale_warning_text'
help='Internal warning for the partner or the products as set by the user.'
args: 'Sale Warning'
show_update_fpos
Boolean
store=False
string='Has Fiscal Position Changed'
show_update_pricelist
Boolean
store=False
string='Has Pricelist Changed'
signature
Image
attachment=True
copy=False
max_height=1024
max_width=1024
string='Signature'
signed_by
Char
copy=False
string='Signed By'
signed_on
Datetime
copy=False
string='Signed On'
source_id
Many2one
ondelete='set null'
state
Selection
copy=False
default='draft'
group_expand=True
index=True
readonly=True
selection=SALE_ORDER_STATE
string='Status'
tracking=3
tag_ids
Many2many → crm.tag
column1='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_method
Selection
depends=['company_id']
related='company_id.tax_calculation_rounding_method'
tax_country_id
Many2one → res.country
comodel_name='res.country'
compute='_compute_tax_country_id'
compute_sudo=True
tax_totals
Binary
compute='_compute_tax_totals'
exportable=False
team_id
Many2one → crm.team
change_default=True
check_company=True
comodel_name='crm.team'
compute='_compute_team_id'
domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]"
index=True
ondelete='set null'
precompute=True
readonly=False
store=True
string='Sales Team'
tracking=True
terms_type
Selection
related='company_id.terms_type'
transaction_ids
Many2many → payment.transaction
column1='sale_order_id'
column2='transaction_id'
comodel_name='payment.transaction'
copy=False
groups='account.group_account_invoice'
readonly=True
relation='sale_order_transaction_rel'
string='Transactions'
type_name
Char
compute='_compute_type_name'
string='Type Name'
user_id
Many2one → res.users
comodel_name='res.users'
compute='_compute_user_id'
domain=<expr>
index=True
precompute=True
readonly=False
store=True
string='Salesperson'
tracking=2
validity_date
Date
compute='_compute_validity_date'
copy=False
help='Validity of the order, after that you will not able to sign & pay the quotation.'
precompute=True
readonly=False
store=True
string='Expiration'
action_cancel(self)
action_confirm(self)
action_draft(self)
action_lock(self)
action_open_business_doc(self)
action_open_discount_wizard(self)
action_preview_sale_order(self)
action_quotation_send(self)
action_quotation_sent(self)
action_unlock(self)
action_update_prices(self)
action_update_taxes(self)
action_view_invoice(self, invoices=False)
copy_data(self, default=None)
create(self, vals_list)
create_document_from_attachment(self, attachment_ids)
get_empty_list_help(self, help_message)
get_import_templates(self)
get_portal_last_transaction(self)
message_post(self, **kwargs)
onchange(self, values, field_names, fields_spec)
payment_action_capture(self)
payment_action_void(self)
write(self, vals)
company_id
Many2one
related='sale_order_id.company_id'
currency_id
Many2one
related='sale_order_id.currency_id'
discount_amount
Monetary
string='Amount'
discount_percentage
Float
string='Percentage'
discount_type
Selection
default='sol_discount'
selection=[('sol_discount', 'On All Order Lines'), ('so_discount', 'Global Discount'), ('amount', 'Fixed Amount')]
sale_order_id
Many2one → sale.order
default=<expr>
required=True
args: 'sale.order'
action_apply_discount(self)
allowed_uom_ids
Many2many → uom.uom
compute='_compute_allowed_uom_ids'
args: 'uom.uom'
amount_invoiced
Monetary
compute='_compute_amount_invoiced'
compute_sudo=True
string='Invoiced Amount'
amount_to_invoice
Monetary
compute='_compute_amount_to_invoice'
compute_sudo=True
string='Un-invoiced Balance'
amount_to_invoice_at_date
Float
compute='_compute_amount_to_invoice_at_date'
string='Amount'
analytic_line_ids
One2many → account.analytic.line
comodel_name='account.analytic.line'
inverse_name='so_line'
string='Analytic lines'
categ_id
Many2one
related='product_id.categ_id'
collapse_composition
Boolean
copy=True
default=False
string='Collapse Composition'
collapse_prices
Boolean
copy=True
default=False
string='Collapse Prices'
combo_item_id
Many2one → product.combo.item
comodel_name='product.combo.item'
company_id
Many2one
index=True
precompute=True
related='order_id.company_id'
store=True
company_price_include
Selection
related='company_id.account_price_include'
currency_id
Many2one
depends=['order_id.currency_id']
precompute=True
related='order_id.currency_id'
store=True
customer_lead
Float
compute='_compute_customer_lead'
help='Number of days between the order confirmation and the shipping of the products to the customer'
precompute=True
readonly=False
required=True
store=True
string='Lead Time'
discount
Float
compute='_compute_discount'
digits='Discount'
precompute=True
readonly=False
store=True
string='Discount (%)'
display_type
Selection
default=False
selection=[('line_section', 'Section'), ('line_subsection', 'Subsection'), ('line_note', 'Note')]
extra_tax_data
Json
invoice_lines
Many2many → account.move.line
column1='order_line_id'
column2='invoice_line_id'
comodel_name='account.move.line'
copy=False
relation='sale_order_line_invoice_rel'
string='Invoice Lines'
invoice_status
Selection
compute='_compute_invoice_status'
selection=[('upselling', 'Upselling Opportunity'), ('invoiced', 'Fully Invoiced'), ('to invoice', 'To Invoice'), ('no', 'Nothing to Invoice')]
store=True
string='Invoice Status'
is_configurable_product
Boolean
depends=['product_template_id']
related='product_template_id.has_configurable_attributes'
string='Is the product configurable?'
is_downpayment
Boolean
help='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_expense
Boolean
help='Is true if the sales order line comes from an expense or a vendor bills'
string='Is expense'
is_product_archived
Boolean
compute='_compute_is_product_archived'
linked_line_id
Many2one → sale.order.line
comodel_name='sale.order.line'
copy=False
domain="[('order_id', '=', order_id)]"
index=True
ondelete='cascade'
string='Linked Order Line'
linked_line_ids
One2many → sale.order.line
comodel_name='sale.order.line'
inverse_name='linked_line_id'
string='Linked Order Lines'
linked_virtual_id
Char
name
Text
compute='_compute_name'
precompute=True
readonly=False
required=True
store=True
string='Description'
order_id
Many2one → sale.order
comodel_name='sale.order'
copy=False
index=True
ondelete='cascade'
required=True
string='Order Reference'
order_partner_id
Many2one
index=True
precompute=True
related='order_id.partner_id'
store=True
string='Customer'
parent_id
Many2one → sale.order.line
comodel_name='sale.order.line'
compute='_compute_parent_id'
string='Parent Section Line'
price_reduce_taxexcl
Monetary
compute='_compute_price_reduce_taxexcl'
precompute=True
store=True
string='Price Reduce Tax excl'
price_reduce_taxinc
Monetary
compute='_compute_price_reduce_taxinc'
precompute=True
store=True
string='Price Reduce Tax incl'
price_subtotal
Monetary
compute='_compute_amount'
precompute=True
store=True
string='Subtotal'
price_tax
Float
compute='_compute_amount'
precompute=True
store=True
string='Total Tax'
price_total
Monetary
compute='_compute_amount'
precompute=True
store=True
string='Total'
price_unit
Float
compute='_compute_price_unit'
min_display_digits='Product Price'
precompute=True
readonly=False
required=True
store=True
string='Unit Price'
pricelist_item_id
Many2one → product.pricelist.item
comodel_name='product.pricelist.item'
compute='_compute_pricelist_item_id'
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_line_id'
precompute=True
readonly=False
store=True
string='Custom Values'
product_id
Many2one → product.product
change_default=True
check_company=True
comodel_name='product.product'
domain=<expr>
index='btree_not_null'
ondelete='restrict'
string='Product'
product_no_variant_attribute_value_ids
Many2many → product.template.attribute.value
comodel_name='product.template.attribute.value'
compute='_compute_no_variant_attribute_values'
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_type
Selection
depends=['product_id']
related='product_id.type'
product_uom_id
Many2one → uom.uom
comodel_name='uom.uom'
compute='_compute_product_uom_id'
domain='[("id", "in", allowed_uom_ids)]'
ondelete='restrict'
precompute=True
readonly=False
store=True
string='Unit'
product_uom_qty
Float
compute='_compute_product_uom_qty'
default=1.0
digits='Product Unit'
precompute=True
readonly=False
required=True
store=True
string='Quantity'
product_uom_readonly
Boolean
compute='_compute_product_uom_readonly'
product_updatable
Boolean
compute='_compute_product_updatable'
string='Can Edit Product'
qty_delivered
Float
compute='_compute_qty_delivered'
copy=False
default=0.0
digits='Product Unit'
readonly=False
store=True
string='Delivery Quantity'
qty_delivered_at_date
Float
compute='_compute_qty_delivered_at_date'
digits='Product Unit'
string='Delivered'
qty_delivered_method
Selection
compute='_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 sale line\n - Stock Moves: the quantity comes from confirmed pickings\n'
precompute=True
selection=[('manual', 'Manual'), ('analytic', 'Analytic From Expenses')]
store=True
string='Method to update delivered qty'
qty_invoiced
Float
compute='_compute_qty_invoiced'
digits='Product Unit'
store=True
string='Invoiced Quantity'
qty_invoiced_at_date
Float
compute='_compute_qty_invoiced_at_date'
digits='Product Unit'
string='Invoiced'
qty_invoiced_posted
Float
compute='_compute_qty_invoiced_posted'
digits='Product Unit'
string='Invoiced Quantity (posted)'
qty_to_invoice
Float
compute='_compute_qty_to_invoice'
digits='Product Unit'
store=True
string='Quantity To Invoice'
sale_line_warn_msg
Text
compute='_compute_sale_line_warn_msg'
salesman_id
Many2one
precompute=True
related='order_id.user_id'
store=True
string='Salesperson'
selected_combo_items
Char
store=False
sequence
Integer
default=10
string='Sequence'
service_tracking
Selection
depends=['product_id']
related='product_id.service_tracking'
state
Selection
copy=False
precompute=True
related='order_id.state'
store=True
string='Order Status'
tax_calculation_rounding_method
Selection
readonly=True
related='company_id.tax_calculation_rounding_method'
string='Tax calculation rounding method'
tax_country_id
Many2one
related='order_id.tax_country_id'
tax_ids
Many2many → account.tax
check_company=True
comodel_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=True
readonly=False
store=True
string='Taxes'
technical_price_unit
Float
translated_product_name
Text
compute='_compute_translated_product_name'
untaxed_amount_invoiced
Monetary
compute='_compute_untaxed_amount_invoiced'
store=True
string='Untaxed Invoiced Amount'
untaxed_amount_to_invoice
Monetary
compute='_compute_untaxed_amount_to_invoice'
store=True
string='Untaxed Amount To Invoice'
virtual_id
Char
action_add_from_catalog(self)
compute_uom_qty(self, new_qty, stock_move, rounding=True)
create(self, vals_list)
get_parent_section_line(self)
has_valued_move_ids(self)
write(self, vals)
campaign_id
Many2one → utm.campaign
comodel_name='utm.campaign'
readonly=True
string='Campaign'
categ_id
Many2one → product.category
comodel_name='product.category'
readonly=True
string='Product Category'
commercial_partner_id
Many2one → res.partner
comodel_name='res.partner'
readonly=True
string='Customer Entity'
company_id
Many2one → res.company
comodel_name='res.company'
readonly=True
country_id
Many2one → res.country
comodel_name='res.country'
readonly=True
string='Customer Country'
currency_id
Many2one → res.currency
comodel_name='res.currency'
readonly=True
date
Datetime
readonly=True
string='Order Date'
discount
Float
aggregator='avg'
readonly=True
string='Discount %'
discount_amount
Monetary
readonly=True
string='Discount Amount'
industry_id
Many2one → res.partner.industry
comodel_name='res.partner.industry'
readonly=True
string='Customer Industry'
invoice_status
Selection
readonly=True
selection=[('upselling', 'Upselling Opportunity'), ('invoiced', 'Fully Invoiced'), ('to invoice', 'To Invoice'), ('no', 'Nothing to Invoice')]
string='Order Invoice Status'
line_invoice_status
Selection
readonly=True
selection=[('upselling', 'Upselling Opportunity'), ('invoiced', 'Fully Invoiced'), ('to invoice', 'To Invoice'), ('no', 'Nothing to Invoice')]
string='Invoice Status'
medium_id
Many2one → utm.medium
comodel_name='utm.medium'
readonly=True
string='Medium'
name
Char
readonly=True
string='Order Reference'
nbr
Integer
readonly=True
string='# of Lines'
order_reference
Reference
aggregator='count_distinct'
selection=[('sale.order', 'Sales Order')]
string='Order'
partner_id
Many2one → res.partner
comodel_name='res.partner'
readonly=True
string='Customer'
partner_zip
Char
readonly=True
string='Customer ZIP'
price_subtotal
Monetary
readonly=True
string='Untaxed Total'
price_total
Monetary
readonly=True
string='Total'
price_unit
Float
aggregator='avg'
readonly=True
string='Unit Price'
pricelist_id
Many2one → product.pricelist
comodel_name='product.pricelist'
readonly=True
product_id
Many2one → product.product
comodel_name='product.product'
readonly=True
string='Product Variant'
product_tmpl_id
Many2one → product.template
comodel_name='product.template'
readonly=True
string='Product'
product_uom_id
Many2one → uom.uom
comodel_name='uom.uom'
readonly=True
string='Unit'
product_uom_qty
Float
readonly=True
string='Qty Ordered'
qty_delivered
Float
readonly=True
string='Qty Delivered'
qty_invoiced
Float
readonly=True
string='Qty Invoiced'
qty_to_deliver
Float
readonly=True
string='Qty To Deliver'
qty_to_invoice
Float
readonly=True
string='Qty To Invoice'
source_id
Many2one → utm.source
comodel_name='utm.source'
readonly=True
string='Source'
state
Selection
readonly=True
selection=SALE_ORDER_STATE
string='Status'
state_id
Many2one → res.country.state
comodel_name='res.country.state'
readonly=True
string='Customer State'
team_id
Many2one → crm.team
comodel_name='crm.team'
readonly=True
string='Sales Team'
untaxed_amount_invoiced
Monetary
readonly=True
string='Untaxed Amount Invoiced'
untaxed_amount_to_invoice
Monetary
readonly=True
string='Untaxed Amount To Invoice'
user_id
Many2one → res.users
comodel_name='res.users'
readonly=True
string='Salesperson'
volume
Float
readonly=True
string='Volume'
weight
Float
readonly=True
string='Gross Weight'
action_open_order(self)
company_id
Many2one → res.company
default=<expr>
string='Company'
args: 'res.company'
currency_id
Many2one → res.currency
related='company_id.currency_id'
string='Currency'
args: 'res.currency'
invoiced_amount
Integer
compute='_compute_sale_invoiced_amount'
compute_sudo=True
groups='sales_team.group_sale_salesman'
string='Revenues generated by the campaign'
quotation_count
Integer
compute='_compute_quotation_count'
compute_sudo=True
groups='sales_team.group_sale_salesman'
args: 'Quotation Count'
action_redirect_to_invoiced(self)
action_redirect_to_quotations(self)
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
account_invoice_form |
Account Invoice | account.move | xpath | Inherits account.view_move_form |
account_invoice_groupby_inherit |
account.move.groupby | account.move | field | Inherits account.view_account_invoice_filter |
account_invoice_report_view_tree |
account.invoice.report.view.list.inherit.sale | account.invoice.report | field | Inherits account.account_invoice_report_view_tree |
account_invoice_view_tree |
account.move.list.inherit.sale | account.move | field | Inherits account.view_invoice_tree |
crm_lead_partner_kanban_view |
res.partner.kanban.saleorder.inherit | res.partner | xpath | Inherits base.res_partner_kanban_view |
crm_team_salesteams_view_form |
crm.team.form | crm.team | field | Inherits sales_team.crm_team_view_form |
crm_team_view_kanban_dashboard |
crm.team.view.kanban.dashboard.inherit.sale | crm.team | xpath | 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_link_wizard_view_form |
payment.link.wizard.form | payment.link.wizard | field | Inherits payment.payment_link_wizard_view_form |
payment_provider_form |
payment.provider.form.inherit.sale | payment.provider | group | 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_home_sale |
Quotations / Sales Orders | ir.ui.view | qweb | Inherits portal.portal_my_home |
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 | sheet | Inherits product.product_document_form |
product_document_kanban |
product.document.kanban.sale | product.document | xpath | Inherits product.product_document_kanban |
product_document_list |
product.document.list.sale | product.document | field | 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 | div | Inherits product.product_normal_form_view |
product_packaging_form_view_sale |
product.packaging.form.view.sale | product.packaging | group | Inherits product.product_packaging_form_view |
product_packaging_tree_view_sale |
product.packaging.list.view.sale | product.packaging | field | Inherits product.product_packaging_tree_view |
product_template_form_view |
product.template.form.view.inherit.sale | product.template | page | Inherits product.product_template_form_view |
product_template_form_view_sale_order_button |
product.template.sale.order.button | product.template | button | Inherits product.product_template_only_form_view |
product_template_view_form |
product.template.form.inherit.sale.product.configurator | product.template | group | Inherits product.product_template_form_view |
product_view_kanban_catalog |
product.view.kanban.catalog.inherit.sale | product.product | xpath | Inherits product.product_view_kanban_catalog |
product_view_search_catalog |
product.view.search.catalog.inherit.sale | product.product | filter | 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 | xpath | Inherits base.res_config_settings_view_form |
res_partner_view_buttons |
res.partner.view.buttons | res.partner | div | Inherits base.view_partner_form |
res_partner_view_form_payment_defaultcreditcard |
res.partner.view.form.payment.defaultcreditcard | res.partner | button | Inherits payment.view_partners_form_payment_defaultcreditcard |
res_partner_view_form_property_inherit |
res.partner.view.form.property.inherit | res.partner | group | Inherits account.view_partner_property_form |
sale_order_cancel_view_form |
sale.order.cancel.form | sale.order.cancel | form | New |
sale_order_kanban_upload |
sale.order.kanban.upload (orders) | sale.order | kanban | Inherits 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.line.wizard.form | sale.order.discount | form | New |
sale_order_list_upload |
sale.order.tree.upload (orders) | sale.order | list | Inherits view_order_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_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 | filter | Inherits sale.view_sales_order_filter |
sale_order_view_search_inherit_sale |
sale.order.search.inherit.sale | sale.order | filter | 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 | xpath | Inherits payment.payment_transaction_form |
utm_campaign_view_form |
utm.campaign.view.form | utm.campaign | xpath | Inherits utm.utm_campaign_view_form |
utm_campaign_view_kanban |
utm.campaign.view.kanban | utm.campaign | xpath | Inherits utm.utm_campaign_view_kanban |
view_account_invoice_report_search_inherit |
account.invoice.report.search.inherit | account.invoice.report | filter | Inherits account.view_account_invoice_report_search |
view_category_property_form |
product.category.property.form.inherit.sale | product.category | field | Inherits product.product_category_form_view |
view_order_form |
sale.order.form | sale.order | form | New |
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_quotation_kanban_with_onboarding |
sale.order.kanban | sale.order | xpath | 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 | xpath | 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 |
business_domain
Selection
ondelete={'sale_order': 'cascade'}
selection_add=[('sale_order', 'Sale Order')]
No public methods.
so_line
Many2one → sale.order.line
domain=[('qty_delivered_method', '=', 'analytic')]
index='btree_not_null'
string='Sales Order Item'
args: 'sale.order.line'
No public methods.
No new fields.
Public methods (0)No public methods.
team_id
Many2one → crm.team
comodel_name='crm.team'
string='Sales Team'
No public methods.
campaign_id
Many2one
ondelete='set null'
medium_id
Many2one
ondelete='set null'
sale_order_count
Integer
compute='_compute_origin_so_count'
string='Sale Order Count'
source_id
Many2one
ondelete='set null'
team_id
Many2one → crm.team
compute='_compute_team_id'
domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]"
ondelete='set null'
readonly=False
store=True
string='Sales Team'
tracking=True
args: 'crm.team'
action_post(self)
action_view_source_sale_orders(self)
button_cancel(self)
button_draft(self)
unlink(self)
is_downpayment
Boolean
sale_line_ids
Many2many → sale.order.line
copy=False
readonly=True
string='Sales Order Lines'
args: 'sale.order.line', 'sale_order_line_invoice_rel', 'invoice_line_id', 'order_line_id'
No public methods.
No new fields.
Public methods (0)No public methods.
invoiced
Float
compute='_compute_invoiced'
help='Invoice revenue for the current month. This is the amount the sales channel has invoiced this month. It is used to compute the progression ratio of the current and target revenue on the kanban view.'
readonly=True
string='Invoiced This Month'
invoiced_target
Float
help='Revenue Target for the current month (untaxed total of paid invoices).'
string='Invoicing Target'
quotations_amount
Float
compute='_compute_quotations_to_invoice'
readonly=True
string='Amount of quotations to invoice'
quotations_count
Integer
compute='_compute_quotations_to_invoice'
readonly=True
string='Number of quotations to invoice'
sale_order_count
Integer
compute='_compute_sale_order_count'
string='# Sale Orders'
sales_to_invoice_count
Integer
compute='_compute_sales_to_invoice'
readonly=True
string='Number of sales to invoice'
action_primary_channel_button(self)
update_invoiced_target(self, value)
No new fields.
Public methods (3)create(self, vals_list)
unlink(self)
write(self, vals)
No new fields.
Public methods (1)action_schedule_message(self, scheduled_date=False)
No new fields.
Public methods (0)No public methods.
amount_paid
Monetary
readonly=True
string='Already Paid'
confirmation_message
Char
compute='_compute_confirmation_message'
No public methods.
so_reference_type
Selection
default='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.
sale_order_ids
Many2many → sale.order
copy=False
readonly=True
string='Sales Orders'
args: 'sale.order', 'sale_order_transaction_rel', 'transaction_id', 'sale_order_id'
sale_order_ids_nbr
Integer
compute='_compute_sale_order_ids_nbr'
string='# of Sales Orders'
action_view_sales_orders(self)
sale_order_line_id
Many2one → sale.order.line
ondelete='cascade'
string='Sales Order Line'
args: 'sale.order.line'
No public methods.
property_account_downpayment_categ_id
Many2one → account.account
comodel_name='account.account'
company_dependent=True
domain=[('deprecated', '=', False), ('account_type', 'not in', ('asset_receivable', 'liability_payable', 'asset_cash', 'liability_credit_card', 'off_balance'))]
help='This account will be used on Downpayment invoices.'
string='Downpayment Account'
tracking=True
No public methods.
attached_on_sale
Selection
default='hidden'
groups='sales_team.group_sale_salesman'
help='Allows you to share the document with your customers within a sale.\nOn quote: 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=True
selection=[('hidden', 'Hidden'), ('quotation', 'On quote'), ('sale_order', 'On confirmed order')]
string='Sale : Visible at'
No public methods.
sales
Boolean
default=True
help='If true, the packaging can be used for sales orders'
args: 'Sales'
No public methods.
product_catalog_product_is_in_sale_order
Boolean
compute='_compute_product_is_in_sale_order'
search='_search_product_is_in_sale_order'
sales_count
Float
compute='_compute_sales_count'
digits='Product Unit of Measure'
string='Sold'
action_view_sales(self)
expense_policy
Selection
compute='_compute_expense_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=False
selection=[('no', 'No'), ('cost', 'At cost'), ('sales_price', 'Sales price')]
store=True
string='Re-Invoice Costs'
invoice_policy
Selection
compute='_compute_invoice_policy'
help='Ordered Quantity: Invoice quantities ordered by the customer.\nDelivered Quantity: Invoice quantities delivered to the customer.'
precompute=True
readonly=False
selection=[('order', 'Ordered quantities'), ('delivery', 'Delivered quantities')]
store=True
string='Invoicing Policy'
tracking=True
optional_product_ids
Many2many → product.template
check_company=True
column1='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'
sale_line_warn
Selection
default='no-message'
help=WARNING_HELP
required=True
string='Sales Order Line'
args: WARNING_MESSAGE
sale_line_warn_msg
Text
string='Message for Sales Order Line'
sales_count
Float
compute='_compute_sales_count'
digits='Product Unit of Measure'
string='Sold'
service_type
Selection
compute='_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=True
readonly=False
selection=[('manual', 'Manually set quantities on order')]
store=True
string='Track Service'
visible_expense_policy
Boolean
compute='_compute_visible_expense_policy'
string='Re-Invoice Policy visible'
action_view_sales(self)
get_import_templates(self)
get_single_product_variant(self)
portal_confirmation_pay
Boolean
string='Online Payment'
portal_confirmation_sign
Boolean
default=True
string='Online Signature'
prepayment_percent
Float
default=1.0
help='The percentage of the amount needed to be paid to confirm quotations.'
string='Prepayment percentage'
quotation_validity_days
Integer
default=30
help='Days between quotation proposal and expiration. 0 days means automatic expiration is disabled'
string='Default Quotation Validity'
sale_discount_product_id
Many2one → product.product
check_company=True
comodel_name='product.product'
domain=[('type', '=', 'service'), ('invoice_policy', '=', 'order')]
help='Default product used for discounts'
string='Discount Product'
sale_onboarding_payment_method
Selection
selection=[('digital_signature', 'Sign online'), ('paypal', 'PayPal'), ('stripe', 'Stripe'), ('other', 'Pay with another payment provider'), ('manual', 'Manual Payment')]
string='Sale onboarding selected payment method'
No public methods.
automatic_invoice
Boolean
config_parameter='sale.automatic_invoice'
help='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 Invoice'
default_invoice_policy
Selection
default='order'
default_model='product.template'
selection=[('order', 'Invoice what is ordered'), ('delivery', 'Invoice what is delivered')]
string='Invoicing Policy'
group_auto_done_setting
Boolean
implied_group='sale.group_auto_done_setting'
string='Lock Confirmed Sales'
group_discount_per_so_line
Boolean
implied_group='sale.group_discount_per_so_line'
string='Discounts'
group_proforma_sales
Boolean
help='Allows you to send pro-forma invoice.'
implied_group='sale.group_proforma_sales'
string='Pro-Forma Invoice'
group_warning_sale
Boolean
implied_group='sale.group_warning_sale'
string='Sale Order Warnings'
invoice_mail_template_id
Many2one → mail.template
comodel_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='Invoice Email Template'
module_delivery
Boolean
module_delivery_bpost
Boolean
module_delivery_dhl
Boolean
module_delivery_easypost
Boolean
module_delivery_fedex
Boolean
module_delivery_sendcloud
Boolean
module_delivery_shiprocket
Boolean
module_delivery_starshipit
Boolean
module_delivery_ups
Boolean
module_delivery_usps
Boolean
module_product_email_template
Boolean
module_sale_amazon
Boolean
module_sale_commission
Boolean
module_sale_loyalty
Boolean
module_sale_margin
Boolean
module_sale_pdf_quote_builder
Boolean
module_sale_product_matrix
Boolean
portal_confirmation_pay
Boolean
readonly=False
related='company_id.portal_confirmation_pay'
portal_confirmation_sign
Boolean
readonly=False
related='company_id.portal_confirmation_sign'
prepayment_percent
Float
readonly=False
related='company_id.prepayment_percent'
quotation_validity_days
Integer
readonly=False
related='company_id.quotation_validity_days'
set_values(self)
sale_order_count
Integer
compute='_compute_sale_order_count'
groups='sales_team.group_sale_salesman'
string='Sale Order Count'
sale_order_ids
One2many → sale.order
sale_warn
Selection
default='no-message'
help=WARNING_HELP
args: WARNING_MESSAGE, 'Sales Warnings'
sale_warn_msg
Text
action_view_sale_order(self)
can_edit_vat(self)
advance_payment_method
Selection
default='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=True
selection=[('delivered', 'Regular invoice'), ('percentage', 'Down payment (percentage)'), ('fixed', 'Down payment (fixed amount)')]
string='Create Invoice'
amount
Float
help='The percentage of amount to be invoiced in advance.'
string='Down Payment'
amount_invoiced
Monetary
compute='_compute_invoice_amounts'
help='Only confirmed down payments are considered.'
string='Already invoiced'
amount_to_invoice
Monetary
compute='_compute_invoice_amounts'
help='The amount to invoice = Sale Order Total - Confirmed Down Payments.'
string='Amount to invoice'
company_id
Many2one → res.company
comodel_name='res.company'
compute='_compute_company_id'
store=True
consolidated_billing
Boolean
default=True
help='Create one invoice for all orders related to same customer and same invoicing address'
string='Consolidated Billing'
count
Integer
compute='_compute_count'
string='Order Count'
currency_id
Many2one → res.currency
comodel_name='res.currency'
compute='_compute_currency_id'
store=True
deduct_down_payments
Boolean
default=True
string='Deduct down payments'
display_draft_invoice_warning
Boolean
compute='_compute_display_draft_invoice_warning'
display_invoice_amount_warning
Boolean
compute='_compute_display_invoice_amount_warning'
fixed_amount
Monetary
help='The fixed amount to be invoiced in advance.'
string='Down Payment Amount (Fixed)'
has_down_payments
Boolean
compute='_compute_has_down_payments'
string='Has down payments'
sale_order_ids
Many2many → sale.order
default=<expr>
args: 'sale.order'
create_invoices(self)
view_draft_invoices(self)
has_confirmed_order
Boolean
compute='_compute_has_confirmed_order'
sale_order_ids
Many2many → sale.order
comodel_name='sale.order'
default=<expr>
relation='sale_order_mass_cancel_wizard_rel'
string='Sale orders to cancel'
sale_orders_count
Integer
compute='_compute_sale_orders_count'
action_mass_cancel(self)
amount_invoiced
Monetary
compute='_compute_amount_invoiced'
string='Already invoiced'
amount_paid
Float
compute='_compute_amount_paid'
compute_sudo=True
help="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_tax
Monetary
compute='_compute_amounts'
store=True
string='Taxes'
amount_to_invoice
Monetary
compute='_compute_amount_to_invoice'
string='Un-invoiced Balance'
amount_total
Monetary
compute='_compute_amounts'
store=True
string='Total'
tracking=4
amount_undiscounted
Float
compute='_compute_amount_undiscounted'
digits=0
string='Amount Before Discount'
amount_untaxed
Monetary
compute='_compute_amounts'
store=True
string='Untaxed Amount'
tracking=5
authorized_transaction_ids
Many2many → payment.transaction
comodel_name='payment.transaction'
compute='_compute_authorized_transaction_ids'
compute_sudo=True
copy=False
string='Authorized Transactions'
campaign_id
Many2one
ondelete='set null'
client_order_ref
Char
copy=False
string='Customer Reference'
commitment_date
Datetime
copy=False
help='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='Delivery Date'
company_id
Many2one → res.company
comodel_name='res.company'
default=<expr>
index=True
required=True
company_price_include
Selection
related='company_id.account_price_include'
country_code
Char
related='company_id.account_fiscal_country_id.code'
string='Country code'
create_date
Datetime
index=True
readonly=True
string='Creation Date'
currency_id
Many2one → res.currency
comodel_name='res.currency'
compute='_compute_currency_id'
ondelete='restrict'
precompute=True
store=True
currency_rate
Float
compute='_compute_currency_rate'
digits=0
precompute=True
store=True
string='Currency Rate'
date_order
Datetime
copy=False
default=fields.Datetime.now
help='Creation date of draft/sent orders,\nConfirmation date of confirmed orders.'
required=True
string='Order Date'
duplicated_order_ids
Many2many → sale.order
comodel_name='sale.order'
compute='_compute_duplicated_order_ids'
expected_date
Datetime
compute='_compute_expected_date'
help='Delivery date you can promise to the customer, computed from the minimum lead time of the order lines.'
store=False
string='Expected Date'
fiscal_position_id
Many2one → account.fiscal.position
check_company=True
comodel_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=True
readonly=False
store=True
string='Fiscal Position'
has_active_pricelist
Boolean
compute='_compute_has_active_pricelist'
has_archived_products
Boolean
compute='_compute_has_archived_products'
invoice_count
Integer
compute='_get_invoiced'
string='Invoice Count'
invoice_ids
Many2many → account.move
comodel_name='account.move'
compute='_get_invoiced'
copy=False
search='_search_invoice_ids'
string='Invoices'
invoice_status
Selection
compute='_compute_invoice_status'
selection=INVOICE_STATUS
store=True
string='Invoice Status'
is_expired
Boolean
compute='_compute_is_expired'
string='Is Expired'
journal_id
Many2one → account.journal
check_company=True
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=True
readonly=False
store=True
string='Invoicing Journal'
args: 'account.journal'
locked
Boolean
copy=False
default=False
help='Locked orders cannot be modified.'
tracking=True
medium_id
Many2one
ondelete='set null'
name
Char
copy=False
default=<expr>
index='trigram'
readonly=False
required=True
string='Order Reference'
note
Html
compute='_compute_note'
precompute=True
readonly=False
store=True
string='Terms and conditions'
order_line
One2many → sale.order.line
auto_join=True
comodel_name='sale.order.line'
copy=True
inverse_name='order_id'
string='Order Lines'
origin
Char
help='Reference of the document that generated this sales order request'
string='Source Document'
partner_credit_warning
Text
compute='_compute_partner_credit_warning'
partner_id
Many2one → res.partner
change_default=True
check_company=True
comodel_name='res.partner'
index=True
required=True
string='Customer'
tracking=1
partner_invoice_id
Many2one → res.partner
check_company=True
comodel_name='res.partner'
compute='_compute_partner_invoice_id'
index='btree_not_null'
precompute=True
readonly=False
required=True
store=True
string='Invoice Address'
partner_shipping_id
Many2one → res.partner
check_company=True
comodel_name='res.partner'
compute='_compute_partner_shipping_id'
index='btree_not_null'
precompute=True
readonly=False
required=True
store=True
string='Delivery Address'
payment_term_id
Many2one → account.payment.term
check_company=True
comodel_name='account.payment.term'
compute='_compute_payment_term_id'
domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]"
precompute=True
readonly=False
store=True
string='Payment Terms'
prepayment_percent
Float
compute='_compute_prepayment_percent'
help='The percentage of the amount needed that must be paid by the customer to confirm the order.'
precompute=True
readonly=False
store=True
string='Prepayment percentage'
pricelist_id
Many2one → product.pricelist
check_company=True
comodel_name='product.pricelist'
compute='_compute_pricelist_id'
domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]"
help='If you change the pricelist, only newly added lines will be affected.'
precompute=True
readonly=False
store=True
string='Pricelist'
tracking=1
reference
Char
copy=False
help='The payment communication of this sale order.'
string='Payment Ref.'
require_payment
Boolean
compute='_compute_require_payment'
help='Request a online payment from the customer to confirm the order.'
precompute=True
readonly=False
store=True
string='Online payment'
require_signature
Boolean
compute='_compute_require_signature'
help='Request a online signature from the customer to confirm the order.'
precompute=True
readonly=False
store=True
string='Online signature'
show_update_fpos
Boolean
store=False
string='Has Fiscal Position Changed'
show_update_pricelist
Boolean
store=False
string='Has Pricelist Changed'
signature
Image
attachment=True
copy=False
max_height=1024
max_width=1024
string='Signature'
signed_by
Char
copy=False
string='Signed By'
signed_on
Datetime
copy=False
string='Signed On'
source_id
Many2one
ondelete='set null'
state
Selection
copy=False
default='draft'
group_expand=True
index=True
readonly=True
selection=SALE_ORDER_STATE
string='Status'
tracking=3
tag_ids
Many2many → crm.tag
column1='order_id'
column2='tag_id'
comodel_name='crm.tag'
relation='sale_order_tag_rel'
string='Tags'
tax_calculation_rounding_method
Selection
depends=['company_id']
related='company_id.tax_calculation_rounding_method'
tax_country_id
Many2one → res.country
comodel_name='res.country'
compute='_compute_tax_country_id'
compute_sudo=True
tax_totals
Binary
compute='_compute_tax_totals'
exportable=False
team_id
Many2one → crm.team
change_default=True
check_company=True
comodel_name='crm.team'
compute='_compute_team_id'
domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]"
index=True
ondelete='set null'
precompute=True
readonly=False
store=True
string='Sales Team'
tracking=True
terms_type
Selection
related='company_id.terms_type'
transaction_ids
Many2many → payment.transaction
column1='sale_order_id'
column2='transaction_id'
comodel_name='payment.transaction'
copy=False
readonly=True
relation='sale_order_transaction_rel'
string='Transactions'
type_name
Char
compute='_compute_type_name'
string='Type Name'
user_id
Many2one → res.users
comodel_name='res.users'
compute='_compute_user_id'
domain=<expr>
index=True
precompute=True
readonly=False
store=True
string='Salesperson'
tracking=2
validity_date
Date
compute='_compute_validity_date'
copy=False
help='Validity of the order, after that you will not able to sign & pay the quotation.'
precompute=True
readonly=False
store=True
string='Expiration'
action_cancel(self)
action_confirm(self)
action_draft(self)
action_lock(self)
action_open_business_doc(self)
action_open_discount_wizard(self)
action_preview_sale_order(self)
action_quotation_send(self)
action_quotation_sent(self)
action_unlock(self)
action_update_prices(self)
action_update_taxes(self)
action_view_invoice(self, invoices=False)
copy_data(self, default=None)
create(self, vals_list)
create_document_from_attachment(self, attachment_ids)
get_empty_list_help(self, help_msg)
get_portal_last_transaction(self)
init(self)
message_post(self, **kwargs)
onchange(self, values, field_names, fields_spec)
payment_action_capture(self)
payment_action_void(self)
write(self, vals)
author_id
Many2one → res.partner
default=_default_author_id
index=True
ondelete='set null'
string='Author'
args: 'res.partner'
display_invoice_alert
Boolean
compute='_compute_display_invoice_alert'
compute_sudo=True
string='Invoice Alert'
order_id
Many2one → sale.order
ondelete='cascade'
required=True
string='Sale Order'
args: 'sale.order'
recipient_ids
Many2many → res.partner
compute='_compute_recipient_ids'
readonly=False
string='Recipients'
args: 'res.partner'
action_cancel(self)
action_send_mail_and_cancel(self)
company_id
Many2one
related='sale_order_id.company_id'
currency_id
Many2one
related='sale_order_id.currency_id'
discount_amount
Monetary
string='Amount'
discount_percentage
Float
string='Percentage'
discount_type
Selection
default='sol_discount'
selection=[('sol_discount', 'On All Order Lines'), ('so_discount', 'Global Discount'), ('amount', 'Fixed Amount')]
sale_order_id
Many2one → sale.order
default=<expr>
required=True
args: 'sale.order'
tax_ids
Many2many → account.tax
comodel_name='account.tax'
domain="[('type_tax_use', '=', 'sale'), ('company_id', '=', company_id)]"
help='Taxes to add on the discount line.'
string='Taxes'
action_apply_discount(self)
amount_invoiced
Monetary
compute='_compute_amount_invoiced'
compute_sudo=True
string='Invoiced Amount'
amount_to_invoice
Monetary
compute='_compute_amount_to_invoice'
compute_sudo=True
string='Un-invoiced Balance'
analytic_line_ids
One2many → account.analytic.line
comodel_name='account.analytic.line'
inverse_name='so_line'
string='Analytic lines'
combo_item_id
Many2one → product.combo.item
comodel_name='product.combo.item'
company_id
Many2one
index=True
precompute=True
related='order_id.company_id'
store=True
company_price_include
Selection
related='company_id.account_price_include'
currency_id
Many2one
depends=['order_id.currency_id']
precompute=True
related='order_id.currency_id'
store=True
customer_lead
Float
compute='_compute_customer_lead'
help='Number of days between the order confirmation and the shipping of the products to the customer'
precompute=True
readonly=False
required=True
store=True
string='Lead Time'
discount
Float
compute='_compute_discount'
digits='Discount'
precompute=True
readonly=False
store=True
string='Discount (%)'
display_type
Selection
default=False
selection=[('line_section', 'Section'), ('line_note', 'Note')]
invoice_lines
Many2many → account.move.line
column1='order_line_id'
column2='invoice_line_id'
comodel_name='account.move.line'
copy=False
relation='sale_order_line_invoice_rel'
string='Invoice Lines'
invoice_status
Selection
compute='_compute_invoice_status'
selection=[('upselling', 'Upselling Opportunity'), ('invoiced', 'Fully Invoiced'), ('to invoice', 'To Invoice'), ('no', 'Nothing to Invoice')]
store=True
string='Invoice Status'
is_configurable_product
Boolean
depends=['product_template_id']
related='product_template_id.has_configurable_attributes'
string='Is the product configurable?'
is_downpayment
Boolean
help='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_expense
Boolean
help='Is true if the sales order line comes from an expense or a vendor bills'
string='Is expense'
is_product_archived
Boolean
compute='_compute_is_product_archived'
linked_line_id
Many2one → sale.order.line
comodel_name='sale.order.line'
copy=False
domain="[('order_id', '=', order_id)]"
index=True
ondelete='cascade'
string='Linked Order Line'
linked_line_ids
One2many → sale.order.line
comodel_name='sale.order.line'
inverse_name='linked_line_id'
string='Linked Order Lines'
linked_virtual_id
Char
name
Text
compute='_compute_name'
precompute=True
readonly=False
required=True
store=True
string='Description'
order_id
Many2one → sale.order
comodel_name='sale.order'
copy=False
index=True
ondelete='cascade'
required=True
string='Order Reference'
order_partner_id
Many2one
index=True
precompute=True
related='order_id.partner_id'
store=True
string='Customer'
price_reduce_taxexcl
Monetary
compute='_compute_price_reduce_taxexcl'
precompute=True
store=True
string='Price Reduce Tax excl'
price_reduce_taxinc
Monetary
compute='_compute_price_reduce_taxinc'
precompute=True
store=True
string='Price Reduce Tax incl'
price_subtotal
Monetary
compute='_compute_amount'
precompute=True
store=True
string='Subtotal'
price_tax
Float
compute='_compute_amount'
precompute=True
store=True
string='Total Tax'
price_total
Monetary
compute='_compute_amount'
precompute=True
store=True
string='Total'
price_unit
Float
compute='_compute_price_unit'
min_display_digits='Product Price'
precompute=True
readonly=False
required=True
store=True
string='Unit Price'
pricelist_item_id
Many2one → product.pricelist.item
comodel_name='product.pricelist.item'
compute='_compute_pricelist_item_id'
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_line_id'
precompute=True
readonly=False
store=True
string='Custom Values'
product_id
Many2one → product.product
change_default=True
comodel_name='product.product'
domain="[('sale_ok', '=', True)]"
index='btree_not_null'
ondelete='restrict'
string='Product'
product_no_variant_attribute_value_ids
Many2many → product.template.attribute.value
comodel_name='product.template.attribute.value'
compute='_compute_no_variant_attribute_values'
ondelete='restrict'
precompute=True
readonly=False
store=True
string='Extra Values'
product_packaging_id
Many2one → product.packaging
check_company=True
comodel_name='product.packaging'
compute='_compute_product_packaging_id'
domain="[('sales', '=', True), ('product_id','=',product_id)]"
precompute=True
readonly=False
store=True
string='Packaging'
product_packaging_qty
Float
compute='_compute_product_packaging_qty'
precompute=True
readonly=False
store=True
string='Packaging Quantity'
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=[('sale_ok', '=', True)]
readonly=False
search='_search_product_template_id'
string='Product Template'
product_type
Selection
depends=['product_id']
related='product_id.type'
product_uom
Many2one → uom.uom
comodel_name='uom.uom'
compute='_compute_product_uom'
domain="[('category_id', '=', product_uom_category_id)]"
ondelete='restrict'
precompute=True
readonly=False
store=True
string='Unit of Measure'
product_uom_category_id
Many2one
depends=['product_id']
related='product_id.uom_id.category_id'
product_uom_qty
Float
compute='_compute_product_uom_qty'
default=1.0
digits='Product Unit of Measure'
precompute=True
readonly=False
required=True
store=True
string='Quantity'
product_uom_readonly
Boolean
compute='_compute_product_uom_readonly'
product_updatable
Boolean
compute='_compute_product_updatable'
string='Can Edit Product'
qty_delivered
Float
compute='_compute_qty_delivered'
copy=False
default=0.0
digits='Product Unit of Measure'
readonly=False
store=True
string='Delivery Quantity'
qty_delivered_method
Selection
compute='_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 sale line\n - Stock Moves: the quantity comes from confirmed pickings\n'
precompute=True
selection=[('manual', 'Manual'), ('analytic', 'Analytic From Expenses')]
store=True
string='Method to update delivered qty'
qty_invoiced
Float
compute='_compute_qty_invoiced'
digits='Product Unit of Measure'
store=True
string='Invoiced Quantity'
qty_invoiced_posted
Float
compute='_compute_qty_invoiced_posted'
digits='Product Unit of Measure'
string='Invoiced Quantity (posted)'
qty_to_invoice
Float
compute='_compute_qty_to_invoice'
digits='Product Unit of Measure'
store=True
string='Quantity To Invoice'
salesman_id
Many2one
precompute=True
related='order_id.user_id'
store=True
string='Salesperson'
selected_combo_items
Char
store=False
sequence
Integer
default=10
string='Sequence'
service_tracking
Selection
depends=['product_id']
related='product_id.service_tracking'
state
Selection
copy=False
precompute=True
related='order_id.state'
store=True
string='Order Status'
tax_calculation_rounding_method
Selection
readonly=True
related='company_id.tax_calculation_rounding_method'
string='Tax calculation rounding method'
tax_country_id
Many2one
related='order_id.tax_country_id'
tax_id
Many2many → account.tax
check_company=True
comodel_name='account.tax'
compute='_compute_tax_id'
context={'active_test': False}
precompute=True
readonly=False
store=True
string='Taxes'
technical_price_unit
Float
translated_product_name
Text
compute='_compute_translated_product_name'
untaxed_amount_invoiced
Monetary
compute='_compute_untaxed_amount_invoiced'
store=True
string='Untaxed Invoiced Amount'
untaxed_amount_to_invoice
Monetary
compute='_compute_untaxed_amount_to_invoice'
store=True
string='Untaxed Amount To Invoice'
virtual_id
Char
action_add_from_catalog(self)
compute_uom_qty(self, new_qty, stock_move, rounding=True)
create(self, vals_list)
has_valued_move_ids(self)
write(self, values)
payment_method
Selection
default=_get_default_payment_method
selection_add=[('digital_signature', 'Electronic signature'), ('stripe', 'Credit & Debit card (via Stripe)'), ('paypal', 'PayPal'), ('manual', 'Custom payment instructions')]
add_payment_methods(self)
campaign_id
Many2one → utm.campaign
comodel_name='utm.campaign'
readonly=True
string='Campaign'
categ_id
Many2one → product.category
comodel_name='product.category'
readonly=True
string='Product Category'
commercial_partner_id
Many2one → res.partner
comodel_name='res.partner'
readonly=True
string='Customer Entity'
company_id
Many2one → res.company
comodel_name='res.company'
readonly=True
country_id
Many2one → res.country
comodel_name='res.country'
readonly=True
string='Customer Country'
currency_id
Many2one → res.currency
comodel_name='res.currency'
compute='_compute_currency_id'
date
Datetime
readonly=True
string='Order Date'
discount
Float
aggregator='avg'
readonly=True
string='Discount %'
discount_amount
Monetary
readonly=True
string='Discount Amount'
industry_id
Many2one → res.partner.industry
comodel_name='res.partner.industry'
readonly=True
string='Customer Industry'
invoice_status
Selection
readonly=True
selection=[('upselling', 'Upselling Opportunity'), ('invoiced', 'Fully Invoiced'), ('to invoice', 'To Invoice'), ('no', 'Nothing to Invoice')]
string='Order Invoice Status'
line_invoice_status
Selection
readonly=True
selection=[('upselling', 'Upselling Opportunity'), ('invoiced', 'Fully Invoiced'), ('to invoice', 'To Invoice'), ('no', 'Nothing to Invoice')]
string='Invoice Status'
medium_id
Many2one → utm.medium
comodel_name='utm.medium'
readonly=True
string='Medium'
name
Char
readonly=True
string='Order Reference'
nbr
Integer
readonly=True
string='# of Lines'
order_reference
Reference
aggregator='count_distinct'
selection=[('sale.order', 'Sales Order')]
string='Order'
partner_id
Many2one → res.partner
comodel_name='res.partner'
readonly=True
string='Customer'
partner_zip
Char
readonly=True
string='Customer ZIP'
price_subtotal
Monetary
readonly=True
string='Untaxed Total'
price_total
Monetary
readonly=True
string='Total'
price_unit
Float
aggregator='avg'
readonly=True
string='Unit Price'
pricelist_id
Many2one → product.pricelist
comodel_name='product.pricelist'
readonly=True
product_id
Many2one → product.product
comodel_name='product.product'
readonly=True
string='Product Variant'
product_tmpl_id
Many2one → product.template
comodel_name='product.template'
readonly=True
string='Product'
product_uom
Many2one → uom.uom
comodel_name='uom.uom'
readonly=True
string='Unit of Measure'
product_uom_qty
Float
readonly=True
string='Qty Ordered'
qty_delivered
Float
readonly=True
string='Qty Delivered'
qty_invoiced
Float
readonly=True
string='Qty Invoiced'
qty_to_deliver
Float
readonly=True
string='Qty To Deliver'
qty_to_invoice
Float
readonly=True
string='Qty To Invoice'
source_id
Many2one → utm.source
comodel_name='utm.source'
readonly=True
string='Source'
state
Selection
readonly=True
selection=SALE_ORDER_STATE
string='Status'
state_id
Many2one → res.country.state
comodel_name='res.country.state'
readonly=True
string='Customer State'
team_id
Many2one → crm.team
comodel_name='crm.team'
readonly=True
string='Sales Team'
untaxed_amount_invoiced
Monetary
readonly=True
string='Untaxed Amount Invoiced'
untaxed_amount_to_invoice
Monetary
readonly=True
string='Untaxed Amount To Invoice'
user_id
Many2one → res.users
comodel_name='res.users'
readonly=True
string='Salesperson'
volume
Float
readonly=True
string='Volume'
weight
Float
readonly=True
string='Gross Weight'
action_open_order(self)
company_id
Many2one → res.company
default=<expr>
string='Company'
args: 'res.company'
currency_id
Many2one → res.currency
related='company_id.currency_id'
string='Currency'
args: 'res.currency'
invoiced_amount
Integer
compute='_compute_sale_invoiced_amount'
compute_sudo=True
groups='sales_team.group_sale_salesman'
string='Revenues generated by the campaign'
quotation_count
Integer
compute='_compute_quotation_count'
compute_sudo=True
groups='sales_team.group_sale_salesman'
args: 'Quotation Count'
action_redirect_to_invoiced(self)
action_redirect_to_quotations(self)
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
account_invoice_form |
Account Invoice | account.move | xpath | Inherits account.view_move_form |
account_invoice_groupby_inherit |
account.move.groupby | account.move | field | Inherits account.view_account_invoice_filter |
account_invoice_report_view_tree |
account.invoice.report.view.tree.inherit.sale | account.invoice.report | field | Inherits account.account_invoice_report_view_tree |
account_invoice_view_tree |
account.move.tree.inherit.sale | account.move | field | Inherits account.view_invoice_tree |
crm_lead_partner_kanban_view |
res.partner.kanban.saleorder.inherit | res.partner | field | Inherits base.res_partner_kanban_view |
crm_team_salesteams_view_form |
crm.team.form | crm.team | field | Inherits sales_team.crm_team_view_form |
crm_team_view_kanban_dashboard |
crm.team.view.kanban.dashboard.inherit.sale | crm.team | xpath | 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_link_wizard_view_form |
payment.link.wizard.form | payment.link.wizard | field | Inherits payment.payment_link_wizard_view_form |
payment_provider_form |
payment.provider.form.inherit.sale | payment.provider | group | 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_home_sale |
Show Quotations / Sales Orders | ir.ui.view | qweb | Inherits portal.portal_my_home |
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 | sheet | Inherits product.product_document_form |
product_document_kanban |
product.document.kanban.sale | product.document | div | Inherits product.product_document_kanban |
product_document_list |
product.document.list.sale | product.document | field | 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 | div | Inherits product.product_normal_form_view |
product_packaging_form_view_sale |
product.packaging.form.view.sale | product.packaging | group | Inherits product.product_packaging_form_view |
product_packaging_tree_view_sale |
product.packaging.tree.view.sale | product.packaging | field | Inherits product.product_packaging_tree_view |
product_template_form_view |
product.template.form.view.inherit.sale | product.template | page | Inherits product.product_template_form_view |
product_template_form_view_sale_order_button |
product.template.sale.order.button | product.template | div | Inherits product.product_template_only_form_view |
product_view_kanban_catalog |
product.view.kanban.catalog.inherit.sale | product.product | xpath | Inherits product.product_view_kanban_catalog |
product_view_search_catalog |
product.view.search.catalog.inherit.sale | product.product | filter | Inherits product.product_view_search_catalog |
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 | xpath | Inherits base.res_config_settings_view_form |
res_partner_view_buttons |
res.partner.view.buttons | res.partner | div | Inherits base.view_partner_form |
res_partner_view_form_payment_defaultcreditcard |
res.partner.view.form.payment.defaultcreditcard | res.partner | button | Inherits payment.view_partners_form_payment_defaultcreditcard |
res_partner_view_form_property_inherit |
res.partner.view.form.property.inherit | res.partner | group | Inherits account.view_partner_property_form |
sale_order_cancel_view_form |
sale.order.cancel.form | sale.order.cancel | form | New |
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.line.wizard.form | sale.order.discount | form | New |
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_template |
Sales Order | ir.ui.view | qweb | Inherits portal.portal_sidebar |
sale_order_tree |
sale.order.tree | sale.order | tree | 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 | filter | Inherits sale.view_sales_order_filter |
sale_order_view_search_inherit_sale |
sale.order.search.inherit.sale | sale.order | filter | 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.tree | sale.report | tree | New |
transaction_form_inherit_sale |
payment.transaction.form.inherit.sale.payment | payment.transaction | xpath | Inherits payment.payment_transaction_form |
utm_campaign_view_form |
utm.campaign.view.form | utm.campaign | xpath | Inherits utm.utm_campaign_view_form |
utm_campaign_view_kanban |
utm.campaign.view.kanban | utm.campaign | xpath | Inherits utm.utm_campaign_view_kanban |
view_account_invoice_report_search_inherit |
account.invoice.report.search.inherit | account.invoice.report | filter | Inherits account.view_account_invoice_report_search |
view_order_form |
sale.order.form | sale.order | form | New |
view_order_line_tree |
sale.order.line.tree | sale.order.line | tree | 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.tree (orders) | sale.order | tree | Inherits sale_order_tree |
view_quotation_tree |
sale.order.tree (quotes) | sale.order | tree | Inherits sale_order_tree |
view_quotation_tree_with_onboarding |
sale.order.tree | sale.order | xpath | 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 |
business_domain
Selection
ondelete={'sale_order': 'cascade'}
selection_add=[('sale_order', 'Sale Order')]
No public methods.
allowed_so_line_ids
Many2many → sale.order.line
compute='_compute_allowed_so_line_ids'
args: 'sale.order.line'
so_line
Many2one → sale.order.line
domain=[('qty_delivered_method', '=', 'analytic')]
index='btree_not_null'
string='Sales Order Item'
args: 'sale.order.line'
No public methods.
team_id
Many2one → crm.team
comodel_name='crm.team'
string='Sales Team'
No public methods.
campaign_id
Many2one
ondelete='set null'
medium_id
Many2one
ondelete='set null'
sale_order_count
Integer
compute='_compute_origin_so_count'
string='Sale Order Count'
source_id
Many2one
ondelete='set null'
team_id
Many2one → crm.team
compute='_compute_team_id'
domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]"
ondelete='set null'
readonly=False
store=True
string='Sales Team'
tracking=True
args: 'crm.team'
action_post(self)
action_view_source_sale_orders(self)
button_cancel(self)
button_draft(self)
unlink(self)
is_downpayment
Boolean
sale_line_ids
Many2many → sale.order.line
copy=False
readonly=True
string='Sales Order Lines'
args: 'sale.order.line', 'sale_order_line_invoice_rel', 'invoice_line_id', 'order_line_id'
No public methods.
No new fields.
Public methods (0)No public methods.
invoiced
Float
compute='_compute_invoiced'
help='Invoice revenue for the current month. This is the amount the sales channel has invoiced this month. It is used to compute the progression ratio of the current and target revenue on the kanban view.'
readonly=True
string='Invoiced This Month'
invoiced_target
Float
help='Revenue target for the current month (untaxed total of confirmed invoices).'
string='Invoicing Target'
quotations_amount
Float
compute='_compute_quotations_to_invoice'
readonly=True
string='Amount of quotations to invoice'
quotations_count
Integer
compute='_compute_quotations_to_invoice'
readonly=True
string='Number of quotations to invoice'
sale_order_count
Integer
compute='_compute_sale_order_count'
string='# Sale Orders'
sales_to_invoice_count
Integer
compute='_compute_sales_to_invoice'
readonly=True
string='Number of sales to invoice'
action_primary_channel_button(self)
update_invoiced_target(self, value)
No new fields.
Public methods (3)create(self, vals_list)
unlink(self)
write(self, vals)
No new fields.
Public methods (1)action_close_panel_sale_quotation(self)
No new fields.
Public methods (3)action_open_step_sale_order_confirmation(self)
action_open_step_sample_quotation(self)
action_validate_step_payment_provider(self)
amount_paid
Monetary
readonly=True
string='Already Paid'
confirmation_message
Char
compute='_compute_confirmation_message'
No public methods.
so_reference_type
Selection
default='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.
sale_order_ids
Many2many → sale.order
copy=False
readonly=True
string='Sales Orders'
args: 'sale.order', 'sale_order_transaction_rel', 'transaction_id', 'sale_order_id'
sale_order_ids_nbr
Integer
compute='_compute_sale_order_ids_nbr'
string='# of Sales Orders'
action_view_sales_orders(self)
No new fields.
Public methods (0)No public methods.
sale_order_line_id
Many2one → sale.order.line
ondelete='cascade'
string='Sales Order Line'
args: 'sale.order.line'
No public methods.
No new fields.
Public methods (0)No public methods.
attached_on
Selection
help="Allows you to share the document with your customers within a sale.\nLeave it empty if you don't want to share this document with sales customer.\nQuotation: 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.\nConfirmed order: 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. "
selection=[('quotation', 'Quotation'), ('sale_order', 'Confirmed order')]
string='Visible at'
No public methods.
sales
Boolean
default=True
help='If true, the packaging can be used for sales orders'
args: 'Sales'
No public methods.
No new fields.
Public methods (0)No public methods.
product_catalog_product_is_in_sale_order
Boolean
compute='_compute_product_is_in_sale_order'
search='_search_product_is_in_sale_order'
sales_count
Float
compute='_compute_sales_count'
digits='Product Unit of Measure'
string='Sold'
action_view_sales(self)
expense_policy
Selection
compute='_compute_expense_policy'
default='no'
help='Validated expenses and vendor bills can be re-invoiced to a customer at its cost or sales price.'
readonly=False
selection=[('no', 'No'), ('cost', 'At cost'), ('sales_price', 'Sales price')]
store=True
string='Re-Invoice Expenses'
invoice_policy
Selection
compute='_compute_invoice_policy'
help='Ordered Quantity: Invoice quantities ordered by the customer.\nDelivered Quantity: Invoice quantities delivered to the customer.'
precompute=True
readonly=False
selection=[('order', 'Ordered quantities'), ('delivery', 'Delivered quantities')]
store=True
string='Invoicing Policy'
sale_line_warn
Selection
default='no-message'
help=WARNING_HELP
required=True
string='Sales Order Line'
args: WARNING_MESSAGE
sale_line_warn_msg
Text
string='Message for Sales Order Line'
sales_count
Float
compute='_compute_sales_count'
digits='Product Unit of Measure'
string='Sold'
service_type
Selection
compute='_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=True
readonly=False
selection=[('manual', 'Manually set quantities on order')]
store=True
string='Track Service'
visible_expense_policy
Boolean
compute='_compute_visible_expense_policy'
string='Re-Invoice Policy visible'
action_view_sales(self)
get_import_templates(self)
get_single_product_variant(self)
portal_confirmation_pay
Boolean
string='Online Payment'
portal_confirmation_sign
Boolean
default=True
string='Online Signature'
prepayment_percent
Float
default=1.0
help='The percentage of the amount needed to be paid to confirm quotations.'
string='Prepayment percentage'
quotation_validity_days
Integer
default=30
help='Days between quotation proposal and expiration. 0 days means automatic expiration is disabled'
string='Default Quotation Validity'
sale_discount_product_id
Many2one → product.product
check_company=True
comodel_name='product.product'
domain=[('type', '=', 'service'), ('invoice_policy', '=', 'order')]
help='Default product used for discounts'
string='Discount Product'
sale_down_payment_product_id
Many2one → product.product
check_company=True
comodel_name='product.product'
domain=[('type', '=', 'service'), ('invoice_policy', '=', 'order')]
help='Default product used for down payments'
string='Deposit Product'
sale_onboarding_payment_method
Selection
selection=[('digital_signature', 'Sign online'), ('paypal', 'PayPal'), ('stripe', 'Stripe'), ('other', 'Pay with another payment provider'), ('manual', 'Manual Payment')]
string='Sale onboarding selected payment method'
No public methods.
automatic_invoice
Boolean
config_parameter='sale.automatic_invoice'
help='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 Invoice'
default_invoice_policy
Selection
default='order'
default_model='product.template'
selection=[('order', 'Invoice what is ordered'), ('delivery', 'Invoice what is delivered')]
string='Invoicing Policy'
deposit_default_product_id
Many2one
readonly=False
related='company_id.sale_down_payment_product_id'
group_auto_done_setting
Boolean
implied_group='sale.group_auto_done_setting'
string='Lock Confirmed Sales'
group_proforma_sales
Boolean
help='Allows you to send pro-forma invoice.'
implied_group='sale.group_proforma_sales'
string='Pro-Forma Invoice'
group_warning_sale
Boolean
implied_group='sale.group_warning_sale'
string='Sale Order Warnings'
invoice_mail_template_id
Many2one → mail.template
comodel_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='Invoice Email Template'
module_delivery
Boolean
module_delivery_bpost
Boolean
module_delivery_dhl
Boolean
module_delivery_easypost
Boolean
module_delivery_fedex
Boolean
module_delivery_sendcloud
Boolean
module_delivery_shiprocket
Boolean
module_delivery_ups
Boolean
module_delivery_usps
Boolean
module_product_email_template
Boolean
module_sale_amazon
Boolean
module_sale_loyalty
Boolean
module_sale_margin
Boolean
module_sale_pdf_quote_builder
Boolean
portal_confirmation_pay
Boolean
readonly=False
related='company_id.portal_confirmation_pay'
portal_confirmation_sign
Boolean
readonly=False
related='company_id.portal_confirmation_sign'
prepayment_percent
Float
readonly=False
related='company_id.prepayment_percent'
quotation_validity_days
Integer
readonly=False
related='company_id.quotation_validity_days'
set_values(self)
sale_order_count
Integer
compute='_compute_sale_order_count'
string='Sale Order Count'
sale_order_ids
One2many → sale.order
sale_warn
Selection
default='no-message'
help=WARNING_HELP
args: WARNING_MESSAGE, 'Sales Warnings'
sale_warn_msg
Text
action_view_sale_order(self)
can_edit_vat(self)
advance_payment_method
Selection
default='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=True
selection=[('delivered', 'Regular invoice'), ('percentage', 'Down payment (percentage)'), ('fixed', 'Down payment (fixed amount)')]
string='Create Invoice'
amount
Float
help='The percentage of amount to be invoiced in advance.'
string='Down Payment Amount'
amount_invoiced
Monetary
compute='_compute_invoice_amounts'
help='Only confirmed down payments are considered.'
string='Already invoiced'
amount_to_invoice
Monetary
compute='_compute_invoice_amounts'
help='The amount to invoice = Sale Order Total - Confirmed Down Payments.'
string='Amount to invoice'
company_id
Many2one → res.company
comodel_name='res.company'
compute='_compute_company_id'
store=True
consolidated_billing
Boolean
default=True
help='Create one invoice for all orders related to same customer and same invoicing address'
string='Consolidated Billing'
count
Integer
compute='_compute_count'
string='Order Count'
currency_id
Many2one → res.currency
comodel_name='res.currency'
compute='_compute_currency_id'
store=True
deduct_down_payments
Boolean
default=True
string='Deduct down payments'
deposit_account_id
Many2one → account.account
check_company=True
comodel_name='account.account'
domain=[('deprecated', '=', False)]
help='Account used for deposits'
string='Income Account'
deposit_taxes_id
Many2many → account.tax
check_company=True
comodel_name='account.tax'
domain=[('type_tax_use', '=', 'sale')]
help='Taxes used for deposits'
string='Customer Taxes'
display_draft_invoice_warning
Boolean
compute='_compute_display_draft_invoice_warning'
display_invoice_amount_warning
Boolean
compute='_compute_display_invoice_amount_warning'
fixed_amount
Monetary
help='The fixed amount to be invoiced in advance.'
string='Down Payment Amount (Fixed)'
has_down_payments
Boolean
compute='_compute_has_down_payments'
string='Has down payments'
product_id
Many2one → product.product
comodel_name='product.product'
compute='_compute_product_id'
domain=[('type', '=', 'service')]
readonly=False
store=True
string='Down Payment Product'
sale_order_ids
Many2many → sale.order
default=<expr>
args: 'sale.order'
create_invoices(self)
view_draft_invoices(self)
has_confirmed_order
Boolean
compute='_compute_has_confirmed_order'
sale_order_ids
Many2many → sale.order
comodel_name='sale.order'
default=<expr>
relation='sale_order_mass_cancel_wizard_rel'
string='Sale orders to cancel'
sale_orders_count
Integer
compute='_compute_sale_orders_count'
action_mass_cancel(self)
No new fields.
Public methods (0)No public methods.
amount_invoiced
Monetary
compute='_compute_amount_invoiced'
compute_sudo=True
string='Already invoiced'
amount_paid
Float
compute='_compute_amount_paid'
compute_sudo=True
amount_tax
Monetary
compute='_compute_amounts'
store=True
string='Taxes'
amount_to_invoice
Monetary
compute='_compute_amount_to_invoice'
store=True
string='Amount to invoice'
amount_total
Monetary
compute='_compute_amounts'
store=True
string='Total'
tracking=4
amount_undiscounted
Float
compute='_compute_amount_undiscounted'
digits=0
string='Amount Before Discount'
amount_untaxed
Monetary
compute='_compute_amounts'
store=True
string='Untaxed Amount'
tracking=5
analytic_account_id
Many2one → account.analytic.account
check_company=True
comodel_name='account.analytic.account'
copy=False
domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]"
string='Analytic Account'
authorized_transaction_ids
Many2many → payment.transaction
comodel_name='payment.transaction'
compute='_compute_authorized_transaction_ids'
compute_sudo=True
copy=False
string='Authorized Transactions'
campaign_id
Many2one
ondelete='set null'
client_order_ref
Char
copy=False
string='Customer Reference'
commitment_date
Datetime
copy=False
help='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='Delivery Date'
company_id
Many2one → res.company
comodel_name='res.company'
default=<expr>
index=True
required=True
country_code
Char
related='company_id.account_fiscal_country_id.code'
string='Country code'
create_date
Datetime
index=True
readonly=True
string='Creation Date'
currency_id
Many2one → res.currency
comodel_name='res.currency'
compute='_compute_currency_id'
ondelete='restrict'
precompute=True
store=True
currency_rate
Float
compute='_compute_currency_rate'
digits=0
precompute=True
store=True
string='Currency Rate'
date_order
Datetime
copy=False
default=fields.Datetime.now
help='Creation date of draft/sent orders,\nConfirmation date of confirmed orders.'
required=True
string='Order Date'
expected_date
Datetime
compute='_compute_expected_date'
help='Delivery date you can promise to the customer, computed from the minimum lead time of the order lines.'
store=False
string='Expected Date'
fiscal_position_id
Many2one → account.fiscal.position
check_company=True
comodel_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=True
readonly=False
store=True
string='Fiscal Position'
has_active_pricelist
Boolean
compute='_compute_has_active_pricelist'
invoice_count
Integer
compute='_get_invoiced'
string='Invoice Count'
invoice_ids
Many2many → account.move
comodel_name='account.move'
compute='_get_invoiced'
copy=False
search='_search_invoice_ids'
string='Invoices'
invoice_status
Selection
compute='_compute_invoice_status'
selection=INVOICE_STATUS
store=True
string='Invoice Status'
is_expired
Boolean
compute='_compute_is_expired'
string='Is Expired'
journal_id
Many2one → account.journal
check_company=True
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=True
readonly=False
store=True
string='Invoicing Journal'
args: 'account.journal'
locked
Boolean
copy=False
default=False
help='Locked orders cannot be modified.'
medium_id
Many2one
ondelete='set null'
name
Char
copy=False
default=<expr>
index='trigram'
readonly=False
required=True
string='Order Reference'
note
Html
compute='_compute_note'
precompute=True
readonly=False
store=True
string='Terms and conditions'
order_line
One2many → sale.order.line
auto_join=True
comodel_name='sale.order.line'
copy=True
inverse_name='order_id'
string='Order Lines'
origin
Char
help='Reference of the document that generated this sales order request'
string='Source Document'
partner_credit_warning
Text
compute='_compute_partner_credit_warning'
partner_id
Many2one → res.partner
change_default=True
check_company=True
comodel_name='res.partner'
index=True
required=True
string='Customer'
tracking=1
partner_invoice_id
Many2one → res.partner
check_company=True
comodel_name='res.partner'
compute='_compute_partner_invoice_id'
index='btree_not_null'
precompute=True
readonly=False
required=True
store=True
string='Invoice Address'
partner_shipping_id
Many2one → res.partner
check_company=True
comodel_name='res.partner'
compute='_compute_partner_shipping_id'
index='btree_not_null'
precompute=True
readonly=False
required=True
store=True
string='Delivery Address'
payment_term_id
Many2one → account.payment.term
check_company=True
comodel_name='account.payment.term'
compute='_compute_payment_term_id'
domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]"
precompute=True
readonly=False
store=True
string='Payment Terms'
prepayment_percent
Float
compute='_compute_prepayment_percent'
help='The percentage of the amount needed that must be paid by the customer to confirm the order.'
precompute=True
readonly=False
store=True
string='Prepayment percentage'
pricelist_id
Many2one → product.pricelist
check_company=True
comodel_name='product.pricelist'
compute='_compute_pricelist_id'
domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]"
help='If you change the pricelist, only newly added lines will be affected.'
precompute=True
readonly=False
store=True
string='Pricelist'
tracking=1
reference
Char
copy=False
help='The payment communication of this sale order.'
string='Payment Ref.'
require_payment
Boolean
compute='_compute_require_payment'
help='Request a online payment from the customer to confirm the order.'
precompute=True
readonly=False
store=True
string='Online payment'
require_signature
Boolean
compute='_compute_require_signature'
help='Request a online signature from the customer to confirm the order.'
precompute=True
readonly=False
store=True
string='Online signature'
show_update_fpos
Boolean
store=False
string='Has Fiscal Position Changed'
show_update_pricelist
Boolean
store=False
string='Has Pricelist Changed'
signature
Image
attachment=True
copy=False
max_height=1024
max_width=1024
string='Signature'
signed_by
Char
copy=False
string='Signed By'
signed_on
Datetime
copy=False
string='Signed On'
source_id
Many2one
ondelete='set null'
state
Selection
copy=False
default='draft'
group_expand=True
index=True
readonly=True
selection=SALE_ORDER_STATE
string='Status'
tracking=3
tag_ids
Many2many → crm.tag
column1='order_id'
column2='tag_id'
comodel_name='crm.tag'
relation='sale_order_tag_rel'
string='Tags'
tax_calculation_rounding_method
Selection
depends=['company_id']
related='company_id.tax_calculation_rounding_method'
tax_country_id
Many2one → res.country
comodel_name='res.country'
compute='_compute_tax_country_id'
compute_sudo=True
tax_totals
Binary
compute='_compute_tax_totals'
exportable=False
team_id
Many2one → crm.team
change_default=True
check_company=True
comodel_name='crm.team'
compute='_compute_team_id'
domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]"
index=True
ondelete='set null'
precompute=True
readonly=False
store=True
string='Sales Team'
tracking=True
terms_type
Selection
related='company_id.terms_type'
transaction_ids
Many2many → payment.transaction
column1='sale_order_id'
column2='transaction_id'
comodel_name='payment.transaction'
copy=False
readonly=True
relation='sale_order_transaction_rel'
string='Transactions'
type_name
Char
compute='_compute_type_name'
string='Type Name'
user_id
Many2one → res.users
comodel_name='res.users'
compute='_compute_user_id'
domain=<expr>
index=True
precompute=True
readonly=False
store=True
string='Salesperson'
tracking=2
validity_date
Date
compute='_compute_validity_date'
copy=False
precompute=True
readonly=False
store=True
string='Expiration'
action_cancel(self)
action_confirm(self)
action_draft(self)
action_lock(self)
action_open_discount_wizard(self)
action_preview_sale_order(self)
action_quotation_send(self)
action_quotation_sent(self)
action_unlock(self)
action_update_prices(self)
action_update_taxes(self)
action_view_invoice(self, invoices=False)
add_option_to_order_with_taxcloud(self)
copy_data(self, default=None)
create(self, vals_list)
get_empty_list_help(self, help_msg)
get_portal_last_transaction(self)
init(self)
message_post(self, **kwargs)
onchange(self, values, field_names, fields_spec)
payment_action_capture(self)
payment_action_void(self)
validate_taxes_on_sales_order(self)
write(self, values)
author_id
Many2one → res.partner
default=_default_author_id
index=True
ondelete='set null'
string='Author'
args: 'res.partner'
display_invoice_alert
Boolean
compute='_compute_display_invoice_alert'
compute_sudo=True
string='Invoice Alert'
order_id
Many2one → sale.order
ondelete='cascade'
required=True
string='Sale Order'
args: 'sale.order'
recipient_ids
Many2many → res.partner
compute='_compute_recipient_ids'
readonly=False
string='Recipients'
args: 'res.partner'
action_cancel(self)
action_send_mail_and_cancel(self)
company_id
Many2one
related='sale_order_id.company_id'
currency_id
Many2one
related='sale_order_id.currency_id'
discount_amount
Monetary
string='Amount'
discount_percentage
Float
string='Percentage'
discount_type
Selection
default='sol_discount'
selection=[('sol_discount', 'On All Order Lines'), ('so_discount', 'Global Discount'), ('amount', 'Fixed Amount')]
sale_order_id
Many2one → sale.order
default=<expr>
required=True
args: 'sale.order'
action_apply_discount(self)
No new fields.
Public methods (2)confirm_sale_order(self, sample_ratio, so_line)
filter_confirmable_sale_orders(cls, sale_order)
analytic_line_ids
One2many → account.analytic.line
comodel_name='account.analytic.line'
inverse_name='so_line'
string='Analytic lines'
company_id
Many2one
index=True
precompute=True
related='order_id.company_id'
store=True
currency_id
Many2one
depends=['order_id.currency_id']
precompute=True
related='order_id.currency_id'
store=True
customer_lead
Float
compute='_compute_customer_lead'
help='Number of days between the order confirmation and the shipping of the products to the customer'
precompute=True
readonly=False
required=True
store=True
string='Lead Time'
discount
Float
compute='_compute_discount'
digits='Discount'
precompute=True
readonly=False
store=True
string='Discount (%)'
display_type
Selection
default=False
selection=[('line_section', 'Section'), ('line_note', 'Note')]
invoice_lines
Many2many → account.move.line
column1='order_line_id'
column2='invoice_line_id'
comodel_name='account.move.line'
copy=False
relation='sale_order_line_invoice_rel'
string='Invoice Lines'
invoice_status
Selection
compute='_compute_invoice_status'
selection=[('upselling', 'Upselling Opportunity'), ('invoiced', 'Fully Invoiced'), ('to invoice', 'To Invoice'), ('no', 'Nothing to Invoice')]
store=True
string='Invoice Status'
is_downpayment
Boolean
help='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_expense
Boolean
help='Is true if the sales order line comes from an expense or a vendor bills'
string='Is expense'
name
Text
compute='_compute_name'
precompute=True
readonly=False
required=True
store=True
string='Description'
order_id
Many2one → sale.order
comodel_name='sale.order'
copy=False
index=True
ondelete='cascade'
required=True
string='Order Reference'
order_partner_id
Many2one
index=True
precompute=True
related='order_id.partner_id'
store=True
string='Customer'
price_reduce_taxexcl
Monetary
compute='_compute_price_reduce_taxexcl'
precompute=True
store=True
string='Price Reduce Tax excl'
price_reduce_taxinc
Monetary
compute='_compute_price_reduce_taxinc'
precompute=True
store=True
string='Price Reduce Tax incl'
price_subtotal
Monetary
compute='_compute_amount'
precompute=True
store=True
string='Subtotal'
price_tax
Float
compute='_compute_amount'
precompute=True
store=True
string='Total Tax'
price_total
Monetary
compute='_compute_amount'
precompute=True
store=True
string='Total'
price_unit
Float
compute='_compute_price_unit'
digits='Product Price'
precompute=True
readonly=False
required=True
store=True
string='Unit Price'
pricelist_item_id
Many2one → product.pricelist.item
comodel_name='product.pricelist.item'
compute='_compute_pricelist_item_id'
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_line_id'
precompute=True
readonly=False
store=True
string='Custom Values'
product_id
Many2one → product.product
change_default=True
comodel_name='product.product'
domain="[('sale_ok', '=', True)]"
index='btree_not_null'
ondelete='restrict'
string='Product'
product_no_variant_attribute_value_ids
Many2many → product.template.attribute.value
comodel_name='product.template.attribute.value'
compute='_compute_no_variant_attribute_values'
ondelete='restrict'
precompute=True
readonly=False
store=True
string='Extra Values'
product_packaging_id
Many2one → product.packaging
check_company=True
comodel_name='product.packaging'
compute='_compute_product_packaging_id'
domain="[('sales', '=', True), ('product_id','=',product_id)]"
precompute=True
readonly=False
store=True
string='Packaging'
product_packaging_qty
Float
compute='_compute_product_packaging_qty'
precompute=True
readonly=False
store=True
string='Packaging Quantity'
product_template_id
Many2one → product.template
comodel_name='product.template'
compute='_compute_product_template_id'
domain=[('sale_ok', '=', True)]
readonly=False
search='_search_product_template_id'
string='Product Template'
product_type
Selection
depends=['product_id']
related='product_id.detailed_type'
product_uom
Many2one → uom.uom
comodel_name='uom.uom'
compute='_compute_product_uom'
domain="[('category_id', '=', product_uom_category_id)]"
ondelete='restrict'
precompute=True
readonly=False
store=True
string='Unit of Measure'
product_uom_category_id
Many2one
depends=['product_id']
related='product_id.uom_id.category_id'
product_uom_qty
Float
compute='_compute_product_uom_qty'
default=1.0
digits='Product Unit of Measure'
precompute=True
readonly=False
required=True
store=True
string='Quantity'
product_uom_readonly
Boolean
compute='_compute_product_uom_readonly'
product_updatable
Boolean
compute='_compute_product_updatable'
string='Can Edit Product'
qty_delivered
Float
compute='_compute_qty_delivered'
copy=False
default=0.0
digits='Product Unit of Measure'
readonly=False
store=True
string='Delivery Quantity'
qty_delivered_method
Selection
compute='_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 sale line\n - Stock Moves: the quantity comes from confirmed pickings\n'
precompute=True
selection=[('manual', 'Manual'), ('analytic', 'Analytic From Expenses')]
store=True
string='Method to update delivered qty'
qty_invoiced
Float
compute='_compute_qty_invoiced'
digits='Product Unit of Measure'
store=True
string='Invoiced Quantity'
qty_to_invoice
Float
compute='_compute_qty_to_invoice'
digits='Product Unit of Measure'
store=True
string='Quantity To Invoice'
salesman_id
Many2one
precompute=True
related='order_id.user_id'
store=True
string='Salesperson'
sequence
Integer
default=10
string='Sequence'
state
Selection
copy=False
precompute=True
related='order_id.state'
store=True
string='Order Status'
tax_calculation_rounding_method
Selection
readonly=True
related='company_id.tax_calculation_rounding_method'
string='Tax calculation rounding method'
tax_country_id
Many2one
related='order_id.tax_country_id'
tax_id
Many2many → account.tax
check_company=True
comodel_name='account.tax'
compute='_compute_tax_id'
context={'active_test': False}
precompute=True
readonly=False
store=True
string='Taxes'
untaxed_amount_invoiced
Monetary
compute='_compute_untaxed_amount_invoiced'
store=True
string='Untaxed Invoiced Amount'
untaxed_amount_to_invoice
Monetary
compute='_compute_untaxed_amount_to_invoice'
store=True
string='Untaxed Amount To Invoice'
action_add_from_catalog(self)
compute_uom_qty(self, new_qty, stock_move, rounding=True)
create(self, vals_list)
has_valued_move_ids(self)
write(self, values)
payment_method
Selection
default=_get_default_payment_method
selection_add=[('digital_signature', 'Electronic signature'), ('stripe', 'Credit & Debit card (via Stripe)'), ('paypal', 'PayPal'), ('manual', 'Custom payment instructions')]
add_payment_methods(self)
analytic_account_id
Many2one → account.analytic.account
comodel_name='account.analytic.account'
readonly=True
string='Analytic Account'
campaign_id
Many2one → utm.campaign
comodel_name='utm.campaign'
readonly=True
string='Campaign'
categ_id
Many2one → product.category
comodel_name='product.category'
readonly=True
string='Product Category'
commercial_partner_id
Many2one → res.partner
comodel_name='res.partner'
readonly=True
string='Customer Entity'
company_id
Many2one → res.company
comodel_name='res.company'
readonly=True
country_id
Many2one → res.country
comodel_name='res.country'
readonly=True
string='Customer Country'
currency_id
Many2one → res.currency
comodel_name='res.currency'
compute='_compute_currency_id'
date
Datetime
readonly=True
string='Order Date'
discount
Float
group_operator='avg'
readonly=True
string='Discount %'
discount_amount
Monetary
readonly=True
string='Discount Amount'
industry_id
Many2one → res.partner.industry
comodel_name='res.partner.industry'
readonly=True
string='Customer Industry'
invoice_status
Selection
readonly=True
selection=[('upselling', 'Upselling Opportunity'), ('invoiced', 'Fully Invoiced'), ('to invoice', 'To Invoice'), ('no', 'Nothing to Invoice')]
string='Invoice Status'
medium_id
Many2one → utm.medium
comodel_name='utm.medium'
readonly=True
string='Medium'
name
Char
readonly=True
string='Order Reference'
nbr
Integer
readonly=True
string='# of Lines'
order_reference
Reference
group_operator='count_distinct'
selection=[('sale.order', 'Sales Order')]
string='Related Order'
partner_id
Many2one → res.partner
comodel_name='res.partner'
readonly=True
string='Customer'
partner_zip
Char
readonly=True
string='Customer ZIP'
price_subtotal
Monetary
readonly=True
string='Untaxed Total'
price_total
Monetary
readonly=True
string='Total'
pricelist_id
Many2one → product.pricelist
comodel_name='product.pricelist'
readonly=True
product_id
Many2one → product.product
comodel_name='product.product'
readonly=True
string='Product Variant'
product_tmpl_id
Many2one → product.template
comodel_name='product.template'
readonly=True
string='Product'
product_uom
Many2one → uom.uom
comodel_name='uom.uom'
readonly=True
string='Unit of Measure'
product_uom_qty
Float
readonly=True
string='Qty Ordered'
qty_delivered
Float
readonly=True
string='Qty Delivered'
qty_invoiced
Float
readonly=True
string='Qty Invoiced'
qty_to_deliver
Float
readonly=True
string='Qty To Deliver'
qty_to_invoice
Float
readonly=True
string='Qty To Invoice'
source_id
Many2one → utm.source
comodel_name='utm.source'
readonly=True
string='Source'
state
Selection
readonly=True
selection=SALE_ORDER_STATE
string='Status'
state_id
Many2one → res.country.state
comodel_name='res.country.state'
readonly=True
string='Customer State'
team_id
Many2one → crm.team
comodel_name='crm.team'
readonly=True
string='Sales Team'
untaxed_amount_invoiced
Monetary
readonly=True
string='Untaxed Amount Invoiced'
untaxed_amount_to_invoice
Monetary
readonly=True
string='Untaxed Amount To Invoice'
user_id
Many2one → res.users
comodel_name='res.users'
readonly=True
string='Salesperson'
volume
Float
readonly=True
string='Volume'
weight
Float
readonly=True
string='Gross Weight'
No public methods.
company_id
Many2one → res.company
default=<expr>
string='Company'
args: 'res.company'
currency_id
Many2one → res.currency
related='company_id.currency_id'
string='Currency'
args: 'res.currency'
invoiced_amount
Integer
compute='_compute_sale_invoiced_amount'
compute_sudo=True
groups='sales_team.group_sale_salesman'
string='Revenues generated by the campaign'
quotation_count
Integer
compute='_compute_quotation_count'
compute_sudo=True
groups='sales_team.group_sale_salesman'
args: 'Quotation Count'
action_redirect_to_invoiced(self)
action_redirect_to_quotations(self)
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
account_invoice_form |
Account Invoice | account.move | xpath | Inherits account.view_move_form |
account_invoice_groupby_inherit |
account.move.groupby | account.move | field | Inherits account.view_account_invoice_filter |
account_invoice_report_view_tree |
account.invoice.report.view.tree.inherit.sale | account.invoice.report | field | Inherits account.account_invoice_report_view_tree |
account_invoice_view_tree |
account.move.tree.inherit.sale | account.move | field | Inherits account.view_invoice_tree |
badge_extra_price |
Badge Extra Price | ir.ui.view | qweb | New |
crm_lead_partner_kanban_view |
res.partner.kanban.saleorder.inherit | res.partner | field | Inherits base.res_partner_kanban_view |
crm_team_salesteams_view_form |
crm.team.form | crm.team | div | Inherits sales_team.crm_team_view_form |
crm_team_view_kanban_dashboard |
crm.team.view.kanban.dashboard.inherit.sale | crm.team | xpath | Inherits sales_team.crm_team_view_kanban_dashboard |
onboarding_quotation_layout_step |
onboarding_quotation_layout_step | ir.ui.view | qweb | New |
payment_checkout_inherit |
payment_checkout_inherit | ir.ui.view | qweb | Inherits payment.checkout |
payment_manage_inherit |
payment_manage_inherit | ir.ui.view | qweb | Inherits payment.manage |
payment_provider_form |
payment.provider.form.inherit.sale | payment.provider | group | 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_home_sale |
Show Quotations / Sales Orders | ir.ui.view | qweb | Inherits portal.portal_my_home |
portal_my_orders |
My Sales Orders | ir.ui.view | qweb | New |
portal_my_quotations |
My Quotations | ir.ui.view | qweb | New |
product_form_view_sale_order_button |
product.product.sale.order | product.product | div | Inherits product.product_normal_form_view |
product_packaging_form_view_sale |
product.packaging.form.view.sale | product.packaging | group | Inherits product.product_packaging_form_view |
product_packaging_tree_view_sale |
product.packaging.tree.view.sale | product.packaging | field | Inherits product.product_packaging_tree_view |
product_template_form_view |
product.template.form.view.inherit.sale | product.template | page | Inherits product.product_template_form_view |
product_template_form_view_sale_order_button |
product.template.sale.order.button | product.template | div | Inherits product.product_template_only_form_view |
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 |
res_config_settings_view_form |
res.config.settings.view.form.inherit.sale | res.config.settings | xpath | Inherits base.res_config_settings_view_form |
res_partner_view_buttons |
res.partner.view.buttons | res.partner | div | Inherits base.view_partner_form |
res_partner_view_form_payment_defaultcreditcard |
res.partner.view.form.payment.defaultcreditcard | res.partner | button | Inherits payment.view_partners_form_payment_defaultcreditcard |
res_partner_view_form_property_inherit |
res.partner.view.form.property.inherit | res.partner | group | Inherits account.view_partner_property_form |
sale_onboarding_order_confirmation_step |
sale_onboarding_order_confirmation_step | ir.ui.view | qweb | New |
sale_onboarding_sample_quotation_step |
sale_onboarding_sample_quotation_step | ir.ui.view | qweb | New |
sale_order_cancel_view_form |
sale.order.cancel.form | sale.order.cancel | form | New |
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_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_template |
Sales Order Portal Template | ir.ui.view | qweb | Inherits portal.portal_sidebar |
sale_order_view_activity |
sale.order.activity | sale.order | activity | New |
sale_order_view_search_inherit_quotation |
sale.order.search.inherit.quotation | sale.order | filter | Inherits sale.view_sales_order_filter |
sale_order_view_search_inherit_sale |
sale.order.search.inherit.sale | sale.order | filter | Inherits sale.view_sales_order_filter |
sale_quotation_onboarding_panel |
sale.quotation.onboarding.panel | ir.ui.view | qweb | New |
sale_report_view_tree |
sale.report.view.tree | sale.report | tree | New |
transaction_form_inherit_sale |
payment.transaction.form.inherit.sale.payment | payment.transaction | xpath | Inherits payment.payment_transaction_form |
utm_campaign_view_form |
utm.campaign.view.form | utm.campaign | xpath | Inherits utm.utm_campaign_view_form |
utm_campaign_view_kanban |
utm.campaign.view.kanban | utm.campaign | xpath | Inherits utm.utm_campaign_view_kanban |
variants |
variants | ir.ui.view | qweb | New |
view_account_invoice_report_search_inherit |
account.invoice.report.search.inherit | account.invoice.report | filter | Inherits account.view_account_invoice_report_search |
view_order_form |
sale.order.form | sale.order | form | New |
view_order_line_tree |
sale.order.line.tree | sale.order.line | tree | 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.tree | sale.order | tree | New |
view_quotation_tree |
sale.order.tree | sale.order | tree | New |
view_quotation_tree_with_onboarding |
sale.order.tree | sale.order | xpath | 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_auto_done_setting |
sale.order.form | sale.order | button | Inherits sale.view_order_form |
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 |
business_domain
Selection
ondelete={'sale_order': 'cascade'}
selection_add=[('sale_order', 'Sale Order')]
No public methods.
so_line
Many2one → sale.order.line
domain=<expr>
string='Sales Order Item'
args: 'sale.order.line'
No public methods.
team_id
Many2one → crm.team
comodel_name='crm.team'
string='Sales Team'
No public methods.
campaign_id
Many2one
ondelete='set null'
medium_id
Many2one
ondelete='set null'
sale_order_count
Integer
compute='_compute_origin_so_count'
string='Sale Order Count'
source_id
Many2one
ondelete='set null'
team_id
Many2one → crm.team
compute='_compute_team_id'
domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]"
ondelete='set null'
readonly=False
store=True
string='Sales Team'
tracking=True
args: 'crm.team'
action_post(self)
action_view_source_sale_orders(self)
button_cancel(self)
button_draft(self)
unlink(self)
is_downpayment
Boolean
sale_line_ids
Many2many → sale.order.line
copy=False
readonly=True
string='Sales Order Lines'
args: 'sale.order.line', 'sale_order_line_invoice_rel', 'invoice_line_id', 'order_line_id'
No public methods.
No new fields.
Public methods (0)No public methods.
invoiced
Float
compute='_compute_invoiced'
help='Invoice revenue for the current month. This is the amount the sales channel has invoiced this month. It is used to compute the progression ratio of the current and target revenue on the kanban view.'
readonly=True
string='Invoiced This Month'
invoiced_target
Float
help='Revenue target for the current month (untaxed total of confirmed invoices).'
string='Invoicing Target'
quotations_amount
Float
compute='_compute_quotations_to_invoice'
readonly=True
string='Amount of quotations to invoice'
quotations_count
Integer
compute='_compute_quotations_to_invoice'
readonly=True
string='Number of quotations to invoice'
sale_order_count
Integer
compute='_compute_sale_order_count'
string='# Sale Orders'
sales_to_invoice_count
Integer
compute='_compute_sales_to_invoice'
readonly=True
string='Number of sales to invoice'
use_quotations
Boolean
help='Check this box if you send quotations to your customers rather than confirming orders straight away.'
string='Quotations'
action_primary_channel_button(self)
update_invoiced_target(self, value)
No new fields.
Public methods (0)No public methods.
No new fields.
Public methods (0)No public methods.
so_reference_type
Selection
default='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.
sale_order_ids
Many2many → sale.order
copy=False
readonly=True
string='Sales Orders'
args: 'sale.order', 'sale_order_transaction_rel', 'transaction_id', 'sale_order_id'
sale_order_ids_nbr
Integer
compute='_compute_sale_order_ids_nbr'
string='# of Sales Orders'
action_view_sales_orders(self)
No new fields.
Public methods (0)No public methods.
sale_order_line_id
Many2one → sale.order.line
ondelete='cascade'
required=True
string='Sales Order Line'
args: 'sale.order.line'
No public methods.
No new fields.
Public methods (0)No public methods.
sales
Boolean
default=True
help='If true, the packaging can be used for sales orders'
args: 'Sales'
No public methods.
No new fields.
Public methods (0)No public methods.
sales_count
Float
compute='_compute_sales_count'
digits='Product Unit of Measure'
string='Sold'
action_view_sales(self)
expense_policy
Selection
compute='_compute_expense_policy'
default='no'
help='Expenses and vendor bills can be re-invoiced to a customer.With this option, a validated expense can be re-invoice to a customer at its cost or sales price.'
readonly=False
store=True
string='Re-Invoice Expenses'
args: [('no', 'No'), ('cost', 'At cost'), ('sales_price', 'Sales price')]
invoice_policy
Selection
compute='_compute_invoice_policy'
help='Ordered Quantity: Invoice quantities ordered by the customer.\nDelivered Quantity: Invoice quantities delivered to the customer.'
precompute=True
readonly=False
store=True
string='Invoicing Policy'
args: [('order', 'Ordered quantities'), ('delivery', 'Delivered quantities')]
sale_line_warn
Selection
default='no-message'
help=WARNING_HELP
required=True
args: WARNING_MESSAGE, 'Sales Order Line'
sale_line_warn_msg
Text
sales_count
Float
compute='_compute_sales_count'
digits='Product Unit of Measure'
string='Sold'
service_type
Selection
compute='_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=True
readonly=False
store=True
string='Track Service'
args: [('manual', 'Manually set quantities on order')]
visible_expense_policy
Boolean
compute='_compute_visible_expense_policy'
args: 'Re-Invoice Policy visible'
visible_qty_configurator
Boolean
compute='_compute_visible_qty_configurator'
args: 'Quantity visible in configurator'
action_view_sales(self)
create_product_variant(self, product_template_attribute_value_ids)
get_import_templates(self)
portal_confirmation_pay
Boolean
string='Online Payment'
portal_confirmation_sign
Boolean
default=True
string='Online Signature'
quotation_validity_days
Integer
default=30
string='Default Quotation Validity (Days)'
sale_onboarding_order_confirmation_state
Selection
default='not_done'
string='State of the onboarding confirmation order step'
args: [('not_done', 'Not done'), ('just_done', 'Just done'), ('done', 'Done')]
sale_onboarding_payment_method
Selection
string='Sale onboarding selected payment method'
args: [('digital_signature', 'Sign online'), ('paypal', 'PayPal'), ('stripe', 'Stripe'), ('other', 'Pay with another payment provider'), ('manual', 'Manual Payment')]
sale_onboarding_sample_quotation_state
Selection
default='not_done'
string='State of the onboarding sample quotation step'
args: [('not_done', 'Not done'), ('just_done', 'Just done'), ('done', 'Done')]
sale_quotation_onboarding_state
Selection
default='not_done'
string='State of the sale onboarding panel'
args: [('not_done', 'Not done'), ('just_done', 'Just done'), ('done', 'Done'), ('closed', 'Closed')]
action_close_sale_quotation_onboarding(self)
action_open_sale_onboarding_payment_provider(self)
action_open_sale_onboarding_sample_quotation(self)
get_and_update_sale_quotation_onboarding_state(self)
automatic_invoice
Boolean
config_parameter='sale.automatic_invoice'
help='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 Invoice'
default_invoice_policy
Selection
default='order'
default_model='product.template'
args: [('order', 'Invoice what is ordered'), ('delivery', 'Invoice what is delivered')], 'Invoicing Policy'
deposit_default_product_id
Many2one → product.product
config_parameter='sale.default_deposit_product_id'
domain="[('type', '=', 'service')]"
help='Default product used for payment advances'
args: 'product.product', 'Deposit Product'
group_auto_done_setting
Boolean
implied_group='sale.group_auto_done_setting'
string='Lock Confirmed Sales'
group_proforma_sales
Boolean
help='Allows you to send pro-forma invoice.'
implied_group='sale.group_proforma_sales'
string='Pro-Forma Invoice'
group_warning_sale
Boolean
implied_group='sale.group_warning_sale'
args: 'Sale Order Warnings'
invoice_mail_template_id
Many2one → mail.template
comodel_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='Invoice Email Template'
module_delivery
Boolean
module_delivery_bpost
Boolean
module_delivery_dhl
Boolean
module_delivery_easypost
Boolean
module_delivery_fedex
Boolean
module_delivery_sendcloud
Boolean
module_delivery_ups
Boolean
module_delivery_usps
Boolean
module_product_email_template
Boolean
module_sale_amazon
Boolean
module_sale_loyalty
Boolean
module_sale_margin
Boolean
portal_confirmation_pay
Boolean
readonly=False
related='company_id.portal_confirmation_pay'
string='Online Payment'
portal_confirmation_sign
Boolean
readonly=False
related='company_id.portal_confirmation_sign'
string='Online Signature'
quotation_validity_days
Integer
readonly=False
related='company_id.quotation_validity_days'
string='Default Quotation Validity (Days)'
use_quotation_validity_days
Boolean
config_parameter='sale.use_quotation_validity_days'
args: 'Default Quotation Validity'
set_values(self)
sale_order_count
Integer
compute='_compute_sale_order_count'
string='Sale Order Count'
sale_order_ids
One2many → sale.order
sale_warn
Selection
default='no-message'
help=WARNING_HELP
args: WARNING_MESSAGE, 'Sales Warnings'
sale_warn_msg
Text
action_view_sale_order(self)
can_edit_vat(self)
advance_payment_method
Selection
default='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=True
selection=[('delivered', 'Regular invoice'), ('percentage', 'Down payment (percentage)'), ('fixed', 'Down payment (fixed amount)')]
string='Create Invoice'
amount
Float
help='The percentage of amount to be invoiced in advance, taxes excluded.'
string='Down Payment Amount'
company_id
Many2one → res.company
comodel_name='res.company'
compute='_compute_company_id'
store=True
count
Integer
compute='_compute_count'
string='Order Count'
currency_id
Many2one → res.currency
comodel_name='res.currency'
compute='_compute_currency_id'
store=True
deduct_down_payments
Boolean
default=True
string='Deduct down payments'
deposit_account_id
Many2one → account.account
comodel_name='account.account'
domain=[('deprecated', '=', False)]
help='Account used for deposits'
string='Income Account'
deposit_taxes_id
Many2many → account.tax
comodel_name='account.tax'
domain=[('type_tax_use', '=', 'sale')]
help='Taxes used for deposits'
string='Customer Taxes'
fixed_amount
Monetary
help='The fixed amount to be invoiced in advance, taxes excluded.'
string='Down Payment Amount (Fixed)'
has_down_payments
Boolean
compute='_compute_has_down_payments'
string='Has down payments'
product_id
Many2one → product.product
comodel_name='product.product'
compute='_compute_product_id'
domain=[('type', '=', 'service')]
readonly=False
store=True
string='Down Payment Product'
sale_order_ids
Many2many → sale.order
default=<expr>
args: 'sale.order'
create_invoices(self)
No new fields.
Public methods (0)No public methods.
amount_tax
Monetary
compute='_compute_amounts'
store=True
string='Taxes'
amount_total
Monetary
compute='_compute_amounts'
store=True
string='Total'
tracking=4
amount_undiscounted
Float
compute='_compute_amount_undiscounted'
digits=0
string='Amount Before Discount'
amount_untaxed
Monetary
compute='_compute_amounts'
store=True
string='Untaxed Amount'
tracking=5
analytic_account_id
Many2one → account.analytic.account
check_company=True
comodel_name='account.analytic.account'
copy=False
domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]"
states=READONLY_FIELD_STATES
string='Analytic Account'
authorized_transaction_ids
Many2many → payment.transaction
comodel_name='payment.transaction'
compute='_compute_authorized_transaction_ids'
copy=False
string='Authorized Transactions'
campaign_id
Many2one
ondelete='set null'
client_order_ref
Char
copy=False
string='Customer Reference'
commitment_date
Datetime
copy=False
help='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.'
states=LOCKED_FIELD_STATES
string='Delivery Date'
company_id
Many2one → res.company
comodel_name='res.company'
default=<expr>
index=True
required=True
country_code
Char
related='company_id.account_fiscal_country_id.code'
string='Country code'
create_date
Datetime
index=True
readonly=True
string='Creation Date'
currency_id
Many2one
depends=['pricelist_id']
ondelete='restrict'
precompute=True
related='pricelist_id.currency_id'
store=True
currency_rate
Float
compute='_compute_currency_rate'
digits=0
precompute=True
store=True
string='Currency Rate'
date_order
Datetime
copy=False
default=fields.Datetime.now
help='Creation date of draft/sent orders,\nConfirmation date of confirmed orders.'
readonly=False
required=True
states=READONLY_FIELD_STATES
string='Order Date'
expected_date
Datetime
compute='_compute_expected_date'
help='Delivery date you can promise to the customer, computed from the minimum lead time of the order lines.'
store=False
string='Expected Date'
fiscal_position_id
Many2one → account.fiscal.position
check_company=True
comodel_name='account.fiscal.position'
compute='_compute_fiscal_position_id'
domain="[('company_id', '=', company_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=True
readonly=False
store=True
string='Fiscal Position'
invoice_count
Integer
compute='_get_invoiced'
string='Invoice Count'
invoice_ids
Many2many → account.move
comodel_name='account.move'
compute='_get_invoiced'
copy=False
search='_search_invoice_ids'
string='Invoices'
invoice_status
Selection
compute='_compute_invoice_status'
selection=INVOICE_STATUS
store=True
string='Invoice Status'
is_expired
Boolean
compute='_compute_is_expired'
string='Is Expired'
medium_id
Many2one
ondelete='set null'
name
Char
copy=False
default=<expr>
index='trigram'
readonly=True
required=True
states={'draft': [('readonly', False)]}
string='Order Reference'
note
Html
compute='_compute_note'
precompute=True
readonly=False
store=True
string='Terms and conditions'
order_line
One2many → sale.order.line
auto_join=True
comodel_name='sale.order.line'
copy=True
inverse_name='order_id'
states=LOCKED_FIELD_STATES
string='Order Lines'
origin
Char
help='Reference of the document that generated this sales order request'
string='Source Document'
partner_credit_warning
Text
compute='_compute_partner_credit_warning'
partner_id
Many2one → res.partner
change_default=True
comodel_name='res.partner'
domain="[('type', '!=', 'private'), ('company_id', 'in', (False, company_id))]"
index=True
readonly=False
required=True
states=READONLY_FIELD_STATES
string='Customer'
tracking=1
partner_invoice_id
Many2one → res.partner
comodel_name='res.partner'
compute='_compute_partner_invoice_id'
domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]"
precompute=True
readonly=False
required=True
states=LOCKED_FIELD_STATES
store=True
string='Invoice Address'
partner_shipping_id
Many2one → res.partner
comodel_name='res.partner'
compute='_compute_partner_shipping_id'
domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]"
precompute=True
readonly=False
required=True
states=LOCKED_FIELD_STATES
store=True
string='Delivery Address'
payment_term_id
Many2one → account.payment.term
check_company=True
comodel_name='account.payment.term'
compute='_compute_payment_term_id'
domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]"
precompute=True
readonly=False
store=True
string='Payment Terms'
pricelist_id
Many2one → product.pricelist
check_company=True
comodel_name='product.pricelist'
compute='_compute_pricelist_id'
domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]"
help='If you change the pricelist, only newly added lines will be affected.'
precompute=True
readonly=False
required=True
states=READONLY_FIELD_STATES
store=True
string='Pricelist'
tracking=1
reference
Char
copy=False
help='The payment communication of this sale order.'
string='Payment Ref.'
require_payment
Boolean
compute='_compute_require_payment'
precompute=True
readonly=False
states=READONLY_FIELD_STATES
store=True
string='Online Payment'
require_signature
Boolean
compute='_compute_require_signature'
help='Request a online signature and/or payment to the customer in order to confirm orders automatically.'
precompute=True
readonly=False
states=READONLY_FIELD_STATES
store=True
string='Online Signature'
show_update_fpos
Boolean
store=False
string='Has Fiscal Position Changed'
show_update_pricelist
Boolean
store=False
string='Has Pricelist Changed'
signature
Image
attachment=True
copy=False
max_height=1024
max_width=1024
string='Signature'
signed_by
Char
copy=False
string='Signed By'
signed_on
Datetime
copy=False
string='Signed On'
source_id
Many2one
ondelete='set null'
state
Selection
copy=False
default='draft'
index=True
readonly=True
selection=[('draft', 'Quotation'), ('sent', 'Quotation Sent'), ('sale', 'Sales Order'), ('done', 'Locked'), ('cancel', 'Cancelled')]
string='Status'
tracking=3
tag_ids
Many2many → crm.tag
column1='order_id'
column2='tag_id'
comodel_name='crm.tag'
relation='sale_order_tag_rel'
string='Tags'
tax_country_id
Many2one → res.country
comodel_name='res.country'
compute='_compute_tax_country_id'
compute_sudo=True
tax_totals
Binary
compute='_compute_tax_totals'
exportable=False
team_id
Many2one → crm.team
change_default=True
check_company=True
comodel_name='crm.team'
compute='_compute_team_id'
domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]"
ondelete='set null'
precompute=True
readonly=False
store=True
string='Sales Team'
tracking=True
terms_type
Selection
related='company_id.terms_type'
transaction_ids
Many2many → payment.transaction
column1='sale_order_id'
column2='transaction_id'
comodel_name='payment.transaction'
copy=False
readonly=True
relation='sale_order_transaction_rel'
string='Transactions'
type_name
Char
compute='_compute_type_name'
string='Type Name'
user_id
Many2one → res.users
comodel_name='res.users'
compute='_compute_user_id'
domain=<expr>
index=True
precompute=True
readonly=False
store=True
string='Salesperson'
tracking=2
validity_date
Date
compute='_compute_validity_date'
copy=False
precompute=True
readonly=False
states=READONLY_FIELD_STATES
store=True
string='Expiration'
action_cancel(self)
action_confirm(self)
action_done(self)
action_draft(self)
action_preview_sale_order(self)
action_quotation_send(self)
action_quotation_sent(self)
action_unlock(self)
action_update_prices(self)
action_update_taxes(self)
action_view_invoice(self)
add_option_to_order_with_taxcloud(self)
copy_data(self, default=None)
create(self, vals_list)
get_empty_list_help(self, help_msg)
get_portal_last_transaction(self)
init(self)
message_post(self, **kwargs)
name_get(self)
payment_action_capture(self)
payment_action_void(self)
validate_taxes_on_sales_order(self)
author_id
Many2one → res.partner
default=_default_author_id
index=True
ondelete='set null'
string='Author'
args: 'res.partner'
display_invoice_alert
Boolean
compute='_compute_display_invoice_alert'
compute_sudo=True
string='Invoice Alert'
email_from
Char
default=_default_email_from
string='From'
order_id
Many2one → sale.order
ondelete='cascade'
required=True
string='Sale Order'
args: 'sale.order'
recipient_ids
Many2many → res.partner
compute='_compute_recipient_ids'
readonly=False
string='Recipients'
args: 'res.partner'
action_cancel(self)
action_send_mail_and_cancel(self)
No new fields.
Public methods (0)No public methods.
analytic_line_ids
One2many → account.analytic.line
comodel_name='account.analytic.line'
inverse_name='so_line'
string='Analytic lines'
company_id
Many2one
index=True
precompute=True
related='order_id.company_id'
store=True
currency_id
Many2one
depends=['order_id.currency_id']
precompute=True
related='order_id.currency_id'
store=True
customer_lead
Float
compute='_compute_customer_lead'
help='Number of days between the order confirmation and the shipping of the products to the customer'
precompute=True
readonly=False
required=True
store=True
string='Lead Time'
discount
Float
compute='_compute_discount'
digits='Discount'
precompute=True
readonly=False
store=True
string='Discount (%)'
display_type
Selection
default=False
selection=[('line_section', 'Section'), ('line_note', 'Note')]
invoice_lines
Many2many → account.move.line
column1='order_line_id'
column2='invoice_line_id'
comodel_name='account.move.line'
copy=False
relation='sale_order_line_invoice_rel'
string='Invoice Lines'
invoice_status
Selection
compute='_compute_invoice_status'
selection=[('upselling', 'Upselling Opportunity'), ('invoiced', 'Fully Invoiced'), ('to invoice', 'To Invoice'), ('no', 'Nothing to Invoice')]
store=True
string='Invoice Status'
is_downpayment
Boolean
help='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_expense
Boolean
help='Is true if the sales order line comes from an expense or a vendor bills'
string='Is expense'
name
Text
compute='_compute_name'
precompute=True
readonly=False
required=True
store=True
string='Description'
order_id
Many2one → sale.order
comodel_name='sale.order'
copy=False
index=True
ondelete='cascade'
required=True
string='Order Reference'
order_partner_id
Many2one
index=True
precompute=True
related='order_id.partner_id'
store=True
string='Customer'
price_reduce
Float
compute='_compute_price_reduce'
digits='Product Price'
precompute=True
store=True
string='Price Reduce'
price_reduce_taxexcl
Monetary
compute='_compute_price_reduce_taxexcl'
precompute=True
store=True
string='Price Reduce Tax excl'
price_reduce_taxinc
Monetary
compute='_compute_price_reduce_taxinc'
precompute=True
store=True
string='Price Reduce Tax incl'
price_subtotal
Monetary
compute='_compute_amount'
precompute=True
store=True
string='Subtotal'
price_tax
Float
compute='_compute_amount'
precompute=True
store=True
string='Total Tax'
price_total
Monetary
compute='_compute_amount'
precompute=True
store=True
string='Total'
price_unit
Float
compute='_compute_price_unit'
digits='Product Price'
precompute=True
readonly=False
required=True
store=True
string='Unit Price'
pricelist_item_id
Many2one → product.pricelist.item
comodel_name='product.pricelist.item'
compute='_compute_pricelist_item_id'
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_line_id'
precompute=True
readonly=False
store=True
string='Custom Values'
product_id
Many2one → product.product
change_default=True
check_company=True
comodel_name='product.product'
domain="[('sale_ok', '=', True), '|', ('company_id', '=', False), ('company_id', '=', company_id)]"
index='btree_not_null'
ondelete='restrict'
string='Product'
product_no_variant_attribute_value_ids
Many2many → product.template.attribute.value
comodel_name='product.template.attribute.value'
compute='_compute_no_variant_attribute_values'
ondelete='restrict'
precompute=True
readonly=False
store=True
string='Extra Values'
product_packaging_id
Many2one → product.packaging
check_company=True
comodel_name='product.packaging'
compute='_compute_product_packaging_id'
domain="[('sales', '=', True), ('product_id','=',product_id)]"
precompute=True
readonly=False
store=True
string='Packaging'
product_packaging_qty
Float
compute='_compute_product_packaging_qty'
precompute=True
readonly=False
store=True
string='Packaging Quantity'
product_template_id
Many2one → product.template
comodel_name='product.template'
compute='_compute_product_template_id'
domain=[('sale_ok', '=', True)]
readonly=False
search='_search_product_template_id'
string='Product Template'
product_type
Selection
depends=['product_id']
related='product_id.detailed_type'
product_uom
Many2one → uom.uom
comodel_name='uom.uom'
compute='_compute_product_uom'
domain="[('category_id', '=', product_uom_category_id)]"
ondelete='restrict'
precompute=True
readonly=False
store=True
string='Unit of Measure'
product_uom_category_id
Many2one
depends=['product_id']
related='product_id.uom_id.category_id'
product_uom_qty
Float
compute='_compute_product_uom_qty'
default=1.0
digits='Product Unit of Measure'
precompute=True
readonly=False
required=True
store=True
string='Quantity'
product_uom_readonly
Boolean
compute='_compute_product_uom_readonly'
product_updatable
Boolean
compute='_compute_product_updatable'
string='Can Edit Product'
qty_delivered
Float
compute='_compute_qty_delivered'
copy=False
default=0.0
digits='Product Unit of Measure'
readonly=False
store=True
string='Delivery Quantity'
qty_delivered_method
Selection
compute='_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 sale line\n - Stock Moves: the quantity comes from confirmed pickings\n'
precompute=True
selection=[('manual', 'Manual'), ('analytic', 'Analytic From Expenses')]
store=True
string='Method to update delivered qty'
qty_invoiced
Float
compute='_compute_qty_invoiced'
digits='Product Unit of Measure'
store=True
string='Invoiced Quantity'
qty_to_invoice
Float
compute='_compute_qty_to_invoice'
digits='Product Unit of Measure'
store=True
string='Quantity To Invoice'
salesman_id
Many2one
precompute=True
related='order_id.user_id'
store=True
string='Salesperson'
sequence
Integer
default=10
string='Sequence'
state
Selection
copy=False
precompute=True
related='order_id.state'
store=True
string='Order Status'
tax_id
Many2many → account.tax
check_company=True
comodel_name='account.tax'
compute='_compute_tax_id'
context={'active_test': False}
precompute=True
readonly=False
store=True
string='Taxes'
untaxed_amount_invoiced
Monetary
compute='_compute_untaxed_amount_invoiced'
store=True
string='Untaxed Invoiced Amount'
untaxed_amount_to_invoice
Monetary
compute='_compute_untaxed_amount_to_invoice'
store=True
string='Untaxed Amount To Invoice'
compute_uom_qty(self, new_qty, stock_move, rounding=True)
create(self, vals_list)
name_get(self)
write(self, values)
payment_method
Selection
default=_get_default_payment_method
selection_add=[('digital_signature', 'Electronic signature'), ('stripe', 'Credit & Debit card (via Stripe)'), ('paypal', 'PayPal'), ('manual', 'Custom payment instructions')]
add_payment_methods(self)
analytic_account_id
Many2one → account.analytic.account
readonly=True
args: 'account.analytic.account', 'Analytic Account'
campaign_id
Many2one → utm.campaign
readonly=True
args: 'utm.campaign', 'Campaign'
categ_id
Many2one → product.category
readonly=True
args: 'product.category', 'Product Category'
commercial_partner_id
Many2one → res.partner
readonly=True
args: 'res.partner', 'Customer Entity'
company_id
Many2one → res.company
readonly=True
args: 'res.company', 'Company'
country_id
Many2one → res.country
readonly=True
args: 'res.country', 'Customer Country'
date
Datetime
readonly=True
args: 'Order Date'
discount
Float
group_operator='avg'
readonly=True
args: 'Discount %'
discount_amount
Float
readonly=True
args: 'Discount Amount'
industry_id
Many2one → res.partner.industry
readonly=True
args: 'res.partner.industry', 'Customer Industry'
medium_id
Many2one → utm.medium
readonly=True
args: 'utm.medium', 'Medium'
name
Char
readonly=True
args: 'Order Reference'
nbr
Integer
readonly=True
args: '# of Lines'
order_id
Many2one → sale.order
readonly=True
args: 'sale.order', 'Order #'
partner_id
Many2one → res.partner
readonly=True
args: 'res.partner', 'Customer'
price_subtotal
Float
readonly=True
args: 'Untaxed Total'
price_total
Float
readonly=True
args: 'Total'
pricelist_id
Many2one → product.pricelist
readonly=True
args: 'product.pricelist', 'Pricelist'
product_id
Many2one → product.product
readonly=True
args: 'product.product', 'Product Variant'
product_tmpl_id
Many2one → product.template
readonly=True
args: 'product.template', 'Product'
product_uom
Many2one → uom.uom
readonly=True
args: 'uom.uom', 'Unit of Measure'
product_uom_qty
Float
readonly=True
args: 'Qty Ordered'
qty_delivered
Float
readonly=True
args: 'Qty Delivered'
qty_invoiced
Float
readonly=True
args: 'Qty Invoiced'
qty_to_deliver
Float
readonly=True
args: 'Qty To Deliver'
qty_to_invoice
Float
readonly=True
args: 'Qty To Invoice'
source_id
Many2one → utm.source
readonly=True
args: 'utm.source', 'Source'
state
Selection
readonly=True
string='Status'
args: [('draft', 'Draft Quotation'), ('sent', 'Quotation Sent'), ('sale', 'Sales Order'), ('done', 'Sales Done'), ('cancel', 'Cancelled')]
team_id
Many2one → crm.team
readonly=True
args: 'crm.team', 'Sales Team'
untaxed_amount_invoiced
Float
readonly=True
args: 'Untaxed Amount Invoiced'
untaxed_amount_to_invoice
Float
readonly=True
args: 'Untaxed Amount To Invoice'
user_id
Many2one → res.users
readonly=True
args: 'res.users', 'Salesperson'
volume
Float
readonly=True
args: 'Volume'
weight
Float
readonly=True
args: 'Gross Weight'
No public methods.
company_id
Many2one → res.company
default=<expr>
readonly=True
states={'draft': [('readonly', False)], 'refused': [('readonly', False)]}
string='Company'
args: 'res.company'
currency_id
Many2one → res.currency
related='company_id.currency_id'
string='Currency'
args: 'res.currency'
invoiced_amount
Integer
compute='_compute_sale_invoiced_amount'
compute_sudo=True
groups='sales_team.group_sale_salesman'
string='Revenues generated by the campaign'
quotation_count
Integer
compute='_compute_quotation_count'
compute_sudo=True
groups='sales_team.group_sale_salesman'
args: 'Quotation Count'
action_redirect_to_invoiced(self)
action_redirect_to_quotations(self)
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
account_invoice_form |
Account Invoice | account.move | data | Inherits account.view_move_form |
account_invoice_groupby_inherit |
account.move.groupby | account.move | xpath | Inherits account.view_account_invoice_filter |
account_invoice_report_view_tree |
account.invoice.report.view.tree.inherit.sale | account.invoice.report | field | Inherits account.account_invoice_report_view_tree |
account_invoice_view_tree |
account.move.tree.inherit.sale | account.move | field | Inherits account.view_invoice_tree |
acquirer_form_inherit_sale |
payment.acquirer.form.inherit.sale.payment | payment.acquirer | xpath | Inherits payment.payment_acquirer_form |
badge_extra_price |
Badge Extra Price | ir.ui.view | qweb | New |
crm_lead_partner_kanban_view |
res.partner.kanban.saleorder.inherit | res.partner | field | Inherits base.res_partner_kanban_view |
crm_team_salesteams_view_form |
crm.team.form | crm.team | xpath | Inherits sales_team.crm_team_view_form |
crm_team_view_kanban_dashboard |
crm.team.view.kanban.dashboard.inherit.sale | crm.team | data | Inherits sales_team.crm_team_view_kanban_dashboard |
mail_notification_paynow_online |
Quotation: Sign and Pay mail notification template | ir.ui.view | qweb | Inherits mail.mail_notification_paynow |
onboarding_quotation_layout_step |
onboarding_quotation_layout_step | ir.ui.view | qweb | New |
payment_checkout_inherit |
payment_checkout_inherit | ir.ui.view | qweb | Inherits payment.checkout |
payment_manage_inherit |
payment_manage_inherit | ir.ui.view | qweb | Inherits payment.manage |
portal_my_home_menu_sale |
Portal layout : sales menu entries | ir.ui.view | qweb | Inherits portal.portal_breadcrumbs |
portal_my_home_sale |
Show Quotations / Sales Orders | ir.ui.view | qweb | Inherits portal.portal_my_home |
portal_my_orders |
My Sales Orders | ir.ui.view | qweb | New |
portal_my_quotations |
My Quotations | ir.ui.view | qweb | New |
product_form_view_sale_order_button |
product.product.sale.order | product.product | div | Inherits product.product_normal_form_view |
product_packaging_form_view_sale |
product.packaging.form.view.sale | product.packaging | xpath | Inherits product.product_packaging_form_view |
product_packaging_tree_view_sale |
product.packaging.tree.view.sale | product.packaging | xpath | Inherits product.product_packaging_tree_view |
product_template_form_view |
product.template.product.website.form | product.template | xpath | Inherits product.product_template_form_view |
product_template_form_view_invoice_policy |
product.template.invoice.policy | product.template | field | Inherits product.product_template_form_view |
product_template_form_view_sale_order_button |
product.template.sale.order.button | product.template | div | Inherits product.product_template_only_form_view |
product_template_sale_form_view |
product.template.sales | product.template | xpath | Inherits product.product_template_form_view |
report_invoice_document_inherit_sale |
report_invoice_document_inherit_sale | ir.ui.view | qweb | Inherits account.report_invoice_document |
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 |
res_config_settings_view_form |
res.config.settings.view.form.inherit.sale | res.config.settings | xpath | Inherits base.res_config_settings_view_form |
res_partner_view_buttons |
res.partner.view.buttons | res.partner | div | Inherits base.view_partner_form |
res_partner_view_form_payment_defaultcreditcard |
res.partner.view.form.payment.defaultcreditcard | res.partner | button | Inherits payment.view_partners_form_payment_defaultcreditcard |
res_partner_view_form_property_inherit |
res.partner.view.form.property.inherit | res.partner | group | Inherits account.view_partner_property_form |
sale_onboarding_order_confirmation_form |
sale.order.confirmation.onboarding.form | sale.payment.acquirer.onboarding.wizard | xpath | Inherits payment.payment_acquirer_onboarding_wizard_form |
sale_onboarding_order_confirmation_step |
sale_onboarding_order_confirmation_step | ir.ui.view | qweb | New |
sale_onboarding_sample_quotation_step |
sale_onboarding_sample_quotation_step | ir.ui.view | qweb | New |
sale_order_cancel_view_form |
sale.order.cancel.form | sale.order.cancel | form | New |
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_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_template |
Sales Order Portal Template | ir.ui.view | qweb | Inherits portal.portal_sidebar |
sale_order_view_activity |
sale.order.activity | sale.order | activity | New |
sale_order_view_search_inherit_quotation |
sale.order.search.inherit.quotation | sale.order | xpath | Inherits sale.view_sales_order_filter |
sale_order_view_search_inherit_sale |
sale.order.search.inherit.sale | sale.order | xpath | Inherits sale.view_sales_order_filter |
sale_quotation_onboarding_panel |
sale.quotation.onboarding.panel | ir.ui.view | qweb | New |
sale_report_view_tree |
sale.report.view.tree | sale.report | tree | New |
transaction_form_inherit_sale |
payment.transaction.form.inherit.sale.payment | payment.transaction | xpath | Inherits payment.payment_transaction_form |
utm_campaign_view_form |
utm.campaign.view.form | utm.campaign | xpath | Inherits utm.utm_campaign_view_form |
utm_campaign_view_kanban |
utm.campaign.view.kanban | utm.campaign | xpath | Inherits utm.utm_campaign_view_kanban |
variants |
variants | ir.ui.view | qweb | New |
view_account_invoice_report_search_inherit |
account.invoice.report.search.inherit | account.invoice.report | xpath | Inherits account.view_account_invoice_report_search |
view_order_form |
sale.order.form | sale.order | form | New |
view_order_line_tree |
sale.order.line.tree | sale.order.line | tree | 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.tree | sale.order | tree | New |
view_quotation_tree |
sale.order.tree | sale.order | tree | New |
view_quotation_tree_with_onboarding |
sale.order.tree | sale.order | xpath | 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_auto_done_setting |
sale.order.form | sale.order | xpath | Inherits sale.view_order_form |
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 |
so_line
Many2one → sale.order.line
domain=<expr>
string='Sales Order Item'
args: 'sale.order.line'
No public methods.
team_id
Many2one → crm.team
string='Sales Team'
args: 'crm.team'
No public methods.
partner_shipping_id
Many2one → res.partner
domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]"
help='Delivery address for current invoice.'
readonly=True
states={'draft': [('readonly', False)]}
string='Delivery Address'
args: 'res.partner'
team_id
Many2one → crm.team
default=_get_invoice_default_sale_team
domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]"
ondelete='set null'
string='Sales Team'
tracking=True
args: 'crm.team'
action_invoice_paid(self)
action_post(self)
onchange_user_id(self)
unlink(self)
sale_line_ids
Many2many → sale.order.line
copy=False
readonly=True
string='Sales Order Lines'
args: 'sale.order.line', 'sale_order_line_invoice_rel', 'invoice_line_id', 'order_line_id'
No public methods.
No new fields.
Public methods (0)No public methods.
invoiced
Float
compute='_compute_invoiced'
help='Invoice revenue for the current month. This is the amount the sales channel has invoiced this month. It is used to compute the progression ratio of the current and target revenue on the kanban view.'
readonly=True
string='Invoiced This Month'
invoiced_target
Float
help='Revenue target for the current month (untaxed total of confirmed invoices).'
string='Invoicing Target'
quotations_amount
Float
compute='_compute_quotations_to_invoice'
readonly=True
string='Amount of quotations to invoice'
quotations_count
Integer
compute='_compute_quotations_to_invoice'
readonly=True
string='Number of quotations to invoice'
sale_order_count
Integer
compute='_compute_sale_order_count'
string='# Sale Orders'
sales_to_invoice_count
Integer
compute='_compute_sales_to_invoice'
readonly=True
string='Number of sales to invoice'
use_quotations
Boolean
help='Check this box if you send quotations to your customers rather than confirming orders straight away.'
string='Quotations'
action_primary_channel_button(self)
update_invoiced_target(self, value)
No new fields.
Public methods (0)No public methods.
so_reference_type
Selection
default='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.
No new fields.
Public methods (1)default_get(self, fields)
sale_order_ids
Many2many → sale.order
copy=False
readonly=True
string='Sales Orders'
args: 'sale.order', 'sale_order_transaction_rel', 'transaction_id', 'sale_order_id'
sale_order_ids_nbr
Integer
compute='_compute_sale_order_ids_nbr'
string='# of Sales Orders'
action_view_sales_orders(self)
No new fields.
Public methods (0)No public methods.
sale_order_line_id
Many2one → sale.order.line
ondelete='cascade'
required=True
string='Sales Order Line'
args: 'sale.order.line'
No public methods.
No new fields.
Public methods (0)No public methods.
sales
Boolean
default=True
help='If true, the packaging can be used for sales orders'
args: 'Sales'
No public methods.
No new fields.
Public methods (0)No public methods.
sales_count
Float
compute='_compute_sales_count'
string='Sold'
action_view_sales(self)
expense_policy
Selection
default='no'
help='Expenses and vendor bills can be re-invoiced to a customer.With this option, a validated expense can be re-invoice to a customer at its cost or sales price.'
string='Re-Invoice Expenses'
args: [('no', 'No'), ('cost', 'At cost'), ('sales_price', 'Sales price')]
invoice_policy
Selection
default='order'
help='Ordered Quantity: Invoice quantities ordered by the customer.\nDelivered Quantity: Invoice quantities delivered to the customer.'
string='Invoicing Policy'
args: [('order', 'Ordered quantities'), ('delivery', 'Delivered quantities')]
sale_line_warn
Selection
default='no-message'
help=WARNING_HELP
required=True
args: WARNING_MESSAGE, 'Sales Order Line'
sale_line_warn_msg
Text
sales_count
Float
compute='_compute_sales_count'
string='Sold'
service_type
Selection
default='manual'
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.'
string='Track Service'
args: [('manual', 'Manually set quantities on order')]
visible_expense_policy
Boolean
compute='_compute_visible_expense_policy'
args: 'Re-Invoice Policy visible'
visible_qty_configurator
Boolean
compute='_compute_visible_qty_configurator'
args: 'Quantity visible in configurator'
action_view_sales(self)
create_product_variant(self, product_template_attribute_value_ids)
get_import_templates(self)
analytic_account_id
Many2one → account.analytic.account
readonly=True
args: 'account.analytic.account', 'Analytic Account'
categ_id
Many2one → product.category
readonly=True
args: 'product.category', 'Product Category'
company_id
Many2one → res.company
readonly=True
args: 'res.company', 'Company'
country_id
Many2one → res.country
readonly=True
args: 'res.country', 'Partner Country'
date_order
Datetime
readonly=True
string='Date Order'
name
Char
readonly=True
args: 'Order Reference'
partner_id
Many2one → res.partner
readonly=True
args: 'res.partner', 'Partner'
price_subtotal
Float
readonly=True
string='Price Subtotal'
price_total
Float
readonly=True
args: 'Total'
pricelist_id
Many2one → product.pricelist
readonly=True
args: 'product.pricelist', 'Pricelist'
product_id
Many2one → product.product
readonly=True
string='Product'
args: 'product.product'
product_qty
Float
readonly=True
args: 'Product Quantity'
product_tmpl_id
Many2one → product.template
readonly=True
args: 'product.template', 'Product Template'
team_id
Many2one → crm.team
readonly=True
args: 'crm.team', 'Sales Team'
user_id
Many2one → res.users
readonly=True
args: 'res.users', 'Salesperson'
init(self)
No new fields.
Public methods (0)No public methods.
portal_confirmation_pay
Boolean
string='Online Payment'
portal_confirmation_sign
Boolean
default=True
string='Online Signature'
quotation_validity_days
Integer
default=30
string='Default Quotation Validity (Days)'
sale_onboarding_order_confirmation_state
Selection
default='not_done'
string='State of the onboarding confirmation order step'
args: [('not_done', 'Not done'), ('just_done', 'Just done'), ('done', 'Done')]
sale_onboarding_payment_method
Selection
string='Sale onboarding selected payment method'
args: [('digital_signature', 'Sign online'), ('paypal', 'PayPal'), ('stripe', 'Stripe'), ('other', 'Pay with another payment acquirer'), ('manual', 'Manual Payment')]
sale_onboarding_sample_quotation_state
Selection
default='not_done'
string='State of the onboarding sample quotation step'
args: [('not_done', 'Not done'), ('just_done', 'Just done'), ('done', 'Done')]
sale_quotation_onboarding_state
Selection
default='not_done'
string='State of the sale onboarding panel'
args: [('not_done', 'Not done'), ('just_done', 'Just done'), ('done', 'Done'), ('closed', 'Closed')]
action_close_sale_quotation_onboarding(self)
action_open_sale_onboarding_payment_acquirer(self)
action_open_sale_onboarding_sample_quotation(self)
get_and_update_sale_quotation_onboarding_state(self)
auth_signup_uninvited
Selection
config_parameter='auth_signup.invitation_scope'
default='b2b'
string='Customer Account'
args: [('b2b', 'On invitation'), ('b2c', 'Free sign up')]
automatic_invoice
Boolean
config_parameter='sale.automatic_invoice'
help='The invoice is generated automatically and available in the customer portal when the transaction is confirmed by the payment acquirer.\nThe invoice is marked as paid and the payment is registered in the payment journal defined in the configuration of the payment acquirer.\nThis mode is advised if you issue the final invoice at the order and not after the delivery.'
string='Automatic Invoice'
confirmation_mail_template_id
Many2one → mail.template
comodel_name='mail.template'
config_parameter='sale.default_confirmation_template'
domain="[('model', '=', 'sale.order')]"
help='Email sent to the customer once the order is paid.'
string='Confirmation Email Template'
default_invoice_policy
Selection
default='order'
default_model='product.template'
args: [('order', 'Invoice what is ordered'), ('delivery', 'Invoice what is delivered')], 'Invoicing Policy'
deposit_default_product_id
Many2one → product.product
config_parameter='sale.default_deposit_product_id'
domain="[('type', '=', 'service')]"
help='Default product used for payment advances'
args: 'product.product', 'Deposit Product'
group_auto_done_setting
Boolean
implied_group='sale.group_auto_done_setting'
args: 'Lock Confirmed Sales'
group_proforma_sales
Boolean
help='Allows you to send pro-forma invoice.'
implied_group='sale.group_proforma_sales'
string='Pro-Forma Invoice'
group_sale_delivery_address
Boolean
implied_group='sale.group_delivery_invoice_address'
args: 'Customer Addresses'
group_warning_sale
Boolean
implied_group='sale.group_warning_sale'
args: 'Sale Order Warnings'
invoice_mail_template_id
Many2one → mail.template
comodel_name='mail.template'
config_parameter='sale.default_invoice_email_template'
default=<expr>
domain="[('model', '=', 'account.move')]"
string='Invoice Email Template'
module_delivery
Boolean
module_delivery_bpost
Boolean
module_delivery_dhl
Boolean
module_delivery_easypost
Boolean
module_delivery_fedex
Boolean
module_delivery_ups
Boolean
module_delivery_usps
Boolean
module_product_email_template
Boolean
module_sale_amazon
Boolean
module_sale_coupon
Boolean
module_sale_margin
Boolean
portal_confirmation_pay
Boolean
readonly=False
related='company_id.portal_confirmation_pay'
string='Online Payment'
portal_confirmation_sign
Boolean
readonly=False
related='company_id.portal_confirmation_sign'
string='Online Signature'
quotation_validity_days
Integer
readonly=False
related='company_id.quotation_validity_days'
string='Default Quotation Validity (Days)'
use_quotation_validity_days
Boolean
config_parameter='sale.use_quotation_validity_days'
args: 'Default Quotation Validity'
set_values(self)
sale_order_count
Integer
compute='_compute_sale_order_count'
string='Sale Order Count'
sale_order_ids
One2many → sale.order
sale_warn
Selection
default='no-message'
help=WARNING_HELP
args: WARNING_MESSAGE, 'Sales Warnings'
sale_warn_msg
Text
action_view_sale_order(self)
can_edit_vat(self)
advance_payment_method
Selection
default='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=True
string='Create Invoice'
args: [('delivered', 'Regular invoice'), ('percentage', 'Down payment (percentage)'), ('fixed', 'Down payment (fixed amount)')]
amount
Float
digits='Account'
help='The percentage of amount to be invoiced in advance, taxes excluded.'
args: 'Down Payment Amount'
count
Integer
default=_count
string='Order Count'
currency_id
Many2one → res.currency
default=_default_currency_id
string='Currency'
args: 'res.currency'
deduct_down_payments
Boolean
default=True
args: 'Deduct down payments'
deposit_account_id
Many2one → account.account
default=_default_deposit_account_id
domain=[('deprecated', '=', False)]
help='Account used for deposits'
string='Income Account'
args: 'account.account'
deposit_taxes_id
Many2many → account.tax
default=_default_deposit_taxes_id
help='Taxes used for deposits'
string='Customer Taxes'
args: 'account.tax'
fixed_amount
Monetary
help='The fixed amount to be invoiced in advance, taxes excluded.'
args: 'Down Payment Amount (Fixed)'
has_down_payments
Boolean
default=_default_has_down_payment
readonly=True
args: 'Has down payments'
product_id
Many2one → product.product
default=_default_product_id
domain=[('type', '=', 'service')]
string='Down Payment Product'
args: 'product.product'
create_invoices(self)
onchange_advance_payment_method(self)
No new fields.
Public methods (0)No public methods.
amount_tax
Monetary
compute='_amount_all'
store=True
string='Taxes'
amount_total
Monetary
compute='_amount_all'
store=True
string='Total'
tracking=4
amount_undiscounted
Float
compute='_compute_amount_undiscounted'
digits=0
args: 'Amount Before Discount'
amount_untaxed
Monetary
compute='_amount_all'
store=True
string='Untaxed Amount'
tracking=5
analytic_account_id
Many2one → account.analytic.account
check_company=True
compute='_compute_analytic_account_id'
copy=False
domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]"
help='The analytic account related to a sales order.'
readonly=False
states={'sale': [('readonly', True)], 'done': [('readonly', True)], 'cancel': [('readonly', True)]}
store=True
args: 'account.analytic.account', 'Analytic Account'
authorized_transaction_ids
Many2many → payment.transaction
compute='_compute_authorized_transaction_ids'
copy=False
string='Authorized Transactions'
args: 'payment.transaction'
client_order_ref
Char
copy=False
string='Customer Reference'
commitment_date
Datetime
copy=False
help='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.'
states={'done': [('readonly', True)], 'cancel': [('readonly', True)]}
args: 'Delivery Date'
company_id
Many2one → res.company
default=<expr>
index=True
required=True
args: 'res.company', 'Company'
create_date
Datetime
help='Date on which sales order is created.'
index=True
readonly=True
string='Creation Date'
currency_id
Many2one
depends=['pricelist_id']
ondelete='restrict'
related='pricelist_id.currency_id'
store=True
currency_rate
Float
compute='_compute_currency_rate'
digits=0
help='The rate of the currency to the currency of rate 1 applicable at the date of the order'
store=True
args: 'Currency Rate'
date_order
Datetime
copy=False
default=fields.Datetime.now
help='Creation date of draft/sent orders,\nConfirmation date of confirmed orders.'
index=True
readonly=True
required=True
states={'draft': [('readonly', False)], 'sent': [('readonly', False)]}
string='Order Date'
expected_date
Datetime
compute='_compute_expected_date'
help='Delivery date you can promise to the customer, computed from the minimum lead time of the order lines.'
store=False
args: 'Expected Date'
fiscal_position_id
Many2one → account.fiscal.position
check_company=True
domain="[('company_id', '=', company_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.'
string='Fiscal Position'
args: 'account.fiscal.position'
invoice_count
Integer
compute='_get_invoiced'
string='Invoice Count'
invoice_ids
Many2many → account.move
compute='_get_invoiced'
copy=False
search='_search_invoice_ids'
string='Invoices'
args: 'account.move'
invoice_status
Selection
compute='_get_invoice_status'
store=True
string='Invoice Status'
args: [('upselling', 'Upselling Opportunity'), ('invoiced', 'Fully Invoiced'), ('to invoice', 'To Invoice'), ('no', 'Nothing to Invoice')]
is_expired
Boolean
compute='_compute_is_expired'
string='Is expired'
name
Char
copy=False
default=<expr>
index=True
readonly=True
required=True
states={'draft': [('readonly', False)]}
string='Order Reference'
note
Html
default=_default_note
args: 'Terms and conditions'
order_line
One2many → sale.order.line
auto_join=True
copy=True
states={'cancel': [('readonly', True)], 'done': [('readonly', True)]}
string='Order Lines'
args: 'sale.order.line', 'order_id'
origin
Char
help='Reference of the document that generated this sales order request.'
string='Source Document'
partner_id
Many2one → res.partner
change_default=True
domain="[('type', '!=', 'private'), ('company_id', 'in', (False, company_id))]"
index=True
readonly=True
required=True
states={'draft': [('readonly', False)], 'sent': [('readonly', False)]}
string='Customer'
tracking=1
args: 'res.partner'
partner_invoice_id
Many2one → res.partner
domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]"
readonly=True
required=True
states={'draft': [('readonly', False)], 'sent': [('readonly', False)], 'sale': [('readonly', False)]}
string='Invoice Address'
args: 'res.partner'
partner_shipping_id
Many2one → res.partner
domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]"
readonly=True
required=True
states={'draft': [('readonly', False)], 'sent': [('readonly', False)], 'sale': [('readonly', False)]}
string='Delivery Address'
args: 'res.partner'
payment_term_id
Many2one → account.payment.term
check_company=True
domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]"
string='Payment Terms'
args: 'account.payment.term'
pricelist_id
Many2one → product.pricelist
check_company=True
domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]"
help='If you change the pricelist, only newly added lines will be affected.'
readonly=True
required=True
states={'draft': [('readonly', False)], 'sent': [('readonly', False)]}
string='Pricelist'
tracking=1
args: 'product.pricelist'
reference
Char
copy=False
help='The payment communication of this sale order.'
string='Payment Ref.'
require_payment
Boolean
default=_get_default_require_payment
help='Request an online payment to the customer in order to confirm orders automatically.'
readonly=True
states={'draft': [('readonly', False)], 'sent': [('readonly', False)]}
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.'
readonly=True
states={'draft': [('readonly', False)], 'sent': [('readonly', False)]}
args: 'Online Signature'
show_update_pricelist
Boolean
help='Technical Field, True if the pricelist was changed;\n this will then display a recomputation button'
string='Has Pricelist Changed'
signature
Image
attachment=True
copy=False
help='Signature received through the portal.'
max_height=1024
max_width=1024
args: 'Signature'
signed_by
Char
copy=False
help='Name of the person that signed the SO.'
args: 'Signed By'
signed_on
Datetime
copy=False
help='Date of the signature.'
args: 'Signed On'
state
Selection
copy=False
default='draft'
index=True
readonly=True
string='Status'
tracking=3
args: [('draft', 'Quotation'), ('sent', 'Quotation Sent'), ('sale', 'Sales Order'), ('done', 'Locked'), ('cancel', 'Cancelled')]
tag_ids
Many2many → crm.tag
string='Tags'
args: 'crm.tag', 'sale_order_tag_rel', 'order_id', 'tag_id'
tax_country_id
Many2one → res.country
comodel_name='res.country'
compute='_compute_tax_country_id'
compute_sudo=True
help='Technical field to filter the available taxes depending on the fiscal country and fiscal position.'
tax_totals_json
Char
compute='_compute_tax_totals_json'
team_id
Many2one → crm.team
change_default=True
check_company=True
default=_get_default_team
domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]"
ondelete='set null'
tracking=True
args: 'crm.team', 'Sales Team'
terms_type
Selection
related='company_id.terms_type'
transaction_ids
Many2many → payment.transaction
copy=False
readonly=True
string='Transactions'
args: 'payment.transaction', 'sale_order_transaction_rel', 'sale_order_id', 'transaction_id'
type_name
Char
compute='_compute_type_name'
args: 'Type Name'
user_id
Many2one → res.users
default=<expr>
domain=<expr>
index=True
string='Salesperson'
tracking=2
args: 'res.users'
validity_date
Date
copy=False
default=_default_validity_date
readonly=True
states={'draft': [('readonly', False)], 'sent': [('readonly', False)]}
string='Expiration'
action_cancel(self)
action_confirm(self)
action_done(self)
action_draft(self)
action_quotation_send(self)
action_quotation_sent(self)
action_unlock(self)
action_view_invoice(self)
add_option_to_order_with_taxcloud(self)
copy_data(self, default=None)
create(self, vals)
get_empty_list_help(self, help)
get_portal_last_transaction(self)
has_to_be_paid(self, include_draft=False)
has_to_be_signed(self, include_draft=False)
message_post(self, **kwargs)
name_get(self)
onchange_partner_id(self)
onchange_partner_shipping_id(self)
onchange_user_id(self)
payment_action_capture(self)
payment_action_void(self)
preview_sale_order(self)
update_prices(self)
validate_taxes_on_sales_order(self)
display_invoice_alert
Boolean
compute='_compute_display_invoice_alert'
args: 'Invoice Alert'
order_id
Many2one → sale.order
ondelete='cascade'
required=True
string='Sale Order'
args: 'sale.order'
action_cancel(self)
No new fields.
Public methods (0)No public methods.
analytic_line_ids
One2many → account.analytic.line
string='Analytic lines'
args: 'account.analytic.line', 'so_line'
analytic_tag_ids
Many2many → account.analytic.tag
compute='_compute_analytic_tag_ids'
domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]"
readonly=False
store=True
string='Analytic Tags'
args: 'account.analytic.tag'
company_id
Many2one
index=True
related='order_id.company_id'
store=True
string='Company'
currency_id
Many2one
depends=['order_id.currency_id']
related='order_id.currency_id'
store=True
string='Currency'
customer_lead
Float
default=0.0
help='Number of days between the order confirmation and the shipping of the products to the customer'
required=True
args: 'Lead Time'
discount
Float
default=0.0
digits='Discount'
string='Discount (%)'
display_type
Selection
default=False
help='Technical field for UX purpose.'
args: [('line_section', 'Section'), ('line_note', 'Note')]
invoice_lines
Many2many → account.move.line
copy=False
string='Invoice Lines'
args: 'account.move.line', 'sale_order_line_invoice_rel', 'order_line_id', 'invoice_line_id'
invoice_status
Selection
compute='_compute_invoice_status'
default='no'
store=True
string='Invoice Status'
args: [('upselling', 'Upselling Opportunity'), ('invoiced', 'Fully Invoiced'), ('to invoice', 'To Invoice'), ('no', 'Nothing to Invoice')]
is_downpayment
Boolean
help='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_expense
Boolean
help='Is true if the sales order line comes from an expense or a vendor bills'
args: 'Is expense'
name
Text
required=True
string='Description'
order_id
Many2one → sale.order
copy=False
index=True
ondelete='cascade'
required=True
string='Order Reference'
args: 'sale.order'
order_partner_id
Many2one
index=True
related='order_id.partner_id'
store=True
string='Customer'
price_reduce
Float
compute='_compute_price_reduce'
digits='Product Price'
store=True
string='Price Reduce'
price_reduce_taxexcl
Monetary
compute='_compute_price_reduce_taxexcl'
store=True
string='Price Reduce Tax excl'
price_reduce_taxinc
Monetary
compute='_compute_price_reduce_taxinc'
store=True
string='Price Reduce Tax inc'
price_subtotal
Monetary
compute='_compute_amount'
store=True
string='Subtotal'
price_tax
Float
compute='_compute_amount'
store=True
string='Total Tax'
price_total
Monetary
compute='_compute_amount'
store=True
string='Total'
price_unit
Float
default=0.0
digits='Product Price'
required=True
args: 'Unit Price'
product_custom_attribute_value_ids
One2many → product.attribute.custom.value
copy=True
string='Custom Values'
args: 'product.attribute.custom.value', 'sale_order_line_id'
product_id
Many2one → product.product
change_default=True
check_company=True
domain="[('sale_ok', '=', True), '|', ('company_id', '=', False), ('company_id', '=', company_id)]"
ondelete='restrict'
string='Product'
args: 'product.product'
product_no_variant_attribute_value_ids
Many2many → product.template.attribute.value
ondelete='restrict'
string='Extra Values'
args: 'product.template.attribute.value'
product_packaging_id
Many2one → product.packaging
check_company=True
default=False
domain="[('sales', '=', True), ('product_id','=',product_id)]"
string='Packaging'
args: 'product.packaging'
product_packaging_qty
Float
product_template_id
Many2one → product.template
domain=[('sale_ok', '=', True)]
related='product_id.product_tmpl_id'
string='Product Template'
args: 'product.template'
product_uom
Many2one → uom.uom
domain="[('category_id', '=', product_uom_category_id)]"
ondelete='restrict'
string='Unit of Measure'
args: 'uom.uom'
product_uom_category_id
Many2one
related='product_id.uom_id.category_id'
product_uom_qty
Float
default=1.0
digits='Product Unit of Measure'
required=True
string='Quantity'
product_uom_readonly
Boolean
compute='_compute_product_uom_readonly'
product_updatable
Boolean
compute='_compute_product_updatable'
default=True
string='Can Edit Product'
qty_delivered
Float
compute='_compute_qty_delivered'
copy=False
default=0.0
digits='Product Unit of Measure'
inverse='_inverse_qty_delivered'
store=True
args: 'Delivered Quantity'
qty_delivered_manual
Float
copy=False
default=0.0
digits='Product Unit of Measure'
args: 'Delivered Manually'
qty_delivered_method
Selection
compute='_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 sale line\n - Stock Moves: the quantity comes from confirmed pickings\n'
store=True
string='Method to update delivered qty'
args: [('manual', 'Manual'), ('analytic', 'Analytic From Expenses')]
qty_invoiced
Float
compute='_compute_qty_invoiced'
digits='Product Unit of Measure'
store=True
string='Invoiced Quantity'
qty_to_invoice
Float
compute='_get_to_invoice_qty'
digits='Product Unit of Measure'
store=True
string='To Invoice Quantity'
salesman_id
Many2one
related='order_id.user_id'
store=True
string='Salesperson'
sequence
Integer
default=10
string='Sequence'
state
Selection
copy=False
related='order_id.state'
store=True
string='Order Status'
tax_id
Many2many → account.tax
check_company=True
context={'active_test': False}
string='Taxes'
args: 'account.tax'
untaxed_amount_invoiced
Monetary
compute='_compute_untaxed_amount_invoiced'
store=True
args: 'Untaxed Invoiced Amount'
untaxed_amount_to_invoice
Monetary
compute='_compute_untaxed_amount_to_invoice'
store=True
args: 'Untaxed Amount To Invoice'
compute_uom_qty(self, new_qty, stock_move, rounding=True)
create(self, vals_list)
get_sale_order_line_multiline_description_sale(self, product)
name_get(self)
product_id_change(self)
product_uom_change(self)
write(self, values)
payment_method
Selection
default=_get_default_payment_method
selection_add=[('digital_signature', 'Electronic signature'), ('stripe', 'Credit & Debit card (via Stripe)'), ('paypal', 'PayPal'), ('other', 'Other payment acquirer'), ('manual', 'Custom payment instructions')]
add_payment_methods(self, *args, **kwargs)
analytic_account_id
Many2one → account.analytic.account
readonly=True
args: 'account.analytic.account', 'Analytic Account'
campaign_id
Many2one → utm.campaign
categ_id
Many2one → product.category
readonly=True
args: 'product.category', 'Product Category'
commercial_partner_id
Many2one → res.partner
readonly=True
args: 'res.partner', 'Customer Entity'
company_id
Many2one → res.company
readonly=True
args: 'res.company', 'Company'
country_id
Many2one → res.country
readonly=True
args: 'res.country', 'Customer Country'
date
Datetime
readonly=True
args: 'Order Date'
discount
Float
readonly=True
args: 'Discount %'
discount_amount
Float
readonly=True
args: 'Discount Amount'
industry_id
Many2one → res.partner.industry
readonly=True
args: 'res.partner.industry', 'Customer Industry'
medium_id
Many2one → utm.medium
name
Char
readonly=True
args: 'Order Reference'
nbr
Integer
readonly=True
args: '# of Lines'
order_id
Many2one → sale.order
readonly=True
args: 'sale.order', 'Order #'
partner_id
Many2one → res.partner
readonly=True
args: 'res.partner', 'Customer'
price_subtotal
Float
readonly=True
args: 'Untaxed Total'
price_total
Float
readonly=True
args: 'Total'
pricelist_id
Many2one → product.pricelist
readonly=True
args: 'product.pricelist', 'Pricelist'
product_id
Many2one → product.product
readonly=True
args: 'product.product', 'Product Variant'
product_tmpl_id
Many2one → product.template
readonly=True
args: 'product.template', 'Product'
product_uom
Many2one → uom.uom
readonly=True
args: 'uom.uom', 'Unit of Measure'
product_uom_qty
Float
readonly=True
args: 'Qty Ordered'
qty_delivered
Float
readonly=True
args: 'Qty Delivered'
qty_invoiced
Float
readonly=True
args: 'Qty Invoiced'
qty_to_deliver
Float
readonly=True
args: 'Qty To Deliver'
qty_to_invoice
Float
readonly=True
args: 'Qty To Invoice'
source_id
Many2one → utm.source
state
Selection
readonly=True
string='Status'
args: [('draft', 'Draft Quotation'), ('sent', 'Quotation Sent'), ('sale', 'Sales Order'), ('done', 'Sales Done'), ('cancel', 'Cancelled')]
team_id
Many2one → crm.team
readonly=True
args: 'crm.team', 'Sales Team'
untaxed_amount_invoiced
Float
readonly=True
args: 'Untaxed Amount Invoiced'
untaxed_amount_to_invoice
Float
readonly=True
args: 'Untaxed Amount To Invoice'
user_id
Many2one → res.users
readonly=True
args: 'res.users', 'Salesperson'
volume
Float
readonly=True
args: 'Volume'
weight
Float
readonly=True
args: 'Gross Weight'
init(self)
company_id
Many2one → res.company
default=<expr>
readonly=True
states={'draft': [('readonly', False)], 'refused': [('readonly', False)]}
string='Company'
args: 'res.company'
currency_id
Many2one → res.currency
related='company_id.currency_id'
string='Currency'
args: 'res.currency'
invoiced_amount
Integer
compute='_compute_sale_invoiced_amount'
default=0
string='Revenues generated by the campaign'
quotation_count
Integer
compute='_compute_quotation_count'
groups='sales_team.group_sale_salesman'
args: 'Quotation Count'
action_redirect_to_invoiced(self)
action_redirect_to_quotations(self)
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
account_invoice_form |
Account Invoice | account.move | data | Inherits account.view_move_form |
account_invoice_groupby_inherit |
account.move.groupby | account.move | xpath | Inherits account.view_account_invoice_filter |
account_invoice_view_tree |
account.move.tree.inherit.sale | account.move | field | Inherits account.view_invoice_tree |
acquirer_form_inherit_sale |
payment.acquirer.form.inherit.sale.payment | payment.acquirer | xpath | Inherits payment.acquirer_form |
assets_backend_inherit_sale |
Sale backend assets | ir.ui.view | qweb | Inherits web.assets_backend |
assets_frontend_inherit_sale |
Sale frontend assets | ir.ui.view | qweb | Inherits web.assets_frontend |
assets_tests |
Sale Assets Tests | ir.ui.view | qweb | Inherits web.assets_tests |
crm_lead_partner_kanban_view |
res.partner.kanban.saleorder.inherit | res.partner | field | Inherits base.res_partner_kanban_view |
crm_team_salesteams_view_form |
crm.team.form | crm.team | xpath | Inherits sales_team.crm_team_view_form |
crm_team_salesteams_view_kanban |
crm.team.kanban | crm.team | data | Inherits sales_team.crm_team_salesteams_view_kanban |
mail_notification_paynow_online |
Quotation: Sign and Pay mail notification template | ir.ui.view | qweb | Inherits mail.mail_notification_paynow |
onboarding_quotation_layout_step |
onboarding_quotation_layout_step | ir.ui.view | qweb | New |
portal_my_home_menu_sale |
Portal layout : sales menu entries | ir.ui.view | qweb | Inherits portal.portal_breadcrumbs |
portal_my_home_sale |
Show Quotations / Sales Orders | ir.ui.view | qweb | Inherits portal.portal_my_home |
portal_my_orders |
My Sales Orders | ir.ui.view | qweb | New |
portal_my_quotations |
My Quotations | ir.ui.view | qweb | New |
product_form_view_sale_order_button |
product.product.sale.order | product.product | div | Inherits product.product_normal_form_view |
product_template_form_view |
product.template.product.website.form | product.template | xpath | Inherits product.product_template_form_view |
product_template_form_view_invoice_policy |
product.template.invoice.policy | product.template | xpath | Inherits product.product_template_form_view |
product_template_form_view_sale_order_button |
product.template.sale.order.button | product.template | div | Inherits product.product_template_only_form_view |
product_template_sale_form_view |
product.template.sales | product.template | xpath | Inherits product.product_template_form_view |
qunit_suite |
sale_tests | ir.ui.view | qweb | Inherits web.qunit_suite_tests |
report_assets_common_inherit_sale |
Sale report common assets | ir.ui.view | qweb | Inherits web.report_assets_common |
report_invoice_document_inherit_sale |
report_invoice_document_inherit_sale | ir.ui.view | qweb | Inherits account.report_invoice_document |
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 |
res_config_settings_view_form |
res.config.settings.view.form.inherit.sale | res.config.settings | xpath | Inherits base.res_config_settings_view_form |
res_partner_view_buttons |
res.partner.view.buttons | res.partner | div | Inherits base.view_partner_form |
res_partner_view_form_payment_defaultcreditcard |
res.partner.view.form.payment.defaultcreditcard | res.partner | button | Inherits payment.view_partners_form_payment_defaultcreditcard |
res_partner_view_form_property_inherit |
res.partner.view.form.property.inherit | res.partner | group | Inherits account.view_partner_property_form |
sale_onboarding_order_confirmation_form |
sale.order.confirmation.onboarding.form | sale.payment.acquirer.onboarding.wizard | xpath | Inherits payment.payment_acquirer_onboarding_wizard_form |
sale_onboarding_order_confirmation_step |
sale_onboarding_order_confirmation_step | ir.ui.view | qweb | New |
sale_onboarding_sample_quotation_step |
sale_onboarding_sample_quotation_step | ir.ui.view | qweb | New |
sale_order_cancel_view_form |
sale.order.cancel.form | sale.order.cancel | form | New |
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_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_template |
Sales Order Portal Template | ir.ui.view | qweb | Inherits portal.portal_sidebar |
sale_order_view_activity |
sale.order.activity | sale.order | activity | New |
sale_order_view_search_inherit_quotation |
sale.order.search.inherit.quotation | sale.order | xpath | Inherits sale.view_sales_order_filter |
sale_order_view_search_inherit_sale |
sale.order.search.inherit.sale | sale.order | xpath | Inherits sale.view_sales_order_filter |
sale_quotation_onboarding_panel |
sale.quotation.onboarding.panel | ir.ui.view | qweb | New |
transaction_form_inherit_sale |
payment.transaction.form.inherit.sale.payment | payment.transaction | xpath | Inherits payment.transaction_form |
utm_campaign_view_form |
utm.campaign.view.form | utm.campaign | xpath | Inherits utm.utm_campaign_view_form |
utm_campaign_view_kanban |
utm.campaign.view.kanban | utm.campaign | xpath | Inherits utm.utm_campaign_view_kanban |
variants |
variants | ir.ui.view | qweb | New |
view_account_invoice_report_search_inherit |
account.invoice.report.search.inherit | account.invoice.report | xpath | Inherits account.view_account_invoice_report_search |
view_order_form |
sale.order.form | sale.order | form | New |
view_order_line_tree |
sale.order.line.tree | sale.order.line | tree | 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.tree | sale.order | tree | New |
view_quotation_tree |
sale.order.tree | sale.order | tree | New |
view_quotation_tree_with_onboarding |
sale.order.tree | sale.order | xpath | 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_auto_done_setting |
sale.order.form | sale.order | xpath | Inherits sale.view_order_form |
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 |
so_line
Many2one → sale.order.line
domain=<expr>
string='Sales Order Item'
args: 'sale.order.line'
No public methods.
team_id
Many2one → crm.team
string='Sales Team'
args: 'crm.team'
No public methods.
partner_shipping_id
Many2one → res.partner
domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]"
help='Delivery address for current invoice.'
readonly=True
states={'draft': [('readonly', False)]}
string='Delivery Address'
args: 'res.partner'
team_id
Many2one → crm.team
default=_get_invoice_default_sale_team
domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]"
string='Sales Team'
args: 'crm.team'
action_invoice_paid(self)
onchange_user_id(self)
unlink(self)
No new fields.
Public methods (1)action_post(self)
sale_line_ids
Many2many → sale.order.line
copy=False
readonly=True
string='Sales Order Lines'
args: 'sale.order.line', 'sale_order_line_invoice_rel', 'invoice_line_id', 'order_line_id'
No public methods.
No new fields.
Public methods (0)No public methods.
invoiced
Float
compute='_compute_invoiced'
help='Invoice revenue for the current month. This is the amount the sales channel has invoiced this month. It is used to compute the progression ratio of the current and target revenue on the kanban view.'
readonly=True
string='Invoiced This Month'
invoiced_target
Float
help='Revenue target for the current month (untaxed total of confirmed invoices).'
string='Invoicing Target'
quotations_amount
Float
compute='_compute_quotations_to_invoice'
readonly=True
string='Amount of quotations to invoice'
quotations_count
Integer
compute='_compute_quotations_to_invoice'
readonly=True
string='Number of quotations to invoice'
sales_to_invoice_count
Integer
compute='_compute_sales_to_invoice'
readonly=True
string='Number of sales to invoice'
use_quotations
Boolean
help='Check this box if you send quotations to your customers rather than confirming orders straight away.'
string='Quotations'
action_primary_channel_button(self)
update_invoiced_target(self, value)
No new fields.
Public methods (1)send_mail(self, auto_commit=False)
so_reference_type
Selection
default='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.
No new fields.
Public methods (1)default_get(self, fields)
sale_order_ids
Many2many → sale.order
copy=False
readonly=True
string='Sales Orders'
args: 'sale.order', 'sale_order_transaction_rel', 'transaction_id', 'sale_order_id'
sale_order_ids_nbr
Integer
compute='_compute_sale_order_ids_nbr'
string='# of Sales Orders'
action_view_sales_orders(self)
render_sale_button(self, order, submit_txt=None, render_values=None)
sale_order_line_id
Many2one → sale.order.line
ondelete='cascade'
required=True
string='Sales Order Line'
args: 'sale.order.line'
No public methods.
sales_count
Float
compute='_compute_sales_count'
string='Sold'
action_view_sales(self)
expense_policy
Selection
default='no'
help='Expenses and vendor bills can be re-invoiced to a customer.With this option, a validated expense can be re-invoice to a customer at its cost or sales price.'
string='Re-Invoice Expenses'
args: [('no', 'No'), ('cost', 'At cost'), ('sales_price', 'Sales price')]
invoice_policy
Selection
default='order'
help='Ordered Quantity: Invoice quantities ordered by the customer.\nDelivered Quantity: Invoice quantities delivered to the customer.'
string='Invoicing Policy'
args: [('order', 'Ordered quantities'), ('delivery', 'Delivered quantities')]
sale_line_warn
Selection
default='no-message'
help=WARNING_HELP
required=True
args: WARNING_MESSAGE, 'Sales Order Line'
sale_line_warn_msg
Text
sales_count
Float
compute='_compute_sales_count'
string='Sold'
service_type
Selection
default='manual'
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.'
string='Track Service'
args: [('manual', 'Manually set quantities on order')]
visible_expense_policy
Boolean
compute='_compute_visible_expense_policy'
default=<expr>
args: 'Re-Invoice Policy visible'
visible_qty_configurator
Boolean
compute='_compute_visible_qty_configurator'
args: 'Quantity visible in configurator'
action_view_sales(self)
create_product_variant(self, product_template_attribute_value_ids)
get_import_templates(self)
analytic_account_id
Many2one → account.analytic.account
readonly=True
args: 'account.analytic.account', 'Analytic Account'
categ_id
Many2one → product.category
readonly=True
args: 'product.category', 'Product Category'
company_id
Many2one → res.company
readonly=True
args: 'res.company', 'Company'
country_id
Many2one → res.country
readonly=True
args: 'res.country', 'Partner Country'
date_order
Datetime
readonly=True
string='Date Order'
name
Char
readonly=True
args: 'Order Reference'
partner_id
Many2one → res.partner
readonly=True
args: 'res.partner', 'Partner'
price_subtotal
Float
readonly=True
string='Price Subtotal'
price_total
Float
readonly=True
args: 'Total'
pricelist_id
Many2one → product.pricelist
readonly=True
args: 'product.pricelist', 'Pricelist'
product_id
Many2one → product.product
readonly=True
string='Product'
args: 'product.product'
product_qty
Float
readonly=True
args: 'Product Quantity'
product_tmpl_id
Many2one → product.template
readonly=True
args: 'product.template', 'Product Template'
team_id
Many2one → crm.team
readonly=True
args: 'crm.team', 'Sales Team'
user_id
Many2one → res.users
readonly=True
args: 'res.users', 'Salesperson'
init(self)
No new fields.
Public methods (0)No public methods.
portal_confirmation_pay
Boolean
string='Online Payment'
portal_confirmation_sign
Boolean
default=True
string='Online Signature'
quotation_validity_days
Integer
default=30
string='Default Quotation Validity (Days)'
sale_onboarding_order_confirmation_state
Selection
default='not_done'
string='State of the onboarding confirmation order step'
args: [('not_done', 'Not done'), ('just_done', 'Just done'), ('done', 'Done')]
sale_onboarding_payment_method
Selection
string='Sale onboarding selected payment method'
args: [('digital_signature', 'Sign online'), ('paypal', 'PayPal'), ('stripe', 'Stripe'), ('other', 'Pay with another payment acquirer'), ('manual', 'Manual Payment')]
sale_onboarding_sample_quotation_state
Selection
default='not_done'
string='State of the onboarding sample quotation step'
args: [('not_done', 'Not done'), ('just_done', 'Just done'), ('done', 'Done')]
sale_quotation_onboarding_state
Selection
default='not_done'
string='State of the sale onboarding panel'
args: [('not_done', 'Not done'), ('just_done', 'Just done'), ('done', 'Done'), ('closed', 'Closed')]
action_close_sale_quotation_onboarding(self)
action_open_sale_onboarding_payment_acquirer(self)
action_open_sale_onboarding_sample_quotation(self)
get_and_update_sale_quotation_onboarding_state(self)
auth_signup_uninvited
Selection
config_parameter='auth_signup.invitation_scope'
default='b2b'
string='Customer Account'
args: [('b2b', 'On invitation'), ('b2c', 'Free sign up')]
automatic_invoice
Boolean
config_parameter='sale.automatic_invoice'
help='The invoice is generated automatically and available in the customer portal when the transaction is confirmed by the payment acquirer.\nThe invoice is marked as paid and the payment is registered in the payment journal defined in the configuration of the payment acquirer.\nThis mode is advised if you issue the final invoice at the order and not after the delivery.'
args: 'Automatic Invoice'
confirmation_template_id
Many2one → mail.template
config_parameter='sale.default_confirmation_template'
domain="[('model', '=', 'sale.order')]"
help='Email sent to the customer once the order is paid.'
string='Confirmation Email'
args: 'mail.template'
default_invoice_policy
Selection
default='delivery'
default_model='product.template'
args: [('order', 'Invoice what is ordered'), ('delivery', 'Invoice what is delivered')], 'Invoicing Policy'
deposit_default_product_id
Many2one → product.product
config_parameter='sale.default_deposit_product_id'
domain="[('type', '=', 'service')]"
help='Default product used for payment advances'
args: 'product.product', 'Deposit Product'
group_auto_done_setting
Boolean
implied_group='sale.group_auto_done_setting'
args: 'Lock Confirmed Sales'
group_proforma_sales
Boolean
help='Allows you to send pro-forma invoice.'
implied_group='sale.group_proforma_sales'
string='Pro-Forma Invoice'
group_sale_delivery_address
Boolean
implied_group='sale.group_delivery_invoice_address'
args: 'Customer Addresses'
group_warning_sale
Boolean
implied_group='sale.group_warning_sale'
args: 'Sale Order Warnings'
module_delivery
Boolean
module_delivery_bpost
Boolean
module_delivery_dhl
Boolean
module_delivery_easypost
Boolean
module_delivery_fedex
Boolean
module_delivery_ups
Boolean
module_delivery_usps
Boolean
module_product_email_template
Boolean
module_sale_amazon
Boolean
module_sale_coupon
Boolean
module_sale_margin
Boolean
portal_confirmation_pay
Boolean
readonly=False
related='company_id.portal_confirmation_pay'
string='Online Payment'
portal_confirmation_sign
Boolean
readonly=False
related='company_id.portal_confirmation_sign'
string='Online Signature'
quotation_validity_days
Integer
readonly=False
related='company_id.quotation_validity_days'
string='Default Quotation Validity (Days)'
template_id
Many2one → mail.template
config_parameter='sale.default_email_template'
default=<expr>
domain="[('model', '=', 'account.move')]"
args: 'mail.template', 'Email Template'
use_quotation_validity_days
Boolean
config_parameter='sale.use_quotation_validity_days'
args: 'Default Quotation Validity'
set_values(self)
sale_order_count
Integer
compute='_compute_sale_order_count'
string='Sale Order Count'
sale_order_ids
One2many → sale.order
sale_warn
Selection
default='no-message'
help=WARNING_HELP
args: WARNING_MESSAGE, 'Sales Warnings'
sale_warn_msg
Text
action_view_sale_order(self)
can_edit_vat(self)
advance_payment_method
Selection
default='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=True
string='Create Invoice'
args: [('delivered', 'Regular invoice'), ('percentage', 'Down payment (percentage)'), ('fixed', 'Down payment (fixed amount)')]
amount
Float
digits='Account'
help='The percentage of amount to be invoiced in advance, taxes excluded.'
args: 'Down Payment Amount'
count
Integer
default=_count
string='Order Count'
currency_id
Many2one → res.currency
default=_default_currency_id
string='Currency'
args: 'res.currency'
deduct_down_payments
Boolean
default=True
args: 'Deduct down payments'
deposit_account_id
Many2one → account.account
default=_default_deposit_account_id
domain=[('deprecated', '=', False)]
help='Account used for deposits'
string='Income Account'
args: 'account.account'
deposit_taxes_id
Many2many → account.tax
default=_default_deposit_taxes_id
help='Taxes used for deposits'
string='Customer Taxes'
args: 'account.tax'
fixed_amount
Monetary
help='The fixed amount to be invoiced in advance, taxes excluded.'
args: 'Down Payment Amount (Fixed)'
has_down_payments
Boolean
default=_default_has_down_payment
readonly=True
args: 'Has down payments'
product_id
Many2one → product.product
default=_default_product_id
domain=[('type', '=', 'service')]
string='Down Payment Product'
args: 'product.product'
create_invoices(self)
onchange_advance_payment_method(self)
amount_by_group
Binary
compute='_amount_by_group'
help='type: [(name, amount, base, formated amount, formated base)]'
string='Tax amount by group'
amount_tax
Monetary
compute='_amount_all'
readonly=True
store=True
string='Taxes'
amount_total
Monetary
compute='_amount_all'
readonly=True
store=True
string='Total'
tracking=4
amount_undiscounted
Float
compute='_compute_amount_undiscounted'
digits=0
args: 'Amount Before Discount'
amount_untaxed
Monetary
compute='_amount_all'
readonly=True
store=True
string='Untaxed Amount'
tracking=5
analytic_account_id
Many2one → account.analytic.account
check_company=True
compute='_compute_analytic_account_id'
copy=False
domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]"
help='The analytic account related to a sales order.'
readonly=False
states={'sale': [('readonly', True)], 'done': [('readonly', True)], 'cancel': [('readonly', True)]}
store=True
args: 'account.analytic.account', 'Analytic Account'
authorized_transaction_ids
Many2many → payment.transaction
compute='_compute_authorized_transaction_ids'
copy=False
readonly=True
string='Authorized Transactions'
args: 'payment.transaction'
client_order_ref
Char
copy=False
string='Customer Reference'
commitment_date
Datetime
copy=False
help='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.'
states={'done': [('readonly', True)], 'cancel': [('readonly', True)]}
args: 'Delivery Date'
company_id
Many2one → res.company
default=<expr>
index=True
required=True
args: 'res.company', 'Company'
create_date
Datetime
help='Date on which sales order is created.'
index=True
readonly=True
string='Creation Date'
currency_id
Many2one
depends=['pricelist_id']
related='pricelist_id.currency_id'
store=True
currency_rate
Float
compute='_compute_currency_rate'
compute_sudo=True
digits=(12, 6)
help='The rate of the currency to the currency of rate 1 applicable at the date of the order'
readonly=True
store=True
args: 'Currency Rate'
date_order
Datetime
copy=False
default=fields.Datetime.now
help='Creation date of draft/sent orders,\nConfirmation date of confirmed orders.'
index=True
readonly=True
required=True
states={'draft': [('readonly', False)], 'sent': [('readonly', False)]}
string='Order Date'
expected_date
Datetime
compute='_compute_expected_date'
help='Delivery date you can promise to the customer, computed from the minimum lead time of the order lines.'
store=False
args: 'Expected Date'
fiscal_position_id
Many2one → account.fiscal.position
check_company=True
domain="[('company_id', '=', company_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.'
string='Fiscal Position'
args: 'account.fiscal.position'
invoice_count
Integer
compute='_get_invoiced'
readonly=True
string='Invoice Count'
invoice_ids
Many2many → account.move
compute='_get_invoiced'
copy=False
readonly=True
search='_search_invoice_ids'
string='Invoices'
args: 'account.move'
invoice_status
Selection
compute='_get_invoice_status'
readonly=True
store=True
string='Invoice Status'
args: [('upselling', 'Upselling Opportunity'), ('invoiced', 'Fully Invoiced'), ('to invoice', 'To Invoice'), ('no', 'Nothing to Invoice')]
is_expired
Boolean
compute='_compute_is_expired'
string='Is expired'
name
Char
copy=False
default=<expr>
index=True
readonly=True
required=True
states={'draft': [('readonly', False)]}
string='Order Reference'
note
Text
default=_default_note
args: 'Terms and conditions'
order_line
One2many → sale.order.line
auto_join=True
copy=True
states={'cancel': [('readonly', True)], 'done': [('readonly', True)]}
string='Order Lines'
args: 'sale.order.line', 'order_id'
origin
Char
help='Reference of the document that generated this sales order request.'
string='Source Document'
partner_id
Many2one → res.partner
change_default=True
domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]"
index=True
readonly=True
required=True
states={'draft': [('readonly', False)], 'sent': [('readonly', False)]}
string='Customer'
tracking=1
args: 'res.partner'
partner_invoice_id
Many2one → res.partner
domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]"
readonly=True
required=True
states={'draft': [('readonly', False)], 'sent': [('readonly', False)], 'sale': [('readonly', False)]}
string='Invoice Address'
args: 'res.partner'
partner_shipping_id
Many2one → res.partner
domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]"
readonly=True
required=True
states={'draft': [('readonly', False)], 'sent': [('readonly', False)], 'sale': [('readonly', False)]}
string='Delivery Address'
args: 'res.partner'
payment_term_id
Many2one → account.payment.term
check_company=True
domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]"
string='Payment Terms'
args: 'account.payment.term'
pricelist_id
Many2one → product.pricelist
check_company=True
domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]"
help='If you change the pricelist, only newly added lines will be affected.'
readonly=True
required=True
states={'draft': [('readonly', False)], 'sent': [('readonly', False)]}
string='Pricelist'
tracking=1
args: 'product.pricelist'
reference
Char
copy=False
help='The payment communication of this sale order.'
string='Payment Ref.'
require_payment
Boolean
default=_get_default_require_payment
help='Request an online payment to the customer in order to confirm orders automatically.'
readonly=True
states={'draft': [('readonly', False)], 'sent': [('readonly', False)]}
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.'
readonly=True
states={'draft': [('readonly', False)], 'sent': [('readonly', False)]}
args: 'Online Signature'
show_update_pricelist
Boolean
help='Technical Field, True if the pricelist was changed;\n this will then display a recomputation button'
string='Has Pricelist Changed'
signature
Image
attachment=True
copy=False
help='Signature received through the portal.'
max_height=1024
max_width=1024
args: 'Signature'
signed_by
Char
copy=False
help='Name of the person that signed the SO.'
args: 'Signed By'
signed_on
Datetime
copy=False
help='Date of the signature.'
args: 'Signed On'
state
Selection
copy=False
default='draft'
index=True
readonly=True
string='Status'
tracking=3
args: [('draft', 'Quotation'), ('sent', 'Quotation Sent'), ('sale', 'Sales Order'), ('done', 'Locked'), ('cancel', 'Cancelled')]
tag_ids
Many2many → crm.tag
string='Tags'
args: 'crm.tag', 'sale_order_tag_rel', 'order_id', 'tag_id'
team_id
Many2one → crm.team
change_default=True
check_company=True
default=_get_default_team
domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]"
args: 'crm.team', 'Sales Team'
transaction_ids
Many2many → payment.transaction
copy=False
readonly=True
string='Transactions'
args: 'payment.transaction', 'sale_order_transaction_rel', 'sale_order_id', 'transaction_id'
type_name
Char
compute='_compute_type_name'
args: 'Type Name'
user_id
Many2one → res.users
default=<expr>
domain=<expr>
index=True
string='Salesperson'
tracking=2
args: 'res.users'
validity_date
Date
copy=False
default=_default_validity_date
readonly=True
states={'draft': [('readonly', False)], 'sent': [('readonly', False)]}
string='Expiration'
action_cancel(self)
action_confirm(self)
action_done(self)
action_draft(self)
action_quotation_send(self)
action_quotation_sent(self)
action_unlock(self)
action_view_invoice(self)
add_option_to_order_with_taxcloud(self)
copy_data(self, default=None)
create(self, vals)
get_empty_list_help(self, help)
get_portal_last_transaction(self)
has_to_be_paid(self, include_draft=False)
has_to_be_signed(self, include_draft=False)
message_post(self, **kwargs)
name_get(self)
onchange_partner_id(self)
onchange_partner_id_warning(self)
onchange_partner_shipping_id(self)
onchange_user_id(self)
payment_action_capture(self)
payment_action_void(self)
preview_sale_order(self)
unlink(self)
update_prices(self)
validate_taxes_on_sales_order(self)
display_invoice_alert
Boolean
compute='_compute_display_invoice_alert'
args: 'Invoice Alert'
order_id
Many2one → sale.order
ondelete='cascade'
required=True
string='Sale Order'
args: 'sale.order'
action_cancel(self)
analytic_line_ids
One2many → account.analytic.line
string='Analytic lines'
args: 'account.analytic.line', 'so_line'
analytic_tag_ids
Many2many → account.analytic.tag
compute='_compute_analytic_tag_ids'
domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]"
readonly=False
store=True
string='Analytic Tags'
args: 'account.analytic.tag'
company_id
Many2one
index=True
readonly=True
related='order_id.company_id'
store=True
string='Company'
currency_id
Many2one
depends=['order_id.currency_id']
readonly=True
related='order_id.currency_id'
store=True
string='Currency'
customer_lead
Float
default=0.0
help='Number of days between the order confirmation and the shipping of the products to the customer'
required=True
args: 'Lead Time'
discount
Float
default=0.0
digits='Discount'
string='Discount (%)'
display_type
Selection
default=False
help='Technical field for UX purpose.'
args: [('line_section', 'Section'), ('line_note', 'Note')]
invoice_lines
Many2many → account.move.line
copy=False
string='Invoice Lines'
args: 'account.move.line', 'sale_order_line_invoice_rel', 'order_line_id', 'invoice_line_id'
invoice_status
Selection
compute='_compute_invoice_status'
default='no'
readonly=True
store=True
string='Invoice Status'
args: [('upselling', 'Upselling Opportunity'), ('invoiced', 'Fully Invoiced'), ('to invoice', 'To Invoice'), ('no', 'Nothing to Invoice')]
is_downpayment
Boolean
help='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_expense
Boolean
help='Is true if the sales order line comes from an expense or a vendor bills'
args: 'Is expense'
name
Text
required=True
string='Description'
order_id
Many2one → sale.order
copy=False
index=True
ondelete='cascade'
required=True
string='Order Reference'
args: 'sale.order'
order_partner_id
Many2one
readonly=False
related='order_id.partner_id'
store=True
string='Customer'
price_reduce
Float
compute='_get_price_reduce'
digits='Product Price'
readonly=True
store=True
string='Price Reduce'
price_reduce_taxexcl
Monetary
compute='_get_price_reduce_notax'
readonly=True
store=True
string='Price Reduce Tax excl'
price_reduce_taxinc
Monetary
compute='_get_price_reduce_tax'
readonly=True
store=True
string='Price Reduce Tax inc'
price_subtotal
Monetary
compute='_compute_amount'
readonly=True
store=True
string='Subtotal'
price_tax
Float
compute='_compute_amount'
readonly=True
store=True
string='Total Tax'
price_total
Monetary
compute='_compute_amount'
readonly=True
store=True
string='Total'
price_unit
Float
default=0.0
digits='Product Price'
required=True
args: 'Unit Price'
product_custom_attribute_value_ids
One2many → product.attribute.custom.value
copy=True
string='Custom Values'
args: 'product.attribute.custom.value', 'sale_order_line_id'
product_id
Many2one → product.product
change_default=True
check_company=True
domain="[('sale_ok', '=', True), '|', ('company_id', '=', False), ('company_id', '=', company_id)]"
ondelete='restrict'
string='Product'
args: 'product.product'
product_no_variant_attribute_value_ids
Many2many → product.template.attribute.value
ondelete='restrict'
string='Extra Values'
args: 'product.template.attribute.value'
product_template_id
Many2one → product.template
domain=[('sale_ok', '=', True)]
related='product_id.product_tmpl_id'
string='Product Template'
args: 'product.template'
product_uom
Many2one → uom.uom
domain="[('category_id', '=', product_uom_category_id)]"
string='Unit of Measure'
args: 'uom.uom'
product_uom_category_id
Many2one
readonly=True
related='product_id.uom_id.category_id'
product_uom_qty
Float
default=1.0
digits='Product Unit of Measure'
required=True
string='Quantity'
product_uom_readonly
Boolean
compute='_compute_product_uom_readonly'
product_updatable
Boolean
compute='_compute_product_updatable'
default=True
readonly=True
string='Can Edit Product'
qty_delivered
Float
compute='_compute_qty_delivered'
compute_sudo=True
copy=False
default=0.0
digits='Product Unit of Measure'
inverse='_inverse_qty_delivered'
store=True
args: 'Delivered Quantity'
qty_delivered_manual
Float
copy=False
default=0.0
digits='Product Unit of Measure'
args: 'Delivered Manually'
qty_delivered_method
Selection
compute='_compute_qty_delivered_method'
compute_sudo=True
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 sale line\n - Stock Moves: the quantity comes from confirmed pickings\n'
readonly=True
store=True
string='Method to update delivered qty'
args: [('manual', 'Manual'), ('analytic', 'Analytic From Expenses')]
qty_invoiced
Float
compute='_get_invoice_qty'
compute_sudo=True
digits='Product Unit of Measure'
readonly=True
store=True
string='Invoiced Quantity'
qty_to_invoice
Float
compute='_get_to_invoice_qty'
digits='Product Unit of Measure'
readonly=True
store=True
string='To Invoice Quantity'
salesman_id
Many2one
readonly=True
related='order_id.user_id'
store=True
string='Salesperson'
sequence
Integer
default=10
string='Sequence'
state
Selection
copy=False
default='draft'
readonly=True
related='order_id.state'
store=True
string='Order Status'
tax_id
Many2many → account.tax
context={'active_test': False}
string='Taxes'
args: 'account.tax'
untaxed_amount_invoiced
Monetary
compute='_compute_untaxed_amount_invoiced'
compute_sudo=True
store=True
args: 'Untaxed Invoiced Amount'
untaxed_amount_to_invoice
Monetary
compute='_compute_untaxed_amount_to_invoice'
compute_sudo=True
store=True
args: 'Untaxed Amount To Invoice'
create(self, vals_list)
get_sale_order_line_multiline_description_sale(self, product)
name_get(self)
product_id_change(self)
product_uom_change(self)
unlink(self)
write(self, values)
payment_method
Selection
default=_get_default_payment_method
selection_add=[('digital_signature', 'Electronic signature'), ('paypal', 'PayPal'), ('stripe', 'Credit card (via Stripe)'), ('other', 'Other payment acquirer'), ('manual', 'Custom payment instructions')]
add_payment_methods(self, *args, **kwargs)
analytic_account_id
Many2one → account.analytic.account
readonly=True
args: 'account.analytic.account', 'Analytic Account'
campaign_id
Many2one → utm.campaign
categ_id
Many2one → product.category
readonly=True
args: 'product.category', 'Product Category'
commercial_partner_id
Many2one → res.partner
readonly=True
args: 'res.partner', 'Customer Entity'
company_id
Many2one → res.company
readonly=True
args: 'res.company', 'Company'
country_id
Many2one → res.country
readonly=True
args: 'res.country', 'Customer Country'
date
Datetime
readonly=True
args: 'Order Date'
discount
Float
readonly=True
args: 'Discount %'
discount_amount
Float
readonly=True
args: 'Discount Amount'
industry_id
Many2one → res.partner.industry
readonly=True
args: 'res.partner.industry', 'Customer Industry'
medium_id
Many2one → utm.medium
name
Char
readonly=True
args: 'Order Reference'
nbr
Integer
readonly=True
args: '# of Lines'
order_id
Many2one → sale.order
readonly=True
args: 'sale.order', 'Order #'
partner_id
Many2one → res.partner
readonly=True
args: 'res.partner', 'Customer'
price_subtotal
Float
readonly=True
args: 'Untaxed Total'
price_total
Float
readonly=True
args: 'Total'
pricelist_id
Many2one → product.pricelist
readonly=True
args: 'product.pricelist', 'Pricelist'
product_id
Many2one → product.product
readonly=True
args: 'product.product', 'Product Variant'
product_tmpl_id
Many2one → product.template
readonly=True
args: 'product.template', 'Product'
product_uom
Many2one → uom.uom
readonly=True
args: 'uom.uom', 'Unit of Measure'
product_uom_qty
Float
readonly=True
args: 'Qty Ordered'
qty_delivered
Float
readonly=True
args: 'Qty Delivered'
qty_invoiced
Float
readonly=True
args: 'Qty Invoiced'
qty_to_invoice
Float
readonly=True
args: 'Qty To Invoice'
source_id
Many2one → utm.source
state
Selection
readonly=True
string='Status'
args: [('draft', 'Draft Quotation'), ('sent', 'Quotation Sent'), ('sale', 'Sales Order'), ('done', 'Sales Done'), ('cancel', 'Cancelled')]
team_id
Many2one → crm.team
readonly=True
args: 'crm.team', 'Sales Team'
untaxed_amount_invoiced
Float
readonly=True
args: 'Untaxed Amount Invoiced'
untaxed_amount_to_invoice
Float
readonly=True
args: 'Untaxed Amount To Invoice'
user_id
Many2one → res.users
readonly=True
args: 'res.users', 'Salesperson'
volume
Float
readonly=True
args: 'Volume'
weight
Float
readonly=True
args: 'Gross Weight'
init(self)
company_id
Many2one → res.company
default=<expr>
readonly=True
states={'draft': [('readonly', False)], 'refused': [('readonly', False)]}
string='Company'
args: 'res.company'
currency_id
Many2one → res.currency
related='company_id.currency_id'
string='Currency'
args: 'res.currency'
invoiced_amount
Integer
compute='_compute_sale_invoiced_amount'
default=0
string='Revenues generated by the campaign'
quotation_count
Integer
compute='_compute_quotation_count'
groups='sales_team.group_sale_salesman'
args: 'Quotation Count'
action_redirect_to_invoiced(self)
action_redirect_to_quotations(self)
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
account_invoice_form |
Account Invoice | account.move | data | Inherits account.view_move_form |
account_invoice_groupby_inherit |
account.move.groupby | account.move | xpath | Inherits account.view_account_invoice_filter |
account_invoice_view_tree |
account.move.tree.inherit.sale | account.move | field | Inherits account.view_invoice_tree |
acquirer_form_inherit_sale |
payment.acquirer.form.inherit.sale.payment | payment.acquirer | xpath | Inherits payment.acquirer_form |
assets_backend_inherit_sale |
Sale backend assets | ir.ui.view | qweb | Inherits web.assets_backend |
assets_frontend_inherit_sale |
Sale frontend assets | ir.ui.view | qweb | Inherits web.assets_frontend |
assets_tests |
Sale Assets Tests | ir.ui.view | qweb | Inherits web.assets_tests |
attribute_tree_view |
product.attribute.tree.type | product.attribute | field | Inherits product.attribute_tree_view |
crm_lead_partner_kanban_view |
res.partner.kanban.saleorder.inherit | res.partner | field | Inherits base.res_partner_kanban_view |
crm_team_salesteams_view_form |
crm.team.form | crm.team | xpath | Inherits sales_team.crm_team_view_form |
crm_team_salesteams_view_kanban |
crm.team.kanban | crm.team | data | Inherits sales_team.crm_team_salesteams_view_kanban |
mail_notification_paynow_online |
Mail: Pay Now mail notification template | ir.ui.view | qweb | Inherits mail.mail_notification_paynow |
onboarding_quotation_layout_step |
onboarding_quotation_layout_step | ir.ui.view | qweb | New |
portal_my_home_menu_sale |
Portal layout : sales menu entries | ir.ui.view | qweb | Inherits portal.portal_breadcrumbs |
portal_my_home_sale |
Portal My Home : sales entries | ir.ui.view | qweb | Inherits portal.portal_my_home |
portal_my_orders |
My Sales Orders | ir.ui.view | qweb | New |
portal_my_quotations |
My Quotations | ir.ui.view | qweb | New |
product_attribute_view_form |
product.attribute.form.inherit | product.attribute | xpath | Inherits product.product_attribute_view_form |
product_form_view_sale_order_button |
product.product.sale.order | product.product | div | Inherits product.product_normal_form_view |
product_template_attribute_line_form |
product.template.attribute.line.form.inherit | product.template.attribute.line | xpath | Inherits product.product_template_attribute_line_form |
product_template_attribute_value_view_form_inherit |
product.template.attribute.value.view.form.inherit | product.template.attribute.value | field | Inherits product.product_template_attribute_value_view_form |
product_template_attribute_value_view_tree_inherit |
product.template.attribute.value.view.tree.inherit | product.template.attribute.value | field | Inherits product.product_template_attribute_value_view_tree |
product_template_form_view |
product.template.product.website.form | product.template | xpath | Inherits product.product_template_form_view |
product_template_form_view_invoice_policy |
product.template.invoice.policy | product.template | xpath | Inherits product.product_template_form_view |
product_template_form_view_sale_order_button |
product.template.sale.order.button | product.template | div | Inherits product.product_template_only_form_view |
product_template_sale_form_view |
product.template.sales | product.template | xpath | Inherits product.product_template_form_view |
qunit_suite |
sale_tests | ir.ui.view | qweb | Inherits web.qunit_suite |
report_assets_common_inherit_sale |
Sale report common assets | ir.ui.view | qweb | Inherits web.report_assets_common |
report_invoice_document_inherit_sale |
report_invoice_document_inherit_sale | ir.ui.view | qweb | Inherits account.report_invoice_document |
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 |
res_config_settings_view_form |
res.config.settings.view.form.inherit.sale | res.config.settings | xpath | Inherits base.res_config_settings_view_form |
res_partner_view_buttons |
res.partner.view.buttons | res.partner | div | Inherits base.view_partner_form |
res_partner_view_form_payment_defaultcreditcard |
res.partner.view.form.payment.defaultcreditcard | res.partner | button | Inherits payment.view_partners_form_payment_defaultcreditcard |
res_partner_view_form_property_inherit |
res.partner.view.form.property.inherit | res.partner | group | Inherits account.view_partner_property_form |
sale_onboarding_order_confirmation_form |
sale.order.confirmation.onboarding.form | sale.payment.acquirer.onboarding.wizard | xpath | Inherits payment.payment_acquirer_onboarding_wizard_form |
sale_onboarding_order_confirmation_step |
sale_onboarding_order_confirmation_step | ir.ui.view | qweb | New |
sale_onboarding_sample_quotation_form |
mail.compose.message.sale.onboarding.sample.quotation.form | mail.compose.message | xpath | Inherits mail.email_compose_message_wizard_form |
sale_onboarding_sample_quotation_step |
sale_onboarding_sample_quotation_step | ir.ui.view | qweb | New |
sale_order_line_view_form_readonly |
sale.order.line.form.readonly | sale.order.line | form | New |
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_template |
Sales Order Portal Template | ir.ui.view | qweb | Inherits portal.portal_sidebar |
sale_order_view_activity |
sale.order.activity | sale.order | activity | New |
sale_order_view_search_inherit_quotation |
sale.order.search.inherit.quotation | sale.order | xpath | Inherits sale.view_sales_order_filter |
sale_order_view_search_inherit_sale |
sale.order.search.inherit.sale | sale.order | xpath | Inherits sale.view_sales_order_filter |
sale_quotation_onboarding_panel |
sale.quotation.onboarding.panel | ir.ui.view | qweb | New |
transaction_form_inherit_sale |
payment.transaction.form.inherit.sale.payment | payment.transaction | xpath | Inherits payment.transaction_form |
utm_campaign_view_form |
utm.campaign.view.form | utm.campaign | xpath | Inherits utm.utm_campaign_view_form |
utm_campaign_view_kanban |
utm.campaign.view.kanban | utm.campaign | xpath | Inherits utm.utm_campaign_view_kanban |
variants |
variants | ir.ui.view | qweb | New |
view_account_invoice_report_search_inherit |
account.invoice.report.search.inherit | account.invoice.report | xpath | Inherits account.view_account_invoice_report_search |
view_order_form |
sale.order.form | sale.order | form | New |
view_order_line_tree |
sale.order.line.tree | sale.order.line | tree | 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.tree | sale.order | tree | New |
view_quotation_tree |
sale.order.tree | sale.order | tree | New |
view_quotation_tree_with_onboarding |
sale.order.tree | sale.order | xpath | 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_auto_done_setting |
sale.order.form | sale.order | xpath | Inherits sale.view_order_form |
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 |
so_line
Many2one → sale.order.line
domain=<expr>
string='Sales Order Item'
args: 'sale.order.line'
No public methods.
team_id
Many2one → crm.team
string='Sales Team'
args: 'crm.team'
No public methods.
partner_shipping_id
Many2one → res.partner
domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]"
help='Delivery address for current invoice.'
readonly=True
states={'draft': [('readonly', False)]}
string='Delivery Address'
args: 'res.partner'
team_id
Many2one → crm.team
default=_get_invoice_default_sale_team
domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]"
string='Sales Team'
args: 'crm.team'
action_invoice_paid(self)
onchange_user_id(self)
post(self)
unlink(self)
sale_line_ids
Many2many → sale.order.line
copy=False
readonly=True
string='Sales Order Lines'
args: 'sale.order.line', 'sale_order_line_invoice_rel', 'invoice_line_id', 'order_line_id'
No public methods.
No new fields.
Public methods (1)get_bank_statement_line_data(self, st_line_ids, excluded_ids=None)
invoiced
Integer
compute='_compute_invoiced'
help='Invoice revenue for the current month. This is the amount the sales channel has invoiced this month. It is used to compute the progression ratio of the current and target revenue on the kanban view.'
readonly=True
string='Invoiced This Month'
invoiced_target
Integer
help='Revenue target for the current month (untaxed total of confirmed invoices).'
string='Invoicing Target'
quotations_amount
Integer
compute='_compute_quotations_to_invoice'
readonly=True
string='Amount of quotations to invoice'
quotations_count
Integer
compute='_compute_quotations_to_invoice'
readonly=True
string='Number of quotations to invoice'
sales_to_invoice_count
Integer
compute='_compute_sales_to_invoice'
readonly=True
string='Number of sales to invoice'
use_quotations
Boolean
help='Check this box if you send quotations to your customers rather than confirming orders straight away.'
string='Quotations'
action_primary_channel_button(self)
update_invoiced_target(self, value)
so_reference_type
Selection
default='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.
No new fields.
Public methods (1)default_get(self, fields)
sale_order_ids
Many2many → sale.order
copy=False
readonly=True
string='Sales Orders'
args: 'sale.order', 'sale_order_transaction_rel', 'transaction_id', 'sale_order_id'
sale_order_ids_nbr
Integer
compute='_compute_sale_order_ids_nbr'
string='# of Sales Orders'
action_view_sales_orders(self)
render_sale_button(self, order, submit_txt=None, render_values=None)
display_type
Selection
default='radio'
help='The display type used in the Product Configurator.'
required=True
args: [('radio', 'Radio'), ('select', 'Select'), ('color', 'Color')]
No public methods.
custom_product_template_attribute_value_id
Many2one → product.template.attribute.value
ondelete='restrict'
required=True
string='Attribute Value'
args: 'product.template.attribute.value'
custom_value
Char
name
Char
compute='_compute_name'
args: 'Name'
sale_order_line_id
Many2one → sale.order.line
ondelete='cascade'
required=True
string='Sales Order Line'
args: 'sale.order.line'
No public methods.
display_type
Selection
readonly=True
related='attribute_id.display_type'
html_color
Char
help="Here you can set a specific HTML color index (e.g. #ff0000) to display the color if the attribute type is 'Color'."
string='Color'
is_custom
Boolean
help='Allow users to input custom values for this attribute value'
args: 'Is custom value'
No public methods.
sales_count
Float
compute='_compute_sales_count'
string='Sold'
action_view_sales(self)
expense_policy
Selection
default='no'
help='Expenses and vendor bills can be re-invoiced to a customer.With this option, a validated expense can be re-invoice to a customer at its cost or sales price.'
string='Re-Invoice Expenses'
args: [('no', 'No'), ('cost', 'At cost'), ('sales_price', 'Sales price')]
invoice_policy
Selection
default='order'
help='Ordered Quantity: Invoice quantities ordered by the customer.\nDelivered Quantity: Invoice quantities delivered to the customer.'
string='Invoicing Policy'
args: [('order', 'Ordered quantities'), ('delivery', 'Delivered quantities')]
sale_line_warn
Selection
default='no-message'
help=WARNING_HELP
required=True
args: WARNING_MESSAGE, 'Sales Order Line'
sale_line_warn_msg
Text
sales_count
Float
compute='_compute_sales_count'
string='Sold'
service_type
Selection
default='manual'
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.'
string='Track Service'
args: [('manual', 'Manually set quantities on order')]
visible_expense_policy
Boolean
compute='_compute_visible_expense_policy'
default=<expr>
args: 'Re-Invoice Policy visible'
visible_qty_configurator
Boolean
compute='_compute_visible_qty_configurator'
args: 'Quantity visible in configurator'
action_view_sales(self)
create_product_variant(self, product_template_attribute_value_ids)
get_import_templates(self)
display_type
Selection
readonly=True
related='product_attribute_value_id.display_type'
html_color
Char
related='product_attribute_value_id.html_color'
args: 'HTML Color Index'
is_custom
Boolean
related='product_attribute_value_id.is_custom'
args: 'Is custom value'
No public methods.
analytic_account_id
Many2one → account.analytic.account
readonly=True
args: 'account.analytic.account', 'Analytic Account'
categ_id
Many2one → product.category
readonly=True
args: 'product.category', 'Product Category'
company_id
Many2one → res.company
readonly=True
args: 'res.company', 'Company'
country_id
Many2one → res.country
readonly=True
args: 'res.country', 'Partner Country'
date_order
Datetime
readonly=True
string='Date Order'
name
Char
readonly=True
args: 'Order Reference'
partner_id
Many2one → res.partner
readonly=True
args: 'res.partner', 'Partner'
price_subtotal
Float
readonly=True
string='Price Subtotal'
price_total
Float
readonly=True
args: 'Total'
pricelist_id
Many2one → product.pricelist
readonly=True
args: 'product.pricelist', 'Pricelist'
product_id
Many2one → product.product
readonly=True
string='Product'
args: 'product.product'
product_qty
Float
readonly=True
args: 'Product Quantity'
product_tmpl_id
Many2one → product.template
readonly=True
args: 'product.template', 'Product Template'
team_id
Many2one → crm.team
readonly=True
args: 'crm.team', 'Sales Team'
user_id
Many2one → res.users
readonly=True
args: 'res.users', 'Salesperson'
get_main_request(self)
init(self)
No new fields.
Public methods (0)No public methods.
portal_confirmation_pay
Boolean
string='Online Payment'
portal_confirmation_sign
Boolean
default=True
string='Online Signature'
quotation_validity_days
Integer
default=30
string='Default Quotation Validity (Days)'
sale_onboarding_order_confirmation_state
Selection
default='not_done'
string='State of the onboarding confirmation order step'
args: [('not_done', 'Not done'), ('just_done', 'Just done'), ('done', 'Done')]
sale_onboarding_payment_method
Selection
string='Sale onboarding selected payment method'
args: [('digital_signature', 'Sign online'), ('paypal', 'PayPal'), ('stripe', 'Stripe'), ('other', 'Pay with another payment acquirer'), ('manual', 'Manual Payment')]
sale_onboarding_sample_quotation_state
Selection
default='not_done'
string='State of the onboarding sample quotation step'
args: [('not_done', 'Not done'), ('just_done', 'Just done'), ('done', 'Done')]
sale_quotation_onboarding_state
Selection
default='not_done'
string='State of the sale onboarding panel'
args: [('not_done', 'Not done'), ('just_done', 'Just done'), ('done', 'Done'), ('closed', 'Closed')]
action_close_sale_quotation_onboarding(self)
action_open_sale_onboarding_payment_acquirer(self)
action_open_sale_onboarding_sample_quotation(self)
get_and_update_sale_quotation_onboarding_state(self)
auth_signup_uninvited
Selection
config_parameter='auth_signup.invitation_scope'
default='b2b'
string='Customer Account'
args: [('b2b', 'On invitation'), ('b2c', 'Free sign up')]
automatic_invoice
Boolean
config_parameter='sale.automatic_invoice'
help='The invoice is generated automatically and available in the customer portal when the transaction is confirmed by the payment acquirer.\nThe invoice is marked as paid and the payment is registered in the payment journal defined in the configuration of the payment acquirer.\nThis mode is advised if you issue the final invoice at the order and not after the delivery.'
args: 'Automatic Invoice'
confirmation_template_id
Many2one → mail.template
config_parameter='sale.default_confirmation_template'
domain="[('model', '=', 'sale.order')]"
help='Email sent to the customer once the order is paid.'
string='Confirmation Email'
args: 'mail.template'
default_invoice_policy
Selection
default='order'
default_model='product.template'
args: [('order', 'Invoice what is ordered'), ('delivery', 'Invoice what is delivered')], 'Invoicing Policy'
deposit_default_product_id
Many2one → product.product
config_parameter='sale.default_deposit_product_id'
domain="[('type', '=', 'service')]"
help='Default product used for payment advances'
args: 'product.product', 'Deposit Product'
group_auto_done_setting
Boolean
implied_group='sale.group_auto_done_setting'
args: 'Lock Confirmed Sales'
group_proforma_sales
Boolean
help='Allows you to send pro-forma invoice.'
implied_group='sale.group_proforma_sales'
string='Pro-Forma Invoice'
group_sale_delivery_address
Boolean
implied_group='sale.group_delivery_invoice_address'
args: 'Customer Addresses'
group_warning_sale
Boolean
implied_group='sale.group_warning_sale'
args: 'Sale Order Warnings'
module_delivery
Boolean
module_delivery_bpost
Boolean
module_delivery_dhl
Boolean
module_delivery_easypost
Boolean
module_delivery_fedex
Boolean
module_delivery_ups
Boolean
module_delivery_usps
Boolean
module_product_email_template
Boolean
module_sale_amazon
Boolean
module_sale_coupon
Boolean
module_sale_margin
Boolean
module_website_sale_digital
Boolean
portal_confirmation_pay
Boolean
readonly=False
related='company_id.portal_confirmation_pay'
string='Online Payment'
portal_confirmation_sign
Boolean
readonly=False
related='company_id.portal_confirmation_sign'
string='Online Signature'
quotation_validity_days
Integer
readonly=False
related='company_id.quotation_validity_days'
string='Default Quotation Validity (Days)'
template_id
Many2one → mail.template
config_parameter='sale.default_email_template'
default=<expr>
domain="[('model', '=', 'account.move')]"
args: 'mail.template', 'Email Template'
use_quotation_validity_days
Boolean
config_parameter='sale.use_quotation_validity_days'
args: 'Default Quotation Validity'
set_values(self)
sale_order_count
Integer
compute='_compute_sale_order_count'
string='Sale Order Count'
sale_order_ids
One2many → sale.order
sale_warn
Selection
default='no-message'
help=WARNING_HELP
args: WARNING_MESSAGE, 'Sales Warnings'
sale_warn_msg
Text
action_view_sale_order(self)
can_edit_vat(self)
advance_payment_method
Selection
default='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=True
string='Create Invoice'
args: [('delivered', 'Regular invoice'), ('percentage', 'Down payment (percentage)'), ('fixed', 'Down payment (fixed amount)')]
amount
Float
digits='Account'
help='The percentage of amount to be invoiced in advance, taxes excluded.'
args: 'Down Payment Amount'
count
Integer
default=_count
string='Order Count'
currency_id
Many2one → res.currency
default=_default_currency_id
string='Currency'
args: 'res.currency'
deduct_down_payments
Boolean
default=True
args: 'Deduct down payments'
deposit_account_id
Many2one → account.account
default=_default_deposit_account_id
domain=[('deprecated', '=', False)]
help='Account used for deposits'
string='Income Account'
args: 'account.account'
deposit_taxes_id
Many2many → account.tax
default=_default_deposit_taxes_id
help='Taxes used for deposits'
string='Customer Taxes'
args: 'account.tax'
fixed_amount
Monetary
help='The fixed amount to be invoiced in advance, taxes excluded.'
args: 'Down Payment Amount(Fixed)'
has_down_payments
Boolean
default=_default_has_down_payment
readonly=True
args: 'Has down payments'
product_id
Many2one → product.product
default=_default_product_id
domain=[('type', '=', 'service')]
string='Down Payment Product'
args: 'product.product'
create_invoices(self)
onchange_advance_payment_method(self)
amount_by_group
Binary
compute='_amount_by_group'
help='type: [(name, amount, base, formated amount, formated base)]'
string='Tax amount by group'
amount_tax
Monetary
compute='_amount_all'
readonly=True
store=True
string='Taxes'
amount_total
Monetary
compute='_amount_all'
readonly=True
store=True
string='Total'
tracking=4
amount_undiscounted
Float
compute='_compute_amount_undiscounted'
digits=0
args: 'Amount Before Discount'
amount_untaxed
Monetary
compute='_amount_all'
readonly=True
store=True
string='Untaxed Amount'
tracking=5
analytic_account_id
Many2one → account.analytic.account
check_company=True
copy=False
domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]"
help='The analytic account related to a sales order.'
readonly=True
states={'draft': [('readonly', False)], 'sent': [('readonly', False)]}
args: 'account.analytic.account', 'Analytic Account'
authorized_transaction_ids
Many2many → payment.transaction
compute='_compute_authorized_transaction_ids'
copy=False
readonly=True
string='Authorized Transactions'
args: 'payment.transaction'
client_order_ref
Char
copy=False
string='Customer Reference'
commitment_date
Datetime
copy=False
help='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.'
readonly=True
states={'draft': [('readonly', False)], 'sent': [('readonly', False)]}
args: 'Delivery Date'
company_id
Many2one → res.company
default=<expr>
index=True
required=True
args: 'res.company', 'Company'
create_date
Datetime
help='Date on which sales order is created.'
index=True
readonly=True
string='Creation Date'
currency_id
Many2one → res.currency
readonly=True
related='pricelist_id.currency_id'
required=True
string='Currency'
args: 'res.currency'
currency_rate
Float
compute='_compute_currency_rate'
compute_sudo=True
digits=(12, 6)
help='The rate of the currency to the currency of rate 1 applicable at the date of the order'
readonly=True
store=True
args: 'Currency Rate'
date_order
Datetime
copy=False
default=fields.Datetime.now
help='Creation date of draft/sent orders,\nConfirmation date of confirmed orders.'
index=True
readonly=True
required=True
states={'draft': [('readonly', False)], 'sent': [('readonly', False)]}
string='Order Date'
expected_date
Datetime
compute='_compute_expected_date'
help='Delivery date you can promise to the customer, computed from the minimum lead time of the order lines.'
store=False
args: 'Expected Date'
fiscal_position_id
Many2one → account.fiscal.position
check_company=True
domain="[('company_id', '=', company_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.'
string='Fiscal Position'
args: 'account.fiscal.position'
invoice_count
Integer
compute='_get_invoiced'
readonly=True
string='Invoice Count'
invoice_ids
Many2many → account.move
compute='_get_invoiced'
copy=False
readonly=True
search='_search_invoice_ids'
string='Invoices'
args: 'account.move'
invoice_status
Selection
compute='_get_invoice_status'
readonly=True
store=True
string='Invoice Status'
args: [('upselling', 'Upselling Opportunity'), ('invoiced', 'Fully Invoiced'), ('to invoice', 'To Invoice'), ('no', 'Nothing to Invoice')]
is_expired
Boolean
compute='_compute_is_expired'
string='Is expired'
name
Char
copy=False
default=<expr>
index=True
readonly=True
required=True
states={'draft': [('readonly', False)]}
string='Order Reference'
note
Text
default=_default_note
args: 'Terms and conditions'
order_line
One2many → sale.order.line
auto_join=True
copy=True
states={'cancel': [('readonly', True)], 'done': [('readonly', True)]}
string='Order Lines'
args: 'sale.order.line', 'order_id'
origin
Char
help='Reference of the document that generated this sales order request.'
string='Source Document'
partner_id
Many2one → res.partner
change_default=True
domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]"
index=True
readonly=True
required=True
states={'draft': [('readonly', False)], 'sent': [('readonly', False)]}
string='Customer'
tracking=1
args: 'res.partner'
partner_invoice_id
Many2one → res.partner
domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]"
readonly=True
required=True
states={'draft': [('readonly', False)], 'sent': [('readonly', False)], 'sale': [('readonly', False)]}
string='Invoice Address'
args: 'res.partner'
partner_shipping_id
Many2one → res.partner
domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]"
readonly=True
required=True
states={'draft': [('readonly', False)], 'sent': [('readonly', False)], 'sale': [('readonly', False)]}
string='Delivery Address'
args: 'res.partner'
payment_term_id
Many2one → account.payment.term
check_company=True
domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]"
string='Payment Terms'
args: 'account.payment.term'
pricelist_id
Many2one → product.pricelist
check_company=True
domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]"
help='If you change the pricelist, only newly added lines will be affected.'
readonly=True
required=True
states={'draft': [('readonly', False)], 'sent': [('readonly', False)]}
string='Pricelist'
args: 'product.pricelist'
reference
Char
copy=False
help='The payment communication of this sale order.'
string='Payment Ref.'
remaining_validity_days
Integer
compute='_compute_remaining_validity_days'
string='Remaining Days Before Expiration'
require_payment
Boolean
default=_get_default_require_payment
help='Request an online payment to the customer in order to confirm orders automatically.'
readonly=True
states={'draft': [('readonly', False)], 'sent': [('readonly', False)]}
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.'
readonly=True
states={'draft': [('readonly', False)], 'sent': [('readonly', False)]}
args: 'Online Signature'
signature
Image
attachment=True
copy=False
help='Signature received through the portal.'
max_height=1024
max_width=1024
args: 'Signature'
signed_by
Char
copy=False
help='Name of the person that signed the SO.'
args: 'Signed By'
signed_on
Datetime
copy=False
help='Date of the signature.'
args: 'Signed On'
state
Selection
copy=False
default='draft'
index=True
readonly=True
string='Status'
tracking=3
args: [('draft', 'Quotation'), ('sent', 'Quotation Sent'), ('sale', 'Sales Order'), ('done', 'Locked'), ('cancel', 'Cancelled')]
team_id
Many2one → crm.team
change_default=True
check_company=True
default=_get_default_team
domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]"
args: 'crm.team', 'Sales Team'
transaction_ids
Many2many → payment.transaction
copy=False
readonly=True
string='Transactions'
args: 'payment.transaction', 'sale_order_transaction_rel', 'sale_order_id', 'transaction_id'
type_name
Char
compute='_compute_type_name'
args: 'Type Name'
user_id
Many2one → res.users
default=<expr>
domain=<expr>
index=True
string='Salesperson'
tracking=2
args: 'res.users'
validity_date
Date
copy=False
default=_default_validity_date
readonly=True
states={'draft': [('readonly', False)], 'sent': [('readonly', False)]}
string='Expiration'
action_cancel(self)
action_confirm(self)
action_done(self)
action_draft(self)
action_quotation_send(self)
action_quotation_sent(self)
action_unlock(self)
action_view_invoice(self)
add_option_to_order_with_taxcloud(self)
copy_data(self, default=None)
create(self, vals)
get_empty_list_help(self, help)
get_portal_last_transaction(self)
has_to_be_paid(self, include_draft=False)
has_to_be_signed(self, include_draft=False)
message_post(self, **kwargs)
name_get(self)
onchange_partner_id(self)
onchange_partner_id_warning(self)
onchange_partner_shipping_id(self)
onchange_user_id(self)
payment_action_capture(self)
payment_action_void(self)
preview_sale_order(self)
unlink(self)
validate_taxes_on_sales_order(self)
analytic_line_ids
One2many → account.analytic.line
string='Analytic lines'
args: 'account.analytic.line', 'so_line'
analytic_tag_ids
Many2many → account.analytic.tag
domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]"
string='Analytic Tags'
args: 'account.analytic.tag'
company_id
Many2one
index=True
readonly=True
related='order_id.company_id'
store=True
string='Company'
currency_id
Many2one
depends=['order_id.currency_id']
readonly=True
related='order_id.currency_id'
store=True
string='Currency'
customer_lead
Float
default=0.0
help='Number of days between the order confirmation and the shipping of the products to the customer'
required=True
args: 'Lead Time'
discount
Float
default=0.0
digits='Discount'
string='Discount (%)'
display_type
Selection
default=False
help='Technical field for UX purpose.'
args: [('line_section', 'Section'), ('line_note', 'Note')]
invoice_lines
Many2many → account.move.line
copy=False
string='Invoice Lines'
args: 'account.move.line', 'sale_order_line_invoice_rel', 'order_line_id', 'invoice_line_id'
invoice_status
Selection
compute='_compute_invoice_status'
default='no'
readonly=True
store=True
string='Invoice Status'
args: [('upselling', 'Upselling Opportunity'), ('invoiced', 'Fully Invoiced'), ('to invoice', 'To Invoice'), ('no', 'Nothing to Invoice')]
is_downpayment
Boolean
help='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_expense
Boolean
help='Is true if the sales order line comes from an expense or a vendor bills'
args: 'Is expense'
name
Text
required=True
string='Description'
order_id
Many2one → sale.order
copy=False
index=True
ondelete='cascade'
required=True
string='Order Reference'
args: 'sale.order'
order_partner_id
Many2one
readonly=False
related='order_id.partner_id'
store=True
string='Customer'
price_reduce
Float
compute='_get_price_reduce'
digits='Product Price'
readonly=True
store=True
string='Price Reduce'
price_reduce_taxexcl
Monetary
compute='_get_price_reduce_notax'
readonly=True
store=True
string='Price Reduce Tax excl'
price_reduce_taxinc
Monetary
compute='_get_price_reduce_tax'
readonly=True
store=True
string='Price Reduce Tax inc'
price_subtotal
Monetary
compute='_compute_amount'
readonly=True
store=True
string='Subtotal'
price_tax
Float
compute='_compute_amount'
readonly=True
store=True
string='Total Tax'
price_total
Monetary
compute='_compute_amount'
readonly=True
store=True
string='Total'
price_unit
Float
default=0.0
digits='Product Price'
required=True
args: 'Unit Price'
product_custom_attribute_value_ids
One2many → product.attribute.custom.value
copy=True
string='Custom Values'
args: 'product.attribute.custom.value', 'sale_order_line_id'
product_id
Many2one → product.product
change_default=True
check_company=True
domain="[('sale_ok', '=', True), '|', ('company_id', '=', False), ('company_id', '=', company_id)]"
ondelete='restrict'
string='Product'
args: 'product.product'
product_no_variant_attribute_value_ids
Many2many → product.template.attribute.value
ondelete='restrict'
string='Extra Values'
args: 'product.template.attribute.value'
product_template_id
Many2one → product.template
domain=[('sale_ok', '=', True)]
related='product_id.product_tmpl_id'
string='Product Template'
args: 'product.template'
product_uom
Many2one → uom.uom
domain="[('category_id', '=', product_uom_category_id)]"
string='Unit of Measure'
args: 'uom.uom'
product_uom_category_id
Many2one
readonly=True
related='product_id.uom_id.category_id'
product_uom_qty
Float
default=1.0
digits='Product Unit of Measure'
required=True
string='Quantity'
product_updatable
Boolean
compute='_compute_product_updatable'
default=True
readonly=True
string='Can Edit Product'
qty_delivered
Float
compute='_compute_qty_delivered'
compute_sudo=True
copy=False
default=0.0
digits='Product Unit of Measure'
inverse='_inverse_qty_delivered'
store=True
args: 'Delivered Quantity'
qty_delivered_manual
Float
copy=False
default=0.0
digits='Product Unit of Measure'
args: 'Delivered Manually'
qty_delivered_method
Selection
compute='_compute_qty_delivered_method'
compute_sudo=True
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 sale line\n - Stock Moves: the quantity comes from confirmed pickings\n'
readonly=True
store=True
string='Method to update delivered qty'
args: [('manual', 'Manual'), ('analytic', 'Analytic From Expenses')]
qty_invoiced
Float
compute='_get_invoice_qty'
compute_sudo=True
digits='Product Unit of Measure'
readonly=True
store=True
string='Invoiced Quantity'
qty_to_invoice
Float
compute='_get_to_invoice_qty'
digits='Product Unit of Measure'
readonly=True
store=True
string='To Invoice Quantity'
salesman_id
Many2one
readonly=True
related='order_id.user_id'
store=True
string='Salesperson'
sequence
Integer
default=10
string='Sequence'
state
Selection
copy=False
default='draft'
readonly=True
related='order_id.state'
store=True
string='Order Status'
args: [('draft', 'Quotation'), ('sent', 'Quotation Sent'), ('sale', 'Sales Order'), ('done', 'Done'), ('cancel', 'Cancelled')]
tax_id
Many2many → account.tax
context={'active_test': False}
string='Taxes'
args: 'account.tax'
untaxed_amount_invoiced
Monetary
compute='_compute_untaxed_amount_invoiced'
compute_sudo=True
store=True
args: 'Untaxed Invoiced Amount'
untaxed_amount_to_invoice
Monetary
compute='_compute_untaxed_amount_to_invoice'
compute_sudo=True
store=True
args: 'Untaxed Amount To Invoice'
create(self, vals_list)
get_sale_order_line_multiline_description_sale(self, product)
name_get(self)
product_id_change(self)
product_uom_change(self)
unlink(self)
write(self, values)
payment_method
Selection
default=_get_default_payment_method
selection_add=[('digital_signature', 'Online signature'), ('paypal', 'PayPal'), ('stripe', 'Credit card (via Stripe)'), ('other', 'Other payment acquirer'), ('manual', 'Custom payment instructions')]
add_payment_methods(self, *args, **kwargs)
analytic_account_id
Many2one → account.analytic.account
readonly=True
args: 'account.analytic.account', 'Analytic Account'
campaign_id
Many2one → utm.campaign
categ_id
Many2one → product.category
readonly=True
args: 'product.category', 'Product Category'
commercial_partner_id
Many2one → res.partner
readonly=True
args: 'res.partner', 'Customer Entity'
company_id
Many2one → res.company
readonly=True
args: 'res.company', 'Company'
country_id
Many2one → res.country
readonly=True
args: 'res.country', 'Customer Country'
date
Datetime
readonly=True
args: 'Order Date'
discount
Float
readonly=True
args: 'Discount %'
discount_amount
Float
readonly=True
args: 'Discount Amount'
industry_id
Many2one → res.partner.industry
readonly=True
args: 'res.partner.industry', 'Customer Industry'
medium_id
Many2one → utm.medium
name
Char
readonly=True
args: 'Order Reference'
nbr
Integer
readonly=True
args: '# of Lines'
order_id
Many2one → sale.order
readonly=True
args: 'sale.order', 'Order #'
partner_id
Many2one → res.partner
readonly=True
args: 'res.partner', 'Customer'
price_subtotal
Float
readonly=True
args: 'Untaxed Total'
price_total
Float
readonly=True
args: 'Total'
pricelist_id
Many2one → product.pricelist
readonly=True
args: 'product.pricelist', 'Pricelist'
product_id
Many2one → product.product
readonly=True
args: 'product.product', 'Product Variant'
product_tmpl_id
Many2one → product.template
readonly=True
args: 'product.template', 'Product'
product_uom
Many2one → uom.uom
readonly=True
args: 'uom.uom', 'Unit of Measure'
product_uom_qty
Float
readonly=True
args: 'Qty Ordered'
qty_delivered
Float
readonly=True
args: 'Qty Delivered'
qty_invoiced
Float
readonly=True
args: 'Qty Invoiced'
qty_to_invoice
Float
readonly=True
args: 'Qty To Invoice'
source_id
Many2one → utm.source
state
Selection
readonly=True
string='Status'
args: [('draft', 'Draft Quotation'), ('sent', 'Quotation Sent'), ('sale', 'Sales Order'), ('done', 'Sales Done'), ('cancel', 'Cancelled')]
team_id
Many2one → crm.team
readonly=True
args: 'crm.team', 'Sales Team'
untaxed_amount_invoiced
Float
readonly=True
args: 'Untaxed Amount Invoiced'
untaxed_amount_to_invoice
Float
readonly=True
args: 'Untaxed Amount To Invoice'
user_id
Many2one → res.users
readonly=True
args: 'res.users', 'Salesperson'
volume
Float
readonly=True
args: 'Volume'
weight
Float
readonly=True
args: 'Gross Weight'
init(self)
company_id
Many2one → res.company
default=<expr>
readonly=True
states={'draft': [('readonly', False)], 'refused': [('readonly', False)]}
string='Company'
args: 'res.company'
currency_id
Many2one → res.currency
related='company_id.currency_id'
string='Currency'
args: 'res.currency'
invoiced_amount
Integer
compute='_compute_sale_invoiced_amount'
default=0
string='Revenues generated by the campaign'
quotation_count
Integer
compute='_compute_quotation_count'
groups='sales_team.group_sale_salesman'
args: 'Quotation Count'
action_redirect_to_invoiced(self)
action_redirect_to_quotations(self)
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
account_invoice_form |
Account Invoice | account.invoice | data | Inherits account.invoice_form |
account_invoice_groupby_inherit |
account.invoice.groupby | account.invoice | xpath | Inherits account.view_account_invoice_filter |
account_invoice_line_form |
account.invoice.line.form | account.invoice.line | data | Inherits account.view_invoice_line_form |
account_invoice_line_tree |
account.invoice.line.tree | account.invoice.line | data | Inherits account.view_invoice_line_tree |
account_invoice_supplier_form |
account.invoice.supplier.form | account.invoice | data | Inherits account.invoice_supplier_form |
acquirer_form_inherit_sale |
payment.acquirer.form.inherit.sale.payment | payment.acquirer | xpath | Inherits payment.acquirer_form |
assets_backend_inherit_sale |
Sale backend assets | ir.ui.view | qweb | Inherits web.assets_backend |
assets_frontend_inherit_sale |
Sale frontend assets | ir.ui.view | qweb | Inherits web.assets_frontend |
attribute_tree_view |
product.attribute.tree.type | product.attribute | field | Inherits product.attribute_tree_view |
crm_lead_partner_kanban_view |
res.partner.kanban.saleorder.inherit | res.partner | field | Inherits base.res_partner_kanban_view |
crm_team_salesteams_view_form |
crm.team.form | crm.team | xpath | Inherits sales_team.crm_team_view_form |
crm_team_salesteams_view_kanban |
crm.team.kanban | crm.team | data | Inherits sales_team.crm_team_salesteams_view_kanban |
mail_notification_paynow_online |
oezirhgoi | ir.ui.view | qweb | Inherits mail.mail_notification_paynow |
onboarding_quotation_layout_step |
onboarding_quotation_layout_step | ir.ui.view | qweb | New |
optional_product_items |
optional_product_items | ir.ui.view | qweb | New |
optional_products_modal |
Optional Products | ir.ui.view | qweb | New |
portal_my_home_menu_sale |
Portal layout : sales menu entries | ir.ui.view | qweb | Inherits portal.portal_breadcrumbs |
portal_my_home_sale |
Portal My Home : sales entries | ir.ui.view | qweb | Inherits portal.portal_my_home |
portal_my_orders |
My Sales Orders | ir.ui.view | qweb | New |
portal_my_quotations |
My Quotations | ir.ui.view | qweb | New |
product_attribute_view_form |
product.attribute.form.inherit | product.attribute | xpath | Inherits product.product_attribute_view_form |
product_configurator_configure |
Configure | ir.ui.view | qweb | New |
product_configurator_configure_optional_products |
product_configurator_configure_optional_products | ir.ui.view | qweb | New |
product_form_view_sale_order_button |
product.product.sale.order | product.product | button | Inherits product.product_normal_form_view |
product_pricelist_view_form |
product.pricelist.form.inherit.product | product.pricelist | field | Inherits product.product_pricelist_view |
product_pricelist_view_kanban |
product.pricelist.kanban.inherit.product | product.pricelist | data | Inherits product.product_pricelist_view_kanban |
product_pricelist_view_tree |
product.pricelist.tree.inherit.product | product.pricelist | field | Inherits product.product_pricelist_view_tree |
product_template_attribute_line_form |
product.template.attribute.line.form.inherit | product.template.attribute.line | xpath | Inherits product.product_template_attribute_line_form |
product_template_attribute_value_view_form_inherit |
product.template.attribute.value.view.form.inherit | product.template.attribute.value | field | Inherits product.product_template_attribute_value_view_form |
product_template_attribute_value_view_tree_inherit |
product.template.attribute.value.view.tree.inherit | product.template.attribute.value | field | Inherits product.product_template_attribute_value_view_tree |
product_template_form_view |
product.template.product.website.form | product.template | xpath | Inherits product.product_template_form_view |
product_template_form_view_invoice_policy |
product.template.invoice.policy | product.template | xpath | Inherits product.product_template_form_view |
product_template_form_view_sale_order_button |
product.template.sale.order.button | product.template | button | Inherits product.product_template_only_form_view |
qunit_suite |
product_configurator_tests | ir.ui.view | qweb | Inherits web.qunit_suite |
qunit_suite |
sales_team_dashboard_tests | ir.ui.view | qweb | Inherits web.qunit_suite |
report_all_channels_sales_view_pivot |
report.all.channels.sales.pivot | report.all.channels.sales | pivot | New |
report_all_channels_sales_view_search |
report.all.channels.sales.search | report.all.channels.sales | search | New |
report_assets_common_inherit_sale |
Sale report common assets | ir.ui.view | qweb | Inherits web.report_assets_common |
report_invoice_document_inherit_sale |
report_invoice_document_inherit_sale | ir.ui.view | qweb | Inherits account.report_invoice_document |
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 |
res_config_settings_view_form |
res.config.settings.view.form.inherit.sale | res.config.settings | xpath | Inherits base.res_config_settings_view_form |
res_partner_view_buttons |
res.partner.view.buttons | res.partner | button | Inherits base.view_partner_form |
res_partner_view_form_payment_defaultcreditcard |
res.partner.view.form.payment.defaultcreditcard | res.partner | button | Inherits payment.view_partners_form_payment_defaultcreditcard |
res_partner_view_form_property_inherit |
res.partner.view.form.property.inherit | res.partner | group | Inherits account.view_partner_property_form |
sale_onboarding_order_confirmation_form |
sale.order.confirmation.onboarding.form | sale.payment.acquirer.onboarding.wizard | xpath | Inherits payment.payment_acquirer_onboarding_wizard_form |
sale_onboarding_order_confirmation_step |
sale_onboarding_order_confirmation_step | ir.ui.view | qweb | New |
sale_onboarding_quotation_layout_form |
sale.onboarding.quotation.layout.form | res.company | xpath | Inherits base.view_company_document_template_form |
sale_onboarding_sample_quotation_form |
mail.compose.message.sale.onboarding.sample.quotation.form | mail.compose.message | xpath | Inherits mail.email_compose_message_wizard_form |
sale_onboarding_sample_quotation_step |
sale_onboarding_sample_quotation_step | ir.ui.view | qweb | New |
sale_order_line_view_form_readonly |
sale.order.line.form.readonly | sale.order.line | form | New |
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_template |
Sales Order Portal Template | ir.ui.view | qweb | Inherits portal.portal_sidebar |
sale_order_view_search_inherit_quotation |
sale.order.search.inherit.quotation | sale.order | xpath | Inherits sale.view_sales_order_filter |
sale_order_view_search_inherit_sale |
sale.order.search.inherit.sale | sale.order | xpath | Inherits sale.view_sales_order_filter |
sale_product_configurator_view_form |
sale.product.configurator.view.form | sale.product.configurator | form | New |
sale_quotation_onboarding_panel |
sale.quotation.onboarding.panel | ir.ui.view | qweb | New |
transaction_form_inherit_sale |
payment.transaction.form.inherit.sale.payment | payment.transaction | xpath | Inherits payment.transaction_form |
variants |
variants | ir.ui.view | qweb | New |
variants_tree_view |
variants.template.tree | product.attribute.value | field | Inherits product.variants_tree_view |
view_account_invoice_report_search_inherit |
account.invoice.report.search.inherit | account.invoice.report | xpath | Inherits account.view_account_invoice_report_search |
view_order_form |
sale.order.form | sale.order | form | New |
view_order_form_editable_list |
sale.order.form.editable.list | sale.order | xpath | Inherits sale.view_order_form |
view_order_line_tree |
sale.order.line.tree | sale.order.line | tree | 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.tree | sale.order | tree | New |
view_quotation_tree |
sale.order.tree | sale.order | tree | New |
view_quotation_tree_with_onboarding |
sale.order.tree | sale.order | xpath | 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 |
so_line
Many2one → sale.order.line
domain=<expr>
string='Sales Order Item'
args: 'sale.order.line'
create(self, values)
write(self, values)
comment
Text
default=_default_comment
partner_shipping_id
Many2one → res.partner
help='Delivery address for current invoice.'
readonly=True
states={'draft': [('readonly', False)]}
string='Delivery Address'
args: 'res.partner'
team_id
Many2one → crm.team
default=_get_default_team
oldname='section_id'
string='Sales Team'
args: 'crm.team'
action_invoice_open(self)
action_invoice_paid(self)
get_delivery_partner_id(self)
unlink(self)
sale_line_ids
Many2many → sale.order.line
copy=False
readonly=True
string='Sales Order Lines'
args: 'sale.order.line', 'sale_order_line_invoice_rel', 'invoice_line_id', 'order_line_id'
No public methods.
team_id
Many2one → crm.team
string='Sales Team'
args: 'crm.team'
No public methods.
dashboard_graph_model
Selection
selection_add=[('sale.report', 'Sales'), ('account.invoice.report', 'Invoices')]
invoiced
Integer
compute='_compute_invoiced'
help='Invoice revenue for the current month. This is the amount the sales channel has invoiced this month. It is used to compute the progression ratio of the current and target revenue on the kanban view.'
readonly=True
string='Invoiced This Month'
invoiced_target
Integer
help='Target of invoice revenue for the current month. This is the amount the sales channel estimates to be able to invoice this month.'
string='Invoicing Target'
quotations_amount
Integer
compute='_compute_quotations_to_invoice'
readonly=True
string='Amount of quotations to invoice'
quotations_count
Integer
compute='_compute_quotations_to_invoice'
readonly=True
string='Number of quotations to invoice'
sales_to_invoice_count
Integer
compute='_compute_sales_to_invoice'
readonly=True
string='Number of sales to invoice'
use_invoices
Boolean
help='Check this box to set an invoicing target for this Sales Team.'
args: 'Set Invoicing Target'
use_quotations
Boolean
help='Check this box if you send quotations to your customers rather than confirming orders straight away. This will add specific action buttons to your dashboard.'
string='Quotations'
action_primary_channel_button(self)
update_invoiced_target(self, value)
so_reference_type
Selection
default='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.
sale_order_ids
Many2many → sale.order
copy=False
readonly=True
string='Sales Orders'
args: 'sale.order', 'sale_order_transaction_rel', 'transaction_id', 'sale_order_id'
sale_order_ids_nbr
Integer
compute='_compute_sale_order_ids_nbr'
string='# of Sales Orders'
action_view_sales_orders(self)
render_sale_button(self, order, submit_txt=None, render_values=None)
type
Selection
default='radio'
required=True
args: [('radio', 'Radio'), ('select', 'Select'), ('color', 'Color')]
No public methods.
attribute_value_id
Many2one → product.attribute.value
string='Attribute'
args: 'product.attribute.value'
custom_value
Char
sale_order_line_id
Many2one → sale.order.line
string='Sale order line'
args: 'sale.order.line'
No public methods.
html_color
Char
help="Here you can set a\n specific HTML color index (e.g. #ff0000) to display the color if the\n attribute type is 'Color'."
oldname='color'
string='HTML Color Index'
is_custom
Boolean
help='Allow users to input custom values for this attribute value'
args: 'Is custom value'
No public methods.
discount_policy
Selection
default='with_discount'
args: [('with_discount', 'Discount included in the price'), ('without_discount', 'Show public price & discount to the customer')]
No public methods.
sales_count
Float
compute='_compute_sales_count'
string='Sold'
action_view_sales(self)
optional_product_ids
Many2many → product.template
help='Optional Products are suggested whenever the customer hits *Add to Cart* (cross-sell strategy, e.g. for computers: warranty, software, etc.).'
string='Optional Products'
args: 'product.template', 'product_optional_rel', 'src_id', 'dest_id'
No public methods.
expense_policy
Selection
default='no'
help='Expenses and vendor bills can be re-invoiced to a customer.With this option, a validated expense can be re-invoice to a customer at its cost or sales price.'
string='Re-Invoice Policy'
args: [('no', 'No'), ('cost', 'At cost'), ('sales_price', 'Sales price')]
hide_expense_policy
Boolean
compute='_compute_hide_expense_policy'
invoice_policy
Selection
default='order'
help='Ordered Quantity: Invoice quantities ordered by the customer.\nDelivered Quantity: Invoice quantities delivered to the customer.'
string='Invoicing Policy'
args: [('order', 'Ordered quantities'), ('delivery', 'Delivered quantities')]
sale_line_warn
Selection
default='no-message'
help=WARNING_HELP
required=True
args: WARNING_MESSAGE, 'Sales Order Line'
sale_line_warn_msg
Text
sales_count
Float
compute='_compute_sales_count'
string='Sold'
service_type
Selection
default='manual'
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.'
oldname='track_service'
string='Track Service'
args: [('manual', 'Manually set quantities on order')]
action_view_sales(self)
create_product_variant(self, product_template_attribute_value_ids)
get_import_templates(self)
html_color
Char
related='product_attribute_value_id.html_color'
args: 'HTML Color Index'
is_custom
Boolean
related='product_attribute_value_id.is_custom'
args: 'Is custom value'
No public methods.
analytic_account_id
Many2one → account.analytic.account
readonly=True
args: 'account.analytic.account', 'Analytic Account'
categ_id
Many2one → product.category
readonly=True
args: 'product.category', 'Product Category'
company_id
Many2one → res.company
readonly=True
args: 'res.company', 'Company'
country_id
Many2one → res.country
readonly=True
args: 'res.country', 'Partner Country'
date_order
Datetime
readonly=True
string='Date Order'
name
Char
readonly=True
args: 'Order Reference'
partner_id
Many2one → res.partner
readonly=True
args: 'res.partner', 'Partner'
price_subtotal
Float
readonly=True
string='Price Subtotal'
price_total
Float
readonly=True
args: 'Total'
pricelist_id
Many2one → product.pricelist
readonly=True
args: 'product.pricelist', 'Pricelist'
product_id
Many2one → product.product
readonly=True
string='Product'
args: 'product.product'
product_qty
Float
readonly=True
args: 'Product Quantity'
product_tmpl_id
Many2one → product.template
readonly=True
args: 'product.template', 'Product Template'
team_id
Many2one → crm.team
readonly=True
args: 'crm.team', 'Sales Team'
user_id
Many2one → res.users
readonly=True
args: 'res.users', 'Salesperson'
get_main_request(self)
init(self)
No new fields.
Public methods (0)No public methods.
portal_confirmation_pay
Boolean
string='Online Payment'
portal_confirmation_sign
Boolean
string='Online Signature'
quotation_validity_days
Integer
default=30
string='Default Quotation Validity (Days)'
sale_note
Text
string='Default Terms and Conditions'
translate=True
sale_onboarding_order_confirmation_state
Selection
default='not_done'
string='State of the onboarding confirmation order step'
args: [('not_done', 'Not done'), ('just_done', 'Just done'), ('done', 'Done')]
sale_onboarding_payment_method
Selection
string='Sale onboarding selected payment method'
args: [('digital_signature', 'Sign online'), ('paypal', 'PayPal'), ('stripe', 'Stripe'), ('other', 'Pay with another payment acquirer'), ('manual', 'Wire Transfer')]
sale_onboarding_sample_quotation_state
Selection
default='not_done'
string='State of the onboarding sample quotation step'
args: [('not_done', 'Not done'), ('just_done', 'Just done'), ('done', 'Done')]
sale_quotation_onboarding_state
Selection
default='not_done'
string='State of the sale onboarding panel'
args: [('not_done', 'Not done'), ('just_done', 'Just done'), ('done', 'Done'), ('closed', 'Closed')]
action_close_sale_quotation_onboarding(self)
action_open_sale_onboarding_payment_acquirer(self)
action_open_sale_onboarding_quotation_layout(self)
action_open_sale_onboarding_sample_quotation(self)
action_save_onboarding_quotation_layout(self)
get_and_update_sale_quotation_onboarding_state(self)
auth_signup_uninvited
Selection
config_parameter='auth_signup.invitation_scope'
default='b2b'
string='Customer Account'
args: [('b2b', 'On invitation'), ('b2c', 'Free sign up')]
auto_done_setting
Boolean
config_parameter='sale.auto_done_setting'
args: 'Lock Confirmed Sales'
automatic_invoice
Boolean
config_parameter='sale.automatic_invoice'
help='The invoice is generated automatically and available in the customer portal when the transaction is confirmed by the payment acquirer.\nThe invoice is marked as paid and the payment is registered in the payment journal defined in the configuration of the payment acquirer.\nThis mode is advised if you issue the final invoice at the order and not after the delivery.'
args: 'Automatic Invoice'
default_invoice_policy
Selection
default='order'
default_model='product.template'
args: [('order', 'Invoice what is ordered'), ('delivery', 'Invoice what is delivered')], 'Invoicing Policy'
deposit_default_product_id
Many2one → product.product
config_parameter='sale.default_deposit_product_id'
domain="[('type', '=', 'service')]"
help='Default product used for payment advances'
oldname='default_deposit_product_id'
args: 'product.product', 'Deposit Product'
group_discount_per_so_line
Boolean
implied_group='sale.group_discount_per_so_line'
args: 'Discounts'
group_proforma_sales
Boolean
help='Allows you to send pro-forma invoice.'
implied_group='sale.group_proforma_sales'
string='Pro-Forma Invoice'
group_sale_delivery_address
Boolean
implied_group='sale.group_delivery_invoice_address'
args: 'Customer Addresses'
group_sale_order_dates
Boolean
implied_group='sale.group_sale_order_dates'
args: 'Delivery Date'
group_warning_sale
Boolean
implied_group='sale.group_warning_sale'
args: 'Sale Order Warnings'
module_delivery
Boolean
module_delivery_bpost
Boolean
module_delivery_dhl
Boolean
module_delivery_easypost
Boolean
module_delivery_fedex
Boolean
module_delivery_ups
Boolean
module_delivery_usps
Boolean
module_product_email_template
Boolean
module_sale_coupon
Boolean
module_sale_margin
Boolean
module_website_sale_digital
Boolean
multi_sales_price
Boolean
multi_sales_price_method
Selection
default='percentage'
string='Pricelists Method'
args: [('percentage', 'Multiple prices per product (e.g. customer segments, currencies)'), ('formula', 'Prices computed from formulas (discounts, margins, roundings)')]
portal_confirmation_pay
Boolean
readonly=False
related='company_id.portal_confirmation_pay'
string='Online Payment'
portal_confirmation_sign
Boolean
readonly=False
related='company_id.portal_confirmation_sign'
string='Online Signature'
quotation_validity_days
Integer
readonly=False
related='company_id.quotation_validity_days'
string='Default Quotation Validity (Days)'
sale_note
Text
readonly=False
related='company_id.sale_note'
string='Terms & Conditions'
sale_pricelist_setting
Selection
config_parameter='sale.sale_pricelist_setting'
string='Pricelists'
args: [('fixed', 'A single sales price per product'), ('percentage', 'Multiple prices per product (e.g. customer segments, currencies)'), ('formula', 'Price computed from formulas (discounts, margins, roundings)')]
template_id
Many2one → mail.template
config_parameter='sale.default_email_template'
default=<expr>
domain="[('model', '=', 'account.invoice')]"
args: 'mail.template', 'Email Template'
use_quotation_validity_days
Boolean
config_parameter='sale.use_quotation_validity_days'
args: 'Default Quotation Validity'
use_sale_note
Boolean
config_parameter='sale.use_sale_note'
oldname='default_use_sale_note'
string='Default Terms & Conditions'
get_values(self)
sale_pricelist_setting_sync(self, pos_pricelist_setting)
set_values(self)
sale_order_count
Integer
compute='_compute_sale_order_count'
string='Sale Order Count'
sale_order_ids
One2many → sale.order
sale_warn
Selection
default='no-message'
help=WARNING_HELP
args: WARNING_MESSAGE, 'Sales Warnings'
sale_warn_msg
Text
can_edit_vat(self)
advance_payment_method
Selection
default=_get_advance_payment_method
required=True
string='What do you want to invoice?'
args: [('delivered', 'Invoiceable lines'), ('all', 'Invoiceable lines (deduct down payments)'), ('percentage', 'Down payment (percentage)'), ('fixed', 'Down payment (fixed amount)')]
amount
Float
digits=dp.get_precision('Account')
help='The amount to be invoiced in advance, taxes excluded.'
args: 'Down Payment Amount'
count
Integer
default=_count
string='Order Count'
deposit_account_id
Many2one → account.account
default=_default_deposit_account_id
domain=[('deprecated', '=', False)]
help='Account used for deposits'
string='Income Account'
args: 'account.account'
deposit_taxes_id
Many2many → account.tax
default=_default_deposit_taxes_id
help='Taxes used for deposits'
string='Customer Taxes'
args: 'account.tax'
product_id
Many2one → product.product
default=_default_product_id
domain=[('type', '=', 'service')]
string='Down Payment Product'
args: 'product.product'
create_invoices(self)
onchange_advance_payment_method(self)
amount_by_group
Binary
compute='_amount_by_group'
help='type: [(name, amount, base, formated amount, formated base)]'
string='Tax amount by group'
amount_tax
Monetary
compute='_amount_all'
readonly=True
store=True
string='Taxes'
amount_total
Monetary
compute='_amount_all'
readonly=True
store=True
string='Total'
track_sequence=6
track_visibility='always'
amount_undiscounted
Float
compute='_compute_amount_undiscounted'
digits=0
args: 'Amount Before Discount'
amount_untaxed
Monetary
compute='_amount_all'
readonly=True
store=True
string='Untaxed Amount'
track_sequence=5
track_visibility='onchange'
analytic_account_id
Many2one → account.analytic.account
copy=False
help='The analytic account related to a sales order.'
oldname='project_id'
readonly=True
states={'draft': [('readonly', False)], 'sent': [('readonly', False)]}
args: 'account.analytic.account', 'Analytic Account'
authorized_transaction_ids
Many2many → payment.transaction
compute='_compute_authorized_transaction_ids'
copy=False
readonly=True
string='Authorized Transactions'
args: 'payment.transaction'
client_order_ref
Char
copy=False
string='Customer Reference'
commitment_date
Datetime
copy=False
help='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.'
oldname='requested_date'
readonly=True
states={'draft': [('readonly', False)], 'sent': [('readonly', False)]}
args: 'Commitment Date'
company_id
Many2one → res.company
default=<expr>
args: 'res.company', 'Company'
confirmation_date
Datetime
copy=False
help='Date on which the sales order is confirmed.'
index=True
oldname='date_confirm'
readonly=True
string='Confirmation Date'
create_date
Datetime
help='Date on which sales order is created.'
index=True
readonly=True
string='Creation Date'
currency_id
Many2one → res.currency
readonly=True
related='pricelist_id.currency_id'
required=True
string='Currency'
args: 'res.currency'
currency_rate
Float
compute='_compute_currency_rate'
compute_sudo=True
digits=(12, 6)
help='The rate of the currency to the currency of rate 1 applicable at the date of the order'
readonly=True
store=True
args: 'Currency Rate'
date_order
Datetime
copy=False
default=fields.Datetime.now
index=True
readonly=True
required=True
states={'draft': [('readonly', False)], 'sent': [('readonly', False)]}
string='Order Date'
expected_date
Datetime
compute='_compute_expected_date'
help='Delivery date you can promise to the customer, computed from product lead times and from the shipping policy of the order.'
oldname='commitment_date'
store=False
args: 'Expected Date'
fiscal_position_id
Many2one → account.fiscal.position
oldname='fiscal_position'
string='Fiscal Position'
args: 'account.fiscal.position'
invoice_count
Integer
compute='_get_invoiced'
readonly=True
string='Invoice Count'
invoice_ids
Many2many → account.invoice
compute='_get_invoiced'
copy=False
readonly=True
search='_search_invoice_ids'
string='Invoices'
args: 'account.invoice'
invoice_status
Selection
compute='_get_invoiced'
readonly=True
store=True
string='Invoice Status'
args: [('upselling', 'Upselling Opportunity'), ('invoiced', 'Fully Invoiced'), ('to invoice', 'To Invoice'), ('no', 'Nothing to Invoice')]
is_expired
Boolean
compute='_compute_is_expired'
string='Is expired'
name
Char
copy=False
default=<expr>
index=True
readonly=True
required=True
states={'draft': [('readonly', False)]}
string='Order Reference'
note
Text
default=_default_note
args: 'Terms and conditions'
order_line
One2many → sale.order.line
auto_join=True
copy=True
states={'cancel': [('readonly', True)], 'done': [('readonly', True)]}
string='Order Lines'
args: 'sale.order.line', 'order_id'
origin
Char
help='Reference of the document that generated this sales order request.'
string='Source Document'
partner_id
Many2one → res.partner
change_default=True
help='You can find a customer by its Name, TIN, Email or Internal Reference.'
index=True
readonly=True
required=True
states={'draft': [('readonly', False)], 'sent': [('readonly', False)]}
string='Customer'
track_sequence=1
track_visibility='always'
args: 'res.partner'
partner_invoice_id
Many2one → res.partner
help='Invoice address for current sales order.'
readonly=True
required=True
states={'draft': [('readonly', False)], 'sent': [('readonly', False)], 'sale': [('readonly', False)]}
string='Invoice Address'
args: 'res.partner'
partner_shipping_id
Many2one → res.partner
help='Delivery address for current sales order.'
readonly=True
required=True
states={'draft': [('readonly', False)], 'sent': [('readonly', False)], 'sale': [('readonly', False)]}
string='Delivery Address'
args: 'res.partner'
payment_term_id
Many2one → account.payment.term
oldname='payment_term'
string='Payment Terms'
args: 'account.payment.term'
pricelist_id
Many2one → product.pricelist
help='Pricelist for current sales order.'
readonly=True
required=True
states={'draft': [('readonly', False)], 'sent': [('readonly', False)]}
string='Pricelist'
args: 'product.pricelist'
reference
Char
copy=False
help='The payment communication of this sale order.'
string='Payment Ref.'
remaining_validity_days
Integer
compute='_compute_remaining_validity_days'
string='Remaining Validity Days'
require_payment
Boolean
default=_get_default_require_payment
help='Request an online payment to the customer in order to confirm orders automatically.'
readonly=True
states={'draft': [('readonly', False)], 'sent': [('readonly', False)]}
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.'
readonly=True
states={'draft': [('readonly', False)], 'sent': [('readonly', False)]}
args: 'Online Signature'
signature
Binary
attachment=True
copy=False
help='Signature received through the portal.'
args: 'Signature'
signed_by
Char
copy=False
help='Name of the person that signed the SO.'
args: 'Signed by'
state
Selection
copy=False
default='draft'
index=True
readonly=True
string='Status'
track_sequence=3
track_visibility='onchange'
args: [('draft', 'Quotation'), ('sent', 'Quotation Sent'), ('sale', 'Sales Order'), ('done', 'Locked'), ('cancel', 'Cancelled')]
team_id
Many2one → crm.team
change_default=True
default=_get_default_team
oldname='section_id'
args: 'crm.team', 'Sales Team'
transaction_ids
Many2many → payment.transaction
copy=False
readonly=True
string='Transactions'
args: 'payment.transaction', 'sale_order_transaction_rel', 'sale_order_id', 'transaction_id'
type_name
Char
compute='_compute_type_name'
args: 'Type Name'
user_id
Many2one → res.users
default=<expr>
index=True
string='Salesperson'
track_sequence=2
track_visibility='onchange'
args: 'res.users'
validity_date
Date
copy=False
default=_default_validity_date
help="Validity date of the quotation, after this date, the customer won't be able to validate the quotation online."
readonly=True
states={'draft': [('readonly', False)], 'sent': [('readonly', False)]}
string='Validity'
action_cancel(self)
action_confirm(self)
action_done(self)
action_draft(self)
action_invoice_create(self, grouped=False, final=False)
action_quotation_send(self)
action_unlock(self)
action_view_invoice(self)
add_option_to_order_with_taxcloud(self)
copy_data(self, default=None)
create(self, vals)
force_quotation_send(self)
get_empty_list_help(self, help)
get_portal_last_transaction(self)
has_to_be_paid(self, also_in_draft=False)
has_to_be_signed(self, also_in_draft=False)
message_post(self, **kwargs)
name_get(self)
onchange_partner_id(self)
onchange_partner_id_warning(self)
onchange_partner_shipping_id(self)
payment_action_capture(self)
payment_action_void(self)
preview_sale_order(self)
print_quotation(self)
unlink(self)
analytic_line_ids
One2many → account.analytic.line
string='Analytic lines'
args: 'account.analytic.line', 'so_line'
analytic_tag_ids
Many2many → account.analytic.tag
string='Analytic Tags'
args: 'account.analytic.tag'
company_id
Many2one
readonly=True
related='order_id.company_id'
store=True
string='Company'
currency_id
Many2one
depends=['order_id.currency_id']
readonly=True
related='order_id.currency_id'
store=True
string='Currency'
customer_lead
Float
default=0.0
help='Number of days between the order confirmation and the shipping of the products to the customer'
oldname='delay'
required=True
args: 'Delivery Lead Time'
discount
Float
default=0.0
digits=dp.get_precision('Discount')
string='Discount (%)'
display_type
Selection
default=False
help='Technical field for UX purpose.'
args: [('line_section', 'Section'), ('line_note', 'Note')]
invoice_lines
Many2many → account.invoice.line
copy=False
string='Invoice Lines'
args: 'account.invoice.line', 'sale_order_line_invoice_rel', 'order_line_id', 'invoice_line_id'
invoice_status
Selection
compute='_compute_invoice_status'
default='no'
readonly=True
store=True
string='Invoice Status'
args: [('upselling', 'Upselling Opportunity'), ('invoiced', 'Fully Invoiced'), ('to invoice', 'To Invoice'), ('no', 'Nothing to Invoice')]
is_downpayment
Boolean
help='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_expense
Boolean
help='Is true if the sales order line comes from an expense or a vendor bills'
args: 'Is expense'
name
Text
required=True
string='Description'
order_id
Many2one → sale.order
copy=False
index=True
ondelete='cascade'
required=True
string='Order Reference'
args: 'sale.order'
order_partner_id
Many2one
readonly=False
related='order_id.partner_id'
store=True
string='Customer'
price_reduce
Float
compute='_get_price_reduce'
digits=dp.get_precision('Product Price')
readonly=True
store=True
string='Price Reduce'
price_reduce_taxexcl
Monetary
compute='_get_price_reduce_notax'
readonly=True
store=True
string='Price Reduce Tax excl'
price_reduce_taxinc
Monetary
compute='_get_price_reduce_tax'
readonly=True
store=True
string='Price Reduce Tax inc'
price_subtotal
Monetary
compute='_compute_amount'
readonly=True
store=True
string='Subtotal'
price_tax
Float
compute='_compute_amount'
readonly=True
store=True
string='Total Tax'
price_total
Monetary
compute='_compute_amount'
readonly=True
store=True
string='Total'
price_unit
Float
default=0.0
digits=dp.get_precision('Product Price')
required=True
args: 'Unit Price'
product_custom_attribute_value_ids
One2many → product.attribute.custom.value
copy=True
string='User entered custom product attribute values'
args: 'product.attribute.custom.value', 'sale_order_line_id'
product_id
Many2one → product.product
change_default=True
domain=[('sale_ok', '=', True)]
ondelete='restrict'
string='Product'
args: 'product.product'
product_image
Binary
readonly=False
related='product_id.image'
store=False
args: 'Product Image'
product_no_variant_attribute_value_ids
Many2many → product.template.attribute.value
string='Product attribute values that do not create variants'
args: 'product.template.attribute.value'
product_uom
Many2one → uom.uom
string='Unit of Measure'
args: 'uom.uom'
product_uom_qty
Float
default=1.0
digits=dp.get_precision('Product Unit of Measure')
required=True
string='Ordered Quantity'
product_updatable
Boolean
compute='_compute_product_updatable'
default=True
readonly=True
string='Can Edit Product'
qty_delivered
Float
compute='_compute_qty_delivered'
compute_sudo=True
copy=False
default=0.0
digits=dp.get_precision('Product Unit of Measure')
inverse='_inverse_qty_delivered'
store=True
args: 'Delivered Quantity'
qty_delivered_manual
Float
copy=False
default=0.0
digits=dp.get_precision('Product Unit of Measure')
args: 'Delivered Manually'
qty_delivered_method
Selection
compute='_compute_qty_delivered_method'
compute_sudo=True
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 sale line\n - Stock Moves: the quantity comes from confirmed pickings\n'
readonly=True
store=True
string='Method to update delivered qty'
args: [('manual', 'Manual'), ('analytic', 'Analytic From Expenses')]
qty_invoiced
Float
compute='_get_invoice_qty'
compute_sudo=True
digits=dp.get_precision('Product Unit of Measure')
readonly=True
store=True
string='Invoiced Quantity'
qty_to_invoice
Float
compute='_get_to_invoice_qty'
digits=dp.get_precision('Product Unit of Measure')
readonly=True
store=True
string='To Invoice Quantity'
salesman_id
Many2one
readonly=True
related='order_id.user_id'
store=True
string='Salesperson'
sequence
Integer
default=10
string='Sequence'
state
Selection
copy=False
default='draft'
readonly=True
related='order_id.state'
store=True
string='Order Status'
args: [('draft', 'Quotation'), ('sent', 'Quotation Sent'), ('sale', 'Sales Order'), ('done', 'Done'), ('cancel', 'Cancelled')]
tax_id
Many2many → account.tax
domain=['|', ('active', '=', False), ('active', '=', True)]
string='Taxes'
args: 'account.tax'
untaxed_amount_invoiced
Monetary
compute='_compute_untaxed_amount_invoiced'
compute_sudo=True
store=True
args: 'Untaxed Invoiced Amount'
untaxed_amount_to_invoice
Monetary
compute='_compute_untaxed_amount_to_invoice'
compute_sudo=True
store=True
args: 'Untaxed Amount To Invoice'
create(self, vals_list)
get_sale_order_line_multiline_description_sale(self, product)
invoice_line_create(self, invoice_id, qty)
invoice_line_create_vals(self, invoice_id, qty)
name_get(self)
product_id_change(self)
product_uom_change(self)
unlink(self)
write(self, values)
payment_method
Selection
default=_get_default_payment_method
args: [('digital_signature', 'Sign online'), ('paypal', 'Pay with PayPal'), ('stripe', 'Pay with credit card (via Stripe)'), ('other', 'Pay with another payment acquirer'), ('manual', 'Custom payment instructions')]
add_payment_methods(self, *args, **kwargs)
pricelist_id
Many2one → product.pricelist
readonly=True
args: 'product.pricelist', 'Pricelist'
product_template_id
Many2one → product.template
domain=[('sale_ok', '=', True), '|', ('attribute_line_ids.value_ids', '!=', False), ('optional_product_ids', '!=', False)]
required=True
string='Product'
args: 'product.template'
No public methods.
analytic_account_id
Many2one → account.analytic.account
readonly=True
args: 'account.analytic.account', 'Analytic Account'
categ_id
Many2one → product.category
readonly=True
args: 'product.category', 'Product Category'
commercial_partner_id
Many2one → res.partner
readonly=True
args: 'res.partner', 'Customer Entity'
company_id
Many2one → res.company
readonly=True
args: 'res.company', 'Company'
confirmation_date
Datetime
readonly=True
args: 'Confirmation Date'
country_id
Many2one → res.country
readonly=True
args: 'res.country', 'Customer Country'
date
Datetime
readonly=True
args: 'Order Date'
discount
Float
readonly=True
args: 'Discount %'
discount_amount
Float
readonly=True
args: 'Discount Amount'
name
Char
readonly=True
args: 'Order Reference'
nbr
Integer
readonly=True
args: '# of Lines'
order_id
Many2one → sale.order
readonly=True
args: 'sale.order', 'Order #'
partner_id
Many2one → res.partner
readonly=True
args: 'res.partner', 'Customer'
price_subtotal
Float
readonly=True
args: 'Untaxed Total'
price_total
Float
readonly=True
args: 'Total'
pricelist_id
Many2one → product.pricelist
readonly=True
args: 'product.pricelist', 'Pricelist'
product_id
Many2one → product.product
readonly=True
args: 'product.product', 'Product Variant'
product_tmpl_id
Many2one → product.template
readonly=True
args: 'product.template', 'Product'
product_uom
Many2one → uom.uom
readonly=True
args: 'uom.uom', 'Unit of Measure'
product_uom_qty
Float
readonly=True
args: 'Qty Ordered'
qty_delivered
Float
readonly=True
args: 'Qty Delivered'
qty_invoiced
Float
readonly=True
args: 'Qty Invoiced'
qty_to_invoice
Float
readonly=True
args: 'Qty To Invoice'
state
Selection
readonly=True
string='Status'
args: [('draft', 'Draft Quotation'), ('sent', 'Quotation Sent'), ('sale', 'Sales Order'), ('done', 'Sales Done'), ('cancel', 'Cancelled')]
team_id
Many2one → crm.team
oldname='section_id'
readonly=True
args: 'crm.team', 'Sales Team'
untaxed_amount_invoiced
Float
readonly=True
args: 'Untaxed Amount Invoiced'
untaxed_amount_to_invoice
Float
readonly=True
args: 'Untaxed Amount To Invoice'
user_id
Many2one → res.users
readonly=True
args: 'res.users', 'Salesperson'
volume
Float
readonly=True
args: 'Volume'
weight
Float
readonly=True
args: 'Gross Weight'
init(self)
| REPOSITORY | |
|---|---|
| REPOSITORY | odoo/odoo |
| GIT | |
| GIT | https://github.com/odoo/odoo.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/odoo/odoo/tree/11.0/sale |
| VERSION | |
| VERSION | 1.1 |
| CATEGORY | |
| CATEGORY | Sales |
| LICENSE | |
| LICENSE | LGPL-3 |
| APPLICATION | |
| APPLICATION | No |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | |
| MAINTAINERS | |
| MAINTAINERS | |
| COMMITTERS | |
| COMMITTERS | Raphael Collet, Odoo Translation Bot, Martin Trigaux, Fabien Pinckaers, Olivier Dony, Thibault Delavallée, Christophe Simonis, Xavier Morel, Goffin Simon, Simon Lejeune, Nicolas Martinelli, Nhomar Hernandez, Nicolas Lempereur, Jérome Maes, Richard Mathot, qdp-odoo, Géry Debongnie, Aaron Bohy, ged-odoo, Jeremy Kersten, GitHub, Lucas Perais (lpe), Damien Bouvy, Olivier Colson, Yannick Tivisse, qsm-odoo, Martin Geubelle, Odoo Online, Nicolas Seinlet, Pierre Masereel, Laurent Smet, Denis Vermylen (dve), DVE, jem-odoo, fwi-odoo, Adrien Dieudonne, len-odoo, Jorge Pinna Puissant, Nans Lefebvre, Denis Vermylen, Lucas Perais, amoyaux, fda-odoo, Adrian Torres, Rémi Rahir, Carlos Dauden, rar-odoo, Victor Feyens, Enric Tobella, david, Jose Suniaga [Vauxoo] |
| WEBSITE | |
| WEBSITE | |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-05 23:53:43 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
odoo/odoo: - sales_team - base - base_setup - web - bus - web_tour - account - product - decimal_precision - analytic - web_planner - portal - http_routing |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES | Not have |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION |
This module contains all the common features of Sales Management and eCommerce.
|
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
account_invoice_form |
Account Invoice | account.invoice | data | Inherits account.invoice_form |
account_invoice_groupby_inherit |
account.invoice.groupby | account.invoice | xpath | Inherits account.view_account_invoice_filter |
account_invoice_line_form |
account.invoice.line.form | account.invoice.line | data | Inherits account.view_invoice_line_form |
account_invoice_line_tree |
account.invoice.line.tree | account.invoice.line | data | Inherits account.view_invoice_line_tree |
account_invoice_supplier_form |
account.invoice.supplier.form | account.invoice | data | Inherits account.invoice_supplier_form |
assets_backend |
Sale backend assets | ir.ui.view | qweb | Inherits sales_team.assets_backend |
assets_frontend |
Sale frontend assets | ir.ui.view | qweb | Inherits web.assets_frontend |
crm_lead_partner_kanban_view |
res.partner.kanban.saleorder.inherit | res.partner | field | Inherits base.res_partner_kanban_view |
crm_team_salesteams_view_form |
crm.team.form | crm.team | xpath | Inherits sales_team.crm_team_view_form |
crm_team_salesteams_view_kanban |
crm.team.kanban | crm.team | data | Inherits sales_team.crm_team_salesteams_view_kanban |
invoice_form_inherit_sale |
account.invoice.form.inherit.sale | account.invoice | xpath | Inherits account.invoice_form |
portal_my_home_menu_sale |
Portal layout : sales menu entries | ir.ui.view | qweb | Inherits portal.portal_layout |
portal_my_home_sale |
Portal My Home : sales entries | ir.ui.view | qweb | Inherits portal.portal_my_home |
portal_my_orders |
My Sales Orders | ir.ui.view | qweb | New |
portal_my_quotations |
My Quotations | ir.ui.view | qweb | New |
portal_order_error |
Order error/warning display | ir.ui.view | qweb | New |
portal_order_page |
Sales Order | ir.ui.view | qweb | New |
portal_order_success |
Order success display | ir.ui.view | qweb | New |
product_form_view_sale_order_button |
product.product.sale.order | product.product | button | Inherits product.product_normal_form_view |
product_pricelist_view_form |
product.pricelist.form.inherit.product | product.pricelist | field | Inherits product.product_pricelist_view |
product_pricelist_view_kanban |
product.pricelist.kanban.inherit.product | product.pricelist | data | Inherits product.product_pricelist_view_kanban |
product_pricelist_view_tree |
product.pricelist.tree.inherit.product | product.pricelist | field | Inherits product.product_pricelist_view_tree |
product_template_form_view_invoice_policy |
product.template.invoice.policy | product.template | group | Inherits product.product_template_form_view |
product_template_form_view_sale_order_button |
product.template.sale.order.button | product.template | button | Inherits product.product_template_only_form_view |
qunit_suite |
sales_team_dashboard_tests | ir.ui.view | qweb | Inherits web.qunit_suite |
report_all_channels_sales_view_pivot |
report.all.channels.sales.pivot | report.all.channels.sales | pivot | New |
report_all_channels_sales_view_search |
report.all.channels.sales.search | report.all.channels.sales | search | New |
report_configuration_form_view |
report.configuration.form.view | sale.layout_category | form | New |
report_configuration_search_view |
report.configuration.search.view | sale.layout_category | search | New |
report_configuration_tree_view |
report.configuration.form.view | sale.layout_category | tree | New |
report_invoice_document_inherit_sale |
report_invoice_document_inherit_sale | ir.ui.view | qweb | Inherits account.report_invoice_document |
report_invoice_layouted |
report_invoice_layouted | ir.ui.view | qweb | Inherits account.report_invoice_document |
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 |
res_config_settings_view_form |
res.config.settings.view.form.inherit.sale | res.config.settings | xpath | Inherits base.res_config_settings_view_form |
res_partner_view_buttons |
res.partner.view.buttons | res.partner | button | Inherits base.view_partner_form |
sale_order_view_search_inherit_quotation |
sale.order.search.inherit.quotation | sale.order | xpath | Inherits sale.view_sales_order_filter |
sale_order_view_search_inherit_sale |
sale.order.search.inherit.sale | sale.order | xpath | Inherits sale.view_sales_order_filter |
view_account_invoice_report_search_inherit |
account.invoice.report.search.inherit | account.invoice.report | xpath | Inherits account.view_account_invoice_report_search |
view_order_form |
sale.order.form | sale.order | form | New |
view_order_form_editable_list |
sale.order.form.editable.list | sale.order | xpath | Inherits sale.view_order_form |
view_order_line_tree |
sale.order.line.tree | sale.order.line | tree | 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.tree | sale.order | tree | New |
view_quotation_tree |
sale.order.tree | sale.order | tree | New |
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 |
so_line
Many2one → sale.order.line
string='Sales Order Line'
args: 'sale.order.line'
create(self, values)
unlink(self)
write(self, values)
comment
Text
default=_default_comment
partner_shipping_id
Many2one → res.partner
help='Delivery address for current invoice.'
readonly=True
states={'draft': [('readonly', False)]}
string='Delivery Address'
args: 'res.partner'
team_id
Many2one → crm.team
default=_get_default_team
oldname='section_id'
string='Sales Channel'
args: 'crm.team'
action_invoice_paid(self)
get_delivery_partner_id(self)
order_lines_layouted(self)
layout_category_id
Many2one → sale.layout_category
string='Section'
args: 'sale.layout_category'
layout_category_sequence
Integer
string='Layout Sequence'
sale_line_ids
Many2many → sale.order.line
copy=False
readonly=True
string='Sales Order Lines'
args: 'sale.order.line', 'sale_order_line_invoice_rel', 'invoice_line_id', 'order_line_id'
No public methods.
team_id
Many2one → crm.team
string='Sales Channel'
args: 'crm.team'
No public methods.
dashboard_graph_model
Selection
selection_add=[('sale.report', 'Sales'), ('account.invoice.report', 'Invoices')]
invoiced
Integer
compute='_compute_invoiced'
help='Invoice revenue for the current month. This is the amount the sales channel has invoiced this month. It is used to compute the progression ratio of the current and target revenue on the kanban view.'
readonly=True
string='Invoiced This Month'
invoiced_target
Integer
help='Target of invoice revenue for the current month. This is the amount the sales channel estimates to be able to invoice this month.'
string='Invoicing Target'
quotations_amount
Integer
compute='_compute_quotations_to_invoice'
readonly=True
string='Amount of quotations to invoice'
quotations_count
Integer
compute='_compute_quotations_to_invoice'
readonly=True
string='Number of quotations to invoice'
sales_to_invoice_count
Integer
compute='_compute_sales_to_invoice'
readonly=True
string='Number of sales to invoice'
use_invoices
Boolean
help='Check this box to set an invoicing target for this sales channel.'
args: 'Set Invoicing Target'
use_quotations
Boolean
help='Check this box if you send quotations to your customers rather than confirming orders straight away. This will add specific action buttons to your dashboard.'
string='Quotations'
action_primary_channel_button(self)
update_invoiced_target(self, value)
No new fields.
Public methods (1)unlink(self)
No new fields.
Public methods (1)send_mail(self, auto_commit=False)
discount_policy
Selection
default='with_discount'
args: [('with_discount', 'Discount included in the price'), ('without_discount', 'Show public price & discount to the customer')]
No public methods.
sales_count
Integer
compute='_sales_count'
string='# Sales'
No public methods.
expense_policy
Selection
default='no'
string='Re-Invoice Expenses'
args: [('no', 'No'), ('cost', 'At cost'), ('sales_price', 'Sales price')]
invoice_policy
Selection
default='order'
help='Ordered Quantity: Invoice based on the quantity the customer ordered.\nDelivered Quantity: Invoiced based on the quantity the vendor delivered (time or deliveries).'
string='Invoicing Policy'
args: [('order', 'Ordered quantities'), ('delivery', 'Delivered quantities')]
sale_line_warn
Selection
default='no-message'
help=WARNING_HELP
required=True
args: WARNING_MESSAGE, 'Sales Order Line'
sale_line_warn_msg
Text
sales_count
Integer
compute='_sales_count'
string='# Sales'
service_type
Selection
default='manual'
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.'
oldname='track_service'
string='Track Service'
args: [('manual', 'Manually set quantities on order')]
action_view_sales(self)
analytic_account_id
Many2one → account.analytic.account
readonly=True
args: 'account.analytic.account', 'Analytic Account'
categ_id
Many2one → product.category
readonly=True
args: 'product.category', 'Product Category'
company_id
Many2one → res.company
readonly=True
args: 'res.company', 'Company'
country_id
Many2one → res.country
readonly=True
args: 'res.country', 'Partner Country'
date_order
Datetime
readonly=True
string='Date Order'
name
Char
readonly=True
args: 'Order Reference'
partner_id
Many2one → res.partner
readonly=True
args: 'res.partner', 'Partner'
price_subtotal
Float
readonly=True
string='Price Subtotal'
price_total
Float
readonly=True
args: 'Total'
pricelist_id
Many2one → product.pricelist
readonly=True
args: 'product.pricelist', 'Pricelist'
product_id
Many2one → product.product
readonly=True
string='Product'
args: 'product.product'
product_qty
Float
readonly=True
args: 'Product Quantity'
product_tmpl_id
Many2one → product.template
readonly=True
args: 'product.template', 'Product Template'
team_id
Many2one → crm.team
readonly=True
args: 'crm.team', 'Sales Channel'
user_id
Many2one → res.users
readonly=True
args: 'res.users', 'Salesperson'
get_main_request(self)
init(self)
No new fields.
Public methods (1)get_report_values(self, docids, data=None)
sale_note
Text
string='Default Terms and Conditions'
translate=True
No public methods.
auth_signup_uninvited
Selection
string='Customer Account'
args: [('b2b', 'On invitation (B2B)'), ('b2c', 'Free sign up (B2C)')]
auto_done_setting
Boolean
default_deposit_product_id
Many2one → product.product
domain="[('type', '=', 'service')]"
help='Default product used for payment advances'
oldname='deposit_product_id_setting'
args: 'product.product', 'Deposit Product'
default_invoice_policy
Selection
default='order'
default_model='product.template'
args: [('order', 'Invoice what is ordered'), ('delivery', 'Invoice what is delivered')], 'Invoicing Policy'
group_discount_per_so_line
Boolean
implied_group='sale.group_discount_per_so_line'
args: 'Discounts'
group_proforma_sales
Boolean
help='Allows you to send pro-forma invoice.'
implied_group='sale.group_proforma_sales'
string='Pro-Forma Invoice'
group_sale_delivery_address
Boolean
implied_group='sale.group_delivery_invoice_address'
args: 'Customer Addresses'
group_sale_layout
Boolean
implied_group='sale.group_sale_layout'
args: 'Sections on Sales Orders'
group_show_price_subtotal
Boolean
group='base.group_portal,base.group_user,base.group_public'
implied_group='sale.group_show_price_subtotal'
args: 'Show subtotal'
group_show_price_total
Boolean
group='base.group_portal,base.group_user,base.group_public'
implied_group='sale.group_show_price_total'
args: 'Show total'
group_warning_sale
Boolean
implied_group='sale.group_warning_sale'
args: 'Warnings'
module_delivery
Boolean
module_delivery_bpost
Boolean
module_delivery_dhl
Boolean
module_delivery_fedex
Boolean
module_delivery_ups
Boolean
module_delivery_usps
Boolean
module_product_email_template
Boolean
module_sale_coupon
Boolean
module_sale_margin
Boolean
module_sale_payment
Boolean
help='Technical field implied by user choice of online_confirmation'
args: 'Online Signature & Payment'
module_website_quote
Boolean
module_website_sale_digital
Boolean
multi_sales_price
Boolean
multi_sales_price_method
Selection
default='percentage'
string='Pricelists'
args: [('percentage', 'Multiple prices per product (e.g. customer segments, currencies)'), ('formula', 'Prices computed from formulas (discounts, margins, roundings)')]
portal_confirmation
Boolean
portal_confirmation_options
Selection
string='Online Signature & Payment options'
args: [('sign', 'Signature'), ('pay', 'Payment')]
sale_note
Text
related='company_id.sale_note'
string='Terms & Conditions'
sale_pricelist_setting
Selection
string='Pricelists'
args: [('fixed', 'A single sales price per product'), ('percentage', 'Multiple prices per product (e.g. customer segments, currencies)'), ('formula', 'Price computed from formulas (discounts, margins, roundings)')]
sale_show_tax
Selection
default='subtotal'
required=True
string='Tax Display'
args: [('subtotal', 'Tax-Excluded Prices'), ('total', 'Tax-Included Prices')]
use_sale_note
Boolean
oldname='default_use_sale_note'
string='Default Terms & Conditions'
get_values(self)
set_values(self)
sale_order_count
Integer
compute='_compute_sale_order_count'
string='# of Sales Order'
sale_order_ids
One2many → sale.order
sale_warn
Selection
default='no-message'
help=WARNING_HELP
required=True
args: WARNING_MESSAGE, 'Sales Order'
sale_warn_msg
Text
No public methods.
advance_payment_method
Selection
default=_get_advance_payment_method
required=True
string='What do you want to invoice?'
args: [('delivered', 'Invoiceable lines'), ('all', 'Invoiceable lines (deduct down payments)'), ('percentage', 'Down payment (percentage)'), ('fixed', 'Down payment (fixed amount)')]
amount
Float
digits=dp.get_precision('Account')
help='The amount to be invoiced in advance, taxes excluded.'
args: 'Down Payment Amount'
count
Integer
default=_count
string='# of Orders'
deposit_account_id
Many2one → account.account
default=_default_deposit_account_id
domain=[('deprecated', '=', False)]
help='Account used for deposits'
string='Income Account'
args: 'account.account'
deposit_taxes_id
Many2many → account.tax
default=_default_deposit_taxes_id
help='Taxes used for deposits'
string='Customer Taxes'
args: 'account.tax'
product_id
Many2one → product.product
default=_default_product_id
domain=[('type', '=', 'service')]
string='Down Payment Product'
args: 'product.product'
create_invoices(self)
onchange_advance_payment_method(self)
name
Char
required=True
translate=True
args: 'Name'
pagebreak
Boolean
sequence
Integer
default=10
required=True
args: 'Sequence'
subtotal
Boolean
default=True
args: 'Add subtotal'
No public methods.
access_token
Char
copy=False
default=_get_default_access_token
args: 'Security Token'
amount_tax
Monetary
compute='_amount_all'
readonly=True
store=True
string='Taxes'
amount_total
Monetary
compute='_amount_all'
readonly=True
store=True
string='Total'
track_visibility='always'
amount_untaxed
Monetary
compute='_amount_all'
readonly=True
store=True
string='Untaxed Amount'
track_visibility='onchange'
analytic_account_id
Many2one → account.analytic.account
copy=False
help='The analytic account related to a sales order.'
oldname='project_id'
readonly=True
states={'draft': [('readonly', False)], 'sent': [('readonly', False)]}
args: 'account.analytic.account', 'Analytic Account'
client_order_ref
Char
copy=False
string='Customer Reference'
company_id
Many2one → res.company
default=<expr>
args: 'res.company', 'Company'
confirmation_date
Datetime
copy=False
help='Date on which the sales order is confirmed.'
index=True
oldname='date_confirm'
readonly=True
string='Confirmation Date'
create_date
Datetime
help='Date on which sales order is created.'
index=True
readonly=True
string='Creation Date'
currency_id
Many2one → res.currency
readonly=True
related='pricelist_id.currency_id'
required=True
string='Currency'
args: 'res.currency'
date_order
Datetime
copy=False
default=fields.Datetime.now
index=True
readonly=True
required=True
states={'draft': [('readonly', False)], 'sent': [('readonly', False)]}
string='Order Date'
fiscal_position_id
Many2one → account.fiscal.position
oldname='fiscal_position'
string='Fiscal Position'
args: 'account.fiscal.position'
invoice_count
Integer
compute='_get_invoiced'
readonly=True
string='# of Invoices'
invoice_ids
Many2many → account.invoice
compute='_get_invoiced'
copy=False
readonly=True
string='Invoices'
args: 'account.invoice'
invoice_status
Selection
compute='_get_invoiced'
readonly=True
store=True
string='Invoice Status'
args: [('upselling', 'Upselling Opportunity'), ('invoiced', 'Fully Invoiced'), ('to invoice', 'To Invoice'), ('no', 'Nothing to Invoice')]
is_expired
Boolean
compute='_compute_is_expired'
string='Is expired'
name
Char
copy=False
default=<expr>
index=True
readonly=True
required=True
states={'draft': [('readonly', False)]}
string='Order Reference'
note
Text
default=_default_note
args: 'Terms and conditions'
order_line
One2many → sale.order.line
auto_join=True
copy=True
states={'cancel': [('readonly', True)], 'done': [('readonly', True)]}
string='Order Lines'
args: 'sale.order.line', 'order_id'
origin
Char
help='Reference of the document that generated this sales order request.'
string='Source Document'
partner_id
Many2one → res.partner
change_default=True
index=True
readonly=True
required=True
states={'draft': [('readonly', False)], 'sent': [('readonly', False)]}
string='Customer'
track_visibility='always'
args: 'res.partner'
partner_invoice_id
Many2one → res.partner
help='Invoice address for current sales order.'
readonly=True
required=True
states={'draft': [('readonly', False)], 'sent': [('readonly', False)]}
string='Invoice Address'
args: 'res.partner'
partner_shipping_id
Many2one → res.partner
help='Delivery address for current sales order.'
readonly=True
required=True
states={'draft': [('readonly', False)], 'sent': [('readonly', False)]}
string='Delivery Address'
args: 'res.partner'
payment_term_id
Many2one → account.payment.term
oldname='payment_term'
string='Payment Terms'
args: 'account.payment.term'
pricelist_id
Many2one → product.pricelist
help='Pricelist for current sales order.'
readonly=True
required=True
states={'draft': [('readonly', False)], 'sent': [('readonly', False)]}
string='Pricelist'
args: 'product.pricelist'
product_id
Many2one → product.product
related='order_line.product_id'
string='Product'
args: 'product.product'
state
Selection
copy=False
default='draft'
index=True
readonly=True
string='Status'
track_visibility='onchange'
args: [('draft', 'Quotation'), ('sent', 'Quotation Sent'), ('sale', 'Sales Order'), ('done', 'Locked'), ('cancel', 'Cancelled')]
team_id
Many2one → crm.team
change_default=True
default=_get_default_team
oldname='section_id'
args: 'crm.team', 'Sales Channel'
user_id
Many2one → res.users
default=<expr>
index=True
string='Salesperson'
track_visibility='onchange'
args: 'res.users'
validity_date
Date
copy=False
help='Manually set the expiration date of your quotation (offer), or it will set the date automatically based on the template if online quotation is installed.'
readonly=True
states={'draft': [('readonly', False)], 'sent': [('readonly', False)]}
string='Expiration Date'
action_cancel(self)
action_confirm(self)
action_done(self)
action_draft(self)
action_invoice_create(self, grouped=False, final=False)
action_quotation_send(self)
action_unlock(self)
action_view_invoice(self)
copy_data(self, default=None)
create(self, vals)
force_quotation_send(self)
get_access_action(self, access_uid=None)
get_empty_list_help(self, help)
get_mail_url(self)
get_portal_confirmation_action(self)
name_get(self)
name_search(self, name='', args=None, operator='ilike', limit=100)
onchange_partner_id(self)
onchange_partner_id_warning(self)
onchange_partner_shipping_id(self)
order_lines_layouted(self)
print_quotation(self)
unlink(self)
amt_invoiced
Monetary
compute='_compute_invoice_amount'
compute_sudo=True
store=True
string='Amount Invoiced'
amt_to_invoice
Monetary
compute='_compute_invoice_amount'
compute_sudo=True
store=True
string='Amount To Invoice'
analytic_tag_ids
Many2many → account.analytic.tag
string='Analytic Tags'
args: 'account.analytic.tag'
company_id
Many2one
readonly=True
related='order_id.company_id'
store=True
string='Company'
currency_id
Many2one
readonly=True
related='order_id.currency_id'
store=True
string='Currency'
customer_lead
Float
default=0.0
help='Number of days between the order confirmation and the shipping of the products to the customer'
oldname='delay'
required=True
args: 'Delivery Lead Time'
discount
Float
default=0.0
digits=dp.get_precision('Discount')
string='Discount (%)'
invoice_lines
Many2many → account.invoice.line
copy=False
string='Invoice Lines'
args: 'account.invoice.line', 'sale_order_line_invoice_rel', 'order_line_id', 'invoice_line_id'
invoice_status
Selection
compute='_compute_invoice_status'
default='no'
readonly=True
store=True
string='Invoice Status'
args: [('upselling', 'Upselling Opportunity'), ('invoiced', 'Fully Invoiced'), ('to invoice', 'To Invoice'), ('no', 'Nothing to Invoice')]
is_downpayment
Boolean
help='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'
layout_category_id
Many2one → sale.layout_category
string='Section'
args: 'sale.layout_category'
layout_category_sequence
Integer
string='Layout Sequence'
name
Text
required=True
string='Description'
order_id
Many2one → sale.order
copy=False
index=True
ondelete='cascade'
required=True
string='Order Reference'
args: 'sale.order'
order_partner_id
Many2one
related='order_id.partner_id'
store=True
string='Customer'
price_reduce
Float
compute='_get_price_reduce'
digits=dp.get_precision('Product Price')
readonly=True
store=True
string='Price Reduce'
price_reduce_taxexcl
Monetary
compute='_get_price_reduce_notax'
readonly=True
store=True
string='Price Reduce Tax excl'
price_reduce_taxinc
Monetary
compute='_get_price_reduce_tax'
readonly=True
store=True
string='Price Reduce Tax inc'
price_subtotal
Monetary
compute='_compute_amount'
readonly=True
store=True
string='Subtotal'
price_tax
Float
compute='_compute_amount'
readonly=True
store=True
string='Taxes'
price_total
Monetary
compute='_compute_amount'
readonly=True
store=True
string='Total'
price_unit
Float
default=0.0
digits=dp.get_precision('Product Price')
required=True
args: 'Unit Price'
product_id
Many2one → product.product
change_default=True
domain=[('sale_ok', '=', True)]
ondelete='restrict'
required=True
string='Product'
args: 'product.product'
product_image
Binary
related='product_id.image'
store=False
args: 'Product Image'
product_uom
Many2one → product.uom
required=True
string='Unit of Measure'
args: 'product.uom'
product_uom_qty
Float
default=1.0
digits=dp.get_precision('Product Unit of Measure')
required=True
string='Quantity'
product_updatable
Boolean
compute='_compute_product_updatable'
default=True
readonly=True
string='Can Edit Product'
qty_delivered
Float
copy=False
default=0.0
digits=dp.get_precision('Product Unit of Measure')
string='Delivered'
qty_delivered_updateable
Boolean
compute='_compute_qty_delivered_updateable'
default=True
readonly=True
string='Can Edit Delivered'
qty_invoiced
Float
compute='_get_invoice_qty'
digits=dp.get_precision('Product Unit of Measure')
readonly=True
store=True
string='Invoiced'
qty_to_invoice
Float
compute='_get_to_invoice_qty'
digits=dp.get_precision('Product Unit of Measure')
readonly=True
store=True
string='To Invoice'
salesman_id
Many2one
readonly=True
related='order_id.user_id'
store=True
string='Salesperson'
sequence
Integer
default=10
string='Sequence'
state
Selection
copy=False
default='draft'
readonly=True
related='order_id.state'
store=True
string='Order Status'
args: [('draft', 'Quotation'), ('sent', 'Quotation Sent'), ('sale', 'Sales Order'), ('done', 'Done'), ('cancel', 'Cancelled')]
tax_id
Many2many → account.tax
domain=['|', ('active', '=', False), ('active', '=', True)]
string='Taxes'
args: 'account.tax'
create(self, values)
invoice_line_create(self, invoice_id, qty)
name_get(self)
name_search(self, name='', args=None, operator='ilike', limit=100)
product_id_change(self)
product_uom_change(self)
unlink(self)
write(self, values)
amt_invoiced
Float
readonly=True
args: 'Amount Invoiced'
amt_to_invoice
Float
readonly=True
args: 'Amount To Invoice'
analytic_account_id
Many2one → account.analytic.account
readonly=True
args: 'account.analytic.account', 'Analytic Account'
categ_id
Many2one → product.category
readonly=True
args: 'product.category', 'Product Category'
commercial_partner_id
Many2one → res.partner
readonly=True
args: 'res.partner', 'Commercial Entity'
company_id
Many2one → res.company
readonly=True
args: 'res.company', 'Company'
confirmation_date
Datetime
readonly=True
args: 'Confirmation Date'
country_id
Many2one → res.country
readonly=True
args: 'res.country', 'Partner Country'
date
Datetime
readonly=True
args: 'Date Order'
name
Char
readonly=True
args: 'Order Reference'
nbr
Integer
readonly=True
args: '# of Lines'
partner_id
Many2one → res.partner
readonly=True
args: 'res.partner', 'Partner'
price_subtotal
Float
readonly=True
args: 'Untaxed Total'
price_total
Float
readonly=True
args: 'Total'
pricelist_id
Many2one → product.pricelist
readonly=True
args: 'product.pricelist', 'Pricelist'
product_id
Many2one → product.product
readonly=True
args: 'product.product', 'Product'
product_tmpl_id
Many2one → product.template
readonly=True
args: 'product.template', 'Product Template'
product_uom
Many2one → product.uom
readonly=True
args: 'product.uom', 'Unit of Measure'
product_uom_qty
Float
readonly=True
args: 'Qty Ordered'
qty_delivered
Float
readonly=True
args: 'Qty Delivered'
qty_invoiced
Float
readonly=True
args: 'Qty Invoiced'
qty_to_invoice
Float
readonly=True
args: 'Qty To Invoice'
state
Selection
readonly=True
string='Status'
args: [('draft', 'Draft Quotation'), ('sent', 'Quotation Sent'), ('sale', 'Sales Order'), ('done', 'Sales Done'), ('cancel', 'Cancelled')]
team_id
Many2one → crm.team
oldname='section_id'
readonly=True
args: 'crm.team', 'Sales Channel'
user_id
Many2one → res.users
readonly=True
args: 'res.users', 'Salesperson'
volume
Float
readonly=True
args: 'Volume'
weight
Float
readonly=True
args: 'Gross Weight'
init(self)
| REPOSITORY | |
|---|---|
| REPOSITORY | odoo/odoo |
| GIT | |
| GIT | https://github.com/odoo/odoo.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/odoo/odoo/tree/10.0/sale |
| VERSION | |
| VERSION | 1.0 |
| CATEGORY | |
| CATEGORY | Sales |
| LICENSE | |
| LICENSE | LGPL-3 |
| APPLICATION | |
| APPLICATION | Yes |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | |
| MAINTAINERS | |
| MAINTAINERS | |
| COMMITTERS | |
| COMMITTERS | Raphael Collet, Odoo Translation Bot, Christophe Matthieu, Martin Trigaux, Fabien Pinckaers, Olivier Dony, Thibault Delavallée, Josse Colpaert, Denis Ledoux, Christophe Simonis, David Monjoie, Goffin Simon, Nicolas Martinelli, Nicolas Lempereur, Julien Legros, Richard Mathot, qdp-odoo, Aaron Bohy, Jeremy Kersten, Lucas Perais (lpe), Damien Bouvy, Yannick Tivisse, qsm-odoo, Martin Geubelle, Denis Vermylen (dve), len-odoo, Denis Vermylen, Moens Alexandre |
| WEBSITE | |
| WEBSITE | https://www.odoo.com/page/crm |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-05 23:50:48 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
odoo/odoo: - sales_team - base - base_setup - web_kanban - web - bus - web_tour - account - product - decimal_precision - report - analytic - web_planner - procurement |
| 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 sale order and invoice report with
categories, subtotals or page-breaks.
The Dashboard for the Sales Manager will include
------------------------------------------------
* My Quotations
* Monthly Turnover (Graph)
|
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
account_invoice_form |
Account Invoice | account.invoice | data | Inherits account.invoice_form |
account_invoice_groupby_inherit |
account.invoice.groupby | account.invoice | xpath | Inherits account.view_account_invoice_filter |
account_invoice_line_form |
account.invoice.line.form | account.invoice.line | data | Inherits account.view_invoice_line_form |
account_invoice_line_tree |
account.invoice.line.tree | account.invoice.line | data | Inherits account.view_invoice_line_tree |
account_invoice_supplier_form |
account.invoice.supplier.form | account.invoice | data | Inherits account.invoice_supplier_form |
assets_backend |
project assets | ir.ui.view | qweb | Inherits web.assets_backend |
crm_lead_partner_kanban_view |
res.partner.kanban.saleorder.inherit | res.partner | field | Inherits base.res_partner_kanban_view |
crm_team_salesteams_view_form |
crm.team.form | crm.team | xpath | Inherits sales_team.crm_team_view_form |
crm_team_salesteams_view_kanban |
crm.team.kanban | crm.team | data | Inherits sales_team.crm_team_salesteams_view_kanban |
product_form_view_sale_order_button |
product.product.sale.order | product.product | div | Inherits product.product_normal_form_view |
product_pricelist_view_form |
product.pricelist.form.inherit.product | product.pricelist | field | Inherits product.product_pricelist_view |
product_pricelist_view_tree |
product.pricelist.tree.inherit.product | product.pricelist | field | Inherits product.product_pricelist_view_tree |
product_template_form_view_invoice_policy |
product.template.invoice.policy | product.template | page | Inherits product.product_template_form_view |
product_template_form_view_sale_order_button |
product.template.sale.order.button | product.template | div | Inherits product.product_template_only_form_view |
report_configuration_form_view |
report.configuration.form.view | sale.layout_category | form | New |
report_configuration_search_view |
report.configuration.search.view | sale.layout_category | search | New |
report_configuration_tree_view |
report.configuration.form.view | sale.layout_category | tree | New |
report_invoice_document_inherit_sale |
report_invoice_document_inherit_sale | ir.ui.view | qweb | Inherits account.report_invoice_document |
report_invoice_layouted |
report_invoice_layouted | ir.ui.view | qweb | Inherits account.report_invoice_document |
report_saleorder |
report_saleorder | ir.ui.view | qweb | New |
report_saleorder_document |
report_saleorder_document | ir.ui.view | qweb | New |
res_partner_view_buttons |
res.partner.view.buttons | res.partner | div | Inherits base.view_partner_form |
sale_order_view_search_inherit_quotation |
sale.order.search.inherit.quotation | sale.order | xpath | Inherits sale.view_sales_order_filter |
sale_order_view_search_inherit_sale |
sale.order.search.inherit.sale | sale.order | xpath | Inherits sale.view_sales_order_filter |
view_account_config |
account settings | account.config.settings | separator | Inherits account.view_account_config_settings |
view_account_invoice_report_search_inherit |
account.invoice.report.search.inherit | account.invoice.report | xpath | Inherits account.view_account_invoice_report_search |
view_order_form |
sale.order.form | sale.order | form | New |
view_order_form_editable_list |
sale.order.form.editable.list | sale.order | xpath | Inherits sale.view_order_form |
view_order_line_tree |
sale.order.line.tree | sale.order.line | tree | 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.tree | sale.order | tree | New |
view_quotation_tree |
sale.order.tree | sale.order | tree | New |
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_config |
sale settings | sale.config.settings | div | Inherits sales_team.view_sale_config_settings |
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 |
so_line
Many2one → sale.order.line
string='Sale Order Line'
args: 'sale.order.line'
create(self, values)
unlink(self)
write(self, values)
group_analytic_account_for_sales
Boolean
help='Allows you to specify an analytic account on sales orders.'
implied_group='sale.group_analytic_accounting'
args: 'Analytic accounting for sales'
No public methods.
comment
Text
default=_default_comment
partner_shipping_id
Many2one → res.partner
help='Delivery address for current invoice.'
readonly=True
states={'draft': [('readonly', False)]}
string='Delivery Address'
args: 'res.partner'
team_id
Many2one → crm.team
default=_get_default_team
oldname='section_id'
string='Sales Team'
args: 'crm.team'
action_invoice_paid(self)
get_delivery_partner_id(self)
order_lines_layouted(self)
layout_category_id
Many2one → sale.layout_category
string='Section'
args: 'sale.layout_category'
layout_category_sequence
Integer
string='Layout Sequence'
sale_line_ids
Many2many → sale.order.line
copy=False
readonly=True
string='Sale Order Lines'
args: 'sale.order.line', 'sale_order_line_invoice_rel', 'invoice_line_id', 'order_line_id'
No public methods.
team_id
Many2one → crm.team
string='Sales Team'
args: 'crm.team'
No public methods.
currency_id
Many2one → res.currency
readonly=True
related='company_id.currency_id'
required=True
string='Currency'
args: 'res.currency'
invoiced
Integer
compute='_compute_invoiced'
help='Invoice revenue for the current month. This is the amount the sales team has invoiced this month. It is used to compute the progression ratio of the current and target revenue on the kanban view.'
readonly=True
string='Invoiced This Month'
invoiced_target
Integer
help='Target of invoice revenue for the current month. This is the amount the sales team estimates to be able to invoice this month.'
string='Invoice Target'
sales_to_invoice_amount
Integer
compute='_compute_sales_to_invoice_amount'
readonly=True
string='Amount of sales to invoice'
use_invoices
Boolean
help='Check this box to manage invoices in this sales team.'
args: 'Invoices'
use_quotations
Boolean
default=True
help='Check this box to manage quotations in this sales team.'
args: 'Quotations'
update_invoiced_target(self, value)
No new fields.
Public methods (1)send_mail(self, auto_commit=False)
sale_line_id
Many2one → sale.order.line
string='Sale Order Line'
args: 'sale.order.line'
No public methods.
discount_policy
Selection
default='with_discount'
args: [('with_discount', 'Discount included in the price'), ('without_discount', 'Show public price & discount to the customer')]
No public methods.
sales_count
Integer
compute='_sales_count'
string='# Sales'
No public methods.
expense_policy
Selection
default='no'
string='Re-Invoice Expenses'
args: [('no', 'No'), ('cost', 'At cost'), ('sales_price', 'At sale price')]
invoice_policy
Selection
default='order'
help='Ordered Quantity: Invoice based on the quantity the customer ordered.\nDelivered Quantity: Invoiced based on the quantity the vendor delivered (time or deliveries).'
string='Invoicing Policy'
args: [('order', 'Ordered quantities'), ('delivery', 'Delivered quantities')]
sale_line_warn
Selection
default='no-message'
help=WARNING_HELP
required=True
args: WARNING_MESSAGE, 'Sales Order Line'
sale_line_warn_msg
Text
sales_count
Integer
compute='_sales_count'
string='# Sales'
track_service
Selection
default='manual'
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 sale order validation and track the work hours.'
string='Track Service'
args: [('manual', 'Manually set quantities on order')]
action_view_sales(self)
sale_note
Text
string='Default Terms and Conditions'
translate=True
No public methods.
sale_order_count
Integer
compute='_compute_sale_order_count'
string='# of Sales Order'
sale_order_ids
One2many → sale.order
sale_warn
Selection
default='no-message'
help=WARNING_HELP
required=True
args: WARNING_MESSAGE, 'Sales Order'
sale_warn_msg
Text
No public methods.
advance_payment_method
Selection
default=_get_advance_payment_method
required=True
string='What do you want to invoice?'
args: [('delivered', 'Invoiceable lines'), ('all', 'Invoiceable lines (deduct down payments)'), ('percentage', 'Down payment (percentage)'), ('fixed', 'Down payment (fixed amount)')]
amount
Float
digits=dp.get_precision('Account')
help='The amount to be invoiced in advance, taxes excluded.'
args: 'Down Payment Amount'
count
Integer
default=_count
string='# of Orders'
deposit_account_id
Many2one → account.account
default=_default_deposit_account_id
domain=[('deprecated', '=', False)]
help='Account used for deposits'
string='Income Account'
args: 'account.account'
deposit_taxes_id
Many2many → account.tax
default=_default_deposit_taxes_id
help='Taxes used for deposits'
string='Customer Taxes'
args: 'account.tax'
product_id
Many2one → product.product
default=_default_product_id
domain=[('type', '=', 'service')]
string='Down Payment Product'
args: 'product.product'
create_invoices(self)
onchange_advance_payment_method(self)
auto_done_setting
Selection
company_id
Many2one → res.company
default=<expr>
required=True
string='Company'
args: 'res.company'
default_invoice_policy
Selection
default='order'
default_model='product.template'
args: [('order', 'Invoice ordered quantities'), ('delivery', 'Invoice delivered quantities')], 'Default Invoicing'
deposit_product_id_setting
Many2one → product.product
domain="[('type', '=', 'service')]"
help='Default product used for payment advances'
args: 'product.product', 'Deposit Product'
group_discount_per_so_line
Selection
implied_group='sale.group_discount_per_so_line'
args: [(0, 'No discount on sales order lines, global discount only'), (1, 'Allow discounts on sales order lines')], 'Discount'
group_display_incoterm
Selection
help='The printed reports will display the incoterms for the sales orders and the related invoices'
implied_group='sale.group_display_incoterm'
args: [(0, 'No incoterm on reports'), (1, 'Show incoterms on sales orders and invoices')], 'Incoterms'
group_pricelist_item
Boolean
implied_group='product.group_pricelist_item'
args: 'Show pricelists to customers'
group_product_pricelist
Boolean
implied_group='product.group_product_pricelist'
args: 'Show pricelists On Products'
group_product_variant
Selection
help='Work with product variant allows you to define some variant of the same products\n , an ease the product management in the ecommerce for example'
implied_group='product.group_product_variant'
args: [(0, 'No variants on products'), (1, 'Products can have several attributes, defining variants (Example: size, color,...)')], 'Product Variants'
group_sale_delivery_address
Selection
implied_group='sale.group_delivery_invoice_address'
args: [(0, 'Invoicing and shipping addresses are always the same (Example: services companies)'), (1, 'Display 3 fields on sales orders: customer, invoice address, delivery address')], 'Addresses'
group_sale_layout
Selection
implied_group='sale.group_sale_layout'
args: [(0, 'Do not personalize sales orders and invoice reports'), (1, 'Personalize the sales orders and invoice report with categories, subtotals and page-breaks')], 'Sales Reports Layout'
group_sale_pricelist
Boolean
help='Allows to manage different prices based on rules per category of customers.\n Example: 10% for retailers, promotion of 5 EUR on this product, etc.'
implied_group='product.group_sale_pricelist'
args: 'Use pricelists to adapt your price per customers'
group_show_price_subtotal
Boolean
group='base.group_portal,base.group_user,base.group_public'
implied_group='sale.group_show_price_subtotal'
args: 'Show subtotal'
group_show_price_total
Boolean
group='base.group_portal,base.group_user,base.group_public'
implied_group='sale.group_show_price_total'
args: 'Show total'
group_uom
Selection
help='Allows you to select and maintain different units of measure for products.'
implied_group='product.group_uom'
args: [(0, 'Products have only one unit of measure (easier)'), (1, 'Some products may be sold/purchased in different units of measure (advanced)')], 'Units of Measure'
group_warning_sale
Selection
implied_group='sale.group_warning_sale'
args: [(0, 'All the products and the customers can be used in sales orders'), (1, 'An informative or blocking warning can be set on a product or a customer')], 'Warning'
module_sale_contract
Boolean
module_sale_margin
Selection
module_website_quote
Selection
module_website_sale_digital
Boolean
sale_note
Text
related='company_id.sale_note'
string='Default Terms and Conditions *'
sale_pricelist_setting
Selection
default='fixed'
help='Fix Price: all price manage from products sale price.\nDifferent prices per Customer: you can assign price on buying of minimum quantity in products sale tab.\nAdvanced pricing based on formula: You can have all the rights on pricelist'
required=True
args: [('fixed', 'A single sale price per product'), ('percentage', 'Specific prices per customer segment, currency, etc.'), ('formula', 'Advanced pricing based on formulas (discounts, margins, rounding)')]
sale_show_tax
Selection
default='subtotal'
required=True
args: [('subtotal', 'Show line subtotals without taxes (B2B)'), ('total', 'Show line subtotals with taxes included (B2C)')], 'Tax Display'
set_auto_done_defaults(self)
set_deposit_product_id_defaults(self)
set_sale_defaults(self)
set_sale_tax_defaults(self)
name
Char
required=True
translate=True
args: 'Name'
pagebreak
Boolean
sequence
Integer
default=10
required=True
args: 'Sequence'
subtotal
Boolean
default=True
args: 'Add subtotal'
No public methods.
amount_tax
Monetary
compute='_amount_all'
readonly=True
store=True
string='Taxes'
track_visibility='always'
amount_total
Monetary
compute='_amount_all'
readonly=True
store=True
string='Total'
track_visibility='always'
amount_untaxed
Monetary
compute='_amount_all'
readonly=True
store=True
string='Untaxed Amount'
track_visibility='always'
client_order_ref
Char
copy=False
string='Customer Reference'
company_id
Many2one → res.company
default=<expr>
args: 'res.company', 'Company'
confirmation_date
Datetime
copy=False
help='Date on which the sale order is confirmed.'
index=True
oldname='date_confirm'
readonly=True
string='Confirmation Date'
create_date
Datetime
help='Date on which sales order is created.'
index=True
readonly=True
string='Creation Date'
currency_id
Many2one → res.currency
readonly=True
related='pricelist_id.currency_id'
required=True
string='Currency'
args: 'res.currency'
date_order
Datetime
copy=False
default=fields.Datetime.now
index=True
readonly=True
required=True
states={'draft': [('readonly', False)], 'sent': [('readonly', False)]}
string='Order Date'
fiscal_position_id
Many2one → account.fiscal.position
oldname='fiscal_position'
string='Fiscal Position'
args: 'account.fiscal.position'
invoice_count
Integer
compute='_get_invoiced'
readonly=True
string='# of Invoices'
invoice_ids
Many2many → account.invoice
compute='_get_invoiced'
copy=False
readonly=True
string='Invoices'
args: 'account.invoice'
invoice_status
Selection
compute='_get_invoiced'
readonly=True
store=True
string='Invoice Status'
args: [('upselling', 'Upselling Opportunity'), ('invoiced', 'Fully Invoiced'), ('to invoice', 'To Invoice'), ('no', 'Nothing to Invoice')]
name
Char
copy=False
default=<expr>
index=True
readonly=True
required=True
states={'draft': [('readonly', False)]}
string='Order Reference'
note
Text
default=_default_note
args: 'Terms and conditions'
order_line
One2many → sale.order.line
copy=True
states={'cancel': [('readonly', True)], 'done': [('readonly', True)]}
string='Order Lines'
args: 'sale.order.line', 'order_id'
origin
Char
help='Reference of the document that generated this sales order request.'
string='Source Document'
partner_id
Many2one → res.partner
change_default=True
index=True
readonly=True
required=True
states={'draft': [('readonly', False)], 'sent': [('readonly', False)]}
string='Customer'
track_visibility='always'
args: 'res.partner'
partner_invoice_id
Many2one → res.partner
help='Invoice address for current sales order.'
readonly=True
required=True
states={'draft': [('readonly', False)], 'sent': [('readonly', False)]}
string='Invoice Address'
args: 'res.partner'
partner_shipping_id
Many2one → res.partner
help='Delivery address for current sales order.'
readonly=True
required=True
states={'draft': [('readonly', False)], 'sent': [('readonly', False)]}
string='Delivery Address'
args: 'res.partner'
payment_term_id
Many2one → account.payment.term
oldname='payment_term'
string='Payment Terms'
args: 'account.payment.term'
pricelist_id
Many2one → product.pricelist
help='Pricelist for current sales order.'
readonly=True
required=True
states={'draft': [('readonly', False)], 'sent': [('readonly', False)]}
string='Pricelist'
args: 'product.pricelist'
procurement_group_id
Many2one → procurement.group
copy=False
args: 'procurement.group', 'Procurement Group'
product_id
Many2one → product.product
related='order_line.product_id'
string='Product'
args: 'product.product'
project_id
Many2one → account.analytic.account
copy=False
help='The analytic account related to a sales order.'
readonly=True
states={'draft': [('readonly', False)], 'sent': [('readonly', False)]}
args: 'account.analytic.account', 'Analytic Account'
related_project_id
Many2one → account.analytic.account
help='The analytic account related to a sales order.'
inverse='_inverse_project_id'
related='project_id'
string='Analytic Account'
args: 'account.analytic.account'
state
Selection
copy=False
default='draft'
index=True
readonly=True
string='Status'
track_visibility='onchange'
args: [('draft', 'Quotation'), ('sent', 'Quotation Sent'), ('sale', 'Sales Order'), ('done', 'Locked'), ('cancel', 'Cancelled')]
team_id
Many2one → crm.team
change_default=True
default=_get_default_team
oldname='section_id'
args: 'crm.team', 'Sales Team'
user_id
Many2one → res.users
default=<expr>
index=True
string='Salesperson'
track_visibility='onchange'
args: 'res.users'
validity_date
Date
copy=False
help='Manually set the expiration date of your quotation (offer), or it will set the date automatically based on the template if online quotation is installed.'
readonly=True
states={'draft': [('readonly', False)], 'sent': [('readonly', False)]}
string='Expiration Date'
action_cancel(self)
action_confirm(self)
action_done(self)
action_draft(self)
action_invoice_create(self, grouped=False, final=False)
action_quotation_send(self)
action_view_invoice(self)
button_dummy(self)
create(self, vals)
force_quotation_send(self)
onchange_partner_id(self)
onchange_partner_id_warning(self)
onchange_partner_shipping_id(self)
order_lines_layouted(self)
print_quotation(self)
unlink(self)
No new fields.
Public methods (0)No public methods.
analytic_tag_ids
Many2many → account.analytic.tag
string='Analytic Tags'
args: 'account.analytic.tag'
company_id
Many2one
readonly=True
related='order_id.company_id'
store=True
string='Company'
currency_id
Many2one
readonly=True
related='order_id.currency_id'
store=True
string='Currency'
customer_lead
Float
default=0.0
help='Number of days between the order confirmation and the shipping of the products to the customer'
oldname='delay'
required=True
args: 'Delivery Lead Time'
discount
Float
default=0.0
digits=dp.get_precision('Discount')
string='Discount (%)'
invoice_lines
Many2many → account.invoice.line
copy=False
string='Invoice Lines'
args: 'account.invoice.line', 'sale_order_line_invoice_rel', 'order_line_id', 'invoice_line_id'
invoice_status
Selection
compute='_compute_invoice_status'
default='no'
readonly=True
store=True
string='Invoice Status'
args: [('upselling', 'Upselling Opportunity'), ('invoiced', 'Fully Invoiced'), ('to invoice', 'To Invoice'), ('no', 'Nothing to Invoice')]
layout_category_id
Many2one → sale.layout_category
string='Section'
args: 'sale.layout_category'
layout_category_sequence
Integer
string='Layout Sequence'
name
Text
required=True
string='Description'
order_id
Many2one → sale.order
copy=False
index=True
ondelete='cascade'
required=True
string='Order Reference'
args: 'sale.order'
order_partner_id
Many2one
related='order_id.partner_id'
store=True
string='Customer'
price_reduce
Monetary
compute='_get_price_reduce'
readonly=True
store=True
string='Price Reduce'
price_reduce_taxexcl
Monetary
compute='_get_price_reduce_notax'
readonly=True
store=True
string='Price Reduce Tax excl'
price_reduce_taxinc
Monetary
compute='_get_price_reduce_tax'
readonly=True
store=True
string='Price Reduce Tax inc'
price_subtotal
Monetary
compute='_compute_amount'
readonly=True
store=True
string='Subtotal'
price_tax
Monetary
compute='_compute_amount'
readonly=True
store=True
string='Taxes'
price_total
Monetary
compute='_compute_amount'
readonly=True
store=True
string='Total'
price_unit
Float
default=0.0
digits=dp.get_precision('Product Price')
required=True
args: 'Unit Price'
procurement_ids
One2many → procurement.order
string='Procurements'
args: 'procurement.order', 'sale_line_id'
product_id
Many2one → product.product
change_default=True
domain=[('sale_ok', '=', True)]
ondelete='restrict'
required=True
string='Product'
args: 'product.product'
product_uom
Many2one → product.uom
required=True
string='Unit of Measure'
args: 'product.uom'
product_uom_qty
Float
default=1.0
digits=dp.get_precision('Product Unit of Measure')
required=True
string='Quantity'
qty_delivered
Float
copy=False
default=0.0
digits=dp.get_precision('Product Unit of Measure')
string='Delivered'
qty_delivered_updateable
Boolean
compute='_compute_qty_delivered_updateable'
default=True
readonly=True
string='Can Edit Delivered'
qty_invoiced
Float
compute='_get_invoice_qty'
digits=dp.get_precision('Product Unit of Measure')
readonly=True
store=True
string='Invoiced'
qty_to_invoice
Float
compute='_get_to_invoice_qty'
digits=dp.get_precision('Product Unit of Measure')
readonly=True
store=True
string='To Invoice'
salesman_id
Many2one
readonly=True
related='order_id.user_id'
store=True
string='Salesperson'
sequence
Integer
default=10
string='Sequence'
state
Selection
copy=False
default='draft'
readonly=True
related='order_id.state'
store=True
string='Order Status'
args: [('draft', 'Quotation'), ('sent', 'Quotation Sent'), ('sale', 'Sale Order'), ('done', 'Done'), ('cancel', 'Cancelled')]
tax_id
Many2many → account.tax
domain=['|', ('active', '=', False), ('active', '=', True)]
string='Taxes'
args: 'account.tax'
create(self, values)
invoice_line_create(self, invoice_id, qty)
product_id_change(self)
product_uom_change(self)
unlink(self)
write(self, values)
analytic_account_id
Many2one → account.analytic.account
readonly=True
args: 'account.analytic.account', 'Analytic Account'
categ_id
Many2one → product.category
readonly=True
args: 'product.category', 'Product Category'
commercial_partner_id
Many2one → res.partner
readonly=True
args: 'res.partner', 'Commercial Entity'
company_id
Many2one → res.company
readonly=True
args: 'res.company', 'Company'
country_id
Many2one → res.country
readonly=True
args: 'res.country', 'Partner Country'
date
Datetime
readonly=True
args: 'Date Order'
name
Char
readonly=True
args: 'Order Reference'
nbr
Integer
readonly=True
args: '# of Lines'
partner_id
Many2one → res.partner
readonly=True
args: 'res.partner', 'Partner'
price_subtotal
Float
readonly=True
args: 'Untaxed Total'
price_total
Float
readonly=True
args: 'Total'
pricelist_id
Many2one → product.pricelist
readonly=True
args: 'product.pricelist', 'Pricelist'
product_id
Many2one → product.product
readonly=True
args: 'product.product', 'Product'
product_tmpl_id
Many2one → product.template
readonly=True
args: 'product.template', 'Product Template'
product_uom
Many2one → product.uom
readonly=True
args: 'product.uom', 'Unit of Measure'
product_uom_qty
Float
readonly=True
args: '# of Qty'
qty_delivered
Float
readonly=True
args: 'Qty Delivered'
qty_invoiced
Float
readonly=True
args: 'Qty Invoiced'
qty_to_invoice
Float
readonly=True
args: 'Qty To Invoice'
state
Selection
readonly=True
string='Status'
args: [('draft', 'Draft Quotation'), ('sent', 'Quotation Sent'), ('sale', 'Sales Order'), ('done', 'Sales Done'), ('cancel', 'Cancelled')]
team_id
Many2one → crm.team
oldname='section_id'
readonly=True
args: 'crm.team', 'Sales Team'
user_id
Many2one → res.users
readonly=True
args: 'res.users', 'Salesperson'
volume
Float
readonly=True
args: 'Volume'
weight
Float
readonly=True
args: 'Gross Weight'
init(self)
| REPOSITORY | |
|---|---|
| REPOSITORY | odoo/odoo |
| GIT | |
| GIT | https://github.com/odoo/odoo.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/odoo/odoo/tree/9.0/sale |
| VERSION | |
| VERSION | 1.0 |
| CATEGORY | |
| CATEGORY | Sales |
| LICENSE | |
| LICENSE | LGPL-3 |
| APPLICATION | |
| APPLICATION | Yes |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | |
| MAINTAINERS | |
| MAINTAINERS | |
| COMMITTERS | |
| COMMITTERS | Raphael Collet, Odoo Translation Bot, Christophe Matthieu, Martin Trigaux, Fabien Pinckaers, Antony Lesuisse, Olivier Dony, Thibault Delavallée, Josse Colpaert, Denis Ledoux, Christophe Simonis, David Monjoie, Xavier Morel, Goffin Simon, Cedric Snauwaert, Nicolas Martinelli, Nicolas Lempereur, Jérome Maes, Richard Mathot, qdp-odoo, Géry Debongnie, Aaron Bohy, Jeremy Kersten, GitHub, Damien Bouvy, Julien De Coster, pvy, Rucha Dave, Yannick Tivisse, qsm-odoo, Cédric Snauwaert, Martin Geubelle, Quentin De Paoli |
| WEBSITE | |
| WEBSITE | https://www.odoo.com/page/crm |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-05 23:48:30 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
odoo/odoo: - sales_team - base - base_setup - web_kanban - web - bus - account - product - decimal_precision - report - analytic - web_tip - web_planner - procurement |
| 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
The Dashboard for the Sales Manager will include
------------------------------------------------
* My Quotations
* Monthly Turnover (Graph)
|
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
account_invoice_form |
Account Invoice | account.invoice | data | Inherits account.invoice_form |
account_invoice_groupby_inherit |
account.invoice.groupby | account.invoice | xpath | Inherits account.view_account_invoice_filter |
assets_backend |
project assets | ir.ui.view | qweb | Inherits web.assets_backend |
crm_lead_partner_kanban_view |
res.partner.kanban.saleorder.inherit | res.partner | field | Inherits base.res_partner_kanban_view |
crm_team_salesteams_view_form |
crm.team.form | crm.team | xpath | Inherits sales_team.crm_team_view_form |
crm_team_salesteams_view_kanban |
crm.team.kanban | crm.team | data | Inherits sales_team.crm_team_salesteams_view_kanban |
product_form_view_sale_order_button |
product.product.sale.order | product.product | div | Inherits product.product_normal_form_view |
product_template_form_view_invoice_policy |
product.template.invoice.policy | product.template | field | Inherits product.product_template_form_view |
product_template_form_view_sale_order_button |
product.template.sale.order.button | product.template | div | Inherits product.product_template_only_form_view |
report_saleorder |
report_saleorder | ir.ui.view | qweb | New |
report_saleorder_document |
report_saleorder_document | ir.ui.view | qweb | New |
res_partner_view_buttons |
res.partner.view.buttons | res.partner | div | Inherits base.view_partner_form |
view_account_config |
account settings | account.config.settings | separator | Inherits account.view_account_config_settings |
view_account_invoice_report_search_inherit |
account.invoice.report.search.inherit | account.invoice.report | xpath | Inherits account.view_account_invoice_report_search |
view_company_inherit_form2 |
res.company.form.inherit | res.company | xpath | Inherits base.view_company_form |
view_order_form |
sale.order.form | sale.order | form | New |
view_order_form_editable_list |
sale.order.form.editable.list | sale.order | xpath | Inherits sale.view_order_form |
view_order_line_tree |
sale.order.line.tree | sale.order.line | tree | 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.tree | sale.order | tree | New |
view_quotation_tree |
sale.order.tree | sale.order | tree | New |
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_config |
sale settings | sale.config.settings | div | Inherits base_setup.view_sale_config_settings |
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 |
so_line
Many2one → sale.order.line
string='Sale Order Line'
args: 'sale.order.line'
create(self, values)
unlink(self)
write(self, values)
team_id
Many2one → crm.team
default=_get_default_team
oldname='section_id'
string='Sales Team'
args: 'crm.team'
confirm_paid(self)
sale_line_ids
Many2many → sale.order.line
copy=False
readonly=True
string='Sale Order Lines'
args: 'sale.order.line', 'sale_order_line_invoice_rel', 'invoice_line_id', 'order_line_id'
No public methods.
team_id
Many2one → crm.team
string='Sales Team'
args: 'crm.team'
No public methods.
No new fields.
Public methods (1)update_invoiced_target(self, cr, uid, id, value, context=None)
No new fields.
Public methods (1)send_mail(self, auto_commit=False)
sale_line_id
Many2one → sale.order.line
string='Sale Order Line'
args: 'sale.order.line'
No public methods.
sales_count
Integer
compute='_sales_count'
string='# Sales'
No public methods.
invoice_policy
Selection
default='order'
string='Invoicing Policy'
args: [('order', 'Ordered quantities'), ('delivery', 'Delivered quantities'), ('cost', 'Invoice based on time and material')]
sales_count
Integer
compute='_sales_count'
string='# Sales'
track_service
Selection
default='manual'
string='Track Service'
args: [('manual', 'Manually set quantities on order')]
action_view_sales(self)
sale_note
Text
string='Default Terms and Conditions'
translate=True
No public methods.
advance_payment_method
Selection
default=_get_advance_payment_method
required=True
string='What do you want to invoice?'
args: [('delivered', 'Invoiceable lines'), ('all', 'Invoiceable lines (deduct down payments)'), ('percentage', 'Down payment (percentage)'), ('fixed', 'Down payment (fixed amount)')]
amount
Float
digits=dp.get_precision('Account')
help='The amount to be invoiced in advance, taxes excluded.'
args: 'Down Payment Amount'
count
Integer
default=_count
string='# of Orders'
deposit_account_id
Many2one → account.account
default=_default_deposit_account_id
domain=[('deprecated', '=', False)]
help='Account used for deposits'
string='Income Account'
args: 'account.account'
deposit_taxes_id
Many2many → account.tax
default=_default_deposit_taxes_id
help='Taxes used for deposits'
string='Customer Taxes'
args: 'account.tax'
product_id
Many2one → product.product
default=_default_product_id
domain=[('type', '=', 'service')]
string='Down Payment Product'
args: 'product.product'
create_invoices(self)
onchange_advance_payment_method(self)
No new fields.
Public methods (4)onchange_sale_price(self, cr, uid, ids, sale_pricelist_setting, context=None)
set_auto_done_defaults(self, cr, uid, ids, context=None)
set_deposit_product_id_defaults(self, cr, uid, ids, context=None)
set_sale_defaults(self, cr, uid, ids, context=None)
amount_tax
Monetary
compute='_amount_all'
readonly=True
store=True
string='Taxes'
track_visibility='always'
amount_total
Monetary
compute='_amount_all'
readonly=True
store=True
string='Total'
track_visibility='always'
amount_untaxed
Monetary
compute='_amount_all'
readonly=True
store=True
string='Untaxed Amount'
track_visibility='always'
client_order_ref
Char
copy=False
string='Customer Reference'
company_id
Many2one → res.company
default=<expr>
args: 'res.company', 'Company'
create_date
Datetime
help='Date on which sales order is created.'
index=True
readonly=True
string='Creation Date'
currency_id
Many2one → res.currency
readonly=True
related='pricelist_id.currency_id'
required=True
string='Currency'
args: 'res.currency'
date_order
Datetime
copy=False
default=fields.Datetime.now
index=True
readonly=True
required=True
states={'draft': [('readonly', False)], 'sent': [('readonly', False)]}
string='Order Date'
fiscal_position_id
Many2one → account.fiscal.position
oldname='fiscal_position'
string='Fiscal Position'
args: 'account.fiscal.position'
invoice_count
Integer
compute='_get_invoiced'
readonly=True
string='# of Invoices'
invoice_ids
Many2many → account.invoice
compute='_get_invoiced'
copy=False
readonly=True
string='Invoices'
args: 'account.invoice'
invoice_status
Selection
compute='_get_invoiced'
default='no'
readonly=True
store=True
string='Invoice Status'
args: [('upselling', 'Upselling Opportunity'), ('invoiced', 'Fully Invoiced'), ('to invoice', 'To Invoice'), ('no', 'Nothing to Invoice')]
name
Char
copy=False
default=<expr>
index=True
readonly=True
required=True
states={'draft': [('readonly', False)]}
string='Order Reference'
note
Text
default=_default_note
args: 'Terms and conditions'
order_line
One2many → sale.order.line
copy=True
states={'cancel': [('readonly', True)], 'done': [('readonly', True)]}
string='Order Lines'
args: 'sale.order.line', 'order_id'
origin
Char
help='Reference of the document that generated this sales order request.'
string='Source Document'
partner_id
Many2one → res.partner
change_default=True
index=True
readonly=True
required=True
states={'draft': [('readonly', False)], 'sent': [('readonly', False)]}
string='Customer'
track_visibility='always'
args: 'res.partner'
partner_invoice_id
Many2one → res.partner
help='Invoice address for current sales order.'
readonly=True
required=True
states={'draft': [('readonly', False)], 'sent': [('readonly', False)]}
string='Invoice Address'
args: 'res.partner'
partner_shipping_id
Many2one → res.partner
help='Delivery address for current sales order.'
readonly=True
required=True
states={'draft': [('readonly', False)], 'sent': [('readonly', False)]}
string='Delivery Address'
args: 'res.partner'
payment_term_id
Many2one → account.payment.term
oldname='payment_term'
string='Payment Term'
args: 'account.payment.term'
pricelist_id
Many2one → product.pricelist
help='Pricelist for current sales order.'
readonly=True
required=True
states={'draft': [('readonly', False)], 'sent': [('readonly', False)]}
string='Pricelist'
args: 'product.pricelist'
procurement_group_id
Many2one → procurement.group
copy=False
args: 'procurement.group', 'Procurement Group'
product_id
Many2one → product.product
related='order_line.product_id'
string='Product'
args: 'product.product'
project_id
Many2one → account.analytic.account
copy=False
domain=[('account_type', '=', 'normal')]
help='The analytic account related to a sales order.'
readonly=True
states={'draft': [('readonly', False)], 'sent': [('readonly', False)]}
args: 'account.analytic.account', 'Analytic Account'
state
Selection
copy=False
default='draft'
index=True
readonly=True
string='Status'
track_visibility='onchange'
args: [('draft', 'Quotation'), ('sent', 'Quotation Sent'), ('sale', 'Sale Order'), ('done', 'Done'), ('cancel', 'Cancelled')]
team_id
Many2one → crm.team
change_default=True
default=_get_default_team
oldname='section_id'
args: 'crm.team', 'Sales Team'
user_id
Many2one → res.users
default=<expr>
index=True
string='Salesperson'
track_visibility='onchange'
args: 'res.users'
validity_date
Date
readonly=True
states={'draft': [('readonly', False)], 'sent': [('readonly', False)]}
string='Expiration Date'
action_cancel(self)
action_confirm(self)
action_done(self)
action_draft(self)
action_invoice_create(self, grouped=False, final=False)
action_quotation_send(self)
action_view_invoice(self)
button_dummy(self)
create(self, vals)
force_quotation_send(self)
onchange_partner_id(self)
onchange_partner_shipping_id(self)
print_quotation(self)
unlink(self)
No new fields.
Public methods (0)No public methods.
company_id
Many2one
readonly=True
related='order_id.company_id'
store=True
string='Company'
currency_id
Many2one
readonly=True
related='order_id.currency_id'
store=True
string='Currency'
customer_lead
Float
default=0.0
help='Number of days between the order confirmation and the shipping of the products to the customer'
oldname='delay'
required=True
args: 'Delivery Lead Time'
discount
Float
default=0.0
digits=dp.get_precision('Discount')
string='Discount (%)'
invoice_lines
Many2many → account.invoice.line
copy=False
string='Invoice Lines'
args: 'account.invoice.line', 'sale_order_line_invoice_rel', 'order_line_id', 'invoice_line_id'
invoice_status
Selection
compute='_compute_invoice_status'
default='no'
readonly=True
store=True
string='Invoice Status'
args: [('upselling', 'Upselling Opportunity'), ('invoiced', 'Fully Invoiced'), ('to invoice', 'To Invoice'), ('no', 'Nothing to Invoice')]
name
Text
required=True
string='Description'
order_id
Many2one → sale.order
copy=False
index=True
ondelete='cascade'
required=True
string='Order Reference'
args: 'sale.order'
order_partner_id
Many2one
related='order_id.partner_id'
store=True
string='Customer'
price_reduce
Monetary
compute='_get_price_reduce'
readonly=True
store=True
string='Price Reduce'
price_subtotal
Monetary
compute='_compute_amount'
readonly=True
store=True
string='Subtotal'
price_tax
Monetary
compute='_compute_amount'
readonly=True
store=True
string='Taxes'
price_total
Monetary
compute='_compute_amount'
readonly=True
store=True
string='Total'
price_unit
Float
default=0.0
digits=dp.get_precision('Product Price')
required=True
args: 'Unit Price'
procurement_ids
One2many → procurement.order
string='Procurements'
args: 'procurement.order', 'sale_line_id'
product_id
Many2one → product.product
change_default=True
domain=[('sale_ok', '=', True)]
ondelete='restrict'
required=True
string='Product'
args: 'product.product'
product_uom
Many2one → product.uom
required=True
string='Unit of Measure'
args: 'product.uom'
product_uom_qty
Float
default=1.0
digits=dp.get_precision('Product Unit of Measure')
required=True
string='Quantity'
qty_delivered
Float
copy=False
default=0.0
digits=dp.get_precision('Product Unit of Measure')
string='Delivered'
qty_delivered_updateable
Boolean
compute='_compute_qty_delivered_updateable'
default=True
readonly=True
string='Can Edit Delivered'
qty_invoiced
Float
compute='_get_invoice_qty'
default=0.0
digits=dp.get_precision('Product Unit of Measure')
readonly=True
store=True
string='Invoiced'
qty_to_invoice
Float
compute='_get_to_invoice_qty'
default=0.0
digits=dp.get_precision('Product Unit of Measure')
readonly=True
store=True
string='To Invoice'
salesman_id
Many2one
readonly=True
related='order_id.user_id'
store=True
string='Salesperson'
sequence
Integer
default=10
string='Sequence'
state
Selection
copy=False
default='draft'
readonly=True
related='order_id.state'
store=True
string='Order Status'
args: [('draft', 'Quotation'), ('sent', 'Quotation Sent'), ('sale', 'Sale Order'), ('done', 'Done'), ('cancel', 'Cancelled')]
tax_id
Many2many → account.tax
domain=['|', ('active', '=', False), ('active', '=', True)]
string='Taxes'
args: 'account.tax'
create(self, values)
invoice_line_create(self, invoice_id, qty)
product_id_change(self)
product_uom_change(self)
unlink(self)
write(self, values)
| REPOSITORY | |
|---|---|
| REPOSITORY | odoo/odoo |
| GIT | |
| GIT | https://github.com/odoo/odoo.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/odoo/odoo/tree/8.0/sale |
| VERSION | |
| VERSION | 1.0 |
| CATEGORY | |
| CATEGORY | Sales Management |
| LICENSE | |
| LICENSE | LGPL-3 |
| APPLICATION | |
| APPLICATION | Yes |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | OpenERP SA |
| MAINTAINERS | |
| MAINTAINERS | OpenERP SA |
| COMMITTERS | |
| COMMITTERS | Raphael Collet, Atul Patel (OpenERP), Randhir Mayatra (OpenERP), Stephane Wirtel, Odoo Translation Bot, Turkesh Patel (Open ERP), Christophe Matthieu, ajay javiya (OpenERP), Martin Trigaux, Ajay Chauhan (OpenERP), Foram Katharotiya (OpenERP), Fabien Pinckaers, Antony Lesuisse, Olivier Dony, Tejas Tank, Thibault Delavallée, Vo Minh Thu, Josse Colpaert, Launchpad Translations on behalf of openerp, Quentin (OpenERP), Denis Ledoux, Fabien Meghazi, niv-openerp, ggh-openerp, Christophe Simonis, Xavier Morel, Goffin Simon, Bhumi Thakkar (Open ERP), Cedric Snauwaert, Simon Lejeune, Gilles Major, Vishmita, Nicolas Martinelli, Chirag Dodiya (OpenERP Trainee), Ravish (Open ERP), Anaël Closson, Amit Bhavsar (Open ERP), Paramjit Singh Sahota, Nicolas Lempereur, Anand Patel (OpenERP), Julien Legros, Nimesh Contractor (OpenERP), Richard Mathot, qdp-odoo, Géry Debongnie, jke-openerp, Aaron Bohy, Vishmita Jadeja (openerp), Bharat R. Devnani (OpenERP), Richard Mathot (OpenERP), ged-odoo, chm@openerp.com, Mahendra Barad (OpenERP), openerp-sle, Jeremy Kersten, Gery Debongnie, Randhir Mayatra rma-openerp, sgo@tinyerp.com, Darshan Kalola (OpenERP), Darshan Kalola, Yogesh Parekh (OpenERP), Sunil Sharma (OpenERP), Pooja Zankhariya (OpenERP), Prashant Panchal (OpenERP), Ravi Gadhia, DJ Patel, Denis Michiels |
| WEBSITE | |
| WEBSITE | https://www.odoo.com/page/crm |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-05 23:45:39 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
odoo/odoo: - sales_team - base - base_setup - web_kanban - web - web_kanban_sparkline - account_voucher - account - product - decimal_precision - report - analytic - board - edi - email_template - procurement |
| 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
The Dashboard for the Sales Manager will include
------------------------------------------------
* My Quotations
* Monthly Turnover (Graph)
|
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
account_invoice_form |
Account Invoice | account.invoice | data | Inherits account.invoice_form |
account_invoice_groupby_inherit |
account.invoice.groupby | account.invoice | xpath | Inherits account.view_account_invoice_filter |
account_invoice_tree |
Account Invoice | account.invoice | data | Inherits account.invoice_tree |
crm_case_section_salesteams_view_form |
crm.case.section.form | crm.case.section | data | Inherits sales_team.crm_case_section_view_form |
crm_case_section_salesteams_view_kanban |
crm.case.section.kanban | crm.case.section | data | Inherits sales_team.crm_case_section_salesteams_view_kanban |
crm_lead_partner_kanban_view |
res.partner.kanban.saleorder.inherit | res.partner | field | Inherits base.res_partner_kanban_view |
product_form_view_sale_order_button |
product.product.sale.order | product.product | xpath | Inherits product.product_normal_form_view |
product_template_form_view_sale_order_button |
product.template.sale.order.button | product.template | xpath | Inherits product.product_template_only_form_view |
report_saleorder |
report_saleorder | ir.ui.view | qweb | New |
report_saleorder_document |
report_saleorder_document | ir.ui.view | qweb | New |
res_partner_address_type |
res.partner.view.address_type | res.partner | xpath | Inherits base.view_partner_form |
res_partner_view_buttons |
res.partner.view.buttons | res.partner | xpath | Inherits base.view_partner_form |
view_account_config |
account settings | account.config.settings | separator | Inherits account.view_account_config_settings |
view_account_invoice_report_search_inherit |
account.invoice.report.search | account.invoice.report | filter | Inherits account.view_account_invoice_report_search |
view_company_inherit_form2 |
res.company.form.inherit | res.company | xpath | Inherits base.view_company_form |
view_order_form |
sale.order.form | sale.order | form | New |
view_order_form_editable_list |
sale.order.form.editable.list | sale.order | xpath | Inherits sale.view_order_form |
view_order_line_form2 |
sale.order.line.form2 | sale.order.line | form | New |
view_order_line_tree |
sale.order.line.tree | sale.order.line | tree | New |
view_order_product_graph |
sale.report.graph | sale.report | graph | New |
view_order_product_search |
sale.report.search | sale.report | search | New |
view_order_tree |
sale.order.tree | sale.order | tree | New |
view_quotation_tree |
sale.order.tree | sale.order | tree | New |
view_sale_advance_payment_inv |
Invoice Order | 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_line_make_invoice |
Sales OrderLine Make Invoice | sale.order.line.make.invoice | form | New |
view_sale_order_make_invoice |
Create invoices | sale.make.invoice | form | New |
view_sales_config |
sale settings | sale.config.settings | div | Inherits base_setup.view_sale_config_settings |
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 |
view_sales_order_uninvoiced_line_filter |
sale.order.uninvoiced.line | sale.order.line | search | New |
No new fields.
Public methods (4)default_get(self, cr, uid, fields, context=None)
onchange_task_work(self, cr, uid, ids, task_work, context=None)
onchange_timesheet(self, cr, uid, ids, timesheet, context=None)
set_sale_defaults(self, cr, uid, ids, context=None)
| REPOSITORY | |
|---|---|
| REPOSITORY | odoo/odoo |
| GIT | |
| GIT | https://github.com/odoo/odoo.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/odoo/odoo/tree/7.0/sale |
| VERSION | |
| VERSION | 1.0 |
| CATEGORY | |
| CATEGORY | Sales Management |
| LICENSE | |
| LICENSE | LGPL-3 |
| APPLICATION | |
| APPLICATION | Yes |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | OpenERP SA |
| MAINTAINERS | |
| MAINTAINERS | OpenERP SA |
| COMMITTERS | |
| COMMITTERS | Raphael Collet, Jagdish Panchal (Open ERP), Twinkle Christian (OpenERP), Cecile Tonglet, Rucha (Open ERP), Atul Patel (OpenERP), Jalpesh Patel (OpenERP), Randhir Mayatra (OpenERP), Stephane Wirtel, Odoo Translation Bot, Turkesh Patel (Open ERP), Numerigraphe - Lionel Sausin, Christophe Matthieu, Pinakin Nayi (OpenERP), Benoit Guillot, DBR (OpenERP), Harry (OpenERP), Antonin Bourguignon, pankita shah (Open ERP), ajay javiya (OpenERP), Martin Trigaux, Ajay Chauhan (OpenERP), Foram Katharotiya (OpenERP), Bhumika (OpenERP), Purnendu Singh (OpenERP), Saurang Suthar (OpenERP), Fabien Pinckaers, Antony Lesuisse, Bharat Devnani (OpenERP), Meera Trambadia (OpenERP), Saurang Suthar, Olivier Dony, Rajesh Prajapati (OpenERP), Twinkle (OpenERP), Divyesh Makwana (Open ERP), Tejas Tank, Thibault Delavallée, Vo Minh Thu, Hardik, Josse Colpaert, Arnaud Pineux, pso (OpenERP), Sbh (Openerp), Amit Patel (OpenERP), Launchpad Translations on behalf of openerp, vta vta@openerp.com, Quentin (OpenERP), Kuldeep Joshi (OpenERP), Nimesh (Open ERP), Denis Ledoux, Mayur Maheshwari (OpenERP), Jigar Amin - OpenERP, Sanjay Gohel (Open ERP), Alexis de Lattre, help, Fabien Meghazi, niv-openerp, Xavier ALT, Christophe Simonis, Ujjvala Collins (OpenERP), Jiten (OpenERP), Dharti Ratani (OpenERP), Goffin Simon, Khushboo Bhatt (Open ERP), dle@openerp.com, Bhumi Thakkar (Open ERP), Cedric Snauwaert, Amit Patel, Simon Lejeune, Frédéric van der Essen, Gilles Major, Chris Biersbach, Vishmita, Hardik Ansodariya, Dhruti Shastri (OpenERP), Yannick Vaucher, Ravish (Open ERP), Vidhin Mehta (OpenERP), csn-openerp, Amit (OpenERP), RGA(OpenERP), Najlaâ, Julien Legros, MVA, Stefan Rijnhart, Peter Langenberg, Juan Rial, Mohammed Shekha (OpenERP), florian da Costa, Thibault Delavallee |
| WEBSITE | |
| WEBSITE | http://www.openerp.com |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-05 23:43:10 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
odoo/odoo: - account_voucher - account - base_setup - base - web_kanban - web - product - process - decimal_precision - analytic - board - edi - email_template |
| 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
The Dashboard for the Sales Manager will include
------------------------------------------------
* My Quotations
* Monthly Turnover (Graph)
|
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
board_sales_form |
board.sales.form | board.board | form | New |
crm_lead_partner_kanban_view |
res.partner.kanban.saleorder.inherit | res.partner | field | Inherits base.res_partner_kanban_view |
res_partner_address_type |
res.partner.view.address_type | res.partner | xpath | Inherits base.view_partner_form |
res_partner_view_buttons |
res.partner.view.buttons | res.partner | xpath | Inherits base.view_partner_form |
view_account_config |
account settings | account.config.settings | separator | Inherits account.view_account_config_settings |
view_order_form |
sale.order.form | sale.order | form | New |
view_order_form_editable_list |
sale.order.form.editable.list | sale.order | xpath | Inherits sale.view_order_form |
view_order_line_form2 |
sale.order.line.form2 | sale.order.line | form | New |
view_order_line_tree |
sale.order.line.tree | sale.order.line | tree | New |
view_order_product_graph |
sale.report.graph | sale.report | graph | New |
view_order_product_search |
sale.report.search | sale.report | search | New |
view_order_product_tree |
sale.report.tree | sale.report | tree | New |
view_order_tree |
sale.order.tree | sale.order | tree | New |
view_quotation_tree |
sale.order.tree | sale.order | tree | New |
view_sale_advance_payment_inv |
Invoice Order | 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_line_make_invoice |
Sales OrderLine Make Invoice | sale.order.line.make.invoice | form | New |
view_sale_order_make_invoice |
Create invoices | sale.make.invoice | form | New |
view_sales_config |
sale settings | sale.config.settings | div | Inherits base_setup.view_sale_config_settings |
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 |
view_sales_order_uninvoiced_line_filter |
sale.order.uninvoiced.line | sale.order.line | search | New |
view_shop_form |
sale.shop | sale.shop | form | New |
view_shop_tree |
sale.shop | sale.shop | tree | New |
view_turnover_by_month_graph |
turnover.by.month.graph | account.invoice.report | graph | New |
view_turnover_by_month_tree |
turnover.by.month.tree | account.invoice.report | tree | New |
No models found for this module.
| REPOSITORY | |
|---|---|
| REPOSITORY | odoo/odoo |
| GIT | |
| GIT | https://github.com/odoo/odoo.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/odoo/odoo/tree/6.1/sale |
| VERSION | |
| VERSION | 1.0 |
| CATEGORY | |
| CATEGORY | Sales Management |
| LICENSE | |
| LICENSE | LGPL-3 |
| APPLICATION | |
| APPLICATION | Yes |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | OpenERP SA |
| MAINTAINERS | |
| MAINTAINERS | OpenERP SA |
| COMMITTERS | |
| COMMITTERS | Raphael Collet, Jagdish Panchal (Open ERP), Rucha (Open ERP), Stephane Wirtel, Numerigraphe - Lionel Sausin, Benoit Guillot, DBR (OpenERP), Harry (OpenERP), Fabien Pinckaers, Antony Lesuisse, Bharat Devnani (OpenERP), Meera Trambadia (OpenERP), Olivier Dony, Divyesh Makwana (Open ERP), Vo Minh Thu, pso (OpenERP), Launchpad Translations on behalf of openerp, Quentin (OpenERP), Mayur Maheshwari (OpenERP), Alexis de Lattre, vro, Fabien Meghazi, niv-openerp, Xavier ALT, Ujjvala Collins (OpenERP), Xavier Morel, Anael Closson, Khushboo Bhatt (Open ERP), Serpent Consulting Services, Amit (OpenERP), Minh Tran, Rifakat, Thibault Francois, Raphaël Valyi, Vaibhav (OpenERP), Carlos Vásquez, ksa (Open ERP), Husen Daudi, Els Van Vossel, Israel Fermin Montilla, Hardik Ansodariy (OpenERP), ssu, rch-openerp, Bharat (OpenERP), ARA (OpenERP), aag (OpenERP), ron@tinyerp.com, mtr, fp, qdp-launchpad@tinyerp.com, ksa (OpenERP), Mustufa Rangwala, psi (Open ERP), Tejas (OpenERP), Amit Parmar (OpenERP), RavishchanraMurari (Open ERP), Kirti Savalia (OpenERP), Hemendra Paregi (Open ERP), skh, Dhara (OpenERP), Atik Agewan (OpenERP), Ariel Figueroa, bde, arifmlpm@gmail.com |
| WEBSITE | |
| WEBSITE | http://www.openerp.com |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-05 23:41:35 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
odoo/odoo: - stock - product - base - process - decimal_precision - account - base_setup - analytic - board - edi - email_template - base_tools - procurement |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES | Not have |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION |
The base module to manage quotations and sales orders.
======================================================
Workflow with validation steps:
-------------------------------
* Quotation -> Sales order -> Invoice
Invoicing methods:
------------------
* Invoice on order (before or after shipping)
* Invoice on delivery
* Invoice on timesheets
* Advance invoice
Partners preferences:
---------------------
* shipping
* invoicing
* incoterm
Products stocks and prices
--------------------------
Delivery methods:
-----------------
* all at once
* multi-parcel
* delivery costs
Dashboard for Sales Manager that includes:
------------------------------------------
* Quotations
* Sales by Month
* Graph of Sales by Salesman in last 90 days
* Graph of Sales per Customer in last 90 days
* Graph of Sales by Product's Category in last 90 days
|
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
board_sales_form |
board.sales.form | board.board | form | New |
board_sales_manager_form |
board.sales.manager.form | board.board | form | New |
mrp_company |
res.company.mrp.config | res.company | page | Inherits base.view_company_form |
stock_move_sale |
stock.move.form | stock.move | xpath | Inherits stock.view_move_form |
stock_picking_inherit_sale |
stock.picking.form | stock.picking | field | Inherits stock.view_picking_form |
stock_picking_out_inherit_sale |
Outgoing picking Inherited | stock.picking | field | Inherits stock.view_picking_out_form |
view_config_picking_policy |
Setup Your Invoicing Method | sale.config.picking_policy | data | Inherits base.res_config_view_base |
view_order_form |
sale.order.form | sale.order | form | New |
view_order_line_form2 |
sale.order.line.form2 | sale.order.line | form | New |
view_order_line_graph |
sale.order.line.graph | sale.order.line | graph | New |
view_order_line_tree |
sale.order.line.tree | sale.order.line | tree | New |
view_order_product_graph |
sale.report.graph | sale.report | graph | New |
view_order_product_search |
sale.report.search | sale.report | search | New |
view_order_product_tree |
sale.report.tree | sale.report | tree | New |
view_order_tree |
sale.order.tree | sale.order | tree | New |
view_sale_advance_payment_inv |
Advance Invoice | sale.advance.payment.inv | form | New |
view_sale_open_invoice |
Open Invoice | sale.open.invoice | 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_line_make_invoice |
Sales OrderLine Make Invoice | sale.order.line.make.invoice | form | New |
view_sale_order_make_invoice |
Create invoices | sale.make.invoice | form | New |
view_sales_by_month_tree |
view.sales.by.month.tree | sale.report | tree | New |
view_sales_by_partner_graph |
sales.by.partner.graph | sale.report | graph | New |
view_sales_by_salesman_graph |
sales.by.salesman.graph | sale.report | graph | 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 |
view_sales_order_uninvoiced_line_filter |
sale.order.uninvoiced.line | sale.order.line | search | New |
view_sales_product_total_price_graph |
sold.product.total.price.graph | sale.report | graph | New |
view_shop_form |
sale.shop | sale.shop | form | New |
view_shop_tree |
sale.shop | sale.shop | tree | New |
view_top_quotations_tree |
sale.top.quotations.tree | sale.order | tree | New |
view_turnover_by_month_graph |
turnover.by.month.graph | account.invoice.report | graph | New |
view_turnover_by_month_tree |
turnover.by.month.tree | account.invoice.report | tree | New |
No models found for this module.