Projektarbeit-MYP/backend/docs/EXPORT_FUNKTIONALITAET.md

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