76 lines
2.6 KiB
Python
76 lines
2.6 KiB
Python
#!/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()
|