🔧 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

View File

@ -7,21 +7,21 @@
```mermaid
graph TD
A[🌐 Gast besucht /request] --> B[📝 Anfrage ausfüllen]
A[🌐 Gast besucht Terminal vor Ort] --> B[📝 Anfrage ausfüllen]
B --> C{📋 Validierung OK?}
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]
F --> G{🤔 Entscheidung?}
G -->|✅ Genehmigen| H[🔑 OTP generieren]
G -->|❌ Ablehnen| I[📧 Ablehnungs-E-Mail]
G -->|❓ Nachfrage| J[📧 Rückfrage-E-Mail]
G -->|✅ Genehmigen| H[🔑 OTP generieren + Ausdruck]
G -->|❌ Ablehnen| I[📋 Ablehnungs-Info für Admin]
G -->|❓ Nachfrage| J[📋 Rückfrage notieren]
H --> K[📧 OTP an Gast senden]
K --> L[🔐 Gast loggt sich ein]
H --> K[👨‍💼 Admin händigt Zugangsdaten aus]
K --> L[🔐 Gast loggt sich am Terminal ein]
L --> M[📁 Job-Upload Interface]
M --> N[📤 Datei hochladen + Details]
@ -41,8 +41,8 @@ graph TD
X --> Y[✅ Druck fertig]
Y --> Z[🔌 Drucker ausschalten]
Z --> AA[📧 Fertigstellungs-Benachrichtigung]
AA --> BB[📦 Abholung durch Gast]
Z --> AA[📋 Ausdruck: Job fertig + Dashboard-Update]
AA --> BB[📦 Vor-Ort-Abholung durch Gast]
BB --> CC[✅ Workflow abgeschlossen]
I --> DD[🏁 Ende]
@ -64,11 +64,11 @@ Timeline: Gast-Workflow (Beispiel: 3-Tage-Projekt)
Tag 1 (Montag):
┌─────────────────────────────────────────────────────┐
│ 09:00 │ 🌐 Gast stellt Anfrage
│ 09:05 │ 📧 Admin-Benachrichtigung
│ 09:00 │ 🌐 Gast stellt Anfrage am Terminal vor Ort
│ 09:05 │ 🔔 Dashboard-Benachrichtigung für Admin
│ 10:30 │ 👨‍💼 Admin prüft und genehmigt │
│ 10:35 │ 🔑 OTP generiert und versendet
│ 11:00 │ 🔐 Gast loggt sich ein
│ 10:35 │ 🔑 OTP generiert, Ausdruck für Gast
│ 11:00 │ 🔐 Gast loggt sich am Terminal ein
│ 11:15 │ 📁 Job-Upload (STL-Datei) │
│ 11:20 │ ⏳ Job wartet auf Admin-Review │
│ 14:00 │ ✅ Admin genehmigt Job │
@ -78,19 +78,19 @@ Tag 1 (Montag):
Tag 2 (Dienstag):
┌─────────────────────────────────────────────────────┐
│ Ganztags │ 📊 Job in Warteschlange │
│ 15:00 │ 📧 Erinnerungs-E-Mail an Gast
│ │ "Job startet morgen früh"
│ 15:00 │ 📋 Admin-Info: Job startet morgen
│ │ (Gast kann Status am Terminal sehen)
└─────────────────────────────────────────────────────┘
Tag 3 (Mittwoch):
┌─────────────────────────────────────────────────────┐
│ 08:55 │ ⚡ Drucker automatisch eingeschaltet │
│ 09:00 │ 🖨️ Druckvorgang startet │
│ 09:05 │ 📧 "Druck gestartet" Benachrichtigung
│ 09:05 │ 📋 Dashboard-Update "Druck gestartet" │
│ 13:00 │ ✅ Druck erfolgreich abgeschlossen │
│ 13:05 │ 🔌 Drucker automatisch ausgeschaltet │
│ 13:10 │ 📧 "Abholung möglich" Benachrichtigung
│ 15:30 │ 📦 Gast holt Druckobjekt ab
│ 13:10 │ 📋 Ausdruck "Abholung möglich"
│ 15:30 │ 📦 Gast holt Druckobjekt vor Ort ab
│ 15:35 │ ✅ Workflow komplett abgeschlossen │
└─────────────────────────────────────────────────────┘
```
@ -172,7 +172,7 @@ Tag 3 (Mittwoch):
## 📱 UI-Flow (Mockups)
### Schritt 1: Gastzugang beantragen
### Schritt 1: Gastzugang beantragen (Terminal vor Ort)
```
┌─────────────────────────────────────────────────────┐
│ 🌐 MYP - Gastzugang beantragen │
@ -180,20 +180,21 @@ Tag 3 (Mittwoch):
│ │
│ 👋 Willkommen bei MYP │
│ Mercedes-Benz TBA Marienfelde │
│ Lokales System - Offline-Modus │
│ │
│ Vollständiger Name: * │
│ ┌─────────────────────────────────────────────────┐ │
│ │ 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: * │
@ -207,25 +208,25 @@ Tag 3 (Mittwoch):
│ │
│ [ ] 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 │
├─────────────────────────────────────────────────────┤
│ │
│ 🎉 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 │ │
│ └─────────────────────────────────────────────────┘ │
@ -233,9 +234,11 @@ Tag 3 (Mittwoch):
│ ⏰ Ihr Zugang ist gültig bis: │
│ 18. Juni 2025, 14:30 Uhr │
│ │
│ 📋 Anfrage-ID: GAS-2025-001234 │
│ │
│ [🔑 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
Betreff: ✅ Gastzugang genehmigt - Willkommen bei MYP!
┌─────────────────────────────────────────────────────┐
│ MYP GASTZUGANG GENEHMIGT │
│ 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,
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
👨‍💼 ADMIN-HINWEIS: An Gast aushändigen
```
### Job fertig - Abholung
### Job fertig - Abholungsinfo (Admin-Ausdruck)
```
Von: MYP System <noreply@tba-marienfelde.de>
An: max.mustermann@example.com
Betreff: 🎉 Druckauftrag fertig - Abholung möglich!
┌─────────────────────────────────────────────────────┐
│ MYP DRUCKAUFTRAG ABGESCHLOSSEN │
│ 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,
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
👨‍💼 ADMIN: Gast benachrichtigen (Tel./Vor-Ort)
```
---

View File

@ -402,7 +402,21 @@ def delete_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.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