79 lines
2.9 KiB
Markdown
79 lines
2.9 KiB
Markdown
# 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:
|
|
```python
|
|
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:
|
|
|
|
```python
|
|
# 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) % 7` shifts 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
|
|
1. **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
|
|
|
|
2. **appointments/forms.py**
|
|
- Fixed `AddPatientToSessionForm.__init__()` method
|
|
- Removed invalid `is_active=True` filter from Patient queryset (Patient model doesn't have this field)
|
|
|
|
3. **appointments/session_service.py**
|
|
- Updated `add_patient_to_session()` method to check and set `finance_cleared` and `consent_verified` fields when adding a patient
|
|
- This ensures the finance and consent status is immediately reflected in the participant list
|
|
|
|
## Testing
|
|
The fix should now allow:
|
|
1. Creating group sessions without the day_of_week error
|
|
2. Checking provider availability correctly
|
|
3. Generating calendar slots properly
|
|
4. 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
|
|
|
|
## Date: November 16, 2025
|