Projektarbeit-MYP/backend/docs/EXPORT_FUNKTIONALITAET.md

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:
    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

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