From c5d823cfb4ffd84cfd7cb6a2c0771cbe88b4d7d3 Mon Sep 17 00:00:00 2001 From: Anton Date: Thu, 30 Apr 2026 03:23:24 +0200 Subject: [PATCH] fixed some bugs, improved main --- forderungen.py | 35 +++++++++++++++++++++++------------ main.py | 20 ++++++++++---------- 2 files changed, 33 insertions(+), 22 deletions(-) diff --git a/forderungen.py b/forderungen.py index a759deb..d632fb5 100644 --- a/forderungen.py +++ b/forderungen.py @@ -26,25 +26,32 @@ class Forderung: def __str__(self): 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): """ print Forderungen to a file, that can be read by lexware according the following format: - "Belegdatum";"Buchungsdatum";"Buchungstext"; "Buchungsbetrag"; "Sollkonto";"Habenkonto";"Kostenstelle" - 01.03.2025; 19.02.2026;2; "Miete Familienzimmer"; 357,08; 12161; 4107; 200 + "Belegdatum";"Buchungstext"; "Buchungsbetrag"; "Sollkonto";"Habenkonto";"Kostenstelle" + 01.03.2025; "Miete Familienzimmer"; 357,08; 12161; 4107; 200 """ print('Start Drucken der Forderugen') names = read_account_names(config.filename_debitoren) + #print(names) + #printC(forderungen) for period, forderung in forderungen.items(): if forderung !={}: filename = f"output/{period[0]}-{period[1]:02d}_Forderungen_Familienzimmer.csv" 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") for key in forderung: f = forderung[key] - name = names[key] - file.write(f"01.{period[1]:02d}.{period[0]};\"{name} {f.text}\";{f.amount};{key};{f.haben};{f.kostenstelle}\n") + name = ' '.join(names[key[0]]) + 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.") 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}") priceFamilyRooms = readPriceFamilyRooms(config.filname_price_familyroom) - counter = 0 + counter_recievables = 0 + counter_errors = 0 try: with open(filename, "r") as file: reader = csv.DictReader(file) for row in reader: name = row["Created by"] name = getWords(name) - id_subject = (getID(accounts, name[1:]), "Familienzimmer") + id_subject = (getID(accounts, name), "Familienzimmer") month = getMonth(row["End time"].split(" ")[2]) year = row["End time"].split(" ")[3] @@ -136,15 +144,16 @@ def create_forderungen_familienzimmer(filename:str, accounts:dict, forderungen:d duration = getDuration(row["Duration"]) number_person = getNumberPerson(row["Number of guests"]) 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]}" create_forderungen(forderungen,period,id_subject,datum, price,id_subject[0],KN_HABEN_MIETE_FZ,KOSTENSTELLE_FZ) - counter+=1 + counter_recievables+=1 else: + counter_errors+=1 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: print(f"Fehler, Datei {filename} nicht gefunden.") return forderungen @@ -170,9 +179,11 @@ def getWords(sentence:str)->list: 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"): word = word + c - elif len(word)>0: + elif len(word)>2: result.append(word) word = "" + else: + word = "" if len(word)>0: result.append(word) return result @@ -267,7 +278,7 @@ def read_account_ids(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}\" ") try: diff --git a/main.py b/main.py index f136ecd..3f0e4ee 100644 --- a/main.py +++ b/main.py @@ -17,11 +17,11 @@ def parse_args() -> argparse.Namespace: def main(args: argparse.Namespace) -> None: 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" \ - "\t2\t alle ausgelesen Accounts mit Mame und Kontonummer anzeigen\n"\ + "\t1\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"\ "\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: forderung = {} line = input() @@ -30,7 +30,7 @@ def main(args: argparse.Namespace) -> None: else: #accounts 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: filename_debitoren = newFilename accounts = f.read_account_ids(filename_debitoren) @@ -41,27 +41,27 @@ def main(args: argparse.Namespace) -> None: names = f.read_account_names(filename_debitoren) for id, name in names.items(): 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": #Miete 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: filename_miete = newFilename forderung = f.create_forderungen_miete(filename_miete, accounts, forderung, 5, 2025) 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": #familyrooms 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: filename_fz = newFilename forderung = f.create_forderungen_familienzimmer(filename_fz, accounts, 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: - print("Ungültige Eingabe, bitte versuch es erneut!\n") + print("\nUngültige Eingabe, bitte versuch es erneut!") print("Auf Wiedersehen!") if __name__ == "__main__":