from .main import CsvToMt940, TypeId from datetime import date, datetime import pandas as pd import re class Transi(CsvToMt940): def __init__(self, filename, iban): super().__init__() self.filename = filename self.iban = iban self._info_df = pd.read_csv(self.filename, nrows=5, skiprows=5) self._trans_df = pd.read_csv(self.filename, skiprows=16, keep_default_na=False).astype({'Sold contabil': 'object'}) self._trans_df.to_csv('logged_btrl.csv', mode='a', header=False) # not os.path.exists('logged_bacx.csv') self.iban = self._info_df['Criterii de cautare'][0][:-4] self.transactions = map(self._statm_transactions, self._trans_df.values) self._ibans = {'RO23BACX0000001138725001': 'MZK', 'RO93BACX0000001138725002': 'MZK', 'RO50BACX0000001138725000': 'MZK', 'RO26BTRL01301202N63584XX': 'MZK', 'RO65BACX0000001144439000': 'ALP', 'RO44BTRL01301205G46199XX': 'GE'} def _isdebit(self, value): try: self.dig_it(value) return True except ValueError: return False def convert(self): with open('transi_mt940-{}-{}-{}.txt'.format(self.st_date, self._ibans[self.iban], self.iban), 'w') as export: export.write(self._statm_header()) for elem in self.transactions: export.write(elem) export.write(self._statm_footer()) def _statm_header(self): self.o_bal = self.dig_it(str(self._trans_df['Sold contabil'][0])) if self.o_bal > 0: cd_mark = 'C' else: cd_mark = 'D' if re.search(',|.', str(self._trans_df['Sold contabil'][0])): n = str(self._trans_df['Sold contabil'][0]).replace(',', '').replace('.', ',') else: n = str(self._trans_df['Sold contabil'][0]) tr_ref_nr = ':20:' + str(self._info_df['Criterii de cautare'][0]) + '\n' acc_id = ':25:' + self.iban + '\n' st_ref = ':28:' + str(self.st_nr) + '\n' in_op_balance = ':60F:' + cd_mark + self.st_date +\ self._info_df['Criterii de cautare'][0][-3:] + n + '\n' return tr_ref_nr + acc_id + st_ref + in_op_balance def _statm_transactions(self, elem): if self._isdebit(str(elem[4])) is False: CD_mark = 'C' else: CD_mark = 'D' if re.search('-', str(elem[4])): elem[4] = str(elem[4]).replace('-', '') if re.search(',|.', str(elem[4])): elem[4] = str(elem[4]).replace(',', '').replace('.', ',') if re.search(',|.', str(elem[5])): elem[5] = str(elem[5]).replace(',', '').replace('.', ',') if re.search(TypeId.types, elem[2], flags=re.RegexFlag.IGNORECASE): trans_type = TypeId.COMMISION else: trans_type = TypeId.TRANSFER if self._isdebit(elem[4]): tr = ':61:' + elem[0][2:4] + elem[0][5:7] + elem[0][8:10] + elem[0][5:7] +\ elem[0][8:10] + CD_mark + elem[4] + trans_type + str(elem[3]) + '\n' inf = elem[2] + '\n' more_inf = ':86:' + '+31' + ''.join(elem[2].split(sep=';')[-2:-1]) +\ '\n' + '+32' + ''.join(elem[2].split(sep=';')[-3:-2]) + '+33/' + '\n' return tr + inf + more_inf else: tr = ':61:' + elem[0][2:4] + elem[0][5:7] + elem[0][8:10] + elem[0][5:7] +\ elem[0][8:10] + CD_mark + elem[5] + trans_type + str(elem[3]) + '\n' inf = elem[2] + '\n' more_inf = ':86:' + '+31' + ''.join(elem[2].split(sep=';')[-2:-1]) +\ '\n' + '+32' + ''.join(elem[2].split(sep=';')[-3:-2]) + '+33/' + '\n' return tr + inf + more_inf def _statm_footer(self): c_bal = self.dig_it(str(self._trans_df['Sold contabil'] [len(self._trans_df) - 1])) if c_bal > 0: cd_mark = 'C' else: cd_mark = 'D' if re.search(',|.', str(self._trans_df['Sold contabil'] [len(self._trans_df) - 1])): n = str(self._trans_df['Sold contabil']\ [len(self._trans_df) - 1]).replace(',', '').replace('.', ',') else: n = str(self._trans_df['Sold contabil'][len(self._trans_df) - 1]) fin_op_balance = ':62F:' + cd_mark + self.st_date +\ self._info_df['Criterii de cautare'][0][-3:] + n return fin_op_balance