From ed74e5064c3cb0bbfccb8a4a62d70c7ba1c66bcd Mon Sep 17 00:00:00 2001 From: Nguyen Ngo Date: Mon, 22 Jun 2026 13:40:38 -0400 Subject: [PATCH] 06/22 Fix Director notification issue --- app/__init__.py | 70 +++++++++++++++++++++++++++++++++---------------- 1 file changed, 47 insertions(+), 23 deletions(-) diff --git a/app/__init__.py b/app/__init__.py index 66393e1..5da92b1 100644 --- a/app/__init__.py +++ b/app/__init__.py @@ -103,32 +103,56 @@ def create_app(config_name='default'): @app.context_processor def inject_notification_count(): + if not current_user.is_authenticated: + return { + 'unread_notification_count': 0, + 'pending_verification_count': 0, + 'open_support_tickets_count': 0, + } + + # ── Unread notification count (all roles) ────────────────────────── + # Computed first, in its own try/except, so a failure in the + # director-specific queries below never zeroes out the bell badge. try: - if current_user.is_authenticated: - from app.models.notification import Notification + from app.models.notification import Notification + unread = Notification.query.filter_by( + user_id=current_user.id, is_read=False + ).count() + except Exception as exc: + import logging as _logging + _logging.getLogger(__name__).warning( + 'inject_notification_count: unread query failed: %s', exc + ) + unread = 0 + + # ── Director/admin-only counts ───────────────────────────────────── + pv_count = 0 + open_support = 0 + if current_user.role in ('admin', 'director'): + try: from app.models.issue import Issue - unread = Notification.query.filter_by( - user_id=current_user.id, is_read=False + pv_count = Issue.query.filter_by( + status='pending_verification' ).count() - # Pending verification count — only computed for director+ roles - pv_count = 0 - if current_user.role in ('admin', 'director'): - pv_count = Issue.query.filter_by( - status='pending_verification' - ).count() - # Open support tickets — admin/director only - open_support = 0 - if current_user.role in ('admin', 'director'): - from app.models.support import SupportTicket - open_support = SupportTicket.query.filter_by(status='open').count() - return { - 'unread_notification_count': unread, - 'pending_verification_count': pv_count, - 'open_support_tickets_count': open_support, - } - except Exception: - pass - return {'unread_notification_count': 0, 'pending_verification_count': 0, 'open_support_tickets_count': 0} + except Exception as exc: + import logging as _logging + _logging.getLogger(__name__).warning( + 'inject_notification_count: pv_count query failed: %s', exc + ) + try: + from app.models.support import SupportTicket + open_support = SupportTicket.query.filter_by(status='open').count() + except Exception as exc: + import logging as _logging + _logging.getLogger(__name__).warning( + 'inject_notification_count: support_tickets query failed: %s', exc + ) + + return { + 'unread_notification_count': unread, + 'pending_verification_count': pv_count, + 'open_support_tickets_count': open_support, + } os.makedirs(app.config['UPLOAD_FOLDER'], exist_ok=True)