From 19c9584139254ffc0f8a46931e230f156d26e0a8 Mon Sep 17 00:00:00 2001 From: "peter.fong" Date: Sun, 23 Mar 2025 18:53:09 +0000 Subject: [PATCH] debug --- delfland/ppo-insight/data.db | Bin 106496 -> 106496 bytes delfland/ppo-insight/ppo_insight.py | 56 ++++++++++++------ delfland/ppo-insight/templates/resultaat.html | 19 +++++- 3 files changed, 57 insertions(+), 18 deletions(-) diff --git a/delfland/ppo-insight/data.db b/delfland/ppo-insight/data.db index eea89aacc964f937f5b734c1e48f7e2409f71804..c2b293668f71fdff5d9abe126b0ba51b62802c47 100644 GIT binary patch delta 5445 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 delta 5438 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 Z!eRxQmp!?y2gs}565Ji gebruik extrapolatie** - result = get_extrapolation(x) + result = get_extrapolation(x, keuze_dagen_omrekenen) else: # **Zonder datum -> toon ruwe databasegegevens** with sqlite3.connect(DATABASE) as conn: @@ -185,13 +187,14 @@ def show_result(): result = [dict(zip(columns, row)) for row in rows] # Zet om naar dicts voor weergave - return render_template("resultaat.html", result=result, selected_date=x_str, today=today) + return render_template("resultaat.html", result=result, selected_date=x_str, today=today, + keuze_dagen_omrekenen=keuze_dagen_omrekenen) -def get_extrapolation(x): +def get_extrapolation(x, keuze_dagen_omrekenen): if x is None: return [] - + print(f"keuze {keuze_dagen_omrekenen}") today = datetime.today() with sqlite3.connect(DATABASE) as conn: cursor = conn.cursor() @@ -205,27 +208,36 @@ def get_extrapolation(x): for row in raw_data: vervaldatum = row.get("Vervaldatum") + uom = row.get("UOM") frequentie = row.get("Frequentie", 0) + print(f"processing {vervaldatum} met {frequentie} uom{uom}") if vervaldatum: extrapolated_dates = extrapolate_vervaldatum( - vervaldatum, uom, frequentie, x) + vervaldatum, uom, frequentie, x, keuze_dagen_omrekenen) + + if not extrapolated_dates: + print( + f"Geen extrapolatie-data voor vervaldatum: {vervaldatum}") + else: + print(f"Aantal extrapolaties: {len(extrapolated_dates)}") + for i, date in enumerate(extrapolated_dates): - if date: - new_row = row.copy() - begindatum = pd.to_datetime(date) - new_row["Overtijd"] = "Ja" if begindatum.date( - ) <= today.date() else "Nee" + new_row = row.copy() + begindatum = pd.to_datetime(date) + new_row["Overtijd"] = "Ja" if begindatum.date( + ) <= today.date() else "Nee" - new_row["Begindatum"] = date - result.append(new_row) + new_row["Begindatum"] = date + print(f"Added row: {date}") + result.append(new_row) return remove_duplicates(result) # Dubbele records verwijderen def remove_duplicates(data, unique_keys=None): - + print("removing duplicates") if not data: return data @@ -250,7 +262,8 @@ def remove_duplicates(data, unique_keys=None): return unique_data -def extrapolate_vervaldatum(vervaldatum, uom, frequentie, x): +def extrapolate_vervaldatum(vervaldatum, uom, frequentie, x, keuze_dagen_omrekenen="D"): + print(f"keuze {keuze_dagen_omrekenen}") vervaldatum = pd.to_datetime(str(vervaldatum), errors="coerce") if pd.isna(vervaldatum): return [] @@ -258,10 +271,19 @@ def extrapolate_vervaldatum(vervaldatum, uom, frequentie, x): result = [] while vervaldatum <= x: result.append(vervaldatum.strftime("%Y-%m-%d")) + if uom == "D": - # vervaldatum += pd.DateOffset(days=frequentie) - # vervaldatum += pd.DateOffset(weeks=frequentie // 7) - vervaldatum += pd.DateOffset(months=frequentie // 30) + if keuze_dagen_omrekenen == "D": + vervaldatum += pd.DateOffset(days=frequentie) + elif keuze_dagen_omrekenen == "W": + vervaldatum += pd.DateOffset(weeks=frequentie//7) + elif keuze_dagen_omrekenen == "M": + vervaldatum += pd.DateOffset(months=frequentie//30) + # Als er nog restfrequentie is (zoals 28 dagen), voeg dan extra maand toe. + if frequentie % 30 > 0: + vervaldatum += pd.DateOffset(months=1) + else: + break # Onbekende keuze, stop de loop elif uom == "W": vervaldatum += pd.DateOffset(weeks=frequentie) elif uom == "M": diff --git a/delfland/ppo-insight/templates/resultaat.html b/delfland/ppo-insight/templates/resultaat.html index b48bab4..172b233 100644 --- a/delfland/ppo-insight/templates/resultaat.html +++ b/delfland/ppo-insight/templates/resultaat.html @@ -22,7 +22,24 @@
- +
+
+
+ + +
+
+ + +
+
+ + +
+