# MYP Platform - Benutzerhandbuch

## Inhaltsverzeichnis

1. [Übersicht](#übersicht)
2. [Admin-Funktionen](#admin-funktionen)
3. [Gastauftrag-System mit OTP](#gastauftrag-system-mit-otp)
4. [Warteschlangen-System](#warteschlangen-system)
5. [Benutzerinterface](#benutzerinterface)
6. [Drucker-Management](#drucker-management)
7. [Job-Verwaltung](#job-verwaltung)
8. [Sicherheit und Berechtigungen](#sicherheit-und-berechtigungen)

## Übersicht

Die MYP Platform ist ein umfassendes 3D-Drucker-Verwaltungssystem, das speziell für Mercedes-Benz entwickelt wurde. Es ermöglicht die effiziente Verwaltung von 3D-Druckaufträgen, Benutzern und Druckern in einer sicheren, webbasierten Umgebung.

### Hauptfunktionen

- **Benutzer- und Rollenverwaltung** mit granularen Berechtigungen
- **3D-Drucker-Management** mit Smart-Plug-Integration
- **Job-Planung und -Überwachung** mit Konfliktmanagement
- **Gastauftrag-System** mit sicherem OTP-Code-System
- **Warteschlangen-Management** für Offline-Drucker
- **Admin-Dashboard** mit umfassenden Verwaltungsfunktionen

## Admin-Funktionen

### Zugriff auf das Admin-Dashboard

Das Admin-Dashboard ist unter `/admin` verfügbar und erfordert Admin-Berechtigung.

#### Benutzer-Verwaltung

**CRUD-Operationen für Benutzer:**
- **Erstellen**: Neue Benutzer mit E-Mail, Name und Rolle
- **Bearbeiten**: Benutzerdaten und Berechtigungen ändern
- **Löschen**: Benutzer aus dem System entfernen
- **Rollen zuweisen**: Admin, Benutzer, Gast-Rollen verwalten

**Suchfunktionen:**
```javascript
// Benutzer nach Name, E-Mail oder Rolle filtern
filterUsers(searchTerm)
editUser(userId)      // Benutzer bearbeiten
deleteUser(userId)    // Benutzer löschen
createUser()          // Neuen Benutzer erstellen
```

#### Drucker-Management

**Drucker-Konfiguration:**
- Drucker hinzufügen/bearbeiten
- Status-Überwachung (Online/Offline)
- Smart-Plug-Integration mit TP-Link Tapo
- Wartungsplanung und -historie

**API-Endpunkte:**
```
GET    /api/admin/printers           # Alle Drucker auflisten
POST   /api/admin/printers           # Drucker hinzufügen
PUT    /api/admin/printers/<id>      # Drucker aktualisieren
DELETE /api/admin/printers/<id>      # Drucker löschen
POST   /api/admin/printers/update-all # Status aktualisieren
```

#### Job-Verwaltung

**Job-Operationen:**
- Alle aktiven und abgeschlossenen Jobs anzeigen
- Jobs abbrechen, löschen oder abschließen
- Warteschlangen-Management mit Prioritäten
- Performance-Analytics und Trends

#### System-Administration

**Verfügbare Funktionen:**
```javascript
showSystemSettings()     // System-Einstellungen Modal
saveSystemSettings()     // Einstellungen speichern
updateAllPrinters()      // Drucker-Status aktualisieren
restartSystem()          // System-Neustart (Development)
clearCache()             // System-Cache leeren
```

**API-Endpunkte:**
```
POST /api/admin/cache/clear        # System-Cache leeren
GET  /api/admin/system/status      # System-Status abrufen
POST /api/admin/backup/create      # System-Backup erstellen
GET  /api/admin/logs/export        # System-Logs exportieren
```

### Gastanfragen-Verwaltung

#### Genehmigungsworkflow

**Schritt-für-Schritt-Prozess:**

1. **Drucker-Zuweisung**: Automatische oder manuelle Drucker-Auswahl
2. **Genehmigungsnotizen**: Zusätzliche Anweisungen für den Gast
3. **Job-Erstellung**: Automatische Erstellung mit OTP-Generierung
4. **Admin-Tracking**: Vollständige Nachverfolgung der Genehmigung

**API für Gastanfragen:**
```
GET  /api/admin/requests           # Alle Gastanfragen mit Filterung
GET  /api/admin/requests/<id>      # Detaillierte Anfrage-Informationen
PUT  /api/admin/requests/<id>      # Anfrage aktualisieren
POST /api/requests/<id>/approve    # Anfrage genehmigen
POST /api/requests/<id>/deny       # Anfrage ablehnen
```

#### Ablehnungsworkflow

**Verpflichtende Begründung:**
- Detaillierter Ablehnungsgrund erforderlich
- Transparenz: Begründung wird dem Gast mitgeteilt
- Admin-Tracking: Nachverfolgung der Ablehnung
- Audit-Log: Vollständige Dokumentation

#### Benutzeroberfläche

**Filter und Suche:**
- Status-Filter: Alle, Wartend, Genehmigt, Abgelehnt
- Such-Funktion: Nach Name, E-Mail, Begründung
- Dringlichkeitskennzeichnung: Anfragen älter als 24h
- Pagination: Effiziente Darstellung großer Datenmengen

**Interaktive Features:**
- Ein-Klick-Aktionen für schnelle Genehmigung/Ablehnung
- Detail-Modals mit vollständigen Anfrage-Informationen
- Echtzeit-Updates nach Aktionen
- Responsive Design für Desktop und Mobile

## Gastauftrag-System mit OTP

### Übersicht

Das OTP (One-Time Password) System ermöglicht es Gästen, den Status ihrer Druckaufträge sicher und ohne Anmeldung zu prüfen. Jeder Gast erhält bei der Antragsstellung einen eindeutigen 16-stelligen hexadezimalen Code.

### OTP-Generierung und Sicherheit

**Automatische Code-Erstellung:**
- **Bei Antragstellung**: Jeder neue Gastauftrag erhält sofort einen OTP-Code
- **Sichere Speicherung**: Code wird mit bcrypt gehasht gespeichert
- **Gültigkeitsdauer**: 72 Stunden ab Erstellung
- **Format**: 16-stelliger hexadezimaler Code (z.B. "A1B2C3D4E5F67890")

**Sicherheitsfeatures:**
- **Bcrypt-Hashing**: Sichere Speicherung der OTP-Codes
- **Salt**: Jeder Hash verwendet einen eindeutigen Salt
- **One-Time-Use**: Code wird nach erfolgreicher Verifikation als verwendet markiert
- **E-Mail-Verifikation**: Optional für erhöhte Sicherheit
- **Zeitliche Begrenzung**: Codes laufen nach 72 Stunden ab

### Status-Abfrage

**Webinterface:**
- **URL**: `/guest/status-check`
- **Zugang**: Öffentlich zugänglich
- OTP-Code-Eingabe mit Formatierung
- Optionale E-Mail-Verifikation
- Detaillierte Status-Anzeige

**API-Endpunkt:**
```http
POST /guest/api/guest/status
```

**Request Body:**
```json
{
  "otp_code": "A1B2C3D4E5F67890",
  "email": "gast@example.com"  // Optional
}
```

### Status-Informationen

**Pending (In Bearbeitung):**
```json
{
  "status": "pending",
  "message": "Ihr Auftrag wird bearbeitet. Wartezeit: 3 Stunden.",
  "hours_waiting": 3
}
```

**Approved (Genehmigt):**
```json
{
  "status": "approved",
  "message": "Ihr Auftrag wurde genehmigt! Sie können mit dem Drucken beginnen.",
  "can_start_job": true,
  "approved_at": "2025-01-07T12:15:00Z",
  "approval_notes": "Auftrag genehmigt - Drucker B verfügbar"
}
```

**Rejected (Abgelehnt):**
```json
{
  "status": "rejected",
  "message": "Ihr Auftrag wurde leider abgelehnt.",
  "rejected_at": "2025-01-07T12:15:00Z",
  "rejection_reason": "Datei nicht kompatibel mit verfügbaren Druckern"
}
```

### Benutzer-Workflow für Gäste

**1. Antrag stellen:**
```
Gast füllt Antragsformular aus
    ↓
System generiert automatisch OTP-Code
    ↓
Gast erhält Code angezeigt/per E-Mail
```

**2. Status prüfen:**
```
Gast besucht /guest/status-check
    ↓
Gibt 16-stelligen OTP-Code ein
    ↓
Optional: E-Mail zur Verifikation
    ↓
System zeigt aktuellen Status an
```

**3. Job starten (bei Genehmigung):**
```
Status zeigt "Genehmigt" an
    ↓
Link zu "Jetzt drucken" erscheint
    ↓
Gast kann Job mit anderem Code starten
```

## Warteschlangen-System

### Übersicht

Das Warteschlangen-System ermöglicht es Benutzern, Druckjobs auch für offline Drucker zu erstellen. Diese Jobs werden automatisch aktiviert, sobald die entsprechenden Drucker wieder online sind.

### Universelle Drucker-Anzeige

**Alle Drucker sichtbar:**
- **Online-Drucker**: ✅ Grüner Hintergrund, "ONLINE - Sofortiger Start"
- **Offline-Drucker**: 🔄 Oranger Hintergrund, "OFFLINE - Warteschlange"
- **Status-Informationen**: Letzte Überprüfungszeit wird angezeigt

### Intelligente Job-Erstellung

**Automatische Status-Erkennung:**
- System erkennt automatisch Drucker-Status bei Job-Erstellung
- **Adaptive Job-Status**:
  - `scheduled` - für online Drucker (sofortiger Start)
  - `waiting_for_printer` - für offline Drucker (Warteschlange)

### Background-Überwachung (Queue-Manager)

**Automatische Funktionen:**
- **Überwachung** alle 2 Minuten
- **Status-Checks** für alle Drucker mit wartenden Jobs
- **Automatische Aktivierung** von Jobs bei Online-Statuswechsel
- **Thread-sichere Implementierung** mit Daemon-Thread

**Queue-Manager-API:**
```
/api/queue/status          # GET - Queue-Status abrufen
/api/queue/check-now       # POST - Manuelle Queue-Überprüfung
/api/jobs/check-waiting    # POST - Wartende Jobs prüfen
```

### Benutzer-Workflow für Warteschlangen

**1. Job für Online-Drucker erstellen:**
1. Benutzer wählt **Online-Drucker** (✅ grün markiert)
2. Job wird mit Status `scheduled` erstellt
3. Job startet **sofort** zur geplanten Zeit

**2. Job für Offline-Drucker erstellen:**
1. Benutzer wählt **Offline-Drucker** (🔄 orange markiert)
2. **Ausführliche Warnung** wird angezeigt
3. Benutzer bestätigt **bewusst** die Warteschlangen-Erstellung
4. Job wird mit Status `waiting_for_printer` erstellt
5. **Automatische Überwachung** startet

**3. Automatische Job-Aktivierung:**
1. **Queue-Manager** überwacht Drucker-Status alle 2 Minuten
2. Sobald Drucker **online** geht:
   - Job-Status wechselt zu `scheduled`
   - **Benachrichtigung** wird an Benutzer gesendet
   - Job startet zur **geplanten Zeit**

### Benachrichtigungssystem

**Sofortige Benachrichtigungen:**
- Nachrichten wenn Drucker online gehen
- **Anti-Spam-Schutz** mit 5-Minuten-Cooldown
- **Strukturierte Nachrichten** mit Job- und Drucker-Details

## Benutzerinterface

### Frontend-Architektur

**TailwindCSS-basiertes Design:**
- Utility-first CSS mit angepassten Optimierungen für Raspberry Pi
- Responsive Design für Desktop und Mobile
- Dark/Light Mode mit Premium-Animationen
- Mercedes-Benz Corporate Design

**JavaScript-Framework:**
- Vanilla JavaScript ohne schwere Frameworks
- Progressive Enhancement: Funktioniert ohne JavaScript, verbessert mit JavaScript
- Service Workers für Offline-Fähigkeit und Performance

### Glassmorphism UI-Features

**Premium Flash Messages:**
```css
.flash-message {
  backdrop-filter: blur(40px) saturate(200%) brightness(130%) contrast(110%);
  background: linear-gradient(135deg, rgba(colors) 0%, 50%, 100%);
  box-shadow: 
    0 32px 64px rgba(0, 0, 0, 0.25),
    0 12px 24px rgba(0, 0, 0, 0.15),
    inset 0 1px 0 rgba(255, 255, 255, 0.4);
}
```

**Do Not Disturb System:**
- Zeitgesteuerte Modi (30min bis dauerhaft)
- Intelligente Nachrichtenfilterung
- Navbar-Integration mit Visual Feedback
- Persistente Einstellungen über Browser-Neustarts
- Vollständige Keyboard-Accessibility

### Performance-Optimierungen

**Raspberry Pi-spezifische Optimierungen:**
- Reduzierte Animationen und Glassmorphism-Effekte
- Minifizierte Assets mit gzip-Kompression
- Optimierte SQLite-Einstellungen für SD-Karten
- Memory-effiziente Session-Behandlung

**Caching-Strategie:**
- Statische Datei-Caching (1 Jahr)
- Database Query Caching
- Session-basiertes Caching für teure Operationen

## Drucker-Management

### Smart-Plug-Integration

**TP-Link Tapo-Unterstützung:**
- PyP100-Bibliothek für Gerätesteuerung
- Status-Überwachung und Terminplanung
- Automatisches Energiemanagement

**Drucker-Status-Überwachung:**
```python
# Drucker-Status-Check
def check_printer_status(printer_ip):
    try:
        response = requests.get(f"http://{printer_ip}/status", timeout=5)
        return response.status_code == 200
    except:
        return False
```

### Konflikt-Management

**Intelligente Drucker-Zuweisung:**
- Verfügbarkeitsfenster berücksichtigen
- Prioritätsstufen (dringend, hoch, normal, niedrig)
- Job-Dauer-Kompatibilität
- Echtzeit-Konflikterkennung

## Job-Verwaltung

### Job-Status-System

**Status-Definitionen:**
- `pending` - Warten auf Genehmigung
- `approved` - Genehmigt, bereit zum Start
- `scheduled` - Geplant und aktiv
- `waiting_for_printer` - Warten auf Drucker (Warteschlange)
- `in_progress` - Aktuell in Bearbeitung
- `completed` - Erfolgreich abgeschlossen
- `cancelled` - Abgebrochen
- `failed` - Fehlgeschlagen

### Unterstützte Dateiformate

**3D-Dateien:**
- STL (Standard Tessellation Language)
- OBJ (Wavefront OBJ)
- 3MF (3D Manufacturing Format)
- AMF (Additive Manufacturing File)
- GCODE (G-Code für direkten Druck)

**Datei-Upload-System:**
- Sichere Dateibehandlung mit Validierung
- Organisierte Speicherung im uploads/-Verzeichnis
- Automatische Dateigrößen-Limits
- Virus-Scanning (falls konfiguriert)

## Sicherheit und Berechtigungen

### Berechtigungssystem

**Rollen-Hierarchie:**
- **Super Admin**: Vollzugriff auf alle Funktionen
- **Admin**: Standard-Admin-Funktionen
- **Moderator**: Eingeschränkte Admin-Rechte
- **Approver**: Nur Gastanfragen-Genehmigung
- **User**: Standard-Benutzer-Funktionen
- **Guest**: Eingeschränkter Zugang

**Spezielle Berechtigungen:**
```python
class UserPermission:
    can_manage_users = True       # Benutzer verwalten
    can_manage_printers = True    # Drucker verwalten
    can_approve_jobs = True       # Jobs genehmigen
    can_view_analytics = True     # Analytics einsehen
    can_manage_system = True      # System-Administration
    can_access_admin = True       # Admin-Bereich zugreifen
```

### Sicherheitsmaßnahmen

**Implementierte Features:**
- **SSL/TLS**: Selbstsignierte Zertifikate mit automatischer Generierung
- **CSRF-Schutz**: Global aktiviert mit Flask-WTF
- **Session-Sicherheit**: Sichere Cookies, HTTPOnly, SameSite=Lax
- **Rate Limiting**: Eingebaut für API-Endpunkte
- **Input-Validierung**: WTForms für alle Benutzereingaben

**CSRF-Schutz in JavaScript:**
```javascript
// Automatische CSRF-Token-Integration
function getCSRFToken() {
    return document.querySelector('meta[name="csrf-token"]').getAttribute('content');
}

async function secureApiCall(url, method, data) {
    const response = await fetch(url, {
        method: method,
        headers: {
            'Content-Type': 'application/json',
            'X-CSRFToken': getCSRFToken()
        },
        body: JSON.stringify(data)
    });
    return response.json();
}
```

### Audit-Logging

**Admin-Aktivitäten-Log:**
```python
@admin_required
def log_admin_action(action, details):
    admin_logger.info(f"Admin {current_user.id} ({current_user.name}) - {action}: {details}")

# Beispiele
log_admin_action("USER_CREATED", f"Created user {new_user.email}")
log_admin_action("REQUEST_APPROVED", f"Approved guest request {request_id}")
log_admin_action("SYSTEM_RESTART", "System restart initiated")
```

---

**Status**: ✅ Vollständig funktional  
**Letzte Aktualisierung**: Januar 2025  
**Version**: 3.1.3  
**Kompatibilität**: Python 3.9+, Flask 3.1+, SQLAlchemy 2.0+