diff --git a/.gitignore b/.gitignore index a73294c..373902a 100644 --- a/.gitignore +++ b/.gitignore @@ -4,6 +4,7 @@ # Optioneel: Negeer ongewenste Python-bestanden overal in submappen **/*.pyc **/*.pyo +**/*.db **/*.pyd **/.DS_Store **/.venv/ diff --git a/delfland/ppo-insight/data.db b/delfland/ppo-insight/data.db index 540ff0a..eea89aa 100644 Binary files a/delfland/ppo-insight/data.db and b/delfland/ppo-insight/data.db differ diff --git a/delfland/ppo-insight/ppo_insight.py b/delfland/ppo-insight/ppo_insight.py index 0d31b3d..653e249 100644 --- a/delfland/ppo-insight/ppo_insight.py +++ b/delfland/ppo-insight/ppo_insight.py @@ -21,6 +21,16 @@ app.config["UPLOAD_FOLDER"] = UPLOAD_FOLDER app.secret_key = "9f2a1d3e4c5b6a7d8e9f0a1b2c3d4e5f" +@app.route("/clear_db", methods=["POST", "GET"]) +def clear_db(): + with sqlite3.connect(DATABASE) as conn: + cursor = conn.cursor() + cursor.execute("DELETE FROM onderhoud") + conn.commit() + flash("De database is geleegd!", "success") + return redirect(url_for("debug_db")) + + def init_db(): with sqlite3.connect(DATABASE) as conn: cursor = conn.cursor() @@ -130,6 +140,10 @@ def clean_column_name(name): def process_excel(filepath): + # Controleer of de database bestaat + if not os.path.exists(DATABASE): + init_db() + df = pd.read_excel(filepath) # Kolomnamen normaliseren df.columns = [clean_column_name(col) for col in df.columns] @@ -142,23 +156,35 @@ def process_excel(filepath): # Debug: Controleer of de records echt zijn toegevoegd cursor.execute("SELECT COUNT(*) FROM onderhoud") count = cursor.fetchone()[0] - # Controleer of data correct is ingevoerd print(f"Aantal records in de database: {count}") @app.route("/extrapolate", methods=["GET", "POST"]) def show_result(): - # Haal de huidige datum op voor de standaardwaarde today = datetime.today().strftime('%Y-%m-%d') x_str = request.form.get("selected_date") - try: - x = datetime.strptime(x_str, "%Y-%m-%d") if x_str else datetime.today() - except ValueError: - flash("Ongeldige datum ingevoerd.", "danger") - return redirect(url_for("upload_file")) - result = get_extrapolation(x) + if x_str: + try: + x = datetime.strptime(x_str, "%Y-%m-%d") + except ValueError: + flash("Ongeldige datum ingevoerd.", "danger") + return redirect(url_for("upload_file")) + + # **Met datum -> gebruik extrapolatie** + result = get_extrapolation(x) + else: + # **Zonder datum -> toon ruwe databasegegevens** + with sqlite3.connect(DATABASE) as conn: + cursor = conn.cursor() + cursor.execute("SELECT * FROM onderhoud") + columns = [desc[0] for desc in cursor.description] + rows = cursor.fetchall() + + 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) @@ -169,17 +195,13 @@ def get_extrapolation(x): today = datetime.today() with sqlite3.connect(DATABASE) as conn: cursor = conn.cursor() - cursor.execute(""" - SELECT Object_code, Object_omschrijving, Afdeling_object, PO_Code, Omschrijving_PO, - Vervaldatum, Frequentie, UOM, PO_schema_Niet_gebruikt, Cluster, Locatie, - Locatie_omschrijving, Klasse_object, Categorie - FROM onderhoud - """) + cursor.execute("SELECT * FROM onderhoud") columns = [desc[0] for desc in cursor.description] rows = cursor.fetchall() raw_data = [dict(zip(columns, row)) for row in rows] - result = [] + + result = raw_data.copy() for row in raw_data: vervaldatum = row.get("Vervaldatum") @@ -190,22 +212,42 @@ def get_extrapolation(x): extrapolated_dates = extrapolate_vervaldatum( vervaldatum, uom, frequentie, x) for i, date in enumerate(extrapolated_dates): - new_row = row.copy() - begindatum = pd.to_datetime(date) - if begindatum <= today: - new_row["Overtijd"] = "Ja" - else: - new_row["Overtijd"] = "Nee" - new_row["Begindatum"] = date + if date: + new_row = row.copy() + begindatum = pd.to_datetime(date) + new_row["Overtijd"] = "Ja" if begindatum.date( + ) <= today.date() else "Nee" - if i == 0: - new_row["Parent"] = "*" - else: - new_row["Parent"] = "" + new_row["Begindatum"] = date + result.append(new_row) - result.append(new_row) + return remove_duplicates(result) # Dubbele records verwijderen - return result + +def remove_duplicates(data, unique_keys=None): + + if not data: + return data + + if unique_keys is None: + unique_keys = ["Object_code", "Begindatum", "PO_Code", "Object_omschrijving", + "Omschrijving_PO", "Frequentie", "UOM"] + seen = set() + unique_data = [] + + for record in data: + cleaned_record = {k: ("" if pd.isna(v) else v) + for k, v in record.items()} + if not cleaned_record.get("Begindatum"): + continue + + key_tuple = tuple(cleaned_record.get(k, "") for k in unique_keys) + + if key_tuple not in seen: + seen.add(key_tuple) + unique_data.append(cleaned_record) + + return unique_data def extrapolate_vervaldatum(vervaldatum, uom, frequentie, x): @@ -217,9 +259,9 @@ def extrapolate_vervaldatum(vervaldatum, uom, frequentie, x): while vervaldatum <= x: result.append(vervaldatum.strftime("%Y-%m-%d")) if uom == "D": - vervaldatum += pd.DateOffset(days=frequentie) + # vervaldatum += pd.DateOffset(days=frequentie) # vervaldatum += pd.DateOffset(weeks=frequentie // 7) - # vervaldatum += pd.DateOffset(months=frequentie // 30) + vervaldatum += pd.DateOffset(months=frequentie // 30) 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 6486c6d..b48bab4 100644 --- a/delfland/ppo-insight/templates/resultaat.html +++ b/delfland/ppo-insight/templates/resultaat.html @@ -129,9 +129,7 @@ applyColors(); }); $('#resetTable').on('click', function () { - table.search('').columns().search('').draw(); - table.order([0, 'asc']).draw(); - table.page(0).draw('page'); + window.location.href = "{{ url_for('show_result') }}"; }); }); diff --git a/delfland/ppo-insight/uploads/PPO_testset.xlsx b/delfland/ppo-insight/uploads/PPO_testset.xlsx new file mode 100644 index 0000000..f05782b Binary files /dev/null and b/delfland/ppo-insight/uploads/PPO_testset.xlsx differ diff --git a/delfland/ppo-insight/uploads/Preventief_onderhoud_WK_dump_1.xlsx b/delfland/ppo-insight/uploads/Preventief_onderhoud_WK_dump_1.xlsx deleted file mode 100644 index e53539e..0000000 Binary files a/delfland/ppo-insight/uploads/Preventief_onderhoud_WK_dump_1.xlsx and /dev/null differ