From 827410dc25cce05b5ee4a4ae8d9f041800b0cae8 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?J=C3=A9rome=20Perrin?= <jerome@nexedi.com>
Date: Fri, 31 Mar 2023 15:29:06 +0900
Subject: [PATCH] accounting_l10n_fr: fix filename of FEC.xml
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

> IX. – Le fichier des écritures comptables est nommé selon la
> nomenclature suivante :
>
> SirenFECAAAAMMJJ, où " Siren " est le Siren du contribuable mentionné
> à l'article L. 47 A et AAAAMMJJ la date de clôture de l'exercice
> comptable.
---
 ...Module_aggregateFrenchAccountingTransactionFile.py | 11 ++++++++++-
 ...odule_aggregateFrenchAccountingTransactionFile.xml |  2 +-
 ...odule_viewFrenchAccountingTransactionFileActive.py |  1 +
 .../test.erp5.testAccounting_l10n_fr.py               | 10 +++++++++-
 4 files changed, 21 insertions(+), 3 deletions(-)

diff --git a/bt5/erp5_accounting_l10n_fr/SkinTemplateItem/portal_skins/erp5_accounting_l10n_fr/AccountingTransactionModule_aggregateFrenchAccountingTransactionFile.py b/bt5/erp5_accounting_l10n_fr/SkinTemplateItem/portal_skins/erp5_accounting_l10n_fr/AccountingTransactionModule_aggregateFrenchAccountingTransactionFile.py
index 76275c2535..60edba1f6f 100644
--- a/bt5/erp5_accounting_l10n_fr/SkinTemplateItem/portal_skins/erp5_accounting_l10n_fr/AccountingTransactionModule_aggregateFrenchAccountingTransactionFile.py
+++ b/bt5/erp5_accounting_l10n_fr/SkinTemplateItem/portal_skins/erp5_accounting_l10n_fr/AccountingTransactionModule_aggregateFrenchAccountingTransactionFile.py
@@ -26,7 +26,16 @@ if test_compta_demat_compatibility:
 zipbuffer = StringIO()
 zipfilename = at_date.strftime('FEC-%Y%m%d.zip')
 zipfileobj = zipfile.ZipFile(zipbuffer, 'w', compression=zipfile.ZIP_DEFLATED)
-zipfileobj.writestr('FEC.xml', fec_file.encode('utf8'))
+filename = 'FEC.xml'
+if test_compta_demat_compatibility:
+  siren = ''
+  if section_uid_list:
+    siret_list = [b.getObject().getCorporateRegistrationCode() for b in portal.portal_catalog(uid=section_uid_list)]
+    siret_list = [siret for siret in siret_list if siret]
+    if len(siret_list) == 1:
+      siren = siret_list[0][:8]
+  filename = at_date.strftime('{siren}FEC%Y%m%d.xml').format(siren=siren)
+zipfileobj.writestr(filename, fec_file.encode('utf8'))
 zipfileobj.close()
 
 attachment_list = (
diff --git a/bt5/erp5_accounting_l10n_fr/SkinTemplateItem/portal_skins/erp5_accounting_l10n_fr/AccountingTransactionModule_aggregateFrenchAccountingTransactionFile.xml b/bt5/erp5_accounting_l10n_fr/SkinTemplateItem/portal_skins/erp5_accounting_l10n_fr/AccountingTransactionModule_aggregateFrenchAccountingTransactionFile.xml
index 83e5072630..b8c9af765a 100644
--- a/bt5/erp5_accounting_l10n_fr/SkinTemplateItem/portal_skins/erp5_accounting_l10n_fr/AccountingTransactionModule_aggregateFrenchAccountingTransactionFile.xml
+++ b/bt5/erp5_accounting_l10n_fr/SkinTemplateItem/portal_skins/erp5_accounting_l10n_fr/AccountingTransactionModule_aggregateFrenchAccountingTransactionFile.xml
@@ -50,7 +50,7 @@
         </item>
         <item>
             <key> <string>_params</string> </key>
-            <value> <string>at_date, active_process, user_name, test_compta_demat_compatibility</string> </value>
+            <value> <string>at_date, active_process, user_name, test_compta_demat_compatibility, section_uid_list</string> </value>
         </item>
         <item>
             <key> <string>_proxy_roles</string> </key>
diff --git a/bt5/erp5_accounting_l10n_fr/SkinTemplateItem/portal_skins/erp5_accounting_l10n_fr/AccountingTransactionModule_viewFrenchAccountingTransactionFileActive.py b/bt5/erp5_accounting_l10n_fr/SkinTemplateItem/portal_skins/erp5_accounting_l10n_fr/AccountingTransactionModule_viewFrenchAccountingTransactionFileActive.py
index f7b7e2f72f..61196a4a1b 100644
--- a/bt5/erp5_accounting_l10n_fr/SkinTemplateItem/portal_skins/erp5_accounting_l10n_fr/AccountingTransactionModule_viewFrenchAccountingTransactionFileActive.py
+++ b/bt5/erp5_accounting_l10n_fr/SkinTemplateItem/portal_skins/erp5_accounting_l10n_fr/AccountingTransactionModule_viewFrenchAccountingTransactionFileActive.py
@@ -111,4 +111,5 @@ context.activate(after_tag=(tag, aggregate_tag)).AccountingTransactionModule_agg
   active_process.getRelativeUrl(),
   user_name=user_name,
   test_compta_demat_compatibility=test_compta_demat_compatibility,
+  section_uid_list=section_uid_list,
 )
diff --git a/bt5/erp5_accounting_l10n_fr/TestTemplateItem/portal_components/test.erp5.testAccounting_l10n_fr.py b/bt5/erp5_accounting_l10n_fr/TestTemplateItem/portal_components/test.erp5.testAccounting_l10n_fr.py
index 7395d3167a..ea42c507db 100644
--- a/bt5/erp5_accounting_l10n_fr/TestTemplateItem/portal_components/test.erp5.testAccounting_l10n_fr.py
+++ b/bt5/erp5_accounting_l10n_fr/TestTemplateItem/portal_components/test.erp5.testAccounting_l10n_fr.py
@@ -56,6 +56,13 @@ class TestAccounting_l10n_fr(AccountingTestCase):
 
   def afterSetUp(self):
     AccountingTestCase.afterSetUp(self)
+    # set a corporate registration code (siret) on our section organisation
+    # > Le numéro SIRET (ou système d'identification du répertoire des
+    # > établissements) identifie chaque établissement de l'entreprise.
+    # > Il se compose de 14 chiffres : les neuf chiffres du numéro SIREN +
+    # > les cinq chiffres correspondant à un numéro NIC (numéro interne de
+    # > classement).
+    self.section.setCorporateRegistrationCode('12345689 12345')
     # set a french gap on test accounts
     account_module = self.portal.account_module
     account_module.payable.setGap('fr/pcg/4/40/401')
@@ -122,7 +129,8 @@ class TestAccounting_l10n_fr(AccountingTestCase):
         self.assertEqual('application/zip', content_type)
         data = part.get_payload(decode=True)
         zf = zipfile.ZipFile(StringIO(data))
-        return zf.open("FEC.xml").read()
+        self.assertIn("12345689FEC20141231.xml", zf.namelist())
+        return zf.open("12345689FEC20141231.xml").read()
     self.fail("Attachment not found")
 
   def test_FEC(self):
-- 
2.30.9