2.9 KiB
2.9 KiB
Group Session Day of Week Fix
Issue
When creating a group session, the following error occurred:
Field 'day_of_week' expected a number but got 'MONDAY'
Root Cause
The Schedule model's day_of_week field is defined as an IntegerField with choices:
- 0 = Sunday
- 1 = Monday
- 2 = Tuesday
- 3 = Wednesday
- 4 = Thursday
- 5 = Friday
- 6 = Saturday
However, the AppointmentService.check_availability() method in appointments/services.py was using:
day_of_week = start_time.strftime('%A').upper() # Returns 'MONDAY', 'TUESDAY', etc.
This created a string value like 'MONDAY' which was then used to query the database, causing a type mismatch error.
Solution
Updated the check_availability() and get_calendar_slots() methods in appointments/services.py to convert the date to the correct integer format:
# Convert Python's weekday() (0=Monday, 1=Tuesday, ..., 6=Sunday)
# to Schedule.DayOfWeek format (0=Sunday, 1=Monday, ..., 6=Saturday)
day_of_week_int = (start_time.weekday() + 1) % 7
Conversion Logic
- Python's
weekday()returns: 0=Monday, 1=Tuesday, 2=Wednesday, 3=Thursday, 4=Friday, 5=Saturday, 6=Sunday - Schedule model expects: 0=Sunday, 1=Monday, 2=Tuesday, 3=Wednesday, 4=Thursday, 5=Friday, 6=Saturday
- Formula:
(weekday() + 1) % 7shifts the values and wraps Sunday from 6 to 0
Example Conversions
| Day | Python weekday() | Formula | Result (Schedule) |
|---|---|---|---|
| Monday | 0 | (0 + 1) % 7 | 1 |
| Tuesday | 1 | (1 + 1) % 7 | 2 |
| Wednesday | 2 | (2 + 1) % 7 | 3 |
| Thursday | 3 | (3 + 1) % 7 | 4 |
| Friday | 4 | (4 + 1) % 7 | 5 |
| Saturday | 5 | (5 + 1) % 7 | 6 |
| Sunday | 6 | (6 + 1) % 7 | 0 |
Files Modified
-
appointments/services.py
- Updated
AppointmentService.check_availability()method (line ~120) - Updated
AppointmentService.get_calendar_slots()method (line ~550) - Fixed logger warning message to use day names array
- Updated
-
appointments/forms.py
- Fixed
AddPatientToSessionForm.__init__()method - Removed invalid
is_active=Truefilter from Patient queryset (Patient model doesn't have this field)
- Fixed
-
appointments/session_service.py
- Updated
add_patient_to_session()method to check and setfinance_clearedandconsent_verifiedfields when adding a patient - This ensures the finance and consent status is immediately reflected in the participant list
- Updated
Testing
The fix should now allow:
- Creating group sessions without the day_of_week error
- Checking provider availability correctly
- Generating calendar slots properly
- All appointment scheduling features to work with the correct day mapping
Impact
- Group Session Creation: Now works correctly
- Provider Availability Checking: Now uses correct day mapping
- Calendar Slot Generation: Now uses correct day mapping
- Backward Compatibility: Maintained - no database changes required