fix(meters): centralize alert investigation workflow
Some checks are pending
CI - Tests et Syntax / lint-and-test (push) Waiting to run

This commit is contained in:
root 2026-08-24 12:16:46 +00:00
parent 2213fffec3
commit cfe702eeeb
2 changed files with 17 additions and 4 deletions

View file

@ -258,6 +258,18 @@ def close_meter_alert(*, alert, conclusion, comment=None, user_id=None, commit=T
return alert return alert
def investigate_meter_alert(*, alert, comment=None, user_id=None, commit=True):
"""Passe une alerte ouverte en investigation via le service métier."""
if alert.status not in {"OPEN", "INVESTIGATING"}:
raise ValueError("Une alerte clôturée ne peut plus passer en investigation.")
alert.status = "INVESTIGATING"
if comment:
alert.comment = comment
if commit:
db.session.commit()
return alert
def visible_open_meter_alerts(user): def visible_open_meter_alerts(user):
"""Retourne les alertes visibles dans Ma journée selon le RBAC métier.""" """Retourne les alertes visibles dans Ma journée selon le RBAC métier."""
query = MeterAlert.query.filter(MeterAlert.status.in_(("OPEN", "INVESTIGATING"))) query = MeterAlert.query.filter(MeterAlert.status.in_(("OPEN", "INVESTIGATING")))

View file

@ -20,7 +20,10 @@ from ..core.services.meter_reading_planning import (
create_round, ensure_occurrences_for_operational_date, generate_occurrences, create_round, ensure_occurrences_for_operational_date, generate_occurrences,
record_occurrence_reading, record_occurrence_without_reading, record_occurrence_reading, record_occurrence_without_reading,
) )
from ..core.services.meter_analytics import consumption_intervals, visible_open_meter_alerts, close_meter_alert from ..core.services.meter_analytics import (
consumption_intervals, visible_open_meter_alerts, close_meter_alert,
investigate_meter_alert,
)
from ..core.models.planning import MeterAlert, MeterAlertRule from ..core.models.planning import MeterAlert, MeterAlertRule
from .schedules import planning_bp from .schedules import planning_bp
@ -224,9 +227,7 @@ def close_meter_alert_route(alert_id):
alert = MeterAlert.query.get_or_404(alert_id) alert = MeterAlert.query.get_or_404(alert_id)
action = request.form.get('status', 'CLOSED').upper() action = request.form.get('status', 'CLOSED').upper()
if action == 'INVESTIGATING': if action == 'INVESTIGATING':
alert.status = 'INVESTIGATING' investigate_meter_alert(alert=alert, comment=request.form.get('comment'), user_id=current_user.id)
alert.comment = request.form.get('comment') or alert.comment
db.session.commit()
flash('Alerte passée en investigation.', 'success') flash('Alerte passée en investigation.', 'success')
else: else:
try: try: