[IMP] sale: Convert _onchange_partner_shipping_id into computed field

This commit is contained in:
Yannick Tivisse
2021-12-02 12:12:03 +01:00
parent 5863070066
commit 48401aa9a0
2 changed files with 17 additions and 13 deletions
+3 -3
View File
@@ -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.")
+14 -10
View File
@@ -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'))