diff --git a/app_new/wizard/routes.py b/app_new/wizard/routes.py index 6906f29..0b163fe 100644 --- a/app_new/wizard/routes.py +++ b/app_new/wizard/routes.py @@ -128,13 +128,27 @@ def bulk_create_equipments(): ) db.session.add(unit) created.append(unit) - # Les tâches sont générées sur les unités individualisées, sinon sur - # les groupes de pièce, jamais sur le parent de synthèse. - task_targets = [eq for eq in created if (not eq.is_group or (eq.parent_id and not eq.tracked_individually))] - for equipment in task_targets: - equipment.create_scheduled_tasks_from_lot(commit=False) + # Valider d'abord le patrimoine. La génération des échéances est + # volontairement découplée : une anomalie dans un lot ne doit jamais + # annuler les équipements déjà créés. db.session.commit() - return jsonify({'success': True, 'created_count': len(created), 'families': len(items), 'rooms': len(rooms)}) + task_targets = [eq for eq in created if (not eq.is_group or (eq.parent_id and not eq.tracked_individually))] + task_errors = [] + for equipment in task_targets: + try: + equipment.create_scheduled_tasks_from_lot(commit=True) + except Exception as exc: + db.session.rollback() + message = f"Équipement {equipment.id} ({equipment.name}) : {str(exc)[:500]}" + task_errors.append(message) + current_app.logger.exception('Échec génération tâche préventive - %s', message) + try: + from app_new.watchdog_logger import log_watchdog + log_watchdog('wizard_equipements', message, level='error') + except Exception: + pass + return jsonify({'success': True, 'created_count': len(created), 'families': len(items), 'rooms': len(rooms), + 'task_errors': task_errors}) except (TypeError, ValueError) as exc: db.session.rollback() return jsonify({'error': str(exc)}), 400