HH/apps/core/config_views.py
2026-03-28 14:03:56 +03:00

131 lines
4.0 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
from apps.complaints.models import OnCallAdminSchedule
from apps.callcenter.models import CallRecord
from apps.core.decorators import px_admin_required
from apps.accounts.models import User
@px_admin_required
def config_dashboard(request):
"""Configuration dashboard - overview of system settings - PX Admin only"""
# 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()
oncall_schedules_count = OnCallAdminSchedule.objects.filter(is_active=True).count()
call_records_count = CallRecord.objects.count()
provisional_users_count = User.objects.filter(is_provisional=True).count()
context = {
"sla_configs_count": sla_configs_count,
"routing_rules_count": routing_rules_count,
"hospitals_count": hospitals_count,
"oncall_schedules_count": oncall_schedules_count,
"call_records_count": call_records_count,
"provisional_users_count": provisional_users_count,
}
return render(request, "config/dashboard.html", context)
@px_admin_required
def sla_config_list(request):
"""SLA configurations list view - PX Admin only"""
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)
@px_admin_required
def routing_rules_list(request):
"""Routing rules list view - PX Admin only"""
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)
from django.views.decorators.csrf import csrf_exempt
from rich import print
@csrf_exempt
def test(request):
import json
from django.http import JsonResponse
print(json.loads(request.body))
return JsonResponse({"status": "ok"})