diff --git a/delfland/ppo-insight/data.db b/delfland/ppo-insight/data.db index c2b2936..0bbf89f 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 3221882..88b8728 100644 --- a/delfland/ppo-insight/ppo_insight.py +++ b/delfland/ppo-insight/ppo_insight.py @@ -48,7 +48,7 @@ def init_db(): PO_schema_Niet_gebruikt TEXT, Cluster TEXT, Locatie TEXT, - Locatie_omschrijving TEXT, + Locatie_omschrijving TEXT, Klasse_object TEXT, Categorie TEXT ) @@ -60,38 +60,45 @@ def allowed_file(filename): return "." in filename and filename.rsplit(".", 1)[1].lower() in ALLOWED_EXTENSIONS -@app.route("/download", methods=["GET"]) -def download_excel(): - x_str = request.args.get("x") - if not x_str: - flash("Geen datum opgegeven voor download.", "danger") - return redirect(url_for("upload_file")) +def fetch_extrapolation_results(request): + x_str = request.args.get("x") or request.form.get("selected_date") + # print(request.form.get("keuze_dagen_omrekenen")) + keuze_dagen_omrekenen = request.args.get( + "keuze_dagen_omrekenen") or request.form.get("keuze_dagen_omrekenen") or "D" - try: - x = datetime.strptime(x_str, "%Y-%m-%d") - except ValueError: - flash("Ongeldige datum opgegeven.", "danger") - return redirect(url_for("upload_file")) + today = datetime.today().strftime('%Y-%m-%d') + error = None + print( + f"selected date {x_str} keuze_dagen_omrekenen {keuze_dagen_omrekenen}") - result = get_extrapolation(x) + result, warningmessage = get_extrapolation(x_str, keuze_dagen_omrekenen) if not result: - flash("Geen resultaten beschikbaar voor de geselecteerde datum.", "warning") - return redirect(url_for("upload_file")) + return None, "Geen resultaten beschikbaar voor de geselecteerde datum.", today, keuze_dagen_omrekenen, x_str + return result, error, today, keuze_dagen_omrekenen, x_str, warningmessage + + +@app.route("/download", methods=["GET", "POST"]) +def download_excel(): + result, error, today, keuze_dagen_omrekenen, selected_date, warningmessage = fetch_extrapolation_results( + request) + + if error: + flash(error, "danger") + # return redirect(url_for("upload_file")) df = pd.DataFrame(result) - # Verwijder de Vervaldatum kolom if 'Vervaldatum' in df.columns: df = df.drop(columns=['Vervaldatum']) - # df.rename(columns={"Begindatum": "Vervaldatum"}, inplace=True) + output = io.BytesIO() with pd.ExcelWriter(output, engine="openpyxl") as writer: df.to_excel(writer, index=False, - sheet_name=f"Extrapolatie_{x.strftime('%Y-%m-%d')}") + sheet_name=f"Extrapolatie_{today}") output.seek(0) - filename = f"extrapolatie_{x.strftime('%Y-%m-%d')}.xlsx" + filename = f"extrapolatie_{today}.xlsx" return Response( output, mimetype="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", @@ -99,6 +106,22 @@ def download_excel(): ) +@app.route("/extrapolate", methods=["GET", "POST"]) +def show_result(): + + result, error, today, keuze_dagen_omrekenen, selected_date, warningmessage = fetch_extrapolation_results( + request) + if error: + flash(error, "danger") + # return redirect(url_for("upload_file")) + + if warningmessage: + flash(warningmessage, "warning") + + return render_template("resultaat.html", result=result, today=today, selected_date=selected_date, + keuze_dagen_omrekenen=keuze_dagen_omrekenen) + + @app.route("/", methods=["GET", "POST"]) def upload_file(): if request.method == "POST": @@ -118,7 +141,8 @@ def upload_file(): process_excel(filepath) flash("Bestand geüpload en verwerkt! Bekijk de resultaten", "success") - return redirect(url_for("upload_file")) + # Hier omleiden naar de 'resultaat' pagina + return redirect(url_for("show_result")) return render_template("index.html") @@ -159,55 +183,25 @@ def process_excel(filepath): print(f"Aantal records in de database: {count}") -@app.route("/extrapolate", methods=["GET", "POST"]) -def show_result(): - today = datetime.today().strftime('%Y-%m-%d') +def get_extrapolation(x, keuze_dagen_omrekenen): - x_str = request.form.get("selected_date") - keuze_dagen_omrekenen = request.form.get( - 'keuze_dagen_omrekenen', 'D') # Default is "D" (Dagen) - - 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, keuze_dagen_omrekenen) - 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, - keuze_dagen_omrekenen=keuze_dagen_omrekenen) + raw_data = get_raw_data() + print(f"keuze_dagen_omrekenen: {keuze_dagen_omrekenen}") + if not x and not keuze_dagen_omrekenen: + warning_msg = "Waarschuwing: Geen datum of keuze_dagen_omrekenen opgegeven, ruwe data wordt getoond." + print(warning_msg) + return raw_data, warning_msg + if not x: + warning_msg = "Waarschuwing: Geen datum opgegeven, ruwe data wordt getoond." + print(warning_msg) + return raw_data, warning_msg -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() - 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 = raw_data.copy() - for row in raw_data: - vervaldatum = row.get("Vervaldatum") + vervaldatum = row.get("Begindatum") uom = row.get("UOM") frequentie = row.get("Frequentie", 0) @@ -216,7 +210,7 @@ def get_extrapolation(x, keuze_dagen_omrekenen): if vervaldatum: extrapolated_dates = extrapolate_vervaldatum( vervaldatum, uom, frequentie, x, keuze_dagen_omrekenen) - + print(extrapolated_dates) if not extrapolated_dates: print( f"Geen extrapolatie-data voor vervaldatum: {vervaldatum}") @@ -230,14 +224,31 @@ def get_extrapolation(x, keuze_dagen_omrekenen): ) <= today.date() else "Nee" new_row["Begindatum"] = date - print(f"Added row: {date}") + # print(f"Added row: {date}") result.append(new_row) + return remove_duplicates(result), "" # Dubbele records verwijderen + + +def get_raw_data(): + 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() + + if 'Vervaldatum' in columns: + columns[columns.index('Vervaldatum')] = 'Begindatum' + + raw_data = [dict(zip(columns, row)) for row in rows] - return remove_duplicates(result) # Dubbele records verwijderen + for record in raw_data: + if 'Begindatum' in record: + record['Begindatum'] = str( + pd.to_datetime(record['Begindatum']).date()) + return raw_data def remove_duplicates(data, unique_keys=None): - print("removing duplicates") if not data: return data @@ -265,6 +276,8 @@ def remove_duplicates(data, unique_keys=None): 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") + print(x) + x = pd.to_datetime(x) if pd.isna(vervaldatum): return [] diff --git a/delfland/ppo-insight/templates/resultaat.html b/delfland/ppo-insight/templates/resultaat.html index 172b233..9788679 100644 --- a/delfland/ppo-insight/templates/resultaat.html +++ b/delfland/ppo-insight/templates/resultaat.html @@ -16,12 +16,28 @@
+ + {% with messages = get_flashed_messages(with_categories=true) %} + {% if messages %} + + {% endif %} + {% endwith %}

Resultaten van de query

Terug naar upload
+

@@ -43,7 +59,11 @@
- Download als Excel ({{ selected_date }}) +
+ + +
+ @@ -148,6 +168,18 @@ $('#resetTable').on('click', function () { window.location.href = "{{ url_for('show_result') }}"; }); + + + + // Wanneer de download-knop wordt ingedrukt, stel dan de geselecteerde datum in + $(".btn.btn-success").on('click', function (e) { + var selectedDate = $("#datepicker").val(); // Haal de geselecteerde datum op + if (selectedDate) { + $("#selected_date_hidden").val(selectedDate); // Zet de waarde van het verborgen veld + } + // Verstuur het formulier + $("#dateForm").submit(); + }); });