Jul 16 - Update submission will trigger notification to self inspector only

This commit is contained in:
2026-07-16 15:56:18 -04:00
parent 56bcf9ed63
commit 4900ddc2cc
3 changed files with 22 additions and 0 deletions
+4
View File
@@ -715,6 +715,10 @@ EVENT_SCORE_ALERT = 'score_alert' ← Phase 27
EVENT_SCHEDULED_INSPECTION = 'scheduled_inspection' ← Phase 36 EVENT_SCHEDULED_INSPECTION = 'scheduled_inspection' ← Phase 36
``` ```
### Inspector role scoping for `inspection_completed`
`notify_by_matrix()` special-cases the **inspector** role for the `inspection_completed` event: instead of notifying every active inspector, it notifies **only the inspection's own inspector** (`Inspection.inspector_id`, resolved from the passed `inspection_id`). So enabling the "Inspector" column for "Inspection completed" in the matrix alerts just the inspector who submitted that inspection — not the whole inspector pool. All three dispatch sites (web `routes/inspections.py`, both mobile-API `api/inspections.py`) pass `inspection_id`, so the scoping applies uniformly; if `inspection_id` is ever omitted for this event, the inspector role notifies no one (fail-closed). Other roles/events are unaffected.
### Per-Contract Additional Recipients (Phase 33) ### Per-Contract Additional Recipients (Phase 33)
`notify_by_matrix()` is the single dispatch point for all broadcast events. After routing to the global matrix roles + global custom emails, it calls `_notify_contract_recipients()`, which: `notify_by_matrix()` is the single dispatch point for all broadcast events. After routing to the global matrix roles + global custom emails, it calls `_notify_contract_recipients()`, which:
+4
View File
@@ -10,6 +10,10 @@ role_key values
admin all users with role='admin' admin all users with role='admin'
director all users with role='director' director all users with role='director'
inspector all users with role='inspector' inspector all users with role='inspector'
EXCEPTION: for event 'inspection_completed', the inspector
column notifies ONLY the inspection's own inspector
(the submitter), not the whole inspector pool. Scoping is
applied in notify_by_matrix() via the inspection_id.
project_manager all users with role='project_manager' project_manager all users with role='project_manager'
customer all customer-portal users assigned to the relevant facility customer all customer-portal users assigned to the relevant facility
assignee the specific user the issue/inspection is assigned to assignee the specific user the issue/inspection is assigned to
+14
View File
@@ -569,6 +569,20 @@ def notify_by_matrix(
logger.info('MATRIX NOTIFY | event=%s | role=%s | users_found=%s', logger.info('MATRIX NOTIFY | event=%s | role=%s | users_found=%s',
event_type, role_key, [u.username for u in users]) event_type, role_key, [u.username for u in users])
# Scope the inspector role for "inspection_completed" to the inspection's
# OWN inspector (the person who did the work), not the whole inspector
# pool. Without this, enabling the Inspector column for this event would
# notify every inspector on every submission.
if role_key == 'inspector' and event_type == 'inspection_completed':
target_id = None
if inspection_id:
from app.models.inspection import Inspection
insp = db.session.get(Inspection, inspection_id)
target_id = insp.inspector_id if insp else None
users = [u for u in users if u.id == target_id] if target_id else []
logger.info('MATRIX NOTIFY | event=%s | role=inspector scoped to '
'submitting inspector_id=%s', event_type, target_id)
# Scope customer role to facility if provided # Scope customer role to facility if provided
if role_key == 'customer' and facility_id: if role_key == 'customer' and facility_id:
from app.utils.notifications import notify_customers_for_facility from app.utils.notifications import notify_customers_for_facility