"feat: Enhanced admin panel templates for printer management"

This commit is contained in:
Till Tomczak 2025-05-26 13:15:19 +02:00
parent 958a7bdc0f
commit 6aff252bd2
4 changed files with 146 additions and 12 deletions

View File

@ -1166,10 +1166,9 @@ def create_printer():
@app.route("/api/printers/<int:printer_id>", methods=["DELETE"])
@login_required
def delete_printer(printer_id):
"""Delete a printer (admin only)"""
"""Löscht einen Drucker (nur für Administratoren)"""
if not current_user.is_admin:
flash("Sie haben keine Berechtigung, um Drucker zu löschen.", "error")
return redirect(url_for('admin_page', tab='printers'))
return jsonify({"error": "Nur Administratoren können Drucker löschen"}), 403
db_session = get_db_session()
try:
@ -1177,23 +1176,20 @@ def delete_printer(printer_id):
if not printer:
db_session.close()
flash("Drucker nicht gefunden.", "error")
return redirect(url_for('admin_page', tab='printers'))
return jsonify({"error": "Drucker nicht gefunden"}), 404
printer_name = printer.name # Save for later logging
printer_name = printer.name # Für Logging speichern
db_session.delete(printer)
db_session.commit()
db_session.close()
app_logger.info(f"Printer deleted: {printer_name} (ID: {printer_id})")
flash(f"Drucker {printer_name} wurde erfolgreich gelöscht.", "success")
return redirect(url_for('admin_page', tab='printers'))
printers_logger.info(f"Drucker {printer_name} (ID: {printer_id}) wurde von {current_user.username} gelöscht")
return jsonify({"success": True, "message": f"Drucker {printer_name} wurde erfolgreich gelöscht"}), 200
except Exception as e:
db_session.rollback()
db_session.close()
app_logger.error(f"Error deleting printer: {str(e)}")
flash(f"Fehler beim Löschen des Druckers: {str(e)}", "error")
return redirect(url_for('admin_page', tab='printers'))
printers_logger.error(f"Fehler beim Löschen des Druckers {printer_id}: {str(e)}")
return jsonify({"error": f"Fehler beim Löschen des Druckers: {str(e)}"}), 500
@app.route("/api/stats", methods=["GET"])
@login_required

View File

@ -0,0 +1,46 @@
{% extends "base.html" %}
{% block title %}Drucker verwalten - Mercedes-Benz MYP Platform{% endblock %}
{% block content %}
<div class="min-h-screen bg-gradient-to-br from-slate-50 via-blue-50 to-indigo-50 dark:from-slate-900 dark:via-slate-800 dark:to-slate-900">
<div class="max-w-4xl mx-auto px-4 sm:px-6 lg:px-8 py-8">
<!-- Header -->
<div class="mb-8">
<div class="flex items-center justify-between">
<div>
<h1 class="text-3xl font-bold text-slate-900 dark:text-white">Drucker verwalten</h1>
<p class="text-slate-600 dark:text-slate-400 mt-2">Verwaltung von {{ printer.name }}</p>
</div>
<a href="{{ url_for('admin_page', tab='printers') }}" class="inline-flex items-center px-4 py-2 bg-slate-200 dark:bg-slate-700 text-slate-700 dark:text-slate-300 rounded-xl hover:bg-slate-300 dark:hover:bg-slate-600 transition-all duration-300">
<svg class="w-5 h-5 mr-2" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 19l-7-7m0 0l7-7m-7 7h18"/>
</svg>
Zurück
</a>
</div>
</div>
<!-- Content -->
<div class="bg-white/80 dark:bg-slate-800/80 backdrop-blur-xl rounded-3xl border border-white/20 dark:border-slate-700/50 shadow-xl p-8">
<div class="text-center py-12">
<svg class="w-16 h-16 mx-auto text-slate-400 dark:text-slate-500 mb-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M17 17h2a2 2 0 002-2v-4a2 2 0 00-2-2H5a2 2 0 00-2 2v4a2 2 0 002 2h2m2 4h6a2 2 0 002-2v-4a2 2 0 00-2-2H9a2 2 0 00-2 2v4a2 2 0 002 2zm8-12V5a2 2 0 00-2-2H9a2 2 0 00-2 2v4h10z"/>
</svg>
<h3 class="text-lg font-medium text-slate-900 dark:text-white mb-2">Druckerverwaltung</h3>
<p class="text-slate-500 dark:text-slate-400 mb-6">Diese Funktion wird in einer zukünftigen Version implementiert.</p>
<div class="space-y-2 text-sm text-slate-600 dark:text-slate-400">
<p><strong>Drucker-ID:</strong> {{ printer.id }}</p>
<p><strong>Name:</strong> {{ printer.name }}</p>
<p><strong>Modell:</strong> {{ printer.model }}</p>
<p><strong>Standort:</strong> {{ printer.location }}</p>
<p><strong>Status:</strong> {{ printer.status.title() }}</p>
<p><strong>MAC-Adresse:</strong> {{ printer.mac_address }}</p>
<p><strong>Plug IP:</strong> {{ printer.plug_ip }}</p>
</div>
</div>
</div>
</div>
</div>
{% endblock %}

