2.2 KiB
2.2 KiB
Survey Charts Fix Summary
Issue
The survey response list page had empty charts showing no data, even though survey data existed in the database.
Root Cause
The Score Distribution chart had a range query bug: the 4-5 range used __lt=5 (less than 5), which excluded surveys with a score of exactly 5.0.
Fixes Applied
1. Fixed Score Distribution Range Logic
File: apps/surveys/ui_views.py
Change:
# BEFORE (line 294-298):
if max_score == 5:
count = stats_queryset.filter(
total_score__gte=min_score,
total_score__lt=max_score # <-- This excluded score 5.0
).count()
# AFTER:
if max_score == 5:
count = stats_queryset.filter(
total_score__gte=min_score,
total_score__lte=max_score # <-- Now includes score 5.0
).count()
2. Added Debug Logging
Added comprehensive logging to help troubleshoot chart data issues in the future.
Verification Results
Score Distribution ✓
- 1-2: 0 surveys (0.0%)
- 2-3: 1 survey (16.7%) - score: 2.71
- 3-4: 3 surveys (50.0%) - scores: 3.50, 3.71, 3.71
- 4-5: 2 surveys (33.3%) - scores: 4.00, 5.00 (now included!)
Engagement Funnel ✓
- Sent/Pending: 9 surveys
- Viewed: 0 surveys
- Opened: 4 surveys
- In Progress: 3 surveys
- Completed: 6 surveys
Completion Time Distribution ✓
- < 1 min: 3 surveys (50.0%)
- 1-5 min: 0 surveys (0.0%)
- 5-10 min: 0 surveys (0.0%)
- 10-20 min: 0 surveys (0.0%)
- 20+ min: 3 surveys (50.0%)
30-Day Trend ✓
Already working (confirmed by user)
What Was Working
- Engagement Funnel (had correct logic)
- Completion Time (had correct logic)
- 30-Day Trend (already working)
What Was Fixed
- Score Distribution (range query bug fixed)
Test Instructions
- Access the survey instances page:
http://localhost:8000/surveys/instances/ - Verify all charts are now displaying data
- Check the Score Distribution chart shows the 4-5 range with 2 surveys
Technical Notes
- All charts use ApexCharts library (version 3.45.1)
- Chart data is generated server-side in the
survey_instance_listview - Template variables correctly map to JavaScript chart configuration
- Debug logging available in Django logs for troubleshooting