05/16 Fix bugs 1

This commit is contained in:
Nguyen Ngo
2026-05-16 13:47:39 -04:00
parent d0460fec75
commit 0675acb8ec
2 changed files with 25 additions and 4 deletions
+19 -2
View File
@@ -264,6 +264,12 @@ def create_inspection():
# follow_up_required on the parent automatically. This mirrors the web # follow_up_required on the parent automatically. This mirrors the web
# list view's implicit logic (which hides the badge when follow_ups.any()) # list view's implicit logic (which hides the badge when follow_ups.any())
# and ensures the History API response reflects the resolved state. # and ensures the History API response reflects the resolved state.
# Capture parent label strings before commit while ORM objects are loaded.
# log_action() for the parent update must fire AFTER db.session.commit() to
# avoid audit.py's internal commit() persisting the parent flag change before
# the new inspection row is committed — a partial state that would be incorrect
# if the main commit subsequently failed.
_parent_log_args = None
if parent_inspection_id and status == 'completed': if parent_inspection_id and status == 'completed':
parent_insp = db.session.get(Inspection, parent_inspection_id) parent_insp = db.session.get(Inspection, parent_inspection_id)
if parent_insp and parent_insp.follow_up_required: if parent_insp and parent_insp.follow_up_required:
@@ -273,10 +279,13 @@ def create_inspection():
'by_inspection_id=%d | user=%s', 'by_inspection_id=%d | user=%s',
parent_inspection_id, inspection.id, user.username, parent_inspection_id, inspection.id, user.username,
) )
log_action(ACTION_UPDATE, 'Inspection', parent_inspection_id, # Snapshot label strings now — ORM objects may be expired after commit
_parent_log_args = (
parent_inspection_id,
f'{parent_insp.template.name} @ {parent_insp.facility.name}', f'{parent_insp.template.name} @ {parent_insp.facility.name}',
f'follow_up_required=False (cleared by re-inspection ' f'follow_up_required=False (cleared by re-inspection '
f'#{inspection.id} via mobile API)') f'#{inspection.id} via mobile API)',
)
# ── Notifications ───────────────────────────────────────────────────── # ── Notifications ─────────────────────────────────────────────────────
if status == 'completed': if status == 'completed':
@@ -304,6 +313,14 @@ def create_inspection():
db.session.commit() db.session.commit()
# ── Post-commit audit logging ──────────────────────────────────────────
# All log_action() calls must come AFTER db.session.commit() because
# audit.py calls db.session.commit() internally. Calling it before the
# main commit would persist the audit row (and any dirty ORM state) before
# the primary transaction completes.
if _parent_log_args:
log_action(ACTION_UPDATE, 'Inspection', *_parent_log_args)
log_action(ACTION_CREATE, 'Inspection', inspection.id, log_action(ACTION_CREATE, 'Inspection', inspection.id,
f'{template.name} @ {facility.name}', f'{template.name} @ {facility.name}',
f'source=mobile; status={status}; score={overall_score}; ' f'source=mobile; status={status}; score={overall_score}; '
+4
View File
@@ -12,6 +12,9 @@ EVENT_ISSUE_COMMENT = 'issue_comment'
EVENT_ISSUE_FOLLOW = 'issue_follow_update' EVENT_ISSUE_FOLLOW = 'issue_follow_update'
EVENT_INSPECTION_DONE = 'inspection_completed' EVENT_INSPECTION_DONE = 'inspection_completed'
EVENT_SLA_ALERT = 'sla_alert' EVENT_SLA_ALERT = 'sla_alert'
# Fired when an issue is flagged during an inspection (web or mobile).
# Listed here so users can configure email preferences for this event.
EVENT_ISSUE_FLAGGED = 'issue_flagged'
# ── Customer portal events ───────────────────────────────────────────────── # ── Customer portal events ─────────────────────────────────────────────────
# Fired when an inspection completes or an issue is created/updated at a # Fired when an inspection completes or an issue is created/updated at a
@@ -25,6 +28,7 @@ ALL_EVENT_TYPES = {
EVENT_ISSUE_STATUS: 'Issue status changed', EVENT_ISSUE_STATUS: 'Issue status changed',
EVENT_ISSUE_COMMENT: 'New comment on issue', EVENT_ISSUE_COMMENT: 'New comment on issue',
EVENT_ISSUE_FOLLOW: 'Updates on followed issues', EVENT_ISSUE_FOLLOW: 'Updates on followed issues',
EVENT_ISSUE_FLAGGED: 'Issue flagged (from inspection)',
EVENT_INSPECTION_DONE: 'Inspection completed', EVENT_INSPECTION_DONE: 'Inspection completed',
EVENT_SLA_ALERT: 'SLA at-risk / breached alerts', EVENT_SLA_ALERT: 'SLA at-risk / breached alerts',
# Customer-facing — only relevant for customer role accounts # Customer-facing — only relevant for customer role accounts