[REV] sale: do not precompute fields depending on x2m
and do not force precomputation on side models, it would reduce their performance.
This commit is contained in:
committed by
Yannick Tivisse
parent
f36334d97a
commit
31c3894b80
@@ -40,11 +40,11 @@ class AccountAnalyticLine(models.Model):
|
||||
|
||||
task_id = fields.Many2one(
|
||||
'project.task', 'Task', index=True,
|
||||
compute='_compute_task_id', store=True, readonly=False, precompute=True,
|
||||
compute='_compute_task_id', store=True, readonly=False,
|
||||
domain="[('company_id', '=', company_id), ('project_id.allow_timesheets', '=', True), ('project_id', '=?', project_id)]")
|
||||
project_id = fields.Many2one(
|
||||
'project.project', 'Project', domain=_domain_project_id,
|
||||
compute='_compute_project_id', store=True, readonly=False, precompute=True)
|
||||
compute='_compute_project_id', store=True, readonly=False)
|
||||
user_id = fields.Many2one(compute='_compute_user_id', store=True, readonly=False)
|
||||
employee_id = fields.Many2one('hr.employee', "Employee", domain=_domain_employee_id)
|
||||
department_id = fields.Many2one('hr.department', "Department", compute='_compute_department_id', store=True, compute_sudo=True)
|
||||
|
||||
@@ -937,7 +937,7 @@ class Task(models.Model):
|
||||
copy=False,
|
||||
readonly=True)
|
||||
project_id = fields.Many2one('project.project', string='Project', recursive=True,
|
||||
compute='_compute_project_id', store=True, readonly=False, precompute=True,
|
||||
compute='_compute_project_id', store=True, readonly=False,
|
||||
index=True, tracking=True, check_company=True, change_default=True)
|
||||
# Defines in which project the task will be displayed / taken into account in statistics.
|
||||
# Example: 1 task A with 1 subtask B in project P
|
||||
@@ -968,7 +968,7 @@ class Task(models.Model):
|
||||
help="The current user's personal task stage.")
|
||||
partner_id = fields.Many2one('res.partner',
|
||||
string='Customer', recursive=True, tracking=True,
|
||||
compute='_compute_partner_id', store=True, readonly=False, precompute=True,
|
||||
compute='_compute_partner_id', store=True, readonly=False,
|
||||
domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]")
|
||||
partner_is_company = fields.Boolean(related='partner_id.is_company', readonly=True)
|
||||
commercial_partner_id = fields.Many2one(related='partner_id.commercial_partner_id')
|
||||
|
||||
@@ -224,7 +224,7 @@ class SaleOrderLine(models.Model):
|
||||
('invoiced', 'Fully Invoiced'),
|
||||
('to invoice', 'To Invoice'),
|
||||
('no', 'Nothing to Invoice')
|
||||
], string='Invoice Status', compute='_compute_invoice_status', store=True, precompute=True)
|
||||
], string='Invoice Status', compute='_compute_invoice_status', store=True)
|
||||
price_unit = fields.Float(
|
||||
'Unit Price', required=True, digits='Product Price',
|
||||
compute='_compute_price_unit', store=True, readonly=False, precompute=True)
|
||||
@@ -287,21 +287,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, precompute=True,
|
||||
compute='_compute_qty_delivered', store=True, readonly=False,
|
||||
digits='Product Unit of Measure')
|
||||
qty_to_invoice = fields.Float(
|
||||
compute='_compute_qty_to_invoice', string='To Invoice Quantity', store=True, precompute=True,
|
||||
compute='_compute_qty_to_invoice', string='To Invoice Quantity', store=True,
|
||||
digits='Product Unit of Measure')
|
||||
qty_invoiced = fields.Float(
|
||||
compute='_compute_qty_invoiced', string='Invoiced Quantity', store=True, precompute=True,
|
||||
compute='_compute_qty_invoiced', string='Invoiced Quantity', store=True,
|
||||
digits='Product Unit of Measure')
|
||||
|
||||
untaxed_amount_invoiced = fields.Monetary(
|
||||
"Untaxed Invoiced Amount",
|
||||
compute='_compute_untaxed_amount_invoiced', store=True, precompute=True)
|
||||
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, precompute=True)
|
||||
compute='_compute_untaxed_amount_to_invoice', store=True)
|
||||
|
||||
analytic_tag_ids = fields.Many2many(
|
||||
'account.analytic.tag', string='Analytic Tags',
|
||||
|
||||
@@ -12,7 +12,7 @@ class Project(models.Model):
|
||||
|
||||
sale_line_id = fields.Many2one(
|
||||
'sale.order.line', 'Sales Order Item', copy=False,
|
||||
compute="_compute_sale_line_id", store=True, readonly=False, index=True, precompute=True,
|
||||
compute="_compute_sale_line_id", store=True, readonly=False, index=True,
|
||||
domain="[('is_service', '=', True), ('is_expense', '=', False), ('state', 'in', ['sale', 'done']), ('order_partner_id', '=?', partner_id), '|', ('company_id', '=', False), ('company_id', '=', company_id)]",
|
||||
help="Sales order item to which the project is linked. Link the timesheet entry to the sales order item defined on the project. "
|
||||
"Only applies on tasks without sale order item defined, and if the employee is not in the 'Employee/Sales Order Item Mapping' of the project.")
|
||||
@@ -141,7 +141,7 @@ class ProjectTask(models.Model):
|
||||
sale_line_id = fields.Many2one(
|
||||
'sale.order.line', 'Sales Order Item',
|
||||
copy=False, tracking=True, index=True, recursive=True,
|
||||
compute='_compute_sale_line', store=True, readonly=False, precompute=True,
|
||||
compute='_compute_sale_line', store=True, readonly=False,
|
||||
domain="[('company_id', '=', company_id), ('is_service', '=', True), ('order_partner_id', 'child_of', commercial_partner_id), ('is_expense', '=', False), ('state', 'in', ['sale', 'done'])]",
|
||||
help="Sales Order Item to which the time spent on this task will be added, in order to be invoiced to your customer.")
|
||||
project_sale_order_id = fields.Many2one('sale.order', string="Project's sale order", related='project_id.sale_order_id')
|
||||
|
||||
@@ -25,9 +25,7 @@ class AccountAnalyticLine(models.Model):
|
||||
compute='_compute_timesheet_invoice_type', compute_sudo=True, store=True, readonly=True)
|
||||
commercial_partner_id = fields.Many2one('res.partner', compute="_compute_commercial_partner")
|
||||
timesheet_invoice_id = fields.Many2one('account.move', string="Invoice", readonly=True, copy=False, help="Invoice created from the timesheet")
|
||||
so_line = fields.Many2one(
|
||||
compute="_compute_so_line", store=True, readonly=False, precompute=True,
|
||||
domain="[('is_service', '=', True), ('is_expense', '=', False), ('state', 'in', ['sale', 'done']), ('order_partner_id', 'child_of', commercial_partner_id)]")
|
||||
so_line = fields.Many2one(compute="_compute_so_line", store=True, readonly=False, domain="[('is_service', '=', True), ('is_expense', '=', False), ('state', 'in', ['sale', 'done']), ('order_partner_id', 'child_of', commercial_partner_id)]")
|
||||
# we needed to store it only in order to be able to groupby in the portal
|
||||
order_id = fields.Many2one(related='so_line.order_id', store=True, readonly=False)
|
||||
is_so_line_edited = fields.Boolean("Is Sales Order Item Manually Edited")
|
||||
|
||||
@@ -54,7 +54,7 @@ class Project(models.Model):
|
||||
default=_default_timesheet_product_id)
|
||||
warning_employee_rate = fields.Boolean(compute='_compute_warning_employee_rate')
|
||||
partner_id = fields.Many2one(
|
||||
compute='_compute_partner_id', store=True, readonly=False, precompute=True)
|
||||
compute='_compute_partner_id', store=True, readonly=False)
|
||||
|
||||
@api.depends('sale_line_id', 'sale_line_employee_ids', 'allow_billable')
|
||||
def _compute_pricing_type(self):
|
||||
|
||||
@@ -12,7 +12,7 @@ class ProjectProductEmployeeMap(models.Model):
|
||||
employee_id = fields.Many2one('hr.employee', "Employee", required=True)
|
||||
sale_line_id = fields.Many2one(
|
||||
'sale.order.line', "Sales Order Item",
|
||||
compute="_compute_sale_line_id", store=True, readonly=False, precompute=True,
|
||||
compute="_compute_sale_line_id", store=True, readonly=False,
|
||||
domain="""[
|
||||
('is_service', '=', True),
|
||||
('is_expense', '=', False),
|
||||
|
||||
@@ -117,7 +117,7 @@ class StockMove(models.Model):
|
||||
"its current stock) to gather products. If we want to chain moves and have this one to wait for the previous, "
|
||||
"this second option should be chosen.")
|
||||
scrapped = fields.Boolean(
|
||||
'Scrapped', related='location_dest_id.scrap_location', readonly=True, store=True, precompute=True)
|
||||
'Scrapped', related='location_dest_id.scrap_location', readonly=True, store=True)
|
||||
scrap_ids = fields.One2many('stock.scrap', 'move_id')
|
||||
group_id = fields.Many2one('procurement.group', 'Procurement Group', default=_default_group_id)
|
||||
rule_id = fields.Many2one(
|
||||
|
||||
Reference in New Issue
Block a user