21
21
from django .utils .timezone import get_current_timezone_name
22
22
from django .utils .translation import gettext as _
23
23
24
- from appointment .forms import AppointmentForm , AppointmentRequestForm
24
+ from appointment .forms import AppointmentForm , AppointmentRequestForm , SlotForm
25
25
from appointment .logger_config import logger
26
26
from appointment .models import (
27
27
Appointment , AppointmentRequest , AppointmentRescheduleHistory , Config , DayOff , EmailVerificationCode ,
@@ -57,28 +57,23 @@ def get_available_slots_ajax(request):
57
57
:param request: The request instance.
58
58
:return: A JSON response containing available slots, selected date, an error flag, and an optional error message.
59
59
"""
60
- selected_date = convert_str_to_date (request .GET .get ('selected_date' ))
61
- staff_id = request .GET .get ('staff_id' )
62
60
63
- if selected_date < date .today ():
61
+ slot_form = SlotForm (request .GET )
62
+ if not slot_form .is_valid ():
64
63
custom_data = {'error' : True , 'available_slots' : [], 'date_chosen' : '' }
65
- message = _ ('Date is in the past' )
64
+ if 'selected_date' in slot_form .errors :
65
+ error_code = ErrorCode .PAST_DATE
66
+ elif 'staff_member' in slot_form .errors :
67
+ error_code = ErrorCode .STAFF_ID_REQUIRED
68
+ message = list (slot_form .errors .as_data ().items ())[0 ][1 ][0 ].messages [0 ] # dirty way to keep existing behavior
66
69
return json_response (message = message , custom_data = custom_data , success = False ,
67
- error_code = ErrorCode . PAST_DATE )
70
+ error_code = error_code )
68
71
72
+ selected_date = slot_form .cleaned_data ['selected_date' ]
73
+ sm = slot_form .cleaned_data ['staff_member' ]
69
74
date_chosen = selected_date .strftime ("%a, %B %d, %Y" )
70
75
custom_data = {'date_chosen' : date_chosen }
71
76
72
- # If no staff_id provided, return an empty list of slots
73
- if not staff_id or staff_id == 'none' :
74
- custom_data ['available_slots' ] = []
75
- custom_data ['error' ] = False
76
- message = _ ('No staff member selected' )
77
- return json_response (message = message , custom_data = custom_data , success = False ,
78
- error_code = ErrorCode .STAFF_ID_REQUIRED , status = 403 )
79
-
80
- sm = get_object_or_404 (StaffMember , pk = staff_id )
81
- custom_data ['staff_member' ] = sm .get_staff_member_name ()
82
77
days_off_exist = check_day_off_for_staff (staff_member = sm , date = selected_date )
83
78
if days_off_exist :
84
79
message = _ ("Day off. Please select another date!" )
@@ -87,6 +82,8 @@ def get_available_slots_ajax(request):
87
82
# if selected_date is not a working day for the staff, return an empty list of slots and 'message' is Day Off
88
83
weekday_num = get_weekday_num_from_date (selected_date )
89
84
is_working_day_ = is_working_day (staff_member = sm , day = weekday_num )
85
+
86
+ custom_data ['staff_member' ] = sm .get_staff_member_name ()
90
87
if not is_working_day_ :
91
88
message = _ ("Not a working day for {staff_member}. Please select another date!" ).format (
92
89
staff_member = sm .get_staff_member_first_name ())
@@ -108,6 +105,7 @@ def get_available_slots_ajax(request):
108
105
return json_response (message = 'Successfully retrieved available slots' , custom_data = custom_data , success = True )
109
106
110
107
108
+ # TODO: service id and staff id are not checked
111
109
@require_ajax
112
110
def get_next_available_date_ajax (request , service_id ):
113
111
"""This view function handles AJAX requests to get the next available date for a service.
0 commit comments