🔧 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 ### Phase 1: Gastzugang-Anfrage
#### 1.1 Gast stellt Anfrage #### 1.1 Gast stellt Anfrage (Vor-Ort-Prozess)
**Endpunkt:** `/request` (öffentlich zugänglich) **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:** **Eingabefelder:**
- **Name** (Pflichtfeld) - **Name** (Pflichtfeld)
- **E-Mail-Adresse** (Pflichtfeld, Validierung)
- **Grund der Anfrage** (Pflichtfeld, mind. 10 Zeichen) - **Grund der Anfrage** (Pflichtfeld, mind. 10 Zeichen)
- **Telefonnummer** (optional) - **Abteilung/Firma** (Pflichtfeld)
- **Gewünschte Zugangsdauer** (1-7 Tage) - **Gewünschte Zugangsdauer** (1-7 Tage)
- **Ansprechpartner (Mercedes-Benz)** (optional)
**Validierungsregeln:** **Validierungsregeln:**
- E-Mail-Format-Prüfung - Duplikatsprüfung (gleicher Name innerhalb 24h)
- Duplikatsprüfung (gleiche E-Mail innerhalb 24h)
- Mindestlänge für Begründung - Mindestlänge für Begründung
- Maximale Zugangsdauer begrenzt - Maximale Zugangsdauer begrenzt
@ -39,28 +39,48 @@ Gast besucht: https://myp.example.com/request
1. Anfrage-ID generiert (unique) 1. Anfrage-ID generiert (unique)
2. Status: "pending" 2. Status: "pending"
3. Zeitstempel erstellt 3. Zeitstempel erstellt
4. Admin-Benachrichtigung gesendet 4. Dashboard-Benachrichtigung für Admin
5. Bestätigungs-E-Mail an Gast (optional) 5. Ausdruck mit Anfrage-ID für Gast
``` ```
#### 1.2 Bestätigung für Gast #### 1.2 Bestätigung für Gast
**Weiterleitung:** `/request/{request_id}` **Weiterleitung:** `/request/{request_id}`
Der Gast erhält eine Bestätigungsseite mit: Der Gast erhält eine Bestätigungsseite mit:
- Anfrage-ID zum Nachverfolgen - **Anfrage-ID zum Nachverfolgen** (wird ausgedruckt)
- Geschätzte Bearbeitungszeit - **QR-Code** für spätere Status-Abfrage
- Kontaktinformationen bei Rückfragen - Geschätzte Bearbeitungszeit (1-4 Stunden)
- Kontaktinformation: **Vor Ort bei Mercedes-Benz Ansprechpartner**
- Status-Anzeige (Pending/Genehmigt/Abgelehnt) - 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 ### Phase 2: Administrative Genehmigung
#### 2.1 Admin-Benachrichtigung #### 2.1 Admin-Benachrichtigung
**Automatische Benachrichtigung:** **Lokale Benachrichtigung:**
- E-Mail an alle Administratoren - Dashboard-Benachrichtigung im System (rote Badge)
- Dashboard-Benachrichtigung im System - Browser-Popup (wenn Admin angemeldet)
- Rot markierte Anfrage in Admin-Panel - Audio-Signal bei neuer Anfrage (optional)
#### 2.2 Admin-Prüfung #### 2.2 Admin-Prüfung
**Admin-Panel:** `/admin/guest-requests` **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) #### 3.1 OTP-Generierung (bei Genehmigung)
**Automatischer Prozess:** **Lokaler Prozess:**
```python ```python
# System generiert One-Time Password # System generiert One-Time Password
otp_code = generate_secure_otp() # 6-stellig, numerisch otp_code = generate_secure_otp() # 6-stellig, numerisch
expiry_time = now() + timedelta(hours=access_duration) expiry_time = now() + timedelta(hours=access_duration)
# E-Mail-Versand an Gast # Automatischer Ausdruck für Admin
send_approval_email( print_guest_credentials(
email=guest_email, guest_name=guest_name,
otp_code=otp_code, otp_code=otp_code,
expiry_time=expiry_time, expiry_time=expiry_time,
access_instructions=True 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, 👨‍💼 ADMIN: Bitte an Gast aushändigen
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
``` ```
#### 3.2 Gast-Anmeldung #### 3.2 Gast-Anmeldung
**Endpunkt:** `/auth/guest` **Endpunkt:** `/auth/guest`
**Login-Prozess:** **Login-Prozess:**
1. E-Mail-Adresse eingeben 1. **Name eingeben** (wie auf Ausdruck)
2. OTP-Code eingeben (anstatt Passwort) 2. **OTP-Code eingeben** (vom ausgedruckten Zettel)
3. System validiert OTP und Gültigkeitsdauer 3. System validiert OTP und Gültigkeitsdauer
4. Session mit eingeschränkten Rechten erstellt 4. Session mit eingeschränkten Rechten erstellt
@ -172,7 +199,8 @@ Ihr MYP-Team
```python ```python
guest_session = { guest_session = {
"user_type": "guest", "user_type": "guest",
"email": "max.mustermann@example.com", "guest_name": "Max Mustermann",
"request_id": "GAS-2025-001234",
"expires_at": "2025-06-18T14:30:00", "expires_at": "2025-06-18T14:30:00",
"permissions": ["create_job", "view_own_jobs"], "permissions": ["create_job", "view_own_jobs"],
"restrictions": { "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 ### Phase 6: Ausführung und Monitoring
@ -329,9 +362,9 @@ def schedule_approved_job(job):
job.status = "scheduled" job.status = "scheduled"
job.scheduled_start = calculate_optimal_start_time(job) job.scheduled_start = calculate_optimal_start_time(job)
# E-Mail-Benachrichtigung an Gast # Lokale Benachrichtigung für Gast (Dashboard)
send_job_approved_notification( update_guest_dashboard_status(
email=job.guest_email, guest_name=job.guest_name,
job_name=job.name, job_name=job.name,
scheduled_start=job.scheduled_start, scheduled_start=job.scheduled_start,
estimated_completion=job.scheduled_start + job.duration estimated_completion=job.scheduled_start + job.duration
@ -344,6 +377,9 @@ def schedule_approved_job(job):
duration=job.duration, duration=job.duration,
printer=job.assigned_printer printer=job.assigned_printer
) )
# Ausdruck für Gast (Admin händigt aus)
print_job_schedule_info(job)
``` ```
#### 6.2 Automatische Drucksteuerung #### 6.2 Automatische Drucksteuerung
@ -367,8 +403,11 @@ def start_print_job(job):
job.status = "printing" job.status = "printing"
job.actual_start_time = now() job.actual_start_time = now()
# 4. Gast benachrichtigen # 4. Gast-Dashboard aktualisieren
send_print_started_notification(job.guest_email, job) update_guest_dashboard_status(job.guest_name, "printing")
# 5. Ausdruck für Admin (Gast informieren)
print_job_started_notification(job)
``` ```
#### 6.3 Live-Monitoring #### 6.3 Live-Monitoring
@ -401,7 +440,7 @@ def start_print_job(job):
### Phase 7: Fertigstellung und Abholung ### Phase 7: Fertigstellung und Abholung
#### 7.1 Automatische Benachrichtigung #### 7.1 Automatische Benachrichtigung (Offline)
**Bei Job-Completion:** **Bei Job-Completion:**
```python ```python
def on_print_completion(job): def on_print_completion(job):
@ -414,34 +453,24 @@ def on_print_completion(job):
if job.auto_power_off: if job.auto_power_off:
schedule_delayed_power_off(job.printer, delay_minutes=30) schedule_delayed_power_off(job.printer, delay_minutes=30)
# 3. Benachrichtigungen senden # 3. Gast-Dashboard aktualisieren
notifications = [ update_guest_dashboard_status(job.guest_name, "completed")
# 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
}
}
]
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 #### 7.2 Abholungsmanagement

View File

@ -7,21 +7,21 @@
```mermaid ```mermaid
graph TD graph TD
A[🌐 Gast besucht /request] --> B[📝 Anfrage ausfüllen] A[🌐 Gast besucht Terminal vor Ort] --> B[📝 Anfrage ausfüllen]
B --> C{📋 Validierung OK?} B --> C{📋 Validierung OK?}
C -->|❌ Fehler| B C -->|❌ Fehler| B
C -->|✅ OK| D[💾 Anfrage gespeichert] C -->|✅ OK| D[💾 Anfrage gespeichert + Ausdruck]
D --> E[📧 Admin-Benachrichtigung] D --> E[🔔 Dashboard-Benachrichtigung]
E --> F[👨‍💼 Admin prüft Anfrage] E --> F[👨‍💼 Admin prüft Anfrage]
F --> G{🤔 Entscheidung?} F --> G{🤔 Entscheidung?}
G -->|✅ Genehmigen| H[🔑 OTP generieren] G -->|✅ Genehmigen| H[🔑 OTP generieren + Ausdruck]
G -->|❌ Ablehnen| I[📧 Ablehnungs-E-Mail] G -->|❌ Ablehnen| I[📋 Ablehnungs-Info für Admin]
G -->|❓ Nachfrage| J[📧 Rückfrage-E-Mail] G -->|❓ Nachfrage| J[📋 Rückfrage notieren]
H --> K[📧 OTP an Gast senden] H --> K[👨‍💼 Admin händigt Zugangsdaten aus]
K --> L[🔐 Gast loggt sich ein] K --> L[🔐 Gast loggt sich am Terminal ein]
L --> M[📁 Job-Upload Interface] L --> M[📁 Job-Upload Interface]
M --> N[📤 Datei hochladen + Details] M --> N[📤 Datei hochladen + Details]
@ -41,8 +41,8 @@ graph TD
X --> Y[✅ Druck fertig] X --> Y[✅ Druck fertig]
Y --> Z[🔌 Drucker ausschalten] Y --> Z[🔌 Drucker ausschalten]
Z --> AA[📧 Fertigstellungs-Benachrichtigung] Z --> AA[📋 Ausdruck: Job fertig + Dashboard-Update]
AA --> BB[📦 Abholung durch Gast] AA --> BB[📦 Vor-Ort-Abholung durch Gast]
BB --> CC[✅ Workflow abgeschlossen] BB --> CC[✅ Workflow abgeschlossen]
I --> DD[🏁 Ende] I --> DD[🏁 Ende]
@ -64,11 +64,11 @@ Timeline: Gast-Workflow (Beispiel: 3-Tage-Projekt)
Tag 1 (Montag): Tag 1 (Montag):
┌─────────────────────────────────────────────────────┐ ┌─────────────────────────────────────────────────────┐
│ 09:00 │ 🌐 Gast stellt Anfrage │ 09:00 │ 🌐 Gast stellt Anfrage am Terminal vor Ort
│ 09:05 │ 📧 Admin-Benachrichtigung │ 09:05 │ 🔔 Dashboard-Benachrichtigung für Admin
│ 10:30 │ 👨‍💼 Admin prüft und genehmigt │ │ 10:30 │ 👨‍💼 Admin prüft und genehmigt │
│ 10:35 │ 🔑 OTP generiert und versendet │ 10:35 │ 🔑 OTP generiert, Ausdruck für Gast
│ 11:00 │ 🔐 Gast loggt sich ein │ 11:00 │ 🔐 Gast loggt sich am Terminal ein
│ 11:15 │ 📁 Job-Upload (STL-Datei) │ │ 11:15 │ 📁 Job-Upload (STL-Datei) │
│ 11:20 │ ⏳ Job wartet auf Admin-Review │ │ 11:20 │ ⏳ Job wartet auf Admin-Review │
│ 14:00 │ ✅ Admin genehmigt Job │ │ 14:00 │ ✅ Admin genehmigt Job │
@ -78,19 +78,19 @@ Tag 1 (Montag):
Tag 2 (Dienstag): Tag 2 (Dienstag):
┌─────────────────────────────────────────────────────┐ ┌─────────────────────────────────────────────────────┐
│ Ganztags │ 📊 Job in Warteschlange │ │ Ganztags │ 📊 Job in Warteschlange │
│ 15:00 │ 📧 Erinnerungs-E-Mail an Gast │ 15:00 │ 📋 Admin-Info: Job startet morgen
│ │ "Job startet morgen früh" │ │ (Gast kann Status am Terminal sehen)
└─────────────────────────────────────────────────────┘ └─────────────────────────────────────────────────────┘
Tag 3 (Mittwoch): Tag 3 (Mittwoch):
┌─────────────────────────────────────────────────────┐ ┌─────────────────────────────────────────────────────┐
│ 08:55 │ ⚡ Drucker automatisch eingeschaltet │ │ 08:55 │ ⚡ Drucker automatisch eingeschaltet │
│ 09:00 │ 🖨️ Druckvorgang startet │ │ 09:00 │ 🖨️ Druckvorgang startet │
│ 09:05 │ 📧 "Druck gestartet" Benachrichtigung │ 09:05 │ 📋 Dashboard-Update "Druck gestartet" │
│ 13:00 │ ✅ Druck erfolgreich abgeschlossen │ │ 13:00 │ ✅ Druck erfolgreich abgeschlossen │
│ 13:05 │ 🔌 Drucker automatisch ausgeschaltet │ │ 13:05 │ 🔌 Drucker automatisch ausgeschaltet │
│ 13:10 │ 📧 "Abholung möglich" Benachrichtigung │ 13:10 │ 📋 Ausdruck "Abholung möglich"
│ 15:30 │ 📦 Gast holt Druckobjekt ab │ 15:30 │ 📦 Gast holt Druckobjekt vor Ort ab
│ 15:35 │ ✅ Workflow komplett abgeschlossen │ │ 15:35 │ ✅ Workflow komplett abgeschlossen │
└─────────────────────────────────────────────────────┘ └─────────────────────────────────────────────────────┘
``` ```
@ -172,7 +172,7 @@ Tag 3 (Mittwoch):
## 📱 UI-Flow (Mockups) ## 📱 UI-Flow (Mockups)
### Schritt 1: Gastzugang beantragen ### Schritt 1: Gastzugang beantragen (Terminal vor Ort)
``` ```
┌─────────────────────────────────────────────────────┐ ┌─────────────────────────────────────────────────────┐
│ 🌐 MYP - Gastzugang beantragen │ │ 🌐 MYP - Gastzugang beantragen │
@ -180,20 +180,21 @@ Tag 3 (Mittwoch):
│ │ │ │
│ 👋 Willkommen bei MYP │ │ 👋 Willkommen bei MYP │
│ Mercedes-Benz TBA Marienfelde │ │ Mercedes-Benz TBA Marienfelde │
│ Lokales System - Offline-Modus │
│ │ │ │
│ Vollständiger Name: * │ │ Vollständiger Name: * │
│ ┌─────────────────────────────────────────────────┐ │ │ ┌─────────────────────────────────────────────────┐ │
│ │ Max Mustermann │ │ │ │ Max Mustermann │ │
│ └─────────────────────────────────────────────────┘ │ │ └─────────────────────────────────────────────────┘ │
│ │ │ │
E-Mail-Adresse: * Abteilung/Firma: * │
│ ┌─────────────────────────────────────────────────┐ │ │ ┌─────────────────────────────────────────────────┐ │
│ │ max.mustermann@example.com │ │ │ │ Externe Firma - Prototyping │ │
│ └─────────────────────────────────────────────────┘ │ │ └─────────────────────────────────────────────────┘ │
│ │ │ │
Telefonnummer: Ansprechpartner (Mercedes-Benz):
│ ┌─────────────────────────────────────────────────┐ │ │ ┌─────────────────────────────────────────────────┐ │
│ │ +49 123 456789 │ │ │ │ Herr Schmidt, Abteilung Entwicklung │ │
│ └─────────────────────────────────────────────────┘ │ │ └─────────────────────────────────────────────────┘ │
│ │ │ │
│ Grund der Anfrage: * │ │ Grund der Anfrage: * │
@ -207,25 +208,25 @@ Tag 3 (Mittwoch):
│ │ │ │
│ [ ] Ich akzeptiere die Nutzungsbedingungen │ │ [ ] Ich akzeptiere die Nutzungsbedingungen │
│ │ │ │
[📤 Anfrage senden] │ [📤 Anfrage senden] [📋 Anfrage-ID erhalten]
│ │ │ │
└─────────────────────────────────────────────────────┘ └─────────────────────────────────────────────────────┘
``` ```
### Schritt 2: OTP-Login ### Schritt 2: OTP-Login (mit Ausdruck vom Admin)
``` ```
┌─────────────────────────────────────────────────────┐ ┌─────────────────────────────────────────────────────┐
│ 🔐 MYP - Gast-Anmeldung │ │ 🔐 MYP - Gast-Anmeldung │
├─────────────────────────────────────────────────────┤ ├─────────────────────────────────────────────────────┤
│ │ │ │
│ 🎉 Ihr Zugang wurde genehmigt! │ 🎉 Anmeldung mit Zugangsdaten
│ │ │ │
E-Mail-Adresse: Vollständiger Name:
│ ┌─────────────────────────────────────────────────┐ │ │ ┌─────────────────────────────────────────────────┐ │
│ │ max.mustermann@example.com │ │ │ │ Max Mustermann │ │
│ └─────────────────────────────────────────────────┘ │ │ └─────────────────────────────────────────────────┘ │
│ │ │ │
│ OTP-Code (aus E-Mail): │ OTP-Code (vom Ausdruck):
│ ┌─────────────────────────────────────────────────┐ │ │ ┌─────────────────────────────────────────────────┐ │
│ │ 123456 │ │ │ │ 123456 │ │
│ └─────────────────────────────────────────────────┘ │ │ └─────────────────────────────────────────────────┘ │
@ -233,9 +234,11 @@ Tag 3 (Mittwoch):
│ ⏰ Ihr Zugang ist gültig bis: │ │ ⏰ Ihr Zugang ist gültig bis: │
│ 18. Juni 2025, 14:30 Uhr │ │ 18. Juni 2025, 14:30 Uhr │
│ │ │ │
│ 📋 Anfrage-ID: GAS-2025-001234 │
│ │
│ [🔑 Anmelden] │ │ [🔑 Anmelden] │
│ │ │ │
│ 💡 Tipp: Speichern Sie diese Seite als Lesezeichen │ 💡 Bei Problemen: Mercedes-Benz Ansprechpartner
│ │ │ │
└─────────────────────────────────────────────────────┘ └─────────────────────────────────────────────────────┘
``` ```
@ -313,76 +316,92 @@ Tag 3 (Mittwoch):
--- ---
## 📧 E-Mail-Templates (Beispiele) ## 📋 Ausdruck-Templates (Offline-System)
### Genehmigung mit OTP ### Genehmigung mit OTP (Admin-Ausdruck)
``` ```
Von: MYP System <noreply@tba-marienfelde.de> ┌─────────────────────────────────────────────────────┐
An: max.mustermann@example.com │ MYP GASTZUGANG GENEHMIGT │
Betreff: ✅ Gastzugang genehmigt - Willkommen bei MYP! │ TBA Marienfelde - Offline System │
├─────────────────────────────────────────────────────┤
│ │
│ 👤 GASTINFORMATIONEN: │
│ Name: Max Mustermann │
│ Anfrage-ID: GAS-2025-001234 │
│ Firma: Externe Firma - Prototyping │
│ Ansprechpartner: Herr Schmidt │
│ │
│ 🔑 ZUGANGSDATEN: │
│ OTP-Code: 123456 │
│ Gültig bis: 18.06.2025 14:30 │
│ │
│ 🌐 SYSTEMZUGANG: │
│ Terminal vor Ort oder │
│ http://192.168.1.100:5000/auth/guest │
│ │
│ 📋 NUTZUNGSREGELN: │
│ • Max. Druckzeit pro Job: 4 Stunden │
│ • Dateiformate: STL, OBJ, 3MF, GCODE │
│ • Materialien: PLA, PETG │
│ • Jobs benötigen Admin-Freigabe │
│ │
│ 📍 ABHOLUNG SPÄTER: │
│ Ort: TBA Marienfelde, Raum B2.1 │
│ Zeit: Mo-Fr 8:00-16:00 │
│ Lagerung: Max. 7 Tage │
│ │
│ [QR-Code für System-Login] │
│ │
│ 📞 Bei Fragen: Mercedes-Benz Ansprechpartner │
│ │
└─────────────────────────────────────────────────────┘
Hallo Max Mustermann, 👨‍💼 ADMIN-HINWEIS: An Gast aushändigen
großartige Neuigkeiten! Ihr Gastzugang wurde genehmigt.
🔑 Ihre Zugangsdaten:
E-Mail: max.mustermann@example.com
OTP-Code: 123456
⏰ Gültig bis: 18. Juni 2025, 14:30 Uhr
🚀 So geht's weiter:
1. Besuchen Sie: https://myp.tba-marienfelde.de/auth/guest
2. Geben Sie Ihre E-Mail und den OTP-Code ein
3. Laden Sie Ihre Druckdateien hoch
4. Warten Sie auf die Admin-Freigabe
📋 Wichtige Informationen:
• Max. Druckzeit pro Job: 4 Stunden
• Unterstützte Formate: STL, OBJ, 3MF, GCODE
• Materialien: PLA, PETG
• Abholung: Mo-Fr 8:00-16:00, Raum B2.1
❓ Fragen? Antworten Sie einfach auf diese E-Mail.
Viel Erfolg mit Ihrem Projekt!
Das MYP-Team
``` ```
### Job fertig - Abholung ### Job fertig - Abholungsinfo (Admin-Ausdruck)
``` ```
Von: MYP System <noreply@tba-marienfelde.de> ┌─────────────────────────────────────────────────────┐
An: max.mustermann@example.com │ MYP DRUCKAUFTRAG ABGESCHLOSSEN │
Betreff: 🎉 Druckauftrag fertig - Abholung möglich! │ TBA Marienfelde - Abholungsinfo │
├─────────────────────────────────────────────────────┤
│ │
│ 👤 GASTINFORMATIONEN: │
│ Name: Max Mustermann │
│ Anfrage-ID: GAS-2025-001234 │
│ Firma: Externe Firma - Prototyping │
│ │
│ 📦 JOB-DETAILS: │
│ Job-Name: Kundenpräsentation Prototyp │
│ Fertiggestellt: 16.06.2025 um 13:15 │
│ Druckdauer: 4:15 Stunden │
│ Material: PLA, Grau │
│ Drucker: Prusa i3 MK3S #1 │
│ │
│ 📍 ABHOLUNGSINFO: │
│ Lagerort: Regal B2.1-A3 │
│ Verfügbar: Sofort │
│ Lagerzeit: Bis 23.06.2025 │
│ Öffnungszeiten: Mo-Fr 8:00-16:00 │
│ │
│ ⚠️ WICHTIGE HINWEISE: │
│ • Ausweis zur Abholung mitbringen │
│ • Nach 7 Tagen wird Objekt entsorgt │
│ • Bei Problemen: Ansprechpartner kontaktieren │
│ │
│ 📸 DRUCKERGEBNIS: │
│ [Platz für Foto des gedruckten Objekts] │
│ │
│ ✅ QUALITÄTSKONTROLLE: │
│ □ Oberflächenqualität OK │
│ □ Maßhaltigkeit geprüft │
│ □ Keine Druckfehler │
│ │
│ Unterschrift Admin: _______________ │
│ │
└─────────────────────────────────────────────────────┘
Hallo Max Mustermann, 👨‍💼 ADMIN: Gast benachrichtigen (Tel./Vor-Ort)
Ihr Druckauftrag ist erfolgreich abgeschlossen! 🎉
📦 Job-Details:
Name: Kundenpräsentation Prototyp
Fertiggestellt: 16.06.2025 um 13:15 Uhr
Druckdauer: 4:15 Stunden
Material: PLA, Grau
📍 Abholung:
Ort: TBA Marienfelde, Raum B2.1
Öffnungszeiten: Mo-Fr 8:00-16:00 Uhr
Lagerplatz: Regal B2.1-A3
⚠️ Wichtig:
- Bringen Sie einen Ausweis mit
- Abholung bis zum 23.06.2025
- Danach wird das Objekt entsorgt
📸 Hier ist ein Foto Ihres fertigen Drucks:
[Bild des gedruckten Objekts]
✨ Zufrieden? Wir freuen uns über Ihr Feedback:
https://myp.tba-marienfelde.de/feedback/xyz123
Vielen Dank für die Nutzung von MYP!
Das Team der TBA Marienfelde
``` ```
--- ---

View File

@ -402,7 +402,21 @@ def delete_job(job_id):
job_name = job.name or f"Job-{job_id}" job_name = job.name or f"Job-{job_id}"
# Job löschen # Abhängige Datensätze vor Job-Löschung bereinigen
jobs_logger.debug(f"🧹 Bereinige abhängige Datensätze für Job {job_id}")
# 1. JobOrder-Einträge löschen (NOT NULL foreign key)
from models import JobOrder, GuestRequest
job_orders_deleted = db_session.query(JobOrder).filter(JobOrder.job_id == job_id).delete()
if job_orders_deleted > 0:
jobs_logger.debug(f"🗑️ {job_orders_deleted} JobOrder-Einträge gelöscht")
# 2. GuestRequest job_id auf NULL setzen (NULLABLE foreign key)
guest_requests_updated = db_session.query(GuestRequest).filter(GuestRequest.job_id == job_id).update({GuestRequest.job_id: None})
if guest_requests_updated > 0:
jobs_logger.debug(f"🔄 {guest_requests_updated} GuestRequest-Einträge aktualisiert")
# 3. Jetzt Job sicher löschen
db_session.delete(job) db_session.delete(job)
db_session.commit() db_session.commit()

Binary file not shown.

Binary file not shown.

Binary file not shown.

Some files were not shown because too many files have changed in this diff Show More