diff --git a/backend/blueprints/jobs.py b/backend/blueprints/jobs.py index 91116c4ad..6c30bdba8 100644 --- a/backend/blueprints/jobs.py +++ b/backend/blueprints/jobs.py @@ -233,25 +233,44 @@ def create_job(): 'duration_minutes': duration_minutes } - # Konflikte erkennen - conflicts = conflict_manager.detect_conflicts(job_data, db_session) + # Konflikte erkennen mit erweiterte Fehlerbehandlung + try: + conflicts = conflict_manager.detect_conflicts(job_data, db_session) + jobs_logger.debug(f"🔍 Konflikt-Erkennung ergab {len(conflicts)} Konflikte") + except Exception as conflict_error: + jobs_logger.error(f"❌ Fehler bei Konflikt-Erkennung: {str(conflict_error)}") + conflicts = [] # Bei Fehlern keine Konflikte annehmen und Job erlauben if conflicts: - critical_conflicts = [c for c in conflicts if c.severity.value in ['kritisch', 'hoch']] - if critical_conflicts: - # Kritische Konflikte verhindern Job-Erstellung - conflict_descriptions = [c.description for c in critical_conflicts] - jobs_logger.warning(f"⚠️ Kritische Konflikte gefunden: {conflict_descriptions}") + try: + # Sicherer Zugriff auf Konflikt-Dictionaries mit korrekter Enum-Behandlung + critical_conflicts = [] + for conflict in conflicts: + if isinstance(conflict, dict) and 'severity' in conflict: + severity = conflict['severity'] + # ConflictSeverity ist ein Enum - verwende .value für String-Vergleich + severity_value = severity.value if hasattr(severity, 'value') else str(severity) + if severity_value in ['critical', 'high']: + critical_conflicts.append(conflict) - db_session.close() - return jsonify({ - "error": "Kritische Konflikte gefunden", - "conflicts": conflict_descriptions, - "suggestions": [s for c in critical_conflicts for s in c.suggested_solutions] - }), 409 - - # Mittlere/niedrige Konflikte protokollieren aber zulassen - jobs_logger.info(f"📋 {len(conflicts)} Konflikte erkannt, aber übergehbar") + if critical_conflicts: + # Kritische Konflikte verhindern Job-Erstellung + conflict_descriptions = [c.get('message', 'Unbekannter Konflikt') for c in critical_conflicts] + jobs_logger.warning(f"⚠️ Kritische Konflikte gefunden: {conflict_descriptions}") + + db_session.close() + return jsonify({ + "error": "Kritische Konflikte gefunden", + "conflicts": conflict_descriptions, + "suggestions": [] # Keine Lösungsvorschläge im Dictionary-Format + }), 409 + + # Mittlere/niedrige Konflikte protokollieren aber zulassen + jobs_logger.info(f"📋 {len(conflicts)} Konflikte erkannt, aber übergehbar") + except Exception as filter_error: + jobs_logger.error(f"❌ Fehler beim Filtern kritischer Konflikte: {str(filter_error)}") + # Bei Fehlern Job trotzdem erlauben + pass # Prüfen, ob der Drucker online ist printer_status, printer_active = check_printer_status(printer.plug_ip if printer.plug_ip else "")