diff --git a/erpnext/crm/doctype/appointment_booking_settings/appointment_booking_settings.py b/erpnext/crm/doctype/appointment_booking_settings/appointment_booking_settings.py index 6a1cf56cb76..ef762ff0259 100644 --- a/erpnext/crm/doctype/appointment_booking_settings/appointment_booking_settings.py +++ b/erpnext/crm/doctype/appointment_booking_settings/appointment_booking_settings.py @@ -8,22 +8,31 @@ from frappe import _ import datetime from frappe.model.document import Document + class AppointmentBookingSettings(Document): - def validate(self): - # Day of week should not be repeated - list_of_days = [] - date = '01/01/1970 ' - format_string = "%d/%m/%Y %H:%M:%S" + min_date = '01/01/1970 ' + format_string = "%d/%m/%Y %H:%M:%S" - for record in self.availability_of_slots: - list_of_days.append(record.day_of_week) - # Difference between from_time and to_time is multiple of appointment_duration - from_time = datetime.datetime.strptime(date+record.from_time, format_string) - to_time = datetime.datetime.strptime(date+record.to_time, format_string) - timedelta = to_time-from_time + def validate(self): + self.validate_availability_of_slots() - if(from_time > to_time): - frappe.throw('From Time cannot be later than To Time for '+record.day_of_week) - - if timedelta.total_seconds() % (self.appointment_duration * 60): - frappe.throw('The difference between from time and To Time must be a multiple of Appointment ') \ No newline at end of file + def validate_availability_of_slots(self): + for record in self.availability_of_slots: + from_time = datetime.datetime.strptime( + min_date+record.from_time, format_string) + to_time = datetime.datetime.strptime( + min_date+record.to_time, format_string) + timedelta = to_time-from_time + self.from_time_is_later_than_to_time(from_time, to_time) + self.duration_is_divisible(from_time, to_time) + + def from_time_is_later_than_to_time(self, from_time, to_time): + if from_time > to_time: + err_msg = 'From Time cannot be later than To Time for '+record.day_of_week + frappe.throw(_(err_msg)) + + def duration_is_divisible(self, from_time, to_time): + timedelta = to_time - from_time + if timedelta.total_seconds() % (self.appointment_duration * 60): + frappe.throw( + _('The difference between from time and To Time must be a multiple of Appointmen'))