145 lines
6.1 KiB
Python
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) |