|
|
@@ -297,7 +297,12 @@ class GCStruct:
|
|
|
continue
|
|
|
struct_info = {e["id"]: e for e in self.json_result["flat"][s]}
|
|
|
for filetype, filename in self.config["export"][s]["files"].items():
|
|
|
- with open(self.config["path2"] + "/" + filename, "w", encoding="latin-1", errors="ignore") as fwh:
|
|
|
+ with open(
|
|
|
+ self.config["path2"] + "/" + filename,
|
|
|
+ "w",
|
|
|
+ encoding="latin-1",
|
|
|
+ errors="ignore",
|
|
|
+ ) as fwh:
|
|
|
fwh.write(";".join(self.export_header(filetype)) + "\n")
|
|
|
unique_accounts = []
|
|
|
for a in self.json_result["accounts"]:
|
|
|
@@ -413,11 +418,18 @@ class GCStruct:
|
|
|
f.write(BeautifulSoup(ET.tostring(root), "xml").prettify())
|
|
|
|
|
|
def skr51_translate(self, accounts_combined_files):
|
|
|
+ # self.get_structure_and_tree()
|
|
|
df = self.accounts_from_csv(self.config["struct"])
|
|
|
+ df["KRM_Nr"] = df["Konto_Nr"].apply(lambda x: x.split("_")[-1])
|
|
|
+
|
|
|
+ # structure_index = {}
|
|
|
+ # for i, s in enumerate(self.config["struct"].keys()):
|
|
|
+ # structure_index[s] = dict((e["id"], j) for j, e in enumerate(self.json_result["flat"][s]))
|
|
|
|
|
|
df_translate = {}
|
|
|
for i, (t_from, t_to) in enumerate(self.translate.items()):
|
|
|
last = "LetzteEbene" + str(i + 1)
|
|
|
+
|
|
|
from_label = [
|
|
|
"Konto_Nr",
|
|
|
"Konto_Bezeichnung",
|
|
|
@@ -426,20 +438,25 @@ class GCStruct:
|
|
|
last + "_Bez",
|
|
|
"Ebene" + str(i * 10 + 1),
|
|
|
"Ebene" + str(i * 10 + 2),
|
|
|
+ "KRM_Nr",
|
|
|
]
|
|
|
to_label = [
|
|
|
t_to,
|
|
|
- t_to + "_Bez_ori",
|
|
|
+ t_to + "_Bez_Händler",
|
|
|
t_to + "_Ebene",
|
|
|
t_to + "_Nr",
|
|
|
t_to + "_Bez",
|
|
|
- "Ebene1",
|
|
|
- "Ebene2",
|
|
|
+ t_to + "_Ebene1",
|
|
|
+ t_to + "_Ebene2",
|
|
|
+ t_to + "_Nr_Händler",
|
|
|
]
|
|
|
df_translate[t_from] = df[df[last + "_Nr"] != ""][from_label].rename(
|
|
|
columns=dict(zip(from_label, to_label))
|
|
|
)
|
|
|
|
|
|
+ # for (t_from, t_to), (s, idx) in zip(self.translate.items(), structure_index.items()):
|
|
|
+ # df_translate[t_from][t_to + "_Sortierung"] = df_translate[t_from]
|
|
|
+
|
|
|
df_t4 = df_translate["Konto_Nr"].copy()
|
|
|
df_t4 = df_t4[df_t4["SKR51_Nr"].str.match(r"^[01]")]
|
|
|
df_t5 = df_t4.copy()
|
|
|
@@ -452,16 +469,18 @@ class GCStruct:
|
|
|
|
|
|
df2 = []
|
|
|
for ac_file in accounts_combined_files:
|
|
|
- df2.append(
|
|
|
- pd.read_csv(
|
|
|
- ac_file,
|
|
|
- decimal=",",
|
|
|
- sep=";",
|
|
|
- encoding="latin-1",
|
|
|
- converters={i: str for i in range(0, 200)},
|
|
|
- )
|
|
|
+ df_temp = pd.read_csv(
|
|
|
+ ac_file,
|
|
|
+ decimal=",",
|
|
|
+ sep=";",
|
|
|
+ encoding="latin-1",
|
|
|
+ converters={i: str for i in range(0, 200)},
|
|
|
)
|
|
|
+ if "Kostenträger_Marke" not in df_temp.columns:
|
|
|
+ df_temp["Kostenträger_Marke"] = df_temp["Marke"]
|
|
|
+ df2.append(df_temp)
|
|
|
df_source = pd.concat(df2)
|
|
|
+
|
|
|
df3 = df_source.copy()
|
|
|
df3["Konto_Nr"] = df3["Konto_Nr"] + "_STK"
|
|
|
df4 = df_source.copy()
|
|
|
@@ -490,7 +509,7 @@ class GCStruct:
|
|
|
"KTR_"
|
|
|
+ df_source["Kostenträger_Quelle"]
|
|
|
+ "_"
|
|
|
- + df_source["Marke"]
|
|
|
+ + df_source["Kostenträger_Marke"]
|
|
|
+ "_"
|
|
|
+ df_source["Kostenträger"],
|
|
|
df_source["KTR"],
|
|
|
@@ -533,23 +552,73 @@ class GCStruct:
|
|
|
df_source["Konto_Nr_Händler_mit_KST"] = df_source["Konto_Nr"] + "_" + df_source["Kostenstelle"]
|
|
|
# df_source.to_csv(f"{self.config['path2']}/SKR51_Uebersetzung.csv", sep=';', encoding='latin-1', index=False)
|
|
|
df_source["MAR_Nr_MAR"] = np.where(df_source["MAR_Nr_MAR"].isna(), "0000", df_source["MAR_Nr_MAR"])
|
|
|
+ df_source["SKR51_Sortierung"] = df_source["SKR51_Nr"]
|
|
|
+ df_source["KST_Sortierung"] = df_source["KST_Nr"]
|
|
|
+ df_source["ABS_Sortierung"] = df_source["ABS_Nr"]
|
|
|
+ df_source["KTR_Sortierung"] = df_source["KTR_Nr"]
|
|
|
+ df_source["MAR_Sortierung"] = df_source["MAR_Nr"]
|
|
|
+ df_source["STA_Sortierung"] = df_source["STA_Nr"]
|
|
|
+ df_source["MAR2_Sortierung"] = df_source["MAR_Nr_MAR"]
|
|
|
+ df_source["BMC_Sortierung"] = df_source["BMC_Nr"]
|
|
|
+ df_source["Kostenträger_Ebene"] = df_source["KTR_Ebene"]
|
|
|
from_label = [
|
|
|
+ "Konto_Nr_Händler",
|
|
|
+ "Konto_Nr_SKR51",
|
|
|
"MAR_Nr",
|
|
|
"STA_Nr",
|
|
|
"SKR51_Nr",
|
|
|
"KST_Nr",
|
|
|
"ABS_Nr",
|
|
|
"KTR_Nr",
|
|
|
- "KTR_Ebene",
|
|
|
- "Konto_Nr_Händler",
|
|
|
- "Konto_Nr_SKR51",
|
|
|
+ "Kostenträger_Ebene",
|
|
|
"MAR_Nr_MAR",
|
|
|
"BMC_Nr",
|
|
|
"Konto_Nr",
|
|
|
"Konto_Nr_Händler_mit_KST",
|
|
|
- "SKR51_Bez_ori",
|
|
|
+ "SKR51_Bez_Händler",
|
|
|
+ "SKR51_Ebene1",
|
|
|
+ "SKR51_Ebene2",
|
|
|
+ "SKR51_Sortierung",
|
|
|
+ "KST_Ebene1",
|
|
|
+ "KST_Ebene2",
|
|
|
+ "KST_Ebene",
|
|
|
+ "KST_Sortierung",
|
|
|
+ "ABS_Ebene1",
|
|
|
+ "ABS_Ebene2",
|
|
|
+ "ABS_Ebene",
|
|
|
+ "ABS_Sortierung",
|
|
|
+ "KTR_Ebene1",
|
|
|
+ "KTR_Ebene2",
|
|
|
+ "KTR_Ebene",
|
|
|
+ "KTR_Sortierung",
|
|
|
+ "MAR_Ebene1",
|
|
|
+ "MAR_Ebene2",
|
|
|
+ "MAR_Ebene",
|
|
|
+ "MAR_Sortierung",
|
|
|
+ "STA_Ebene1",
|
|
|
+ "STA_Ebene2",
|
|
|
+ "STA_Ebene",
|
|
|
+ "STA_Sortierung",
|
|
|
+ "MAR_Ebene1_MAR",
|
|
|
+ "MAR_Ebene2_MAR",
|
|
|
+ "MAR_Ebene_MAR",
|
|
|
+ "MAR2_Sortierung",
|
|
|
+ "BMC_Ebene1",
|
|
|
+ "BMC_Ebene2",
|
|
|
+ "BMC_Ebene",
|
|
|
+ "BMC_Sortierung",
|
|
|
+ "KST_Nr_Händler",
|
|
|
+ "KST_Bez_Händler",
|
|
|
+ "ABS_Nr_Händler",
|
|
|
+ "ABS_Bez_Händler",
|
|
|
+ "KTR_Nr_Händler",
|
|
|
+ "KTR_Bez_Händler",
|
|
|
+ "MAR_Nr_Händler",
|
|
|
+ "MAR_Bez_Händler",
|
|
|
]
|
|
|
to_label = [
|
|
|
+ "Konto_Nr_Händler",
|
|
|
+ "Konto_Nr_SKR51",
|
|
|
"Marke",
|
|
|
"Standort",
|
|
|
"Konto_Nr",
|
|
|
@@ -557,13 +626,50 @@ class GCStruct:
|
|
|
"Absatzkanal",
|
|
|
"Kostenträger",
|
|
|
"Kostenträger_Ebene",
|
|
|
- "Konto_Nr_Händler",
|
|
|
- "Konto_Nr_SKR51",
|
|
|
"Marke_HBV",
|
|
|
"Standort_HBV",
|
|
|
"Konto_Nr_Händler_kurz",
|
|
|
"Konto_Nr_Händler_mit_KST",
|
|
|
"Konto_Bezeichnung_Händler",
|
|
|
+ "SKR51_Ebene1",
|
|
|
+ "SKR51_Ebene2",
|
|
|
+ "SKR51_Sortierung",
|
|
|
+ "KST_Ebene1",
|
|
|
+ "KST_Ebene2",
|
|
|
+ "KST_Text",
|
|
|
+ "KST_Sortierung",
|
|
|
+ "ABS_Ebene1",
|
|
|
+ "ABS_Ebene2",
|
|
|
+ "ABS_Text",
|
|
|
+ "ABS_Sortierung",
|
|
|
+ "KTR_Ebene1",
|
|
|
+ "KTR_Ebene2",
|
|
|
+ "KTR_Text",
|
|
|
+ "KTR_Sortierung",
|
|
|
+ "MAR_Ebene1",
|
|
|
+ "MAR_Ebene2",
|
|
|
+ "MAR_Text",
|
|
|
+ "MAR_Sortierung",
|
|
|
+ "STA_Ebene1",
|
|
|
+ "STA_Ebene2",
|
|
|
+ "STA_Text",
|
|
|
+ "STA_Sortierung",
|
|
|
+ "MAR2_Ebene1",
|
|
|
+ "MAR2_Ebene2",
|
|
|
+ "MAR2_Text",
|
|
|
+ "MAR2_Sortierung",
|
|
|
+ "BMCode_Ebene1",
|
|
|
+ "BMCode_Ebene2",
|
|
|
+ "BMCode_Text",
|
|
|
+ "BMCode_Sortierung",
|
|
|
+ "KST_Nr_Händler",
|
|
|
+ "KST_Bez_Händler",
|
|
|
+ "ABS_Nr_Händler",
|
|
|
+ "ABS_Bez_Händler",
|
|
|
+ "KTR_Nr_Händler",
|
|
|
+ "KTR_Bez_Händler",
|
|
|
+ "MAR_Nr_Händler",
|
|
|
+ "MAR_Bez_Händler",
|
|
|
]
|
|
|
df_combined = df_source[from_label].rename(columns=dict(zip(from_label, to_label)))
|
|
|
df_combined.to_csv(
|
|
|
@@ -738,7 +844,7 @@ class GCStruct:
|
|
|
df_source["Ebene80"] = ""
|
|
|
df_source["Susa"] = df_source["Konto_Gruppe"].str.slice(stop=1)
|
|
|
df_source["Konto_KST"] = ""
|
|
|
- df_source["GuV_Bilanz"] = df_source["Konto_Art"]
|
|
|
+ df_source["GuV_Bilanz"] = np.where(df_source["GuV"], "2", "1")
|
|
|
|
|
|
from_label = ["Konto_neu", "Konto_Nr_Händler", "Konto_Nr_Händler_kurz"]
|
|
|
to_label = ["Konto", "Acct_Nr", "Konto_Nr_Händler"]
|
|
|
@@ -785,7 +891,11 @@ class GCStruct:
|
|
|
df_source["Konto"].str.slice_replace(7, 9, "00"),
|
|
|
df_source["Konto"].str.slice_replace(3, 5, "00"),
|
|
|
)
|
|
|
- df_source["Acct_Nr"] = df_source["Acct_Nr"].str.slice_replace(3, 5, "00")
|
|
|
+ df_source["Acct_Nr"] = np.where(
|
|
|
+ df_source["Acct_Nr"].str.contains("-"),
|
|
|
+ df_source["Acct_Nr"].str.slice_replace(3, 5, "00"),
|
|
|
+ df_source["Acct_Nr"],
|
|
|
+ )
|
|
|
df_department = df_source.drop_duplicates()
|
|
|
df_department.to_csv(
|
|
|
f"{self.config['path2']}/SKR51_Uebersetzung_ohne_Standort.csv",
|