commit 0dedf0967fdb8fb42a4f58c7363a5d3b1723bb60 Author: MReenen Date: Sun Nov 20 20:44:45 2022 +0100 inital commit diff --git a/convert.home.py b/convert.home.py new file mode 100644 index 0000000..512ddb4 --- /dev/null +++ b/convert.home.py @@ -0,0 +1,206 @@ +import fs +import csv + +def parseRow(row, header): + d = {} + for i in range(0, len(row)): + d[header[i]] = row[i] + return d + +def deparseRow(row): + header = list(row.keys()) + data = [] + for key in header: + if(type(row[key]) != "String"): + row[key] = str(row[key]) + data.append(row[key]) + return (header, data) + +Keys = [] +def convert(row): + global Keys + + print(row) + + #row['Datum'] = f'{row["Datum"][0:4]}-{row["Datum"][4:6]}-{row["Datum"][6:8]}' + row['Datum'] = row['Datum'].split('-') + row['Datum'] = f'{row["Datum"][2]}-{row["Datum"][1]}-{row["Datum"][0]}' + row['date'] = row['Datum'] + del row['Datum'] + + #none 0 + #credidcard 1 + #cheque 2 + #cash 3 + #if(row['Mutatiesoort'] == 'Overschrijving'): + # row['payment'] = 4 + #elif(row['Mutatiesoort'] == 'iDEAL'): + # row['payment'] = 7 #standing order + #elif(row['Mutatiesoort'] == 'Online bankieren'): + # row['payment'] = 8 #electronic payment + #elif(row['Mutatiesoort'] == 'Diversen'): + # row['payment'] = 10 #FI fee + #del row['Mutatiesoort'] + row['payment'] = 0 + + #row['Tag'] = row['Tag'].split(',') + row['Tag'] = [""] + + row['info'] = '' + if(len(row['Tag']) > 1): + row['info'] = row['Tag'][1] + + row['payee'] = f'{row["Naam / Omschrijving"]} ({row["Tegenrekening"]})' + + if( len(row['Mededelingen']) > 6 + and (row['Mededelingen'][:6] == 'Naam: ' + or row['Mededelingen'][:6] == 'Name: ')): + # print(row['Mededelingen']) + memo = row['Mededelingen'].split(': ') + key = 'name' + values = {} + for i in range(1, len(memo)): + memo[i] = memo[i].split(' ') + nextKey = memo[i].pop() + values[key] = ' '.join(memo[i]) + key = nextKey + values[list(values.keys())[-1]] = key + if(values['name'] == row['Naam / Omschrijving']): + del values['name'] + if('IBAN' in values and values['IBAN'] == row['Tegenrekening']): + del values['IBAN'] + if('Datum/Tijd' in values): + del values['Datum/Tijd'] + if('Valutadatum' in values): + del values['Valutadatum'] + row['Mededelingen'] = '' + for key in list(values.keys()): + row['Mededelingen'] += f'{key}: {values[key]} ' + + row['memo'] = row['Mededelingen'] + del row['Mededelingen'] + + #row['Bedrag (EUR)'] = float(row['Bedrag (EUR)'].replace(',', '.')) + row['Bedrag'] = float(row['Bedrag'].replace(',', '.')) + #if(row['Af Bij'] == 'Af'): + # row['Bedrag (EUR)'] = -row['Bedrag (EUR)'] + row['amount'] = row['Bedrag'] + #row['amount'] = row['Bedrag (EUR)'] + #del row['Bedrag (EUR)'] + del row['Bedrag'] + #del row['Af Bij'] + + row['category'] = row['Tag'][0] + # if(row['category'] == ''): + # row['category'] = guessFonds(row) + + row['tags'] = '' + + del row['Tag'] + #del row['Code'] + #del row['Saldo na mutatie'] + del row['Naam / Omschrijving'] + del row['Rekening'] + del row['Tegenrekening'] + del row[''] + + return row + +def main(): + global Keys + rows = [] + csv.register_dialect('2004', delimiter=';', quoting=csv.QUOTE_ALL) + csv.register_dialect('new', delimiter=',', quoting=csv.QUOTE_NONE) + with open('input.csv', mode ='r') as file: + imp = csv.reader(file, 'new') + + headers = False + + for row in imp: + if(headers == False): + headers = row + else: + rows.append(parseRow(row, headers)) + + file.close() + + for row in rows: + # print("import") + # print(row) + row = convert(row) + # print("export") + # print(row) + print(Keys) + + with open('homebank.csv', mode='w') as file: + header, row = deparseRow(rows[0]) + header = '";"'.join(header) + header = f'"{header}"\n' + + file.write(header) + + # fondsen = ['WF', 'BF', 'KHF', 'LF', 'UNKOWN'] + # fondsFiles = {} + # for fonds in fondsen: + # fondsFiles[fonds] = open(f'homebank-{fonds}.csv', 'w') + # fondsFiles[fonds].write(header) + + for row in rows: + fonds = row['category'] + header, row = deparseRow(row) + row = '";"'.join(row) + row = f'"{row}"\n' + file.write(row) + + # try: + # fondsFiles[fonds].write(row) + # except: + # fondsFiles['UNKOWN'].write(row) + + + + + + + + +# def splitColls(row): +# colls = [''] +# quote = '' +# coll = 0 +# for i in range(0, length(row)): +# if row[i] == ';' && quote == '': +# colls[length(colls)] = '' +# coll += 1 +# continue +# else if row[i] == '"': +# if quote == '"': +# quote = '' +# continue +# else if not quote == "'": +# quote == "'" +# continue +# row[coll] += row[i] +# return colls +# +# def parseRow(row, headers): +# colls = splitColls(row) +# data = +# +# def readExport(filename): +# with f as open(filename, 'r'): +# rows = f.readlines() +# +# headers = False +# +# for row in rows: +# if(headers == False): +# headers = splitColls(row) +# else: +# yield parseRow(row, headers) + +if __name__ == '__main__': + main() + + +# "Datum";"Naam / Omschrijving";"Rekening";"Tegenrekening";"Code";"Af Bij";"Bedrag (EUR)";"Mutatiesoort";"Mededelingen";"Saldo na mutatie";"Tag" diff --git a/convert.py b/convert.py new file mode 100644 index 0000000..2549bcb --- /dev/null +++ b/convert.py @@ -0,0 +1,208 @@ +import fs +import csv + +def parseRow(row, header): + d = {} + for i in range(0, len(row)): + d[header[i]] = row[i] + return d + +def deparseRow(row): + header = list(row.keys()) + data = [] + for key in header: + if(type(row[key]) != "String"): + row[key] = str(row[key]) + data.append(row[key]) + return (header, data) + +def guessFonds(row): + if("wasmunt" in row['memo'].lower()): + return 'WF' + if(row['amount'] == 5.0 or row['amount'] == 10.0): + return 'WF' + + if("maandelijkse vergoeding" in row['memo'].lower()): + return 'BF' + if("maandelijks vergoeding" in row['memo'].lower()): + return 'BF' + if(row['payee'] == "Kosten Zakelijk Betalingsverkeer ()"): + return "BF" + + return 'UNKOWN' + +Keys = [] +def convert(row): + global Keys + row['Datum'] = f'{row["Datum"][0:4]}-{row["Datum"][4:6]}-{row["Datum"][6:8]}' + row['date'] = row['Datum'] + del row['Datum'] + + #none 0 + #credidcard 1 + #cheque 2 + #cash 3 + if(row['Mutatiesoort'] == 'Overschrijving'): + row['payment'] = 4 + elif(row['Mutatiesoort'] == 'iDEAL'): + row['payment'] = 7 #standing order + elif(row['Mutatiesoort'] == 'Online bankieren'): + row['payment'] = 8 #electronic payment + elif(row['Mutatiesoort'] == 'Diversen'): + row['payment'] = 10 #FI fee + del row['Mutatiesoort'] + + row['Tag'] = row['Tag'].split(',') + row['info'] = '' + if(len(row['Tag']) > 1): + row['info'] = row['Tag'][1] + + row['payee'] = f'{row["Naam / Omschrijving"]} ({row["Tegenrekening"]})' + + if( len(row['Mededelingen']) > 6 + and (row['Mededelingen'][:6] == 'Naam: ' + or row['Mededelingen'][:6] == 'Name: ')): + # print(row['Mededelingen']) + memo = row['Mededelingen'].split(': ') + key = 'name' + values = {} + for i in range(1, len(memo)): + memo[i] = memo[i].split(' ') + nextKey = memo[i].pop() + values[key] = ' '.join(memo[i]) + key = nextKey + values[list(values.keys())[-1]] = key + if(values['name'] == row['Naam / Omschrijving']): + del values['name'] + if('IBAN' in values and values['IBAN'] == row['Tegenrekening']): + del values['IBAN'] + if('Datum/Tijd' in values): + del values['Datum/Tijd'] + if('Valutadatum' in values): + del values['Valutadatum'] + row['Mededelingen'] = '' + for key in list(values.keys()): + row['Mededelingen'] += f'{key}: {values[key]} ' + + row['memo'] = row['Mededelingen'] + del row['Mededelingen'] + + row['Bedrag (EUR)'] = float(row['Bedrag (EUR)'].replace(',', '.')) + if(row['Af Bij'] == 'Af'): + row['Bedrag (EUR)'] = -row['Bedrag (EUR)'] + row['amount'] = row['Bedrag (EUR)'] + del row['Bedrag (EUR)'] + del row['Af Bij'] + + row['category'] = row['Tag'][0] + if(row['category'] == ''): + row['category'] = guessFonds(row) + + row['tags'] = '' + + del row['Tag'] + del row['Code'] + del row['Saldo na mutatie'] + del row['Naam / Omschrijving'] + del row['Rekening'] + del row['Tegenrekening'] + + return row + +def main(): + global Keys + rows = [] + csv.register_dialect('thing', delimiter=';', quoting=csv.QUOTE_ALL) + with open('coolhaven_2022.csv', mode ='r') as file: + imp = csv.reader(file, 'thing') + + headers = False + + for row in imp: + if(headers == False): + headers = row + else: + rows.append(parseRow(row, headers)) + + file.close() + + for row in rows: + # print("import") + # print(row) + row = convert(row) + # print("export") + # print(row) + print(Keys) + + with open('homebank.csv', mode='w') as file: + header, row = deparseRow(rows[0]) + header = '";"'.join(header) + header = f'"{header}"\n' + + file.write(header) + + fondsen = ['WF', 'BF', 'KHF', 'LF', 'UNKOWN'] + fondsFiles = {} + for fonds in fondsen: + fondsFiles[fonds] = open(f'homebank-{fonds}.csv', 'w') + fondsFiles[fonds].write(header) + + for row in rows: + fonds = row['category'] + header, row = deparseRow(row) + row = '";"'.join(row) + row = f'"{row}"\n' + file.write(row) + + try: + fondsFiles[fonds].write(row) + except: + fondsFiles['UNKOWN'].write(row) + + + + + + + + +# def splitColls(row): +# colls = [''] +# quote = '' +# coll = 0 +# for i in range(0, length(row)): +# if row[i] == ';' && quote == '': +# colls[length(colls)] = '' +# coll += 1 +# continue +# else if row[i] == '"': +# if quote == '"': +# quote = '' +# continue +# else if not quote == "'": +# quote == "'" +# continue +# row[coll] += row[i] +# return colls +# +# def parseRow(row, headers): +# colls = splitColls(row) +# data = +# +# def readExport(filename): +# with f as open(filename, 'r'): +# rows = f.readlines() +# +# headers = False +# +# for row in rows: +# if(headers == False): +# headers = splitColls(row) +# else: +# yield parseRow(row, headers) + +if __name__ == '__main__': + main() + + +# "Datum";"Naam / Omschrijving";"Rekening";"Tegenrekening";"Code";"Af Bij";"Bedrag (EUR)";"Mutatiesoort";"Mededelingen";"Saldo na mutatie";"Tag"