from flask import Blueprint, render_template, request, session, redirect, url_for, flash from database import execute_query from blueprints.auth import login_required from rechten import recht_vereist from services import CIP_inleveren # Voor de Ingeven_herstelling logica from services.signpost_byod_service import get_cases_by_serial from services import toestellen as tst # Herstellingen met de kolomnamen die herstellingen.html verwacht HERSTELLINGEN_SQL = """ SELECT h.Incident_ID AS Incident_nr, t.Schooleigen_ID AS KAMXM_nummer, t.Serienummer, h.Omschrijving AS Soort_herstelling, h.Status_herstelling AS Status, h.Datum, h.Kostprijs, l.Internnummer FROM Signpost_herstellingen_DB h JOIN Toestellen t ON t.Toestel_ID = h.Toestel_ID LEFT JOIN Leerlingen l ON l.Leerling_ID = h.Leerling_ID """ # Definieer de blueprint repairs_bp = Blueprint('repairs', __name__) #--------------------------------------------------- # --- ROUTE: OVERZICHT & ZOEKEN --- #---------------------------------------------------- @repairs_bp.route('/herstellingen', methods=['GET', 'POST']) @login_required @recht_vereist('herstellingen') def herstellingen(): query = None results = [] # Haal de zoekterm op bij een POST request if request.method == 'POST': query = request.form.get('query') sql = HERSTELLINGEN_SQL + " WHERE t.Schooleigen_ID LIKE %s OR h.Omschrijving LIKE %s ORDER BY h.Incident_ID DESC" results = execute_query(sql, (f'%{query}%', f'%{query}%')) else: # Toon standaard alle herstellingen results = execute_query(HERSTELLINGEN_SQL + " ORDER BY h.Incident_ID DESC") return render_template('herstellingen.html', results=results, query=query) #------------------------------------------------ # --- ROUTE: TOEVOEGEN HERSTELLING --- #------------------------------------------------ @repairs_bp.route('/repairs.add_herstelling', methods=['POST']) @login_required @recht_vereist('herstellingen') def add_herstelling(): kamxm_nummer = request.form.get('kamxm_nummer') soort_herstelling = request.form.get('soort_herstelling') if not kamxm_nummer or not soort_herstelling: flash("Vul alle velden in!", "error") return redirect(url_for('repairs.herstellingen')) try: # Gebruik de logica uit de CIP_inleveren module CIP_inleveren.Ingeven_herstelling(kamxm_nummer, soort_herstelling) if CIP_inleveren.foutmelding: flash(CIP_inleveren.foutmelding) except Exception as e: flash(f"Er is een fout opgetreden: {str(e)}", "error") return redirect(url_for('repairs.herstellingen')) #functie achter wijzig herstellingen @repairs_bp.route('/wijzig_status_herstelling', methods=['POST']) @login_required @recht_vereist('herstellingen') def wijzig_status_herstelling(): # Haal alle gegevens op uit het formulier kamxm_nummer = request.form.get('kamxm_nummer') nieuwe_status = request.form.get('new_status') incident_nr = request.form.get("incident_nr") # Zorg dat dit uit je modal komt # Validatie: we hebben nu alle drie de velden nodig voor een unieke update if not kamxm_nummer or not nieuwe_status or not incident_nr: flash("Fout: Ontbrekende gegevens (Toestel, Status of Incident nr).", "error") return redirect(url_for('repairs.herstellingen')) try: # Update alleen de rij waar zowel KAMXM als Incident_nr overeenkomen execute_query("UPDATE Signpost_herstellingen_DB SET Status_herstelling = %s WHERE Incident_ID = %s", (nieuwe_status, incident_nr), commit=True) flash(f"Status van incident {incident_nr} ({kamxm_nummer}) is nu: {nieuwe_status}", "success") except Exception as err: flash(f"Database fout: {err}", "error") return redirect(url_for('repairs.herstellingen')) #----------------------------------------------- # --- ROUTE: GEGEVENS BEWERKEN --- #----------------------------------------------- @repairs_bp.route('/bewerk_herstelling', methods=['POST']) @login_required @recht_vereist('herstellingen') def bewerk_herstelling(): # Haal de originele sleutels op om de juiste rij te vinden old_kamxm = request.form.get('kamxm_nummer_original') incident_nr = request.form.get('incident_nr') # Dit is essentieel voor de unieke selectie # Haal de nieuwe waarden op new_kamxm = request.form.get('kamxm_nummer') soort = request.form.get('soort_herstelling') datum = request.form.get('datum') try: toestel = tst.zoek_toestel(new_kamxm) if not toestel: flash(f"Toestel {new_kamxm} niet gevonden.", "error") return redirect(url_for('repairs.herstellingen')) execute_query("UPDATE Signpost_herstellingen_DB SET Toestel_ID = %s, Omschrijving = %s, Datum = %s " "WHERE Incident_ID = %s", (toestel['Toestel_ID'], soort, datum or None, incident_nr), commit=True) flash(f"Herstelling {incident_nr} voor {new_kamxm} succesvol bijgewerkt!", "success") except Exception as err: flash(f"Fout bij bijwerken: {err}", "error") return redirect(url_for('repairs.herstellingen')) #-------------------------------------------------- #--- ROUTE: Signpost herstelling #-------------------------------------------------- @repairs_bp.route('/herstellingen/signpost_search', methods=['POST']) @login_required @recht_vereist('herstellingen') def signpost_search(): serial = request.form.get('serial_number') signpost_results = [] if serial: signpost_results = get_cases_by_serial(serial) if not signpost_results: flash(f"Geen Signpost cases gevonden voor {serial}", "info") # We sturen de gebruiker terug naar de tab, maar met de resultaten # Tip: Om de tab 'active' te houden na een POST, kun je een parameter meesturen results = execute_query(HERSTELLINGEN_SQL + " ORDER BY h.Incident_ID DESC") return render_template('herstellingen.html', results=results, signpost_results=signpost_results, active_tab='signpost-tab', searched_serial=serial)