HH/apps/core/config_views.py
2025-12-24 12:42:31 +03:00

126 lines
4.1 KiB
Python

"""
Configuration Console UI views - System configuration management
"""
from django.contrib.auth.decorators import login_required
from django.core.paginator import Paginator
from django.shortcuts import render
from apps.organizations.models import Hospital
from apps.px_action_center.models import PXActionSLAConfig, RoutingRule
@login_required
def config_dashboard(request):
"""Configuration dashboard - overview of system settings"""
# Only PX Admins can access
if not request.user.is_px_admin():
from django.contrib import messages
from django.shortcuts import redirect
messages.error(request, "Only PX Admins can access configuration.")
return redirect('dashboard:command-center')
# Get counts
sla_configs_count = PXActionSLAConfig.objects.filter(is_active=True).count()
routing_rules_count = RoutingRule.objects.filter(is_active=True).count()
hospitals_count = Hospital.objects.filter(status='active').count()
context = {
'sla_configs_count': sla_configs_count,
'routing_rules_count': routing_rules_count,
'hospitals_count': hospitals_count,
}
return render(request, 'config/dashboard.html', context)
@login_required
def sla_config_list(request):
"""SLA configurations list view"""
# Only PX Admins can access
if not request.user.is_px_admin():
from django.contrib import messages
from django.shortcuts import redirect
messages.error(request, "Only PX Admins can access configuration.")
return redirect('dashboard:command-center')
queryset = PXActionSLAConfig.objects.select_related('hospital', 'department')
# Apply filters
hospital_filter = request.GET.get('hospital')
if hospital_filter:
queryset = queryset.filter(hospital_id=hospital_filter)
is_active = request.GET.get('is_active')
if is_active == 'true':
queryset = queryset.filter(is_active=True)
elif is_active == 'false':
queryset = queryset.filter(is_active=False)
# Ordering
queryset = queryset.order_by('hospital', 'name')
# Pagination
page_size = int(request.GET.get('page_size', 25))
paginator = Paginator(queryset, page_size)
page_number = request.GET.get('page', 1)
page_obj = paginator.get_page(page_number)
# Get hospitals for filter
hospitals = Hospital.objects.filter(status='active')
context = {
'page_obj': page_obj,
'sla_configs': page_obj.object_list,
'hospitals': hospitals,
'filters': request.GET,
}
return render(request, 'config/sla_config.html', context)
@login_required
def routing_rules_list(request):
"""Routing rules list view"""
# Only PX Admins can access
if not request.user.is_px_admin():
from django.contrib import messages
from django.shortcuts import redirect
messages.error(request, "Only PX Admins can access configuration.")
return redirect('dashboard:command-center')
queryset = RoutingRule.objects.select_related(
'hospital', 'department', 'assign_to_user', 'assign_to_department'
)
# Apply filters
hospital_filter = request.GET.get('hospital')
if hospital_filter:
queryset = queryset.filter(hospital_id=hospital_filter)
is_active = request.GET.get('is_active')
if is_active == 'true':
queryset = queryset.filter(is_active=True)
elif is_active == 'false':
queryset = queryset.filter(is_active=False)
# Ordering
queryset = queryset.order_by('-priority', 'name')
# Pagination
page_size = int(request.GET.get('page_size', 25))
paginator = Paginator(queryset, page_size)
page_number = request.GET.get('page', 1)
page_obj = paginator.get_page(page_number)
# Get hospitals for filter
hospitals = Hospital.objects.filter(status='active')
context = {
'page_obj': page_obj,
'routing_rules': page_obj.object_list,
'hospitals': hospitals,
'filters': request.GET,
}
return render(request, 'config/routing_rules.html', context)