[PYTHON] ~update copyright
[burette/etudesetchantiersidf.git] / wizard / account_export_csv.py
index 2bd51d5..bcd82e9 100644 (file)
@@ -3,7 +3,7 @@
 #
 #    etudesetchantiersidf module for OpenERP, Custom module for Étude et
 #    Chantiers île-de-France
-#    Copyright (C) 2014-2022 etudesetchantiersidf
+#    Copyright (C) 2014-2023 etudesetchantiersidf
 #    (<http://etudesetchantiersiledefrance.unarec.org/>)
 #
 #    This file is a part of etudesetchantiersidf
@@ -30,8 +30,8 @@ import csv
 import codecs
 import calendar
 import datetime
+import string
 
-import openerp.exceptions
 from openerp.osv import osv
 from openerp.tools.translate import _
 from openerp.addons.account_export_csv.wizard.account_export_csv import AccountUnicodeWriter
@@ -77,7 +77,7 @@ class AccountCSVExport(osv.osv_memory):
         }
 
     def _get_header_sage(self, cr, uid, ids, context=None):
-        """docstring for _get_header_sage"""
+        """Return header for SAGE export"""
         return [_(u'Code du journal'),
                 _(u'N° de pièce'),
                 _(u'Date'),
@@ -90,23 +90,41 @@ class AccountCSVExport(osv.osv_memory):
                 _(u'Crédit'),
                 ]
 
+    def format_row_sage(self, dico, numero_piece, side):
+        """Return a formatted row for SAGE export"""
+        if side == "D":
+            debit = dico['debit']
+            credit = 0
+        if side == "C":
+            debit = 0
+            credit = dico['credit']
+        return [
+            dico['journal_code'],
+            numero_piece,
+            dico['date'],
+            dico['account_code'],
+            dico['compte_tiers'],
+            dico['general_analytic'],
+            dico['analytic_account'],
+            dico['client_name'],
+            debit,
+            credit,
+            ]
+
     def _get_rows_sage(self, cr, uid, ids,
                        fiscalyear_id,
                        period_range_ids,
                        journal_ids,
                        account_ids=None,
                        context=None):
-        fiscalyear_obj = self.pool.get('account.fiscalyear')
-        fiscalyear_code = fiscalyear_obj.browse(cr, uid, fiscalyear_id, context=context)
-        fiscalyear_code = fiscalyear_obj.browse(cr, uid, fiscalyear_id, context=context).code
-
         period_obj = self.pool.get('account.period')
         journal_obj = self.pool.get('account.journal')
         account_obj = self.pool.get('account.account')
+        account_type_obj = self.pool.get('account.account.type')
         numero_piece = 0
         prev_period = 0
         prev_journal = 0
-        req = """
+        cr.execute("""
             select
                 aml.period_id,
                 aml.journal_id as journal_id,
@@ -127,95 +145,61 @@ class AccountCSVExport(osv.osv_memory):
                 period_id,
                 journal_id,
                 account_id
-           """ % {
-               'period_ids': tuple(period_range_ids),
-               'journal_ids': tuple(journal_ids),
-               'account_ids': tuple(account_ids),
-           }
-        cr.execute(req)
+           """,
+                   {
+                       'period_ids': tuple(period_range_ids),
+                       'journal_ids': tuple(journal_ids),
+                       'account_ids': tuple(account_ids),
+                       }
+                   )
         res = cr.fetchall()
         rows = []
         for line in res:
+            dico = {}
             journal = journal_obj.browse(cr, uid, line[1], context=context)
-            journal_code = journal.code[0:2]
+            dico['journal_code'] = journal.code[0:2]
+            if dico['journal_code'] in ('BQ', 'CB'):
+                dico['journal_code'] = 'OD'
             period = period_obj.browse(cr, uid, line[0], context=context)
             if prev_journal != journal or prev_period != period:
                 numero_piece += 1
             year = int(period.code[3:7])
             month = int(period.code[0:2])
             day = calendar.monthrange(year, month)[1]
-            date = datetime.datetime(year, month, day).strftime("%d/%m/%Y")
+            dico['date'] = datetime.datetime(year, month, day).strftime(
+                    "%d/%m/%Y")
             account = account_obj.browse(cr, uid, line[2], context=context)
-            account_code = account.code
-            client_name = journal.name.split(" - ", 1)[1].upper()
+            dico['account_code'] = account.code
+            preformatted_client_name = journal.name.split(" - ", 1)[1].upper().replace(' ', '')
+            for char in string.punctuation:
+                preformatted_client_name = preformatted_client_name.replace(
+                        char, '')
+            dico['client_name'] = preformatted_client_name
             if account.type in ("receivable", "payable"):
-                compte_tiers = client_name
-            else:
-                compte_tiers = ""
-            general_analytic = "G"
-            analytic_account = ""
-            debit = line[3]
-            credit = line[4]
-            if debit == credit:
-                pass
+                dico['compte_tiers'] = dico['client_name']
             else:
-                if debit:
-                    rows.append([
-                        journal_code,
-                        numero_piece,
-                        date,
-                        account_code,
-                        compte_tiers,
-                        general_analytic,
-                        analytic_account,
-                        client_name,
-                        debit,
-                        0,
-                        ])
-                if credit:
-                    rows.append([
-                        journal_code,
-                        numero_piece,
-                        date,
-                        account_code,
-                        compte_tiers,
-                        general_analytic,
-                        analytic_account,
-                        client_name,
-                        0,
-                        credit,
-                        ])
-                if account.type == "other":
-                    general_analytic = "A"
-                    analytic_account = journal.code[3:]
-                    if debit:
-                        rows.append([
-                            journal_code,
-                            numero_piece,
-                            date,
-                            account_code,
-                            compte_tiers,
-                            general_analytic,
-                            analytic_account,
-                            client_name,
-                            debit,
-                            0,
-                            ])
-                    if credit:
-                        rows.append([
-                            journal_code,
-                            numero_piece,
-                            date,
-                            account_code,
-                            compte_tiers,
-                            general_analytic,
-                            analytic_account,
-                            client_name,
-                            0,
-                            credit,
-                            ])
-
-
+                dico['compte_tiers'] = ""
+            dico['general_analytic'] = "G"
+            dico['analytic_account'] = ""
+            dico['debit'] = line[3]
+            dico['credit'] = line[4]
+            if dico['debit']:
+                row = self.format_row_sage(dico, numero_piece, "D")
+                rows.append(row)
+            if dico['credit']:
+                row = self.format_row_sage(dico, numero_piece, "C")
+                rows.append(row)
+            account_type = account_type_obj.browse(
+                    cr, uid, account.user_type.id, context=context)
+            if account_type.code in ("expense", "income"):
+                dico['general_analytic'] = "A"
+                dico['analytic_account'] = journal.code[2:]
+                if dico['debit']:
+                    row = self.format_row_sage(dico, numero_piece, "D")
+                    rows.append(row)
+                if dico['credit']:
+                    row = self.format_row_sage(dico, numero_piece, "C")
+                    rows.append(row)
 
             prev_journal = journal
             prev_period = period