8.6 KiB
8.6 KiB
📊 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:
{ "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
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:
- Format-Auswahl (Radio-Buttons mit Icons)
- Zeitraum-Konfiguration mit Schnellauswahl-Buttons
- Filter-Optionen (Drucker, Status)
- 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
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
- PDF-Export mit Grafiken und Charts
- E-Mail-Versand von Export-Dateien
- Geplante Exports (Cron-Jobs)
- Export-Templates für wiederkehrende Exports
- Erweiterte Filter (Datum-Bereiche, komplexe Bedingungen)
- Bulk-Export mehrerer Zeiträume
- 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