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