fixed some bugs, improved main

This commit is contained in:
Anton
2026-04-30 03:23:24 +02:00
parent 82daeffaf8
commit c5d823cfb4
2 changed files with 33 additions and 22 deletions

View File

@@ -26,25 +26,32 @@ class Forderung:
def __str__(self): def __str__(self):
return f"Name{self.name}, Haben {self.haben}, Soll {self.soll}, Amount {self.amount},Verwendung {self.text}" return f"Name{self.name}, Haben {self.haben}, Soll {self.soll}, Amount {self.amount},Verwendung {self.text}"
def printC(forderungen:dict):
for key,values in forderungen.items():
print(f"//////////////{key}/////////////////////////////")
for nkey,nvalues in values.items():
print(f" {nkey}, {nvalues}")
def print_to_file_lexware(forderungen:dict): def print_to_file_lexware(forderungen:dict):
""" """
print Forderungen to a file, that can be read by lexware according the following format: print Forderungen to a file, that can be read by lexware according the following format:
"Belegdatum";"Buchungsdatum";"Buchungstext"; "Buchungsbetrag"; "Sollkonto";"Habenkonto";"Kostenstelle" "Belegdatum";"Buchungstext"; "Buchungsbetrag"; "Sollkonto";"Habenkonto";"Kostenstelle"
01.03.2025; 19.02.2026;2; "Miete Familienzimmer"; 357,08; 12161; 4107; 200 01.03.2025; "Miete Familienzimmer"; 357,08; 12161; 4107; 200
""" """
print('Start Drucken der Forderugen') print('Start Drucken der Forderugen')
names = read_account_names(config.filename_debitoren) names = read_account_names(config.filename_debitoren)
#print(names)
#printC(forderungen)
for period, forderung in forderungen.items(): for period, forderung in forderungen.items():
if forderung !={}: if forderung !={}:
filename = f"output/{period[0]}-{period[1]:02d}_Forderungen_Familienzimmer.csv" filename = f"output/{period[0]}-{period[1]:02d}_Forderungen_Familienzimmer.csv"
print(f"\t ...{filename}") print(f"\t ...{filename}")
with open(filename, "w",encoding="cp1252", newline="\r\c") as file: with open(filename, "w",encoding="cp1252", newline="\r\n") as file:
file.write("\"Belegdatum\";\"Buchungstext\";\"Buchungsbetrag\";\"Sollkonto\";\"Habenkonto\";\"Kostenstelle\"\n") file.write("\"Belegdatum\";\"Buchungstext\";\"Buchungsbetrag\";\"Sollkonto\";\"Habenkonto\";\"Kostenstelle\"\n")
for key in forderung: for key in forderung:
f = forderung[key] f = forderung[key]
name = names[key] name = ' '.join(names[key[0]])
file.write(f"01.{period[1]:02d}.{period[0]};\"{name} {f.text}\";{f.amount};{key};{f.haben};{f.kostenstelle}\n") file.write(f"01.{period[1]:02d}.{period[0]};\"{name} {f.text}\";{f.amount};{f.soll};{f.haben};{f.kostenstelle}\n")
print("Fertig mit Drucken der Forderungen.") print("Fertig mit Drucken der Forderungen.")
def create_forderungen(forderungen:dict, period:tuple, id_subject:tuple, belegdatum:str, amount:float, soll:int|None, haben:str, kostenstelle:str)->dict: def create_forderungen(forderungen:dict, period:tuple, id_subject:tuple, belegdatum:str, amount:float, soll:int|None, haben:str, kostenstelle:str)->dict:
@@ -119,14 +126,15 @@ def create_forderungen_familienzimmer(filename:str, accounts:dict, forderungen:d
""" """
print(f"Start Einlesen der Buchungen des Familienźimmers von {filename}") print(f"Start Einlesen der Buchungen des Familienźimmers von {filename}")
priceFamilyRooms = readPriceFamilyRooms(config.filname_price_familyroom) priceFamilyRooms = readPriceFamilyRooms(config.filname_price_familyroom)
counter = 0 counter_recievables = 0
counter_errors = 0
try: try:
with open(filename, "r") as file: with open(filename, "r") as file:
reader = csv.DictReader(file) reader = csv.DictReader(file)
for row in reader: for row in reader:
name = row["Created by"] name = row["Created by"]
name = getWords(name) name = getWords(name)
id_subject = (getID(accounts, name[1:]), "Familienzimmer") id_subject = (getID(accounts, name), "Familienzimmer")
month = getMonth(row["End time"].split(" ")[2]) month = getMonth(row["End time"].split(" ")[2])
year = row["End time"].split(" ")[3] year = row["End time"].split(" ")[3]
@@ -136,15 +144,16 @@ def create_forderungen_familienzimmer(filename:str, accounts:dict, forderungen:d
duration = getDuration(row["Duration"]) duration = getDuration(row["Duration"])
number_person = getNumberPerson(row["Number of guests"]) number_person = getNumberPerson(row["Number of guests"])
price = getPrice(room, priceFamilyRooms, duration, number_person) price = getPrice(room, priceFamilyRooms, duration, number_person)
#print(f"{name[1]} {id_subject} {room} dauer {duration} Tage, personen {number_person} preis {price}") #print(f"{counter_recievables} \n{name[1]} {id_subject} {room} dauer {duration} Tage, personen {number_person} preis {price}")
datum = f"01.{period[1]:02d}.{period[0]}" datum = f"01.{period[1]:02d}.{period[0]}"
create_forderungen(forderungen,period,id_subject,datum, create_forderungen(forderungen,period,id_subject,datum,
price,id_subject[0],KN_HABEN_MIETE_FZ,KOSTENSTELLE_FZ) price,id_subject[0],KN_HABEN_MIETE_FZ,KOSTENSTELLE_FZ)
counter+=1 counter_recievables+=1
else: else:
counter_errors+=1
print(f"Fehler, Name nicht gefunden\n\t{row}") print(f"Fehler, Name nicht gefunden\n\t{row}")
print(f"Fertig mit Erstellen von {counter} Forderungen") print(f"Fertig mit Erstellen von {counter_recievables} Forderungen, {counter_errors}")
except IOError: except IOError:
print(f"Fehler, Datei {filename} nicht gefunden.") print(f"Fehler, Datei {filename} nicht gefunden.")
return forderungen return forderungen
@@ -170,9 +179,11 @@ def getWords(sentence:str)->list:
for c in sentence: for c in sentence:
if ord("a")<= ord(c) <= ord("z") or ord("A")<= ord(c) <= ord("Z") or ord("0")<= ord(c) <= ord("9"): if ord("a")<= ord(c) <= ord("z") or ord("A")<= ord(c) <= ord("Z") or ord("0")<= ord(c) <= ord("9"):
word = word + c word = word + c
elif len(word)>0: elif len(word)>2:
result.append(word) result.append(word)
word = "" word = ""
else:
word = ""
if len(word)>0: if len(word)>0:
result.append(word) result.append(word)
return result return result
@@ -267,7 +278,7 @@ def read_account_ids(filename:str)->dict:
def read_account_names(filename:str)->dict: def read_account_names(filename:str)->dict:
""" """
Create a dictionary from account id to name Create a dictionary: account id -> name
""" """
print(f"Start Einlesen der Kontonummern und Namen \"{filename}\" ") print(f"Start Einlesen der Kontonummern und Namen \"{filename}\" ")
try: try:

20
main.py
View File

@@ -17,11 +17,11 @@ def parse_args() -> argparse.Namespace:
def main(args: argparse.Namespace) -> None: def main(args: argparse.Namespace) -> None:
print("Willkommen zum Mieten Tool der Buchhaltung. Es könne folgende Aufgaben erledigt werden:\n\n" \ print("Willkommen zum Mieten Tool der Buchhaltung. Es könne folgende Aufgaben erledigt werden:\n\n" \
"\t1\t aus der Mietendatai eine in lexware importierbare csv Datei erstellen\n" \ "\t1\t alle ausgelesen Accounts mit Mame und Kontonummer anzeigen\n"\
"\t2\t alle ausgelesen Accounts mit Mame und Kontonummer anzeigen\n"\ "\t2\t aus der Mietendatai eine in lexware importierbare csv Datei erstellen\n" \
"\t3\t aus der Buchungsdatei der Familienzimmer die Forderungen berechnen und in eine csv datei schreiben\n"\ "\t3\t aus der Buchungsdatei der Familienzimmer die Forderungen berechnen und in eine csv datei schreiben\n"\
"\t4\t Tool verlassen\n\n" "\t4\t Tool verlassen\n\n"
"Gib die Nummer welche Aufgabe gemacht werden soll.\n") "Gib die Nummer welche Aufgabe gemacht werden soll.")
while True: while True:
forderung = {} forderung = {}
line = input() line = input()
@@ -30,7 +30,7 @@ def main(args: argparse.Namespace) -> None:
else: else:
#accounts #accounts
filename_debitoren = config.filename_debitoren filename_debitoren = config.filename_debitoren
newFilename = input(f"Aktuell werden die Debitoren aus der Datei {filename_debitoren} gelesen, wenn du eine andere Datei einlesen möchtest gib nun den neuen Pfad an:") newFilename = input(f"Aktuelle Datei der Debitoren {filename_debitoren}\n\t neuer Pfad(optional):")
if len(newFilename)>=2: if len(newFilename)>=2:
filename_debitoren = newFilename filename_debitoren = newFilename
accounts = f.read_account_ids(filename_debitoren) accounts = f.read_account_ids(filename_debitoren)
@@ -41,27 +41,27 @@ def main(args: argparse.Namespace) -> None:
names = f.read_account_names(filename_debitoren) names = f.read_account_names(filename_debitoren)
for id, name in names.items(): for id, name in names.items():
print(f"{id} {name}") print(f"{id} {name}")
print("Bitte gib die Nummer einer weitern Aufgabe ein:\n") print("\nBitte gib die Nummer einer weitern Aufgabe ein:")
elif line == "2": elif line == "2":
#Miete #Miete
filename_miete = config.filename_mieten filename_miete = config.filename_mieten
newFilename = input(f"Aktuell werden die Mietforderungen aus der Datei {filename_miete} gelesen.\n Wenn du eine andere Datei einlesen möchtest gib nun den neuen Pfad an:") newFilename = input(f"Aktuell Datei Mietforderungen {filename_miete}\n\t neuer Pfad(optional):")
if len(newFilename)>=2: if len(newFilename)>=2:
filename_miete = newFilename filename_miete = newFilename
forderung = f.create_forderungen_miete(filename_miete, accounts, forderung, 5, 2025) forderung = f.create_forderungen_miete(filename_miete, accounts, forderung, 5, 2025)
f.print_to_file_lexware(forderung) f.print_to_file_lexware(forderung)
print("Bitte gib die Nummer einer Weitern Aufgabe ein:\n") print("\nBitte gib die Nummer einer Weitern Aufgabe ein:")
elif line == "3": elif line == "3":
#familyrooms #familyrooms
filename_fz = config.filename_fz filename_fz = config.filename_fz
newFilename = input(f"Aktuell werden die Mietforderungen aus der Datei {filename_fz} gelesen.\n Wenn du eine andere Datei einlesen möchtest gib nun den neuen Pfad an:") newFilename = input(f"Aktuell Datei Buchungen {filename_fz}\n\t neuer Pfad(optional):")
if len(newFilename)>=2: if len(newFilename)>=2:
filename_fz = newFilename filename_fz = newFilename
forderung = f.create_forderungen_familienzimmer(filename_fz, accounts, forderung) forderung = f.create_forderungen_familienzimmer(filename_fz, accounts, forderung)
f.print_to_file_lexware(forderung) f.print_to_file_lexware(forderung)
print("Bitte gib die Nummer einer Weitern Aufgabe ein:\n") print("\nBitte gib die Nummer einer Weitern Aufgabe ein:")
else: else:
print("Ungültige Eingabe, bitte versuch es erneut!\n") print("\nUngültige Eingabe, bitte versuch es erneut!")
print("Auf Wiedersehen!") print("Auf Wiedersehen!")
if __name__ == "__main__": if __name__ == "__main__":