"feat: Implement guest request overview page"

This commit is contained in:
2025-05-29 11:34:45 +02:00
parent 4e4d89b6aa
commit cc631bdcaf
5 changed files with 914 additions and 58 deletions

View File

@@ -36,9 +36,79 @@ def approver_required(f):
def guest_request_form():
"""Formular für Gastanfragen anzeigen."""
with get_cached_session() as db_session:
printers = db_session.query(Printer).filter_by(active=True).all()
printers = db_session.query(Printer).filter_by(active=True)
return render_template('guest_request.html', printers=printers)
@guest_blueprint.route('/requests/overview', methods=['GET'])
def guest_requests_overview():
"""Öffentliche Übersicht aller Druckanträge mit zensierten persönlichen Daten."""
try:
with get_cached_session() as db_session:
# Alle Gastanfragen laden, sortiert nach Erstellungsdatum (neueste zuerst)
guest_requests = db_session.query(GuestRequest).order_by(desc(GuestRequest.created_at)).all()
# Daten für Gäste aufbereiten (persönliche Daten zensieren)
public_requests = []
for req in guest_requests:
# Name zensieren: Nur ersten Buchstaben und letzten Buchstaben anzeigen
censored_name = "***"
if req.name and len(req.name) > 0:
if len(req.name) == 1:
censored_name = req.name[0] + "***"
elif len(req.name) == 2:
censored_name = req.name[0] + "***" + req.name[-1]
else:
censored_name = req.name[0] + "***" + req.name[-1]
# E-Mail zensieren
censored_email = "***@***.***"
if req.email and "@" in req.email:
email_parts = req.email.split("@")
if len(email_parts[0]) > 2:
censored_email = email_parts[0][:2] + "***@" + email_parts[1]
else:
censored_email = "***@" + email_parts[1]
# Grund zensieren (nur erste 20 Zeichen anzeigen)
censored_reason = "***"
if req.reason:
if len(req.reason) > 20:
censored_reason = req.reason[:20] + "***"
else:
censored_reason = req.reason[:10] + "***" if len(req.reason) > 10 else "***"
# Drucker-Info laden
printer_name = "Unbekannt"
if req.printer:
printer_name = req.printer.name
# Job-Status laden, falls vorhanden
job_status = None
if req.job_id:
job = db_session.query(Job).filter_by(id=req.job_id).first()
if job:
job_status = job.status
public_requests.append({
"id": req.id,
"name": censored_name,
"email": censored_email,
"reason": censored_reason,
"duration_min": req.duration_min,
"created_at": req.created_at,
"status": req.status,
"printer_name": printer_name,
"job_status": job_status
})
logger.info(f"Öffentliche Druckanträge-Übersicht aufgerufen - {len(public_requests)} Einträge")
return render_template('guest_requests_overview.html', requests=public_requests)
except Exception as e:
logger.error(f"Fehler beim Laden der öffentlichen Druckanträge-Übersicht: {str(e)}")
return render_template('guest_requests_overview.html', requests=[], error="Fehler beim Laden der Daten")
@guest_blueprint.route('/request/<int:request_id>', methods=['GET'])
def guest_request_status(request_id):
"""Status einer Gastanfrage anzeigen."""