HH/apps/accounts/context_processors.py

55 lines
2.1 KiB
Python

"""
Context processors for accounts app
"""
from django.contrib.auth import get_user_model
User = get_user_model()
def acknowledgement_counts(request):
"""
Context processor to add acknowledgement-related counts to all templates
"""
context = {}
# Only process for authenticated users
if request.user.is_authenticated:
# Count pending acknowledgements for the current user
from .models import UserAcknowledgement, AcknowledgementChecklistItem
# Get checklist items for the user's role
checklist_items = AcknowledgementChecklistItem.objects.filter(is_active=True)
# Filter by user's role if applicable
user_role = None
if request.user.groups.filter(name='PX Admin').exists():
user_role = 'px_admin'
elif request.user.groups.filter(name='Hospital Admin').exists():
user_role = 'hospital_admin'
elif request.user.groups.filter(name='Department Manager').exists():
user_role = 'department_manager'
elif request.user.groups.filter(name='Staff').exists():
user_role = 'staff'
elif request.user.groups.filter(name='Physician').exists():
user_role = 'physician'
if user_role:
checklist_items = checklist_items.filter(role__in=[user_role, 'all'])
else:
checklist_items = checklist_items.filter(role='all')
# Count pending acknowledgements (not yet signed)
acknowledged_ids = UserAcknowledgement.objects.filter(
user=request.user,
is_acknowledged=True
).values_list('checklist_item_id', flat=True)
pending_count = checklist_items.exclude(id__in=acknowledged_ids).count()
context['pending_acknowledgements_count'] = pending_count
# For PX Admins, count provisional users
if request.user.is_px_admin():
provisional_count = User.objects.filter(is_provisional=True).count()
context['provisional_user_count'] = provisional_count
return context