🔧 Update: Workflow Documentation and Job Deletion Enhancements

**Änderungen:**
-  Aktualisierte Schulungsdokumentation für den Gastzugang, um den Workflow klarer darzustellen.
-  Verbesserte Visualisierung im Workflow-Diagramm, um den Prozess für Gäste zu verdeutlichen.
-  Optimierte Logik in der Job-Löschfunktion, um abhängige Datensätze vor der Löschung zu bereinigen.

**Ergebnis:**
- Klarere Anleitungen für Benutzer zur Nutzung des Gastzugangs.
- Verbesserte Nachvollziehbarkeit des Workflows durch aktualisierte Diagramme.
- Erhöhte Datenintegrität durch Bereinigung abhängiger Datensätze vor der Job-Löschung.

🤖 Generated with [Claude Code](https://claude.ai/code)
This commit is contained in:
2025-06-16 01:18:31 +02:00
parent 83d3ca5e28
commit b1ae9523a9
155 changed files with 1189 additions and 199 deletions

View File

@ -13,23 +13,23 @@ Das MYP-System (Manage Your Printers) implementiert einen strukturierten Workflo
### Phase 1: Gastzugang-Anfrage
#### 1.1 Gast stellt Anfrage
**Endpunkt:** `/request` (öffentlich zugänglich)
#### 1.1 Gast stellt Anfrage (Vor-Ort-Prozess)
**Endpunkt:** `/request` (nur im lokalen Netzwerk zugänglich)
```
Gast besucht: https://myp.example.com/request
Gast besucht vor Ort: http://192.168.1.100:5000/request
(Terminal/Kiosk in TBA Marienfelde)
```
**Eingabefelder:**
- **Name** (Pflichtfeld)
- **E-Mail-Adresse** (Pflichtfeld, Validierung)
- **Grund der Anfrage** (Pflichtfeld, mind. 10 Zeichen)
- **Telefonnummer** (optional)
- **Abteilung/Firma** (Pflichtfeld)
- **Gewünschte Zugangsdauer** (1-7 Tage)
- **Ansprechpartner (Mercedes-Benz)** (optional)
**Validierungsregeln:**
- E-Mail-Format-Prüfung
- Duplikatsprüfung (gleiche E-Mail innerhalb 24h)
- Duplikatsprüfung (gleicher Name innerhalb 24h)
- Mindestlänge für Begründung
- Maximale Zugangsdauer begrenzt
@ -39,28 +39,48 @@ Gast besucht: https://myp.example.com/request
1. Anfrage-ID generiert (unique)
2. Status: "pending"
3. Zeitstempel erstellt
4. Admin-Benachrichtigung gesendet
5. Bestätigungs-E-Mail an Gast (optional)
4. Dashboard-Benachrichtigung für Admin
5. Ausdruck mit Anfrage-ID für Gast
```
#### 1.2 Bestätigung für Gast
**Weiterleitung:** `/request/{request_id}`
Der Gast erhält eine Bestätigungsseite mit:
- Anfrage-ID zum Nachverfolgen
- Geschätzte Bearbeitungszeit
- Kontaktinformationen bei Rückfragen
- **Anfrage-ID zum Nachverfolgen** (wird ausgedruckt)
- **QR-Code** für spätere Status-Abfrage
- Geschätzte Bearbeitungszeit (1-4 Stunden)
- Kontaktinformation: **Vor Ort bei Mercedes-Benz Ansprechpartner**
- Status-Anzeige (Pending/Genehmigt/Abgelehnt)
**Gast erhält:**
```
┌─────────────────────────────────────────────────────┐
│ MYP Gastzugang-Anfrage │
│ TBA Marienfelde │
├─────────────────────────────────────────────────────┤
│ Anfrage-ID: GAS-2025-001234 │
│ Name: Max Mustermann │
│ Eingegangen: 16.06.2025 09:00 │
│ │
│ Status: ⏳ Wartet auf Genehmigung │
│ │
│ [QR-Code] ← Scannen für Status-Update │
│ │
│ Bearbeitungszeit: 1-4 Stunden │
│ Bei Fragen: Mercedes-Benz Ansprechpartner │
└─────────────────────────────────────────────────────┘
```
---
### Phase 2: Administrative Genehmigung
#### 2.1 Admin-Benachrichtigung
**Automatische Benachrichtigung:**
- E-Mail an alle Administratoren
- Dashboard-Benachrichtigung im System
- Rot markierte Anfrage in Admin-Panel
**Lokale Benachrichtigung:**
- Dashboard-Benachrichtigung im System (rote Badge)
- Browser-Popup (wenn Admin angemeldet)
- Audio-Signal bei neuer Anfrage (optional)
#### 2.2 Admin-Prüfung
**Admin-Panel:** `/admin/guest-requests`
@ -113,58 +133,65 @@ Der Gast erhält eine Bestätigungsseite mit:
---
### Phase 3: OTP-System und Anmeldung
### Phase 3: OTP-System und Anmeldung (Offline)
#### 3.1 OTP-Generierung (bei Genehmigung)
**Automatischer Prozess:**
**Lokaler Prozess:**
```python
# System generiert One-Time Password
otp_code = generate_secure_otp() # 6-stellig, numerisch
expiry_time = now() + timedelta(hours=access_duration)
# E-Mail-Versand an Gast
send_approval_email(
email=guest_email,
# Automatischer Ausdruck für Admin
print_guest_credentials(
guest_name=guest_name,
otp_code=otp_code,
expiry_time=expiry_time,
access_instructions=True
)
```
**E-Mail-Inhalt:**
**Ausgedruckte Zugangsdaten:**
```
Betreff: MYP Gastzugang genehmigt - TBA Marienfelde
┌─────────────────────────────────────────────────────┐
│ MYP GASTZUGANG GENEHMIGT │
│ TBA Marienfelde │
├─────────────────────────────────────────────────────┤
│ Name: Max Mustermann │
│ Anfrage-ID: GAS-2025-001234 │
│ Genehmigt: 16.06.2025 10:30 │
│ │
│ 🔑 ZUGANGSDATEN: │
│ OTP-Code: 123456 │
│ Gültig bis: 18.06.2025 14:30 │
│ │
│ 🌐 ANMELDUNG: │
│ Terminal vor Ort oder │
│ http://192.168.1.100:5000/auth/guest │
│ │
│ 📋 ANWEISUNGEN: │
│ 1. Name eingeben: Max Mustermann │
│ 2. OTP-Code eingeben: 123456 │
│ 3. Druckdateien hochladen │
│ 4. Auf Admin-Freigabe warten │
│ │
│ ⚠️ WICHTIGE HINWEISE: │
│ • Max. Druckzeit pro Job: 4 Stunden │
│ • Dateiformate: STL, OBJ, 3MF, GCODE │
│ • Bei Problemen: Mercedes-Benz Ansprechpartner │
│ │
│ [QR-Code für Login-Seite] │
└─────────────────────────────────────────────────────┘
Hallo Max Mustermann,
Ihr Gastzugang wurde genehmigt!
Zugangsdaten:
- OTP-Code: 123456
- Gültig bis: 18.06.2025 14:30
- Login-URL: https://myp.example.com/auth/guest
Anweisungen:
1. Rufen Sie die Login-URL auf
2. Geben Sie Ihre E-Mail-Adresse ein
3. Verwenden Sie den OTP-Code als Passwort
4. Sie haben Zugang für 72 Stunden
Wichtige Hinweise:
- Maximale Druckzeit pro Job: 4 Stunden
- Unterstützte Dateiformate: STL, OBJ, 3MF, GCODE
- Bei Problemen: support@tba-marienfelde.de
Mit freundlichen Grüßen
Ihr MYP-Team
👨‍💼 ADMIN: Bitte an Gast aushändigen
```
#### 3.2 Gast-Anmeldung
**Endpunkt:** `/auth/guest`
**Login-Prozess:**
1. E-Mail-Adresse eingeben
2. OTP-Code eingeben (anstatt Passwort)
1. **Name eingeben** (wie auf Ausdruck)
2. **OTP-Code eingeben** (vom ausgedruckten Zettel)
3. System validiert OTP und Gültigkeitsdauer
4. Session mit eingeschränkten Rechten erstellt
@ -172,7 +199,8 @@ Ihr MYP-Team
```python
guest_session = {
"user_type": "guest",
"email": "max.mustermann@example.com",
"guest_name": "Max Mustermann",
"request_id": "GAS-2025-001234",
"expires_at": "2025-06-18T14:30:00",
"permissions": ["create_job", "view_own_jobs"],
"restrictions": {
@ -317,6 +345,11 @@ def assign_printer_for_guest_job(job):
}
```
**Gast-Benachrichtigung bei Genehmigung:**
- **Dashboard-Update:** Status ändert sich automatisch
- **Ausdruck für Admin:** Job-Details mit geplanter Startzeit
- **Gast kann Status prüfen:** Über QR-Code oder Anfrage-ID
---
### Phase 6: Ausführung und Monitoring
@ -329,9 +362,9 @@ def schedule_approved_job(job):
job.status = "scheduled"
job.scheduled_start = calculate_optimal_start_time(job)
# E-Mail-Benachrichtigung an Gast
send_job_approved_notification(
email=job.guest_email,
# Lokale Benachrichtigung für Gast (Dashboard)
update_guest_dashboard_status(
guest_name=job.guest_name,
job_name=job.name,
scheduled_start=job.scheduled_start,
estimated_completion=job.scheduled_start + job.duration
@ -344,6 +377,9 @@ def schedule_approved_job(job):
duration=job.duration,
printer=job.assigned_printer
)
# Ausdruck für Gast (Admin händigt aus)
print_job_schedule_info(job)
```
#### 6.2 Automatische Drucksteuerung
@ -367,8 +403,11 @@ def start_print_job(job):
job.status = "printing"
job.actual_start_time = now()
# 4. Gast benachrichtigen
send_print_started_notification(job.guest_email, job)
# 4. Gast-Dashboard aktualisieren
update_guest_dashboard_status(job.guest_name, "printing")
# 5. Ausdruck für Admin (Gast informieren)
print_job_started_notification(job)
```
#### 6.3 Live-Monitoring
@ -401,7 +440,7 @@ def start_print_job(job):
### Phase 7: Fertigstellung und Abholung
#### 7.1 Automatische Benachrichtigung
#### 7.1 Automatische Benachrichtigung (Offline)
**Bei Job-Completion:**
```python
def on_print_completion(job):
@ -414,34 +453,24 @@ def on_print_completion(job):
if job.auto_power_off:
schedule_delayed_power_off(job.printer, delay_minutes=30)
# 3. Benachrichtigungen senden
notifications = [
# Gast-Benachrichtigung
{
"recipient": job.guest_email,
"template": "job_completed_guest",
"data": {
"job_name": job.name,
"completion_time": job.actual_end_time,
"pickup_location": "TBA Marienfelde, Raum B2.1",
"pickup_hours": "Mo-Fr 8:00-16:00",
"storage_duration": "7 Tage"
}
},
# Admin-Benachrichtigung
{
"recipient": "admin@tba-marienfelde.de",
"template": "guest_job_completed",
"data": {
"guest_name": job.guest_name,
"job_name": job.name,
"print_quality": "Noch zu bewerten",
"requires_pickup": True
}
}
]
# 3. Gast-Dashboard aktualisieren
update_guest_dashboard_status(job.guest_name, "completed")
send_notifications(notifications)
# 4. Automatischer Ausdruck für Admin
print_job_completion_notification(
guest_name=job.guest_name,
job_name=job.name,
completion_time=job.actual_end_time,
pickup_location="TBA Marienfelde, Raum B2.1",
storage_info="7 Tage Lagerung, dann Entsorgung"
)
# 5. Admin-Dashboard-Benachrichtigung
create_pickup_reminder(
guest_name=job.guest_name,
job_name=job.name,
completion_time=job.actual_end_time
)
```
#### 7.2 Abholungsmanagement