View File

@ -0,0 +1,44 @@
{% extends "base.html" %}
{% block title %}Drucker-Einstellungen - Mercedes-Benz MYP Platform{% endblock %}
{% block content %}
<div class="min-h-screen bg-gradient-to-br from-slate-50 via-blue-50 to-indigo-50 dark:from-slate-900 dark:via-slate-800 dark:to-slate-900">
<div class="max-w-4xl mx-auto px-4 sm:px-6 lg:px-8 py-8">
<!-- Header -->
<div class="mb-8">
<div class="flex items-center justify-between">
<div>
<h1 class="text-3xl font-bold text-slate-900 dark:text-white">Drucker-Einstellungen</h1>
<p class="text-slate-600 dark:text-slate-400 mt-2">Einstellungen für {{ printer.name }}</p>
</div>
<a href="{{ url_for('admin_page', tab='printers') }}" class="inline-flex items-center px-4 py-2 bg-slate-200 dark:bg-slate-700 text-slate-700 dark:text-slate-300 rounded-xl hover:bg-slate-300 dark:hover:bg-slate-600 transition-all duration-300">
<svg class="w-5 h-5 mr-2" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 19l-7-7m0 0l7-7m-7 7h18"/>
</svg>
Zurück
</a>
</div>
</div>
<!-- Content -->
<div class="bg-white/80 dark:bg-slate-800/80 backdrop-blur-xl rounded-3xl border border-white/20 dark:border-slate-700/50 shadow-xl p-8">
<div class="text-center py-12">
<svg class="w-16 h-16 mx-auto text-slate-400 dark:text-slate-500 mb-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10.325 4.317c.426-1.756 2.924-1.756 3.35 0a1.724 1.724 0 002.573 1.066c1.543-.94 3.31.826 2.37 2.37a1.724 1.724 0 001.065 2.572c1.756.426 1.756 2.924 0 3.35a1.724 1.724 0 00-1.066 2.573c.94 1.543-.826 3.31-2.37 2.37a1.724 1.724 0 00-2.572 1.065c-.426 1.756-2.924 1.756-3.35 0a1.724 1.724 0 00-2.573-1.066c-1.543.94-3.31-.826-2.37-2.37a1.724 1.724 0 00-1.065-2.572c-1.756-.426-1.756-2.924 0-3.35a1.724 1.724 0 001.066-2.573c-.94-1.543.826-3.31 2.37-2.37.996.608 2.296.07 2.572-1.065z"/>
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M15 12a3 3 0 11-6 0 3 3 0 016 0z"/>
</svg>
<h3 class="text-lg font-medium text-slate-900 dark:text-white mb-2">Drucker-Einstellungen</h3>
<p class="text-slate-500 dark:text-slate-400 mb-6">Diese Funktion wird in einer zukünftigen Version implementiert.</p>
<div class="space-y-2 text-sm text-slate-600 dark:text-slate-400">
<p><strong>Drucker:</strong> {{ printer.name }}</p>
<p><strong>Modell:</strong> {{ printer.model }}</p>
<p><strong>Standort:</strong> {{ printer.location }}</p>
<p><strong>Aktueller Status:</strong> {{ printer.status.title() }}</p>
</div>
</div>
</div>
</div>
</div>
{% endblock %}

