🔧 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:
@ -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
|
||||||
|
@ -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
|
|
||||||
```
|
```
|
||||||
|
|
||||||
---
|
---
|
||||||
|
Binary file not shown.
@ -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.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
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
Reference in New Issue
Block a user