This repository has been archived on 2025-01-25. You can view files and clone it, but cannot push or open issues or pull requests.
penningBot/convert.home.py
2023-02-07 16:23:36 +01:00

218 lines
5.7 KiB
Python
Executable File

#!/usr/bin/python3
import sys
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(inputFile):
global Keys
rows = []
csv.register_dialect('2004', delimiter=';', quoting=csv.QUOTE_ALL)
csv.register_dialect('new', delimiter=',', quoting=csv.QUOTE_NONE)
with open(inputFile, 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__':
print(sys.argv)
if (len(sys.argv) == 2):
main(sys.argv[1])
else:
print("please use one orgument for the path to the imputfile")
# if __name__ == '__main__':
# main()
# "Datum";"Naam / Omschrijving";"Rekening";"Tegenrekening";"Code";"Af Bij";"Bedrag (EUR)";"Mutatiesoort";"Mededelingen";"Saldo na mutatie";"Tag"