Bladeren bron

gcstruct_uebersetzung mit Sortierung und KTR-Marke

gc-server3 2 maanden geleden
bovenliggende
commit
8c2a5680fb
3 gewijzigde bestanden met toevoegingen van 132 en 22 verwijderingen
  1. BIN
      dist/gcstruct_uebersetzung.exe
  2. 1 1
      gchr/gchr.py
  3. 131 21
      gcstruct/gcstruct.py

BIN
dist/gcstruct_uebersetzung.exe


+ 1 - 1
gchr/gchr.py

@@ -86,7 +86,7 @@ class GCHR:
         export_fn = get_export_fn(self.cfg.export_format)
         # Kontensalden laden
         df_bookings = self.bookings.filter_bookings(year, month)
-        all_periods = set(df_bookings["Bookkeep Period"].to_list())
+        all_periods = list(set(df_bookings["Bookkeep Period"].to_list()))
         bookkeep_period_date = datetime(int(year), int(month), 28)
 
         if (

+ 131 - 21
gcstruct/gcstruct.py

@@ -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",