Ver Fonte

Bookings nur einmal laden und in Kopie gefiltert

gc-server3 há 1 ano atrás
pai
commit
5030ec07ca
1 ficheiros alterados com 30 adições e 25 exclusões
  1. 30 25
      gcstruct/gchr.py

+ 30 - 25
gcstruct/gchr.py

@@ -22,6 +22,7 @@ ACCOUNT_INFO = [
 
 class GCHR:
     booking_date: datetime
+    df_bookings: pd.DataFrame = None
 
     def __init__(self, base_dir) -> None:
         self.base_dir = base_dir
@@ -121,7 +122,7 @@ class GCHR:
         df_translate = self.prepare_translation(df_translate_import)
 
         # Kontensalden laden
-        df_bookings = self.load_bookings_from_file()
+        df_bookings = self.filter_bookings()
         all_periods = set(df_bookings["Bookkeep Period"].to_list())
         bookkeep_period_date = datetime(int(year), int(month), 28)
 
@@ -355,9 +356,13 @@ class GCHR:
                 )
             )
             timestamps.append(Path(csv_file).stat().st_mtime)
-        df_bookings = pd.concat(df2)
         self.booking_date = datetime.fromtimestamp(max(timestamps))
+        self.df_bookings = pd.concat(df2)
+        self.df_bookings["amount"] = (self.df_bookings["Debit Amount"] + self.df_bookings["Credit Amount"]).round(2)
 
+    def filter_bookings(self):
+        if self.df_bookings is None:
+            self.load_bookings_from_file()
         # Kontensalden auf gegebenen Monat filtern
         filter_from = self.current_year + self.first_month_of_financial_year
         filter_prev = self.last_year + self.first_month_of_financial_year
@@ -370,21 +375,19 @@ class GCHR:
         filter_prev_opening = self.last_year + "00"
         prev_year_closed = True
 
-        df_opening_balance = df_bookings[(df_bookings["Bookkeep Period"] == filter_opening)]
+        df_opening_balance = self.df_bookings[(self.df_bookings["Bookkeep Period"] == filter_opening)]
         if df_opening_balance.shape[0] == 0:
-            df_opening_balance = df_bookings[
-                (df_bookings["Bookkeep Period"] == filter_prev_opening)
-                | ((df_bookings["Bookkeep Period"] >= filter_prev) & (df_bookings["Bookkeep Period"] < filter_from))
+            df_opening_balance = self.df_bookings[
+                (self.df_bookings["Bookkeep Period"] == filter_prev_opening)
+                | (
+                    (self.df_bookings["Bookkeep Period"] >= filter_prev)
+                    & (self.df_bookings["Bookkeep Period"] < filter_from)
+                )
             ].copy()
             df_opening_balance["Bookkeep Period"] = filter_opening
             prev_year_closed = False
-        # df_opening_balance = df_opening_balance.merge(df_translate, how='inner', on='Konto_Nr_Händler')
+
         df_opening_balance = df_opening_balance[(df_opening_balance["Konto_Nr_Händler"].str.contains(r"-[013]\d\d+-"))]
-        df_opening_balance["amount"] = (df_opening_balance["Debit Amount"] + df_opening_balance["Credit Amount"]).round(
-            2
-        )
-        # df_opening_balance.drop(columns=['Debit Amount', 'Credit Amount', 'Debit Quantity', 'Credit Quantity'], inplace=True)
-        # df_opening_balance = df_opening_balance.groupby(['Marke', 'Standort']).sum()
         opening_balance = df_opening_balance["amount"].aggregate("sum").round(2)
         logging.info("Gewinn/Verlustvortrag")
         logging.info(opening_balance)
@@ -401,22 +404,21 @@ class GCHR:
             }
             df_opening_balance = pd.concat([df_opening_balance, pd.DataFrame.from_records([row])])
 
-        df_bookings = df_bookings[
-            (df_bookings["Bookkeep Period"] >= filter_from) & (df_bookings["Bookkeep Period"] <= filter_to)
+        df_filtered = self.df_bookings[
+            (self.df_bookings["Bookkeep Period"] >= filter_from) & (self.df_bookings["Bookkeep Period"] <= filter_to)
         ]
-        df_bookings["amount"] = (df_bookings["Debit Amount"] + df_bookings["Credit Amount"]).round(2)
 
         # Buchungen kopieren und als Statistikkonten anhängen
-        df_stats = df_bookings.copy()
+        df_stats = df_filtered.copy()
         # df_stats = df_stats[df_stats['Konto_Nr_Händler'].str.match(r'-[24578]\d\d\d-')]
         df_stats["Konto_Nr_Händler"] = df_stats["Konto_Nr_Händler"].str.replace(r"-(\d\d\d+)-", r"-\1_STK-", regex=True)
-        df_stats["amount"] = (df_bookings["Debit Quantity"] + df_bookings["Credit Quantity"]).round(2)
+        df_stats["amount"] = (df_filtered["Debit Quantity"] + df_filtered["Credit Quantity"]).round(2)
 
-        df_bookings = pd.concat([df_opening_balance, df_bookings, df_stats])
+        df_combined = pd.concat([df_opening_balance, df_filtered, df_stats])
 
         # Spalten konvertieren
-        df_bookings["period"] = df_bookings["Bookkeep Period"].apply(lambda x: self.bookkeep_filter[x])
-        return df_bookings[df_bookings["amount"] != 0.00]
+        df_combined["period"] = df_combined["Bookkeep Period"].apply(lambda x: self.bookkeep_filter[x])
+        return df_combined[df_combined["amount"] != 0.00]
 
     @property
     def export_filename(self):
@@ -485,7 +487,8 @@ class GCHR:
             self.export_xml(csv_reader, self.bookkeep_filter(), 1, makes, sites, xmlfile)
 
 
-def gchr_local(base_dir):
+def gchr_local():
+    base_dir = os.getcwd() + "/../GCHR2_Testdaten/Kunden"
     for path in Path(base_dir).glob("*"):
         if path.is_dir():
             print(path.name)
@@ -498,7 +501,9 @@ def gchr_export(base_dir):
 
 
 if __name__ == "__main__":
-    base_dir = os.getcwd() + "/../GCHR2_Testdaten/Kunden"
-
-    if Path(base_dir).exists():
-        gchr_local(base_dir)
+    gchr_local()
+    # import cProfile
+    # cProfile.run(
+    #     "gchr_local()",
+    #     "gchr_local.prof",
+    # )