55 lines
2.1 KiB
Python
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 |