#
# 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
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
}
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'),
_(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,
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