|
@@ -1,4 +1,5 @@
|
|
|
import logging
|
|
import logging
|
|
|
|
|
+from pathlib import Path
|
|
|
|
|
|
|
|
import numpy as np
|
|
import numpy as np
|
|
|
import pandas as pd
|
|
import pandas as pd
|
|
@@ -22,13 +23,35 @@ TRANSLATE = [
|
|
|
def load_translation(
|
|
def load_translation(
|
|
|
account_translation: str, debug_file: str, export_invalid_filename: str
|
|
account_translation: str, debug_file: str, export_invalid_filename: str
|
|
|
) -> tuple[dict[str, str], dict[str, str], pd.DataFrame, pd.DataFrame]:
|
|
) -> tuple[dict[str, str], dict[str, str], pd.DataFrame, pd.DataFrame]:
|
|
|
|
|
+ account_translation_gchr = account_translation[:-4] + "_GCHR.csv"
|
|
|
|
|
+
|
|
|
|
|
+ if (
|
|
|
|
|
+ Path(account_translation_gchr).exists()
|
|
|
|
|
+ and Path(account_translation_gchr).stat().st_mtime >= Path(account_translation).stat().st_mtime
|
|
|
|
|
+ and False
|
|
|
|
|
+ ):
|
|
|
|
|
+ df_translate = pd.read_csv(
|
|
|
|
|
+ account_translation_gchr,
|
|
|
|
|
+ decimal=",",
|
|
|
|
|
+ sep=";",
|
|
|
|
|
+ encoding="latin-1",
|
|
|
|
|
+ converters={i: str for i in range(0, 200)},
|
|
|
|
|
+ )
|
|
|
|
|
+ makes = get_makes_from_translation(df_translate)
|
|
|
|
|
+ sites = get_sites_from_translation(df_translate)
|
|
|
|
|
+ df_translate2 = (
|
|
|
|
|
+ df_translate.copy().drop(columns=["Konto_Nr_Händler"]).drop_duplicates().set_index("Konto_Nr_SKR51")
|
|
|
|
|
+ )
|
|
|
|
|
+ return (makes, sites, df_translate, df_translate2)
|
|
|
|
|
+
|
|
|
df_translate_import = pd.read_csv(
|
|
df_translate_import = pd.read_csv(
|
|
|
account_translation,
|
|
account_translation,
|
|
|
decimal=",",
|
|
decimal=",",
|
|
|
sep=";",
|
|
sep=";",
|
|
|
encoding="latin-1",
|
|
encoding="latin-1",
|
|
|
converters={i: str for i in range(0, 200)},
|
|
converters={i: str for i in range(0, 200)},
|
|
|
- ).reset_index()
|
|
|
|
|
|
|
+ usecols=["Konto_Nr_Händler", "Konto_Nr_SKR51", "Marke", "Standort", "Marke_HBV", "Standort_HBV"],
|
|
|
|
|
+ ) # .reset_index()
|
|
|
|
|
|
|
|
makes = get_makes_from_translation(df_translate_import)
|
|
makes = get_makes_from_translation(df_translate_import)
|
|
|
sites = get_sites_from_translation(df_translate_import)
|
|
sites = get_sites_from_translation(df_translate_import)
|
|
@@ -42,7 +65,7 @@ def load_translation(
|
|
|
.copy()
|
|
.copy()
|
|
|
.sort_values(by=["Kontoart", "Konto_Nr_SKR51"])
|
|
.sort_values(by=["Kontoart", "Konto_Nr_SKR51"])
|
|
|
)
|
|
)
|
|
|
- df_translate3.to_csv(account_translation[:-4] + "_GCHR.csv", decimal=",", sep=";", encoding="latin-1", index=False)
|
|
|
|
|
|
|
+ df_translate3.to_csv(account_translation_gchr, decimal=",", sep=";", encoding="latin-1", index=False)
|
|
|
return (makes, sites, df_translate, df_translate2)
|
|
return (makes, sites, df_translate, df_translate2)
|
|
|
|
|
|
|
|
|
|
|
|
@@ -102,92 +125,93 @@ def special_translation(
|
|
|
df["Marke_Standort"] = df["Marke"] + "-" + df["Standort"]
|
|
df["Marke_Standort"] = df["Marke"] + "-" + df["Standort"]
|
|
|
df["Standort"] = np.where(df["Marke_Standort"].isin(sites.keys()), df["Standort"], "01")
|
|
df["Standort"] = np.where(df["Marke_Standort"].isin(sites.keys()), df["Standort"], "01")
|
|
|
|
|
|
|
|
- df_debug = df.drop(columns=["Bilanz"])
|
|
|
|
|
- logging.info(df_debug.groupby(["Kontoart"]).aggregate("sum"))
|
|
|
|
|
- logging.info(df_debug.groupby(["Kontoart", "Konto_1"]).aggregate("sum"))
|
|
|
|
|
- logging.info(df_debug.groupby(["Konto_Nr"]).aggregate("sum"))
|
|
|
|
|
- df_debug.groupby(["Konto_Nr"]).aggregate("sum").to_csv(debug_file, decimal=",", sep=";", encoding="latin-1")
|
|
|
|
|
|
|
+ if False:
|
|
|
|
|
+ df_debug = df.drop(columns=["Bilanz"])
|
|
|
|
|
+ logging.info(df_debug.groupby(["Kontoart"]).aggregate("sum"))
|
|
|
|
|
+ logging.info(df_debug.groupby(["Kontoart", "Konto_1"]).aggregate("sum"))
|
|
|
|
|
+ logging.info(df_debug.groupby(["Konto_Nr"]).aggregate("sum"))
|
|
|
|
|
+ df_debug.groupby(["Konto_Nr"]).aggregate("sum").to_csv(debug_file, decimal=",", sep=";", encoding="latin-1")
|
|
|
|
|
|
|
|
# Bereinigung GW-Kostenträger
|
|
# Bereinigung GW-Kostenträger
|
|
|
- df["NW_Verkauf_1"] = (df["Konto_Nr"].str.match(r"^[78]0")) & (df["Kostenstelle"].str.match(r"^[^1]\d"))
|
|
|
|
|
- df["Kostenstelle"] = np.where(df["NW_Verkauf_1"] == True, "11", df["Kostenstelle"])
|
|
|
|
|
|
|
+ kst_nw_verkauf_1 = (df["Konto_Nr"].str.match(r"^[78]0")) & (df["Kostenstelle"].str.match(r"^[^1]\d"))
|
|
|
|
|
+ df["Kostenstelle"] = np.where(kst_nw_verkauf_1 == True, "11", df["Kostenstelle"])
|
|
|
|
|
|
|
|
- df["Konto_7010"] = df["Konto_Nr"].str.match(r"^[78]01[01]")
|
|
|
|
|
- df["Kostenstelle"] = np.where(df["Konto_7010"] == True, "14", df["Kostenstelle"])
|
|
|
|
|
|
|
+ kst_konto_7010 = df["Konto_Nr"].str.match(r"^[78]01[01]")
|
|
|
|
|
+ df["Kostenstelle"] = np.where(kst_konto_7010 == True, "14", df["Kostenstelle"])
|
|
|
|
|
|
|
|
- df["GW_Verkauf_2"] = (df["Konto_Nr"].str.match(r"^[78]1")) & (df["Kostenstelle"].str.match(r"^[^2]\d"))
|
|
|
|
|
- df["Kostenstelle"] = np.where(df["GW_Verkauf_2"] == True, "21", df["Kostenstelle"])
|
|
|
|
|
|
|
+ kst_gw_verkauf_2 = (df["Konto_Nr"].str.match(r"^[78]1")) & (df["Kostenstelle"].str.match(r"^[^2]\d"))
|
|
|
|
|
+ df["Kostenstelle"] = np.where(kst_gw_verkauf_2 == True, "21", df["Kostenstelle"])
|
|
|
|
|
|
|
|
- df["GW_Verkauf_3"] = (df["Konto_Nr"].str.match(r"^[78]3")) & (df["Kostenstelle"].str.match(r"^[^3]\d"))
|
|
|
|
|
- df["Kostenstelle"] = np.where(df["GW_Verkauf_3"] == True, "31", df["Kostenstelle"])
|
|
|
|
|
|
|
+ kst_gw_verkauf_3 = (df["Konto_Nr"].str.match(r"^[78]3")) & (df["Kostenstelle"].str.match(r"^[^3]\d"))
|
|
|
|
|
+ df["Kostenstelle"] = np.where(kst_gw_verkauf_3 == True, "31", df["Kostenstelle"])
|
|
|
|
|
|
|
|
- df["GW_Verkauf_4"] = (df["Konto_Nr"].str.match(r"^[78]4")) & (df["Kostenstelle"].str.match(r"^[^4]\d"))
|
|
|
|
|
- df["Kostenstelle"] = np.where(df["GW_Verkauf_4"] == True, "41", df["Kostenstelle"])
|
|
|
|
|
|
|
+ kst_gw_verkauf_4 = (df["Konto_Nr"].str.match(r"^[78]4")) & (df["Kostenstelle"].str.match(r"^[^4]\d"))
|
|
|
|
|
+ df["Kostenstelle"] = np.where(kst_gw_verkauf_4 == True, "41", df["Kostenstelle"])
|
|
|
|
|
|
|
|
- df["GW_Verkauf_x420"] = df["Konto_Nr"].str.match(r"^[78]420")
|
|
|
|
|
- df["Kostenstelle"] = np.where(df["GW_Verkauf_x420"] == True, "42", df["Kostenstelle"])
|
|
|
|
|
|
|
+ kst_gw_verkauf_x420 = df["Konto_Nr"].str.match(r"^[78]420")
|
|
|
|
|
+ df["Kostenstelle"] = np.where(kst_gw_verkauf_x420 == True, "42", df["Kostenstelle"])
|
|
|
|
|
|
|
|
- df["GW_Verkauf_5"] = (df["Konto_Nr"].str.match(r"^[78]50")) & (df["Kostenstelle"].str.match(r"^[^5]\d"))
|
|
|
|
|
- df["Kostenstelle"] = np.where(df["GW_Verkauf_5"] == True, "51", df["Kostenstelle"])
|
|
|
|
|
|
|
+ kst_gw_verkauf_5 = (df["Konto_Nr"].str.match(r"^[78]50")) & (df["Kostenstelle"].str.match(r"^[^5]\d"))
|
|
|
|
|
+ df["Kostenstelle"] = np.where(kst_gw_verkauf_5 == True, "51", df["Kostenstelle"])
|
|
|
|
|
|
|
|
- df["GW_Verkauf_50"] = (df["Konto_Nr"].str.match(r"^[78]")) & (df["Kostenstelle"].str.match(r"^2"))
|
|
|
|
|
- df["Kostenträger"] = np.where(df["GW_Verkauf_50"] == True, "52", df["Kostenträger"])
|
|
|
|
|
|
|
+ kst_gw_verkauf_50 = (df["Konto_Nr"].str.match(r"^[78]")) & (df["Kostenstelle"].str.match(r"^2"))
|
|
|
|
|
+ df["Kostenträger"] = np.where(kst_gw_verkauf_50 == True, "52", df["Kostenträger"])
|
|
|
df["Kostenträger"] = np.where(
|
|
df["Kostenträger"] = np.where(
|
|
|
- (df["GW_Verkauf_50"] == True) & (df["Marke"] == "01"),
|
|
|
|
|
|
|
+ (kst_gw_verkauf_50 == True) & (df["Marke"] == "01"),
|
|
|
"50",
|
|
"50",
|
|
|
df["Kostenträger"],
|
|
df["Kostenträger"],
|
|
|
)
|
|
)
|
|
|
|
|
|
|
|
- df["NW_Verkauf_00"] = (
|
|
|
|
|
|
|
+ ktr_nw_verkauf_00 = (
|
|
|
(df["Konto_Nr"].str.match(r"^[78]2"))
|
|
(df["Konto_Nr"].str.match(r"^[78]2"))
|
|
|
& (df["Kostenstelle"].str.match(r"^1"))
|
|
& (df["Kostenstelle"].str.match(r"^1"))
|
|
|
& (df["Kostenträger"].str.match(r"^[^01234]"))
|
|
& (df["Kostenträger"].str.match(r"^[^01234]"))
|
|
|
)
|
|
)
|
|
|
- df["Kostenträger"] = np.where(df["NW_Verkauf_00"] == True, "00", df["Kostenträger"])
|
|
|
|
|
|
|
+ df["Kostenträger"] = np.where(ktr_nw_verkauf_00 == True, "00", df["Kostenträger"])
|
|
|
|
|
|
|
|
- df["GW_Stk_50"] = (df["Konto_Nr"].str.match(r"^9130")) & (df["Kostenstelle"].str.match(r"^2"))
|
|
|
|
|
- df["Kostenträger"] = np.where(df["GW_Stk_50"] == True, "52", df["Kostenträger"])
|
|
|
|
|
- df["Kostenträger"] = np.where((df["GW_Stk_50"] == True) & (df["Marke"] == "01"), "50", df["Kostenträger"])
|
|
|
|
|
|
|
+ ktr_gw_stk_50 = (df["Konto_Nr"].str.match(r"^9130")) & (df["Kostenstelle"].str.match(r"^2"))
|
|
|
|
|
+ df["Kostenträger"] = np.where(ktr_gw_stk_50 == True, "52", df["Kostenträger"])
|
|
|
|
|
+ df["Kostenträger"] = np.where((ktr_gw_stk_50 == True) & (df["Marke"] == "01"), "50", df["Kostenträger"])
|
|
|
|
|
|
|
|
df["Kostenträger"] = np.where(df["Bilanz"] == True, "00", df["Kostenträger"])
|
|
df["Kostenträger"] = np.where(df["Bilanz"] == True, "00", df["Kostenträger"])
|
|
|
|
|
|
|
|
- df["Konto_5er"] = (df["Konto_Nr"].str.match("^5")) | (df["Konto_Nr"].str.match("^9143"))
|
|
|
|
|
- df["Absatzkanal"] = np.where(df["Konto_5er"] == True, "99", df["Absatzkanal"])
|
|
|
|
|
|
|
+ abs_konto_5 = (df["Konto_Nr"].str.match("^5")) | (df["Konto_Nr"].str.match("^9143"))
|
|
|
|
|
+ df["Absatzkanal"] = np.where(abs_konto_5 == True, "99", df["Absatzkanal"])
|
|
|
|
|
|
|
|
- df["Konto_5005"] = (df["Konto_Nr"].str.match("^5005")) & (df["Kostenstelle"].str.match(r"^[^12]"))
|
|
|
|
|
- df["Kostenstelle"] = np.where(df["Konto_5005"] == True, "20", df["Kostenstelle"])
|
|
|
|
|
- df["Kostenträger"] = np.where(df["Konto_5005"] == True, "50", df["Kostenträger"])
|
|
|
|
|
|
|
+ kst_ktr_konto_5005 = (df["Konto_Nr"].str.match("^5005")) & (df["Kostenstelle"].str.match(r"^[^12]"))
|
|
|
|
|
+ df["Kostenstelle"] = np.where(kst_ktr_konto_5005 == True, "20", df["Kostenstelle"])
|
|
|
|
|
+ df["Kostenträger"] = np.where(kst_ktr_konto_5005 == True, "50", df["Kostenträger"])
|
|
|
|
|
|
|
|
- df["Konto_5007"] = (df["Konto_Nr"].str.match("^5007")) & (df["Kostenstelle"].str.match(r"^([^4]|42)"))
|
|
|
|
|
- df["Kostenstelle"] = np.where(df["Konto_5007"] == True, "41", df["Kostenstelle"])
|
|
|
|
|
- df["Kostenträger"] = np.where(df["Konto_5007"] == True, "70", df["Kostenträger"])
|
|
|
|
|
|
|
+ kst_ktr_konto_5007 = (df["Konto_Nr"].str.match("^5007")) & (df["Kostenstelle"].str.match(r"^([^4]|42)"))
|
|
|
|
|
+ df["Kostenstelle"] = np.where(kst_ktr_konto_5007 == True, "41", df["Kostenstelle"])
|
|
|
|
|
+ df["Kostenträger"] = np.where(kst_ktr_konto_5007 == True, "70", df["Kostenträger"])
|
|
|
|
|
|
|
|
- df["Konto_914er"] = (df["Konto_Nr"].str.match("^914[34]")) & (df["Kostenträger"].str.match(r"^[^7]"))
|
|
|
|
|
- df["Kostenträger"] = np.where(df["Konto_914er"] == True, "70", df["Kostenträger"])
|
|
|
|
|
|
|
+ ktr_konto_914x = (df["Konto_Nr"].str.match("^914[34]")) & (df["Kostenträger"].str.match(r"^[^7]"))
|
|
|
|
|
+ df["Kostenträger"] = np.where(ktr_konto_914x == True, "70", df["Kostenträger"])
|
|
|
|
|
|
|
|
- df["Teile_30_60"] = (
|
|
|
|
|
|
|
+ ktr_teile_30_60 = (
|
|
|
(df["Konto_Nr"].str.match(r"^[578]"))
|
|
(df["Konto_Nr"].str.match(r"^[578]"))
|
|
|
& (df["Kostenstelle"].str.match(r"^[3]"))
|
|
& (df["Kostenstelle"].str.match(r"^[3]"))
|
|
|
& (df["Kostenträger"].str.match(r"^[^6]"))
|
|
& (df["Kostenträger"].str.match(r"^[^6]"))
|
|
|
)
|
|
)
|
|
|
- df["Kostenträger"] = np.where(df["Teile_30_60"] == True, "60", df["Kostenträger"])
|
|
|
|
|
|
|
+ df["Kostenträger"] = np.where(ktr_teile_30_60 == True, "60", df["Kostenträger"])
|
|
|
|
|
|
|
|
- df["Service_40_70"] = (
|
|
|
|
|
|
|
+ ktr_service_40_70 = (
|
|
|
(df["Konto_Nr"].str.match(r"^[578]"))
|
|
(df["Konto_Nr"].str.match(r"^[578]"))
|
|
|
& (df["Kostenstelle"].str.match(r"^[4]"))
|
|
& (df["Kostenstelle"].str.match(r"^[4]"))
|
|
|
& (df["Kostenträger"].str.match(r"^[^7]"))
|
|
& (df["Kostenträger"].str.match(r"^[^7]"))
|
|
|
)
|
|
)
|
|
|
- df["Kostenträger"] = np.where(df["Service_40_70"] == True, "70", df["Kostenträger"])
|
|
|
|
|
|
|
+ df["Kostenträger"] = np.where(ktr_service_40_70 == True, "70", df["Kostenträger"])
|
|
|
|
|
|
|
|
- df["MW_KTR_70"] = (df["Konto_Nr"].str.match(r"^[78]50")) & (df["Kostenträger"].str.match(r"^70"))
|
|
|
|
|
- df["Kostenträger"] = np.where(df["MW_KTR_70"] == True, "00", df["Kostenträger"])
|
|
|
|
|
|
|
+ ktr_mw_70 = (df["Konto_Nr"].str.match(r"^[78]50")) & (df["Kostenträger"].str.match(r"^70"))
|
|
|
|
|
+ df["Kostenträger"] = np.where(ktr_mw_70 == True, "00", df["Kostenträger"])
|
|
|
|
|
|
|
|
- df["MW_KTR_70_VZ"] = (
|
|
|
|
|
|
|
+ ktr_mw_70_vz = (
|
|
|
(df["Konto_Nr"].str.match(r"^5"))
|
|
(df["Konto_Nr"].str.match(r"^5"))
|
|
|
& (df["Kostenstelle"].str.match(r"^5[156]"))
|
|
& (df["Kostenstelle"].str.match(r"^5[156]"))
|
|
|
& (df["Kostenträger"].str.match(r"^70"))
|
|
& (df["Kostenträger"].str.match(r"^70"))
|
|
|
)
|
|
)
|
|
|
- df["Kostenträger"] = np.where(df["MW_KTR_70_VZ"] == True, "00", df["Kostenträger"])
|
|
|
|
|
|
|
+ df["Kostenträger"] = np.where(ktr_mw_70_vz == True, "00", df["Kostenträger"])
|
|
|
|
|
|
|
|
# Volkswagen Specials
|
|
# Volkswagen Specials
|
|
|
kto_1250 = (df["Konto_Nr"].str.match(r"^1250")) & ~(df["Kostenstelle"].str.match(r"^1"))
|
|
kto_1250 = (df["Konto_Nr"].str.match(r"^1250")) & ~(df["Kostenstelle"].str.match(r"^1"))
|