From e494144c965a314b77cbdd1a67e7436daa16a4f4 Mon Sep 17 00:00:00 2001 From: 0Pranav Date: Thu, 31 Oct 2019 15:38:39 +0530 Subject: [PATCH] merge settings fetch, add helpers --- erpnext/www/book-appointment/index.py | 66 ++++++++++++++------------- 1 file changed, 34 insertions(+), 32 deletions(-) diff --git a/erpnext/www/book-appointment/index.py b/erpnext/www/book-appointment/index.py index 6f416d1b2b..eb7d5b918b 100644 --- a/erpnext/www/book-appointment/index.py +++ b/erpnext/www/book-appointment/index.py @@ -18,47 +18,31 @@ def get_context(context): else: raise frappe.DoesNotExistError - @frappe.whitelist(allow_guest=True) def get_appointment_settings(): settings = frappe.get_doc('Appointment Booking Settings') + settings.holiday_list = frappe.get_doc('Holiday List', settings.holiday_list) return settings - -@frappe.whitelist(allow_guest=True) -def is_enabled(): - enable_scheduling = frappe.db.get_single_value( - 'Appointment Booking Settings', 'enable_scheduling') - return enable_scheduling - - -@frappe.whitelist(allow_guest=True) -def get_holiday_list(holiday_list_name): - holiday_list = frappe.get_doc('Holiday List', holiday_list_name) - return holiday_list - - @frappe.whitelist(allow_guest=True) def get_timezones(): return pytz.all_timezones - @frappe.whitelist(allow_guest=True) def get_appointment_slots(date, timezone): import pytz guest_timezone = pytz.timezone(timezone) + local_timezone = pytz.timezone(frappe.utils.get_time_zone()) format_string = '%Y-%m-%d %H:%M:%S' query_start_time = datetime.datetime.strptime( date + ' 00:00:00', format_string) query_end_time = datetime.datetime.strptime( date + ' 23:59:59', format_string) - local_timezone = frappe.utils.get_time_zone() - local_timezone = pytz.timezone(local_timezone) - query_start_time = guest_timezone.localize(query_start_time) - query_end_time = guest_timezone.localize(query_end_time) - query_start_time = query_start_time.astimezone(local_timezone) - query_end_time = query_end_time.astimezone(local_timezone) - now = datetime.datetime.now() + + query_start_time = convert_to_system_timzone(timezone,query_start_time) + query_end_time = convert_to_system_timzone(timezone,query_end_time) + now = convert_to_guest_timezone(timezone,datetime.datetime.now()) + # Database queries settings = frappe.get_doc('Appointment Booking Settings') holiday_list = frappe.get_doc('Holiday List', settings.holiday_list) @@ -68,9 +52,9 @@ def get_appointment_slots(date, timezone): # Filter timeslots based on date converted_timeslots = [] for timeslot in timeslots: - timeslot = local_timezone.localize(timeslot) - timeslot = timeslot.astimezone(guest_timezone) - timeslot = timeslot.replace(tzinfo=None) + print("Unconverted Timeslot:{0}".format(timeslot)) + timeslot = convert_to_guest_timezone(timezone,timeslot) + print("Converted Timeslot:{0}".format(timeslot)) # Check if holiday if _is_holiday(timeslot.date(), holiday_list): converted_timeslots.append( @@ -112,11 +96,16 @@ def get_available_slots_between(query_start_time, query_end_time, settings): @frappe.whitelist(allow_guest=True) -def create_appointment(date, time, contact): +def create_appointment(date, time, tz, contact): + import pytz appointment = frappe.new_doc('Appointment') - format_string = '%Y-%m-%d %H:%M:%S' - appointment.scheduled_time = datetime.datetime.strptime( + format_string = '%Y-%m-%d %H:%M:%S%z' + scheduled_time = datetime.datetime.strptime( date+" "+time, format_string) + scheduled_time = scheduled_time.replace(tzinfo=None) + scheduled_time = convert_to_system_timzone(tz,scheduled_time) + scheduled_time= scheduled_time.replace(tzinfo=None) + appointment.scheduled_time = scheduled_time contact = json.loads(contact) appointment.customer_name = contact['name'] appointment.customer_phone_number = contact['number'] @@ -126,7 +115,6 @@ def create_appointment(date, time, contact): appointment.status = 'Open' appointment.insert() - # Helper Functions def filter_timeslots(date, timeslots): filtered_timeslots = [] @@ -135,11 +123,25 @@ def filter_timeslots(date, timeslots): filtered_timeslots.append(timeslot) return filtered_timeslots +def convert_to_guest_timezone(guest_tz,datetimeobject): + import pytz + guest_tz = pytz.timezone(guest_tz) + local_timezone = pytz.timezone(frappe.utils.get_time_zone()) + datetimeobject = local_timezone.localize(datetimeobject) + datetimeobject = datetimeobject.astimezone(guest_tz) + return datetimeobject + +def convert_to_system_timzone(guest_tz,datetimeobject): + import pytz + guest_tz = pytz.timezone(guest_tz) + datetimeobject = guest_tz.localize(datetimeobject) + system_tz = pytz.timezone(frappe.utils.get_time_zone()) + datetimeobject = datetimeobject.astimezone(system_tz) + return datetimeobject def check_availabilty(timeslot, settings): return frappe.db.count('Appointment', {'scheduled_time': timeslot}) < settings.number_of_agents - def _is_holiday(date, holiday_list): for holiday in holiday_list.holidays: if holiday.holiday_date == date: @@ -162,4 +164,4 @@ def _deltatime_to_datetime(date, deltatime): def _datetime_to_deltatime(date_time): midnight = datetime.datetime.combine(date_time.date(), datetime.time.min) - return (date_time-midnight) + return (date_time-midnight) \ No newline at end of file