agdar/GROUP_SESSION_DAY_OF_WEEK_FIX.md
Marwan Alwali a4665842c9 update
2025-11-23 10:58:07 +03:00

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) % 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