View File

@ -0,0 +1,48 @@
{% extends "base.html" %}
{% block title %}Admin-Einstellungen - Mercedes-Benz MYP Platform{% endblock %}
{% block content %}
<div class="min-h-screen bg-gradient-to-br from-slate-50 via-blue-50 to-indigo-50 dark:from-slate-900 dark:via-slate-800 dark:to-slate-900">
<div class="max-w-4xl mx-auto px-4 sm:px-6 lg:px-8 py-8">
<!-- Header -->
<div class="mb-8">
<div class="flex items-center justify-between">
<div>
<h1 class="text-3xl font-bold text-slate-900 dark:text-white">System-Einstellungen</h1>
<p class="text-slate-600 dark:text-slate-400 mt-2">Konfiguration des MYP-Systems</p>
</div>
<a href="{{ url_for('admin_page', tab='system') }}" class="inline-flex items-center px-4 py-2 bg-slate-200 dark:bg-slate-700 text-slate-700 dark:text-slate-300 rounded-xl hover:bg-slate-300 dark:hover:bg-slate-600 transition-all duration-300">
<svg class="w-5 h-5 mr-2" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 19l-7-7m0 0l7-7m-7 7h18"/>
</svg>
Zurück
</a>
</div>
</div>
<!-- Content -->
<div class="bg-white/80 dark:bg-slate-800/80 backdrop-blur-xl rounded-3xl border border-white/20 dark:border-slate-700/50 shadow-xl p-8">
<div class="text-center py-12">
<svg class="w-16 h-16 mx-auto text-slate-400 dark:text-slate-500 mb-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10.325 4.317c.426-1.756 2.924-1.756 3.35 0a1.724 1.724 0 002.573 1.066c1.543-.94 3.31.826 2.37 2.37a1.724 1.724 0 001.065 2.572c1.756.426 1.756 2.924 0 3.35a1.724 1.724 0 00-1.066 2.573c.94 1.543-.826 3.31-2.37 2.37a1.724 1.724 0 00-2.572 1.065c-.426 1.756-2.924 1.756-3.35 0a1.724 1.724 0 00-2.573-1.066c-1.543.94-3.31-.826-2.37-2.37a1.724 1.724 0 00-1.065-2.572c-1.756-.426-1.756-2.924 0-3.35a1.724 1.724 0 001.066-2.573c-.94-1.543.826-3.31 2.37-2.37.996.608 2.296.07 2.572-1.065z"/>
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M15 12a3 3 0 11-6 0 3 3 0 016 0z"/>
</svg>
<h3 class="text-lg font-medium text-slate-900 dark:text-white mb-2">System-Einstellungen</h3>
<p class="text-slate-500 dark:text-slate-400 mb-6">Diese Funktion wird in einer zukünftigen Version implementiert.</p>
<div class="space-y-2 text-sm text-slate-600 dark:text-slate-400">
<p>Hier können Sie verschiedene Systemeinstellungen konfigurieren:</p>
<ul class="list-disc list-inside space-y-1 mt-4">
<li>Allgemeine Systemkonfiguration</li>
<li>Sicherheitseinstellungen</li>
<li>Netzwerkeinstellungen</li>
<li>Backup-Konfiguration</li>
<li>Logging-Einstellungen</li>
</ul>
</div>
</div>
</div>
</div>
</div>
{% endblock %}