Files
2026-10-14 13:34:37 +02:00

145 lines
6.1 KiB
Python

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)