From 48401aa9a0d40db1e0711063ed27e6a9f761e89e Mon Sep 17 00:00:00 2001 From: Yannick Tivisse Date: Mon, 22 Nov 2021 13:21:48 +0100 Subject: [PATCH] [IMP] sale: Convert _onchange_partner_shipping_id into computed field --- addons/account/models/account_move.py | 6 +++--- addons/sale/models/account_move.py | 24 ++++++++++++++---------- 2 files changed, 17 insertions(+), 13 deletions(-) diff --git a/addons/account/models/account_move.py b/addons/account/models/account_move.py index 05e1b70f524..b62213a584a 100644 --- a/addons/account/models/account_move.py +++ b/addons/account/models/account_move.py @@ -284,9 +284,9 @@ class AccountMove(models.Model): # ========================================================= # ==== Business fields ==== - fiscal_position_id = fields.Many2one('account.fiscal.position', string='Fiscal Position', readonly=True, - states={'draft': [('readonly', False)]}, - check_company=True, + fiscal_position_id = fields.Many2one( + 'account.fiscal.position', string='Fiscal Position', readonly=True, + states={'draft': [('readonly', False)]}, check_company=True, domain="[('company_id', '=', company_id)]", ondelete="restrict", help="Fiscal positions are used to adapt taxes and accounts for particular customers or sales orders/invoices. " "The default value comes from the customer.") diff --git a/addons/sale/models/account_move.py b/addons/sale/models/account_move.py index ba9fb504bdc..5b12b143188 100644 --- a/addons/sale/models/account_move.py +++ b/addons/sale/models/account_move.py @@ -4,6 +4,7 @@ from odoo import api, fields, models, _ from odoo.exceptions import UserError + class AccountMove(models.Model): _name = 'account.move' _inherit = ['account.move', 'utm.mixin'] @@ -24,22 +25,25 @@ class AccountMove(models.Model): states={'draft': [('readonly', False)]}, domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]", help="Delivery address for current invoice.") + # UTMs - enforcing the fact that we want to 'set null' when relation is unlinked campaign_id = fields.Many2one(ondelete='set null') medium_id = fields.Many2one(ondelete='set null') source_id = fields.Many2one(ondelete='set null') - @api.onchange('partner_shipping_id', 'company_id') - def _onchange_partner_shipping_id(self): - """ - Trigger the change of fiscal position when the shipping address is modified. - """ - delivery_partner = self.env['res.partner'].browse(self._get_invoice_delivery_partner_id()) - fiscal_position = self.env['account.fiscal.position'].with_company(self.company_id)._get_fiscal_position( - self.partner_id, delivery=delivery_partner) + fiscal_position_id = fields.Many2one( + compute='_compute_fiscal_position_id', store=True, pre_compute=True) - if fiscal_position: - self.fiscal_position_id = fiscal_position + + @api.depends('partner_shipping_id', 'company_id') + def _compute_fiscal_position_id(self): + # Trigger the change of fiscal position when the shipping address is modified. + for move in self: + delivery_partner = self.env['res.partner'].browse(move._get_invoice_delivery_partner_id()) + fiscal_position = self.env['account.fiscal.position'].with_company( + move.company_id)._get_fiscal_position(move.partner_id, delivery=delivery_partner) + if fiscal_position: + move.fiscal_position_id = fiscal_position def unlink(self): downpayment_lines = self.mapped('line_ids.sale_line_ids').filtered(lambda line: line.is_downpayment and line.invoice_lines <= self.mapped('line_ids'))