diff --git a/addons/account/models/partner.py b/addons/account/models/partner.py index f03549400987556c6df9f66a634964f8d92fbec5..a1ec3abcdb5ac28367a1af7138fe8eea5a9bf45e 100644 --- a/addons/account/models/partner.py +++ b/addons/account/models/partner.py @@ -168,11 +168,17 @@ class AccountFiscalPosition(models.Model): # This can be easily overridden to apply more complex fiscal rules PartnerObj = self.env['res.partner'] partner = PartnerObj.browse(partner_id) + delivery = PartnerObj.browse(delivery_id) - # if no delivery use invoicing - if delivery_id: - delivery = PartnerObj.browse(delivery_id) - else: + company = self.env.company + eu_country_codes = set(self.env.ref('base.europe').country_ids.mapped('code')) + intra_eu = vat_exclusion = False + if company.vat and partner.vat: + intra_eu = company.vat[:2] in eu_country_codes and partner.vat[:2] in eu_country_codes + vat_exclusion = company.vat[:2] == partner.vat[:2] + + # If company and partner have the same vat prefix (and are both within the EU), use invoicing + if not delivery or (intra_eu and vat_exclusion): delivery = partner # partner manually set fiscal position always win