04/27 Fixed notification hasn't been sent when submitting inspection 2

This commit is contained in:
2026-04-27 18:00:36 -04:00
parent 9733dab925
commit fd057068e1
+32 -13
View File
@@ -219,20 +219,32 @@ def notify(
)
# ── 2. Send immediate email if applicable ────────────────────────────────
if send_email and not hold_for_digest:
if respect_preferences:
# Per-user opt-in/opt-out gate — used for direct notifications
# (issue assignment, SLA alerts, follower updates, etc.)
should_send = (
event_type is None or _email_enabled_for(recipient, event_type)
)
if not send_email:
logger.info('EMAIL SKIP | user=%s | event=%s | reason=send_email_False',
recipient.username, event_type)
elif hold_for_digest:
logger.info('EMAIL SKIP | user=%s | event=%s | reason=digest_mode',
recipient.username, event_type)
else:
if respect_preferences:
pref_enabled = _email_enabled_for(recipient, event_type)
should_send = (event_type is None or pref_enabled)
if not should_send:
logger.info('EMAIL SKIP | user=%s | event=%s | reason=user_pref_disabled',
recipient.username, event_type)
else:
# Matrix-routed broadcast — the admin matrix is the authority.
# Individual preference rows must not override it, otherwise an
# admin or director who once clicked "Pause All" would silently
# stop receiving inspection completion and other broadcast events.
should_send = True
if should_send and recipient.email and current_app.config.get('MAIL_SERVER'):
mail_server = current_app.config.get('MAIL_SERVER')
if should_send and not recipient.email:
logger.warning('EMAIL SKIP | user=%s | event=%s | reason=no_email_address',
recipient.username, event_type)
elif should_send and not mail_server:
logger.warning('EMAIL SKIP | user=%s | event=%s | reason=MAIL_SERVER_not_configured',
recipient.username, event_type)
elif should_send:
logger.info('EMAIL SEND | user=%s | event=%s | to=%s',
recipient.username, event_type, recipient.email)
_send_single_email(recipient, title, body, link)
@@ -536,10 +548,15 @@ def notify_by_matrix(
'customer': 'customer',
}
logger.info('MATRIX NOTIFY START | event=%s | exclude=%s', event_type, exclude)
for role_key, _ in MATRIX_ROLES:
if role_key == 'custom':
continue # handled separately below
if not is_enabled(event_type, role_key):
enabled = is_enabled(event_type, role_key)
logger.info('MATRIX NOTIFY | event=%s | role=%s | enabled=%s',
event_type, role_key, enabled)
if not enabled:
continue
db_role = role_to_db.get(role_key)
@@ -547,6 +564,8 @@ def notify_by_matrix(
continue
users = User.query.filter_by(role=db_role, active=True).all()
logger.info('MATRIX NOTIFY | event=%s | role=%s | users_found=%s',
event_type, role_key, [u.username for u in users])
# Scope customer role to facility if provided
if role_key == 'customer' and facility_id: