04/27 Fixed notification hasn't been sent when submitting inspection
This commit is contained in:
@@ -171,6 +171,7 @@ def notify(
|
|||||||
inspection_id: int = None,
|
inspection_id: int = None,
|
||||||
event_type: str = None,
|
event_type: str = None,
|
||||||
send_email: bool = True,
|
send_email: bool = True,
|
||||||
|
respect_preferences: bool = True,
|
||||||
):
|
):
|
||||||
"""Create an in-app Notification record and optionally send an email.
|
"""Create an in-app Notification record and optionally send an email.
|
||||||
|
|
||||||
@@ -181,13 +182,22 @@ def notify(
|
|||||||
body : Full notification message
|
body : Full notification message
|
||||||
link : Relative URL for the 'View Details' button/link
|
link : Relative URL for the 'View Details' button/link
|
||||||
issue_id : FK to issues.id (optional)
|
issue_id : FK to issues.id (optional)
|
||||||
inspection_id: FK to inspections.id (optional)
|
inspection_id : FK to inspections.id (optional)
|
||||||
event_type : One of the EVENT_* constants from models.notification
|
event_type : One of the EVENT_* constants from models.notification
|
||||||
Used to look up the user's preference for this event.
|
Used to look up the user's preference for this event.
|
||||||
send_email : Master switch — set False to suppress all email (overrides prefs)
|
send_email : Master switch — set False to suppress all email (overrides prefs)
|
||||||
|
respect_preferences : When True (default), per-user email preferences gate delivery.
|
||||||
|
Set False for matrix-routed broadcasts — the matrix is the
|
||||||
|
authority; individual opt-out should not override admin config.
|
||||||
"""
|
"""
|
||||||
# Determine digest flag before creating the record
|
# Determine digest flag before creating the record.
|
||||||
hold_for_digest = send_email and bool(event_type) and _digest_mode_for(recipient, event_type)
|
# Digest mode is only respected when individual preferences are in effect.
|
||||||
|
hold_for_digest = (
|
||||||
|
respect_preferences
|
||||||
|
and send_email
|
||||||
|
and bool(event_type)
|
||||||
|
and _digest_mode_for(recipient, event_type)
|
||||||
|
)
|
||||||
|
|
||||||
# ── 1. Persist in-app notification ──────────────────────────────────────
|
# ── 1. Persist in-app notification ──────────────────────────────────────
|
||||||
notif = Notification(
|
notif = Notification(
|
||||||
@@ -210,9 +220,18 @@ def notify(
|
|||||||
|
|
||||||
# ── 2. Send immediate email if applicable ────────────────────────────────
|
# ── 2. Send immediate email if applicable ────────────────────────────────
|
||||||
if send_email and not hold_for_digest:
|
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 = (
|
should_send = (
|
||||||
event_type is None or _email_enabled_for(recipient, event_type)
|
event_type is None or _email_enabled_for(recipient, 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'):
|
if should_send and recipient.email and current_app.config.get('MAIL_SERVER'):
|
||||||
_send_single_email(recipient, title, body, link)
|
_send_single_email(recipient, title, body, link)
|
||||||
|
|
||||||
@@ -555,6 +574,7 @@ def notify_by_matrix(
|
|||||||
inspection_id = inspection_id,
|
inspection_id = inspection_id,
|
||||||
event_type = event_type,
|
event_type = event_type,
|
||||||
send_email = True,
|
send_email = True,
|
||||||
|
respect_preferences = False, # matrix is the authority for broadcasts
|
||||||
)
|
)
|
||||||
notified.add(user.id)
|
notified.add(user.id)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user