From 1725d672a9fe83460a2f2111d3fc50fd0b088941 Mon Sep 17 00:00:00 2001 From: root Date: Sun, 16 Aug 2026 23:23:48 +0000 Subject: [PATCH] =?UTF-8?q?D=C3=A9coupler=20la=20cr=C3=A9ation=20des=20?= =?UTF-8?q?=C3=A9quipements=20des=20t=C3=A2ches=20pr=C3=A9ventives?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app_new/wizard/routes.py | 26 ++++++++++++++++++++------ 1 file changed, 20 insertions(+), 6 deletions(-) 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