From 795aa94cef8fbf92828d1553052411dff3507fe0 Mon Sep 17 00:00:00 2001 From: Yannick Tivisse Date: Mon, 22 Nov 2021 12:34:36 +0100 Subject: [PATCH] [IMP] sale: Make several fields pre_compute=True to avoid double computations --- addons/sale/models/sale_order.py | 2 +- addons/sale/models/sale_order_line.py | 38 ++++++++++++++++----------- 2 files changed, 24 insertions(+), 16 deletions(-) diff --git a/addons/sale/models/sale_order.py b/addons/sale/models/sale_order.py index 5d03d692da7..f443528f5c7 100644 --- a/addons/sale/models/sale_order.py +++ b/addons/sale/models/sale_order.py @@ -266,7 +266,7 @@ class SaleOrder(models.Model): string='Authorized Transactions', copy=False) show_update_pricelist = fields.Boolean( string='Has Pricelist Changed', - compute='_compute_show_update_pricelist', store=True, readonly=True, + compute='_compute_show_update_pricelist', store=True, readonly=True, pre_compute=True, help="Technical Field, True if the pricelist was changed;\n" " this will then display a recomputation button") tag_ids = fields.Many2many('crm.tag', 'sale_order_tag_rel', 'order_id', 'tag_id', string='Tags') diff --git a/addons/sale/models/sale_order_line.py b/addons/sale/models/sale_order_line.py index a81b6f8ec01..0614f13e74e 100644 --- a/addons/sale/models/sale_order_line.py +++ b/addons/sale/models/sale_order_line.py @@ -230,17 +230,19 @@ class SaleOrderLine(models.Model): price_tax = fields.Float(compute='_compute_amount', string='Total Tax', store=True) price_total = fields.Monetary(compute='_compute_amount', string='Total', store=True) - price_reduce = fields.Float(compute='_compute_price_reduce', string='Price Reduce', digits='Product Price', store=True) + price_reduce = fields.Float( + string='Price Reduce', digits='Product Price', + compute='_compute_price_reduce', store=True, pre_compute=True) tax_id = fields.Many2many( 'account.tax', string='Taxes', - compute='_compute_tax_id', store=True, readonly=False, + compute='_compute_tax_id', store=True, readonly=False, pre_compute=True, domain=['|', ('active', '=', False), ('active', '=', True)]) price_reduce_taxinc = fields.Monetary(compute='_compute_price_reduce_taxinc', string='Price Reduce Tax inc', store=True) price_reduce_taxexcl = fields.Monetary(compute='_compute_price_reduce_taxexcl', string='Price Reduce Tax excl', store=True) discount = fields.Float( string='Discount (%)', digits='Discount', - compute='_compute_discount', store=True, readonly=False) + compute='_compute_discount', store=True, readonly=False, pre_compute=True) product_id = fields.Many2one( 'product.product', string='Product', domain="[('sale_ok', '=', True), '|', ('company_id', '=', False), ('company_id', '=', company_id)]", @@ -261,18 +263,18 @@ class SaleOrderLine(models.Model): product_custom_attribute_value_ids = fields.One2many( 'product.attribute.custom.value', 'sale_order_line_id', string="Custom Values", copy=True, - compute='_compute_custom_attribute_values', store=True, readonly=False) + compute='_compute_custom_attribute_values', store=True, readonly=False, pre_compute=True) # M2M holding the values of product.attribute with create_variant field set to 'no_variant' # It allows keeping track of the extra_price associated to those attribute values and add them to the SO line description product_no_variant_attribute_value_ids = fields.Many2many( 'product.template.attribute.value', string="Extra Values", ondelete='restrict', - compute='_compute_no_variant_attribute_values', store=True, readonly=False) + compute='_compute_no_variant_attribute_values', store=True, readonly=False, pre_compute=True) - qty_delivered_method = fields.Selection([ - ('manual', 'Manual'), - ('analytic', 'Analytic From Expenses') - ], string="Method to update delivered qty", compute='_compute_qty_delivered_method', store=True, + qty_delivered_method = fields.Selection( + [('manual', 'Manual'), + ('analytic', 'Analytic From Expenses')], string="Method to update delivered qty", + compute='_compute_qty_delivered_method', store=True, pre_compute=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" @@ -280,17 +282,21 @@ class SaleOrderLine(models.Model): " - Stock Moves: the quantity comes from confirmed pickings\n") qty_delivered = fields.Float( 'Delivered Quantity', copy=False, - compute='_compute_qty_delivered', store=True, readonly=False, + compute='_compute_qty_delivered', store=True, readonly=False, pre_compute=True, digits='Product Unit of Measure') qty_to_invoice = fields.Float( - compute='_compute_qty_to_invoice', string='To Invoice Quantity', store=True, + compute='_compute_qty_to_invoice', string='To Invoice Quantity', store=True, pre_compute=True, digits='Product Unit of Measure') qty_invoiced = fields.Float( - compute='_compute_qty_invoiced', string='Invoiced Quantity', store=True, + compute='_compute_qty_invoiced', string='Invoiced Quantity', store=True, pre_compute=True, digits='Product Unit of Measure') - untaxed_amount_invoiced = fields.Monetary("Untaxed Invoiced Amount", compute='_compute_untaxed_amount_invoiced', store=True) - untaxed_amount_to_invoice = fields.Monetary("Untaxed Amount To Invoice", compute='_compute_untaxed_amount_to_invoice', store=True) + untaxed_amount_invoiced = fields.Monetary( + "Untaxed Invoiced Amount", + compute='_compute_untaxed_amount_invoiced', store=True, pre_compute=True) + untaxed_amount_to_invoice = fields.Monetary( + "Untaxed Amount To Invoice", + compute='_compute_untaxed_amount_to_invoice', store=True, pre_compute=True) analytic_tag_ids = fields.Many2many( 'account.analytic.tag', string='Analytic Tags', @@ -302,7 +308,9 @@ class SaleOrderLine(models.Model): " They are not copied when duplicating a sales order.") # Related stored fields from the order - currency_id = fields.Many2one(related='order_id.currency_id', depends=['order_id.currency_id'], store=True, string='Currency', pre_compute=True) + currency_id = fields.Many2one( + related='order_id.currency_id', depends=['order_id.currency_id'], + store=True, string='Currency', pre_compute=True) company_id = fields.Many2one(related='order_id.company_id', string='Company', store=True, index=True, pre_compute=True) order_partner_id = fields.Many2one(related='order_id.partner_id', store=True, string='Customer', pre_compute=True) salesman_id = fields.Many2one(related='order_id.user_id', store=True, string='Salesperson', pre_compute=True)