import csv from datetime import datetime from pathlib import Path from gchr.gchr_model import GchrExportConfig MAKE_CODE = { "08": "04", } SITE_CODE = { "07": "01", "04": "02", } def export_honda_csv(export_cfg: GchrExportConfig): dealer_number = "HDE10020" fiscal_year = export_cfg.current_year ts = datetime.now().strftime("%m%d%Y;%H%M%S") header = "\n".join( [ f"{dealer_number};Dealernumber", ";Honda Germany", f"{export_cfg.current_year};Evaluation;{export_cfg.current_month}", f"{fiscal_year};Fiscal-Year;{export_cfg.first_month}", f";Timestamp;{ts}", ] ) base_dir = Path(export_cfg.export_file).parent.parent.parent account_desc = f"{base_dir}\\data\\Kontenrahmen.csv" if Path(account_desc).exists(): with open(account_desc, "r", encoding="latin-1") as frh: csv_frh = csv.DictReader(frh, delimiter=";") accounts = {row["Konto_Nr"]: row["Konto_Bezeichnung"] for row in csv_frh} records = [] for row in sorted(export_cfg.bookkeep_records, key=lambda x: account_number(x)): records.append( [ account_number(row), accounts.get(row["Account"], ""), "{0:.2f}".format(row["Period" + export_cfg.current_month]), "{0:.2f}".format(row["CumulatedYear"]), ] ) add_values = f"{base_dir}\\data\\Manuelle_Eingabe_{export_cfg.current_year}-{export_cfg.current_month}.csv" if Path(add_values).exists(): with open(add_values, "r", encoding="latin-1") as frh: csv_frh = csv.DictReader(frh, delimiter=";") for row in csv_frh: records.append( [ row["Kontonummer"], "", "+{0:.2f}".format(float(row["Akt.Monat"].replace(",", "."))), "+{0:.2f}".format(float(row["Akt.Monat"].replace(",", "."))), ] ) with open(export_cfg.export_file[:-4] + "_Honda.csv", "w", encoding="latin-1") as fwh: fwh.write(header + "\n") for row in records: fwh.write(";".join(row) + "\n") def account_number(row: dict[str, str]) -> str: res = { "Konto": row["Account"], "Marke": MAKE_CODE.get(row["Make"], "00"), "Betrieb": SITE_CODE.get(row["Site"], "00"), "Kostenstelle": row["Origin"], "Absatzkanal": row["SalesChannel"], "Kostenträger": row["CostCarrier"], } return "".join(res.values())