HH/test_hierarchy_fix.py

76 lines
2.6 KiB
Python
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/usr/bin/env python
"""
Test script to verify the staff hierarchy API fix.
This script tests the hierarchy endpoint directly using Django's test framework.
"""
import os
import django
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'PX360.settings')
django.setup()
from apps.organizations.models import Staff
from apps.organizations.views import StaffViewSet
def test_hierarchy():
"""Test the hierarchy endpoint"""
print("Testing Staff Hierarchy API...")
print("-" * 60)
# Get all staff
staff_queryset = Staff.objects.all()
total_staff = staff_queryset.count()
print(f"Total staff in database: {total_staff}")
if total_staff == 0:
print("\n⚠️ No staff data found!")
print("Please import staff data first using:")
print(" python manage.py import_staff_csv sample_staff_data.csv")
return
# Get staff with managers
staff_list = staff_queryset.select_related('report_to', 'hospital', 'department')
# Find root nodes (staff with no manager or manager not in the filtered set)
staff_dict = {staff.id: staff for staff in staff_list}
root_staff = [
staff for staff in staff_list
if staff.report_to_id is None or staff.report_to_id not in staff_dict
]
print(f"Root nodes (top-level managers): {len(root_staff)}")
print()
# Show root staff details
print("Top-Level Managers:")
for i, staff in enumerate(root_staff[:5], 1):
print(f" {i}. {staff.get_full_name()} ({staff.job_title or 'No title'})")
print(f" ID: {staff.id}, Employee ID: {staff.employee_id}")
if len(root_staff) > 5 and i == 5:
print(f" ... and {len(root_staff) - 5} more")
break
print()
# Check if there are multiple root nodes
if len(root_staff) > 1:
print("✅ Multiple root nodes detected - Virtual root node will be created")
print(f" The API will return a single tree with {len(root_staff)} top-level children")
elif len(root_staff) == 1:
print(" Single root node detected - No virtual root needed")
print(" The API will return the single hierarchy tree directly")
else:
print("⚠️ No root nodes found - All staff have managers")
print()
print("-" * 60)
print("Test completed!")
print()
print("To view the hierarchy visualization:")
print("1. Start the server: python manage.py runserver")
print("2. Login to the application")
print("3. Navigate to Organizations > Staff > Hierarchy")
if __name__ == '__main__':
test_hierarchy()