From 5c380376b97f0290e8f2be332a41dc356f86e237 Mon Sep 17 00:00:00 2001 From: Victor Champonnois <92781722+victor-champonnois@users.noreply.github.com> Date: Fri, 1 Mar 2024 16:15:54 +0100 Subject: [PATCH 1/2] [FIX] control on vat format Belgian VAT number now can start with a 1 rather than a 0 (see https://www.easytax.co/fr/tax-mag/info/belgique-changement-de-format-pour-les-numeros-de-tva-belges/) --- l10n_be_vat_reports/wizard/partner_vat_list_client.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/l10n_be_vat_reports/wizard/partner_vat_list_client.py b/l10n_be_vat_reports/wizard/partner_vat_list_client.py index 88912df23..4d3d0a424 100644 --- a/l10n_be_vat_reports/wizard/partner_vat_list_client.py +++ b/l10n_be_vat_reports/wizard/partner_vat_list_client.py @@ -21,17 +21,17 @@ class VATListingClients(models.TransientModel): @api.constrains("vat") def _check_vat_number(self): """ - Belgium VAT numbers must respect this pattern: 0[1-9]{1}[0-9]{8} + Belgium VAT numbers must respect this pattern: [0-1][0-9]{9} todo current code assumes vat numbers start with a two-letter country code """ - be_vat_pattern = re.compile(r"^BE0[1-9]{1}[0-9]{8}$") + be_vat_pattern = re.compile(r"^BE[0-1][0-9]{9}$") for client in self: if not be_vat_pattern.match(client.vat): raise ValidationError( _( "Belgian Intervat platform only accepts VAT numbers " - "matching this pattern: 0[1-9]{1}[0-9]{8} (number " + "matching this pattern: [0-1][0-9]{9} (number " "part). Check vat number %s for client %s" ) % (client.vat, client.name) From 0a56ed1147ea46ff61ba165f10c9b486dca8a563 Mon Sep 17 00:00:00 2001 From: Victor Champonnois <victor@coopiteasy.be> Date: Fri, 1 Mar 2024 17:18:43 +0100 Subject: [PATCH 2/2] [IMP] autoremove points in VAT numbers --- l10n_be_vat_reports/wizard/partner_vat_list.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/l10n_be_vat_reports/wizard/partner_vat_list.py b/l10n_be_vat_reports/wizard/partner_vat_list.py index f8ac33697..bfde615bd 100644 --- a/l10n_be_vat_reports/wizard/partner_vat_list.py +++ b/l10n_be_vat_reports/wizard/partner_vat_list.py @@ -41,7 +41,8 @@ def _compute_declarant_reference(self): _("No VAT number associated with your company.") ) - company_vat = company_vat.replace(" ", "").upper() + be_id = self.env.ref("base.be").id + company_vat = self.env["res.partner"].fix_eu_vat_number(be_id, company_vat) for listing in self: seq_declarantnum = self.env["ir.sequence"].next_by_code( "declarantnum" @@ -67,6 +68,7 @@ def get_partners(self): date_start = date(int(self.year), 1, 1) date_stop = date(int(self.year), 12, 31) + be_id = self.env.ref("base.be").id partners = self.env["partner.vat.list.client"].browse([]) be_partners = self.env["res.partner"].search([("vat", "ilike", "BE%")]) if not be_partners: @@ -140,7 +142,9 @@ def get_partners(self): self.env.cr.execute(query, args) seq = 0 for record in self.env.cr.dictfetchall(): - record["vat"] = record["vat"].replace(" ", "").upper() + record["vat"] = self.env["res.partner"].fix_eu_vat_number( + be_id, record["vat"] + ) if record["turnover"] >= self.limit_amount: seq += 1 record["seq"] = seq