263 lines
8.6 KiB
Markdown
263 lines
8.6 KiB
Markdown
# 📊 Export-Funktionalität für Produktionsplanung
|
|
|
|
## Übersicht
|
|
|
|
Die Export-Funktionalität ermöglicht es Benutzern, ihre Produktionsplanung (Schichtplan) in verschiedenen Formaten zu exportieren. Diese Funktion wurde vollständig implementiert und bietet umfassende Filter- und Formatierungsoptionen.
|
|
|
|
## 🔧 Technische Implementierung
|
|
|
|
### Backend-Endpoint
|
|
- **Route**: `/api/calendar/export`
|
|
- **Methode**: GET
|
|
- **Datei**: `blueprints/calendar.py`
|
|
- **Funktionsname**: `api_export_calendar()`
|
|
|
|
### Frontend-Integration
|
|
- **Datei**: `templates/calendar.html`
|
|
- **Trigger**: Export-Button im Schichtplan-Interface
|
|
- **Modal**: Dynamisch generiertes Export-Modal mit Konfigurationsoptionen
|
|
|
|
## 📋 Unterstützte Export-Formate
|
|
|
|
### 1. CSV-Export
|
|
- **Format**: Semikolon-getrennte Werte (`;`)
|
|
- **Encoding**: UTF-8 mit BOM (Excel-kompatibel)
|
|
- **Dateiname**: `schichtplan_export_YYYYMMDD_HHMMSS.csv`
|
|
- **Besonderheiten**:
|
|
- Deutsche Spaltennamen
|
|
- Formatierte Datums- und Zeitangaben
|
|
- Excel-optimierte Darstellung
|
|
|
|
### 2. JSON-Export
|
|
- **Format**: Strukturiertes JSON mit Metadaten
|
|
- **Encoding**: UTF-8
|
|
- **Dateiname**: `schichtplan_export_YYYYMMDD_HHMMSS.json`
|
|
- **Struktur**:
|
|
```json
|
|
{
|
|
"export_info": {
|
|
"erstellt_am": "DD.MM.YYYY HH:MM:SS",
|
|
"exportiert_von": "username",
|
|
"zeitraum_von": "DD.MM.YYYY",
|
|
"zeitraum_bis": "DD.MM.YYYY",
|
|
"anzahl_jobs": 123,
|
|
"filter_drucker_id": "1",
|
|
"filter_status": "scheduled"
|
|
},
|
|
"produktionsplan": [...]
|
|
}
|
|
```
|
|
|
|
### 3. Excel-Export (XLSX)
|
|
- **Format**: Microsoft Excel 2007+ (.xlsx)
|
|
- **Dateiname**: `schichtplan_export_YYYYMMDD_HHMMSS.xlsx`
|
|
- **Besonderheiten**:
|
|
- Zwei Arbeitsblätter: "Produktionsplan" und "Zusammenfassung"
|
|
- Automatische Spaltenbreiten-Anpassung
|
|
- Statistische Auswertungen auf separatem Blatt
|
|
- Abhängigkeit: pandas + openpyxl
|
|
|
|
## 🔍 Exportierte Datenfelder
|
|
|
|
| Feldname | Beschreibung | Datentyp |
|
|
|----------|--------------|----------|
|
|
| Job_ID | Eindeutige Job-Identifikation | Integer |
|
|
| Auftragsname | Name des Produktionsauftrags | String |
|
|
| Beschreibung | Detaillierte Auftragsbeschreibung | String |
|
|
| Status | Aktueller Job-Status (deutsch) | String |
|
|
| Priorität | Auftragspriorität (deutsch) | String |
|
|
| Benutzer | Name des auftraggebenden Benutzers | String |
|
|
| Benutzer_E-Mail | E-Mail-Adresse des Benutzers | String |
|
|
| Drucker | Name der Produktionseinheit | String |
|
|
| Drucker_Standort | Physischer Standort des Druckers | String |
|
|
| Drucker_Modell | Druckermodell/Typ | String |
|
|
| Startzeit | Geplante Startzeit (DD.MM.YYYY HH:MM:SS) | DateTime |
|
|
| Endzeit | Geplante Endzeit (DD.MM.YYYY HH:MM:SS) | DateTime |
|
|
| Dauer_Minuten | Produktionsdauer in Minuten | Integer |
|
|
| Dauer_Stunden | Produktionsdauer in Stunden (decimal) | Float |
|
|
| Erstellt_am | Auftragserstellungszeitpunkt | DateTime |
|
|
| Abgeschlossen_am | Abschlusszeitpunkt (falls vorhanden) | DateTime |
|
|
| Dateiname | Original-Dateiname (falls vorhanden) | String |
|
|
| Materialverbrauch | Verbrauchte Materialien | String |
|
|
| Kosten_EUR | Produktionskosten in Euro | String |
|
|
|
|
## ⚙️ Filter- und Konfigurationsoptionen
|
|
|
|
### Zeitraum-Filter
|
|
- **Standard**: Aktueller Monat
|
|
- **Schnellauswahl**:
|
|
- Diese Woche (Montag-Sonntag)
|
|
- Dieser Monat
|
|
- Dieses Quartal
|
|
- **Benutzerdefiniert**: Frei wählbare Start- und Enddaten
|
|
|
|
### Drucker-Filter
|
|
- **Alle Drucker** (Standard)
|
|
- **Spezifischer Drucker**: Auswahl aus aktiven Druckern
|
|
- Anzeige: Druckername + Standort (falls vorhanden)
|
|
|
|
### Status-Filter
|
|
- **Alle Status** (Standard)
|
|
- **Geplant** (`scheduled`)
|
|
- **Läuft** (`running`)
|
|
- **Abgeschlossen** (`finished`)
|
|
- **Abgebrochen** (`cancelled`)
|
|
- **Fehlgeschlagen** (`failed`)
|
|
|
|
## 🛠️ API-Parameter
|
|
|
|
### URL-Parameter für `/api/calendar/export`
|
|
|
|
| Parameter | Typ | Beschreibung | Beispiel |
|
|
|-----------|-----|--------------|----------|
|
|
| `format` | String | Export-Format (csv/json/excel) | `format=csv` |
|
|
| `start_date` | ISO DateTime | Start-Datum/Zeit | `start_date=2025-06-01T00:00:00` |
|
|
| `end_date` | ISO DateTime | End-Datum/Zeit | `end_date=2025-06-30T23:59:59` |
|
|
| `printer_id` | Integer | Drucker-ID für Filter | `printer_id=1` |
|
|
| `status` | String | Status-Filter | `status=scheduled` |
|
|
|
|
### Beispiel-Anfrage
|
|
```http
|
|
GET /api/calendar/export?format=csv&start_date=2025-06-01T00:00:00&end_date=2025-06-30T23:59:59&printer_id=1&status=scheduled
|
|
```
|
|
|
|
## 📊 Excel-Zusammenfassungsstatistiken
|
|
|
|
Das Excel-Format beinhaltet ein separates "Zusammenfassung"-Arbeitsblatt mit folgenden Metriken:
|
|
|
|
- Gesamte Jobs
|
|
- Geplante Jobs
|
|
- Laufende Jobs
|
|
- Abgeschlossene Jobs
|
|
- Abgebrochene Jobs
|
|
- Gesamte Produktionszeit (Stunden)
|
|
- Durchschnittliche Job-Dauer (Stunden)
|
|
- Anzahl verschiedener Drucker
|
|
- Anzahl verschiedener Benutzer
|
|
- Export-Metadaten (Erstellungszeitpunkt, Zeitraum)
|
|
|
|
## 🔐 Berechtigungen
|
|
|
|
- **Erforderlich**: Angemeldeter Benutzer (`@login_required`)
|
|
- **Keine zusätzlichen Berechtigungen**: Alle angemeldeten Benutzer können exportieren
|
|
- **Datenfilterung**: Benutzer sehen nur Daten entsprechend ihrer normalen Kalender-Berechtigung
|
|
|
|
## 🎯 Benutzerinterface
|
|
|
|
### Export-Button
|
|
- **Position**: Schichtplan-Header, neben anderen Aktionsbuttons
|
|
- **Icon**: Download-Symbol
|
|
- **Text**: "Exportieren"
|
|
- **Verhalten**: Öffnet Export-Modal
|
|
|
|
### Export-Modal
|
|
- **Design**: Modern, responsive Modal-Dialog
|
|
- **Sections**:
|
|
1. Format-Auswahl (Radio-Buttons mit Icons)
|
|
2. Zeitraum-Konfiguration mit Schnellauswahl-Buttons
|
|
3. Filter-Optionen (Drucker, Status)
|
|
4. Aktions-Buttons (Abbrechen, Export starten)
|
|
|
|
### Loading-States
|
|
- **Export-Button**: Spinner + "Exportiere..." Text während Verarbeitung
|
|
- **Download**: Automatischer Datei-Download bei Erfolg
|
|
- **Feedback**: Toast-Benachrichtigungen für Erfolg/Fehler
|
|
|
|
## 📝 Logging und Monitoring
|
|
|
|
### Log-Einträge
|
|
```python
|
|
logger.info(f"📊 CSV-Export erstellt: {len(export_data)} Einträge für Benutzer {current_user.username}")
|
|
logger.info(f"📊 JSON-Export erstellt: {len(export_data)} Einträge für Benutzer {current_user.username}")
|
|
logger.info(f"📊 Excel-Export erstellt: {len(export_data)} Einträge für Benutzer {current_user.username}")
|
|
logger.error(f"Fehler beim Kalender-Export: {str(e)}")
|
|
```
|
|
|
|
### Metriken
|
|
- Export-Häufigkeit pro Format
|
|
- Durchschnittliche Export-Größe
|
|
- Fehlschlag-Rate
|
|
- Benutzer-spezifische Export-Patterns
|
|
|
|
## 🐛 Fehlerbehandlung
|
|
|
|
### Backend-Fehler
|
|
- **400**: Ungültige Parameter (Datum, Drucker-ID)
|
|
- **404**: Keine Daten im angegebenen Zeitraum
|
|
- **500**: Interne Serverfehler
|
|
- **501**: Excel-Export nicht verfügbar (fehlende Dependencies)
|
|
|
|
### Frontend-Fehlerbehandlung
|
|
- Validierung von Eingabefeldern
|
|
- Benutzerfreundliche Fehlermeldungen
|
|
- Automatische Wiederherstellung des UI-States
|
|
- Graceful Degradation bei Netzwerkfehlern
|
|
|
|
## 🔄 Abhängigkeiten
|
|
|
|
### Python-Pakete
|
|
- **Basis**: `flask`, `sqlalchemy`, `datetime`
|
|
- **CSV**: Standard-Library `csv`, `io`
|
|
- **JSON**: Standard-Library `json`
|
|
- **Excel**: `pandas`, `openpyxl` (optional)
|
|
|
|
### Frontend-Dependencies
|
|
- **JavaScript**: ES6+ Features (async/await, fetch API)
|
|
- **CSS**: Tailwind CSS für Styling
|
|
- **Browser**: Moderne Browser mit Blob/URL-Support
|
|
|
|
## 🚀 Performance-Optimierungen
|
|
|
|
### Backend
|
|
- Efficient Database Queries mit SQLAlchemy
|
|
- Streaming für große Datenmengen
|
|
- Memory-effiziente CSV/Excel-Generierung
|
|
- Query-Optimierung durch Index-Usage
|
|
|
|
### Frontend
|
|
- Lazy Modal Creation (nur bei Bedarf)
|
|
- Efficient Event Listeners
|
|
- Minimal DOM-Manipulation
|
|
- Progressive Enhancement
|
|
|
|
## 📈 Zukunftige Erweiterungen
|
|
|
|
### Geplante Features
|
|
1. **PDF-Export** mit Grafiken und Charts
|
|
2. **E-Mail-Versand** von Export-Dateien
|
|
3. **Geplante Exports** (Cron-Jobs)
|
|
4. **Export-Templates** für wiederkehrende Exports
|
|
5. **Erweiterte Filter** (Datum-Bereiche, komplexe Bedingungen)
|
|
6. **Bulk-Export** mehrerer Zeiträume
|
|
7. **API-Integration** für externe Systeme
|
|
|
|
### Mögliche Optimierungen
|
|
- **Caching** für häufige Export-Anfragen
|
|
- **Asynchrone Verarbeitung** für große Datenmengen
|
|
- **Komprimierung** für große Export-Dateien
|
|
- **Export-History** und Wiederverwendung
|
|
|
|
## 📋 Checkliste für Entwickler
|
|
|
|
### Vor Deployment
|
|
- [ ] Alle Export-Formate getestet
|
|
- [ ] Filter-Funktionalitäten validiert
|
|
- [ ] Performance mit großen Datenmengen geprüft
|
|
- [ ] Browser-Kompatibilität sichergestellt
|
|
- [ ] Error-Handling vollständig implementiert
|
|
- [ ] Logging konfiguriert
|
|
- [ ] Dependencies installiert
|
|
|
|
### Nach Deployment
|
|
- [ ] Export-Funktionalität in Produktion getestet
|
|
- [ ] Monitoring-Dashboard konfiguriert
|
|
- [ ] Benutzer-Feedback gesammelt
|
|
- [ ] Performance-Metriken überwacht
|
|
- [ ] Log-Ausgaben kontrolliert
|
|
|
|
---
|
|
|
|
**Letzte Aktualisierung**: 01.06.2025
|
|
**Version**: 1.0.0
|
|
**Entwickler**: AI Assistant
|
|
**Status**: ✅ Vollständig implementiert |