#!/usr/bin/env python """Test script to verify the analytics dashboard FieldError fix""" import os import sys import django # Setup Django os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'PX360.settings') sys.path.insert(0, '/home/ismail/projects/HH') django.setup() from django.db.models import Avg, Count, Q from apps.organizations.models import Department from apps.surveys.models import SurveyInstance def test_department_rankings_query(): """Test the department rankings query that was causing the FieldError""" print("Testing department rankings query...") try: # Test the exact query from the fixed code department_rankings = Department.objects.filter( status='active' ).annotate( avg_score=Avg( 'journey_instances__surveys__total_score', filter=Q(journey_instances__surveys__status='completed') ), survey_count=Count( 'journey_instances__surveys', filter=Q(journey_instances__surveys__status='completed') ) ).filter( survey_count__gt=0 ).order_by('-avg_score')[:5] # Execute the query results = list(department_rankings) print(f"✓ Query executed successfully!") print(f"✓ Found {len(results)} departments with surveys") if results: print("\nTop departments by survey score:") for i, dept in enumerate(results[:3], 1): print(f" {i}. {dept.name} - Avg: {dept.avg_score:.2f}, Count: {dept.survey_count}") return True except Exception as e: print(f"✗ Query failed with error: {type(e).__name__}: {e}") import traceback traceback.print_exc() return False def test_survey_query(): """Test that we can query surveys by journey instance""" print("\nTesting survey query through journey instances...") try: # Test a simpler query surveys = SurveyInstance.objects.filter( status='completed', journey_instance__isnull=False ).select_related('journey_instance', 'journey_instance__department')[:5] results = list(surveys) print(f"✓ Found {len(results)} completed surveys with journey instances") if results: for survey in results[:2]: dept = survey.journey_instance.department if survey.journey_instance else None print(f" - Survey {survey.id}: Score={survey.total_score}, Dept={dept.name if dept else 'None'}") return True except Exception as e: print(f"✗ Query failed with error: {type(e).__name__}: {e}") import traceback traceback.print_exc() return False if __name__ == '__main__': print("=" * 60) print("Testing Analytics Dashboard FieldError Fix") print("=" * 60) success = True # Test 1: Department rankings query if not test_department_rankings_query(): success = False # Test 2: Survey query if not test_survey_query(): success = False print("\n" + "=" * 60) if success: print("✓ All tests passed!") else: print("✗ Some tests failed!") print("=" * 60) sys.exit(0 if success else 1)