"Refactor guest blueprint and related files for improved maintainability (feat)"

This commit is contained in:
2025-05-29 16:18:09 +02:00
parent 2e306cb0df
commit 1ee91cec0a
6 changed files with 242 additions and 232 deletions

View File

@@ -51,14 +51,78 @@ def approver_required(f):
return decorated_function
# Gast-Routen
@guest_blueprint.route('/request', methods=['GET'])
@guest_blueprint.route('/request', methods=['GET', 'POST'])
def guest_request_form():
"""Formular für Gastanfragen anzeigen."""
"""Formular für Gastanfragen anzeigen und verarbeiten."""
with get_cached_session() as db_session:
# Aktive Drucker für SelectField laden
printers = db_session.query(Printer).filter_by(active=True).all()
# Formular erstellen
form = GuestRequestForm()
# Drucker-Optionen für SelectField setzen
printer_choices = [(0, 'Keinen spezifischen Drucker auswählen')]
printer_choices.extend([(p.id, f"{p.name} ({p.location or 'Kein Standort'})") for p in printers])
form.printer_id.choices = printer_choices
if form.validate_on_submit():
try:
# Daten aus dem Formular extrahieren
name = form.name.data
email = form.email.data
reason = form.reason.data
duration_min = form.duration_min.data
printer_id = form.printer_id.data if form.printer_id.data != 0 else None
# IP-Adresse erfassen
author_ip = request.remote_addr
# Drucker validieren, falls angegeben
if printer_id:
printer = db_session.query(Printer).filter_by(id=printer_id, active=True).first()
if not printer:
flash("Ungültiger Drucker ausgewählt.", "error")
return render_template('guest_request.html', form=form, printers=printers)
# Neue Anfrage erstellen
guest_request = GuestRequest(
name=name,
email=email,
reason=reason,
duration_min=duration_min,
printer_id=printer_id,
author_ip=author_ip
)
db_session.add(guest_request)
db_session.commit()
# Benachrichtigung für Genehmiger erstellen
Notification.create_for_approvers(
notification_type="guest_request",
payload={
"request_id": guest_request.id,
"name": guest_request.name,
"created_at": guest_request.created_at.isoformat(),
"status": guest_request.status
}
)
logger.info(f"Neue Gastanfrage erstellt: ID {guest_request.id}, Name: {name}")
flash("Ihr Antrag wurde erfolgreich eingereicht!", "success")
# Weiterleitung zur Status-Seite
return redirect(url_for('guest.guest_request_status', request_id=guest_request.id))
except Exception as e:
logger.error(f"Fehler beim Erstellen der Gastanfrage: {str(e)}")
flash("Fehler beim Verarbeiten Ihres Antrags. Bitte versuchen Sie es erneut.", "error")
# Drucker-Liste von der Session trennen für Template-Verwendung
db_session.expunge_all()
return render_template('guest_request.html', printers=printers)
return render_template('guest_request.html', form=form, printers=printers)
@guest_blueprint.route('/start-job', methods=['GET'])
def guest_start_job_form():