| |
| frappe.ready(() => { |
| initialise_select_date() |
| }) |
| var holiday_list = []; |
| |
| function navigator(page_no) { |
| let select_date_div = document.getElementById('select-date'); |
| select_date_div.style.display = 'none'; |
| let select_time_div = document.getElementById('select-time'); |
| select_time_div.style.display = 'none'; |
| let contact_details_div = document.getElementById('enter-details'); |
| contact_details_div.style.display = 'none'; |
| let page; |
| switch (page_no) { |
| case 1: page = select_date_div; break; |
| case 2: page = select_time_div; break; |
| case 3: page = contact_details_div; break; |
| } |
| page.style.display = 'block' |
| } |
| |
| // Page 1 |
| async function initialise_select_date() { |
| navigator(1); |
| let timezones, settings; |
| settings = (await frappe.call({ |
| method: 'erpnext.www.book-appointment.index.get_appointment_settings' |
| })).message |
| timezones = (await frappe.call({ |
| method: 'erpnext.www.book-appointment.index.get_timezones' |
| })).message; |
| holiday_list = (await frappe.call({ |
| method: 'erpnext.www.book-appointment.index.get_holiday_list', |
| args: { |
| 'holiday_list_name': settings.holiday_list |
| } |
| })).message; |
| let date_picker = document.getElementById('appointment-date'); |
| date_picker.max = holiday_list.to_date; |
| date_picker.min = holiday_list.from_date; |
| date_picker.value = (new Date()).toISOString().substr(0, 10); |
| let timezones_element = document.getElementById('appointment-timezone'); |
| var offset = new Date().getTimezoneOffset(); |
| timezones.forEach(timezone => { |
| var opt = document.createElement('option'); |
| opt.value = timezone.offset; |
| opt.innerHTML = timezone.timezone_name; |
| opt.defaultSelected = (offset == timezone.offset) |
| timezones_element.appendChild(opt) |
| }); |
| } |
| |
| function validate_date() { |
| let date_picker = document.getElementById('appointment-date'); |
| if (date_picker.value === '') { |
| frappe.throw('Please select a date') |
| } |
| } |
| |
| // Page 2 |
| async function navigate_to_time_select() { |
| navigator(2); |
| timezone = document.getElementById('appointment-timezone').value |
| date = document.getElementById('appointment-date').value; |
| var date_spans = document.getElementsByClassName('date-span'); |
| for (var i = 0; i < date_spans.length; i++) date_spans[i].innerHTML = date; |
| // date_span.addEventListener('click',initialise_select_date) |
| // date_span.style.color = '#5e64ff'; |
| // date_span.style.textDecoration = 'underline'; |
| // date_span.style.cursor = 'pointer'; |
| var slots = (await frappe.call({ |
| method: 'erpnext.www.book-appointment.index.get_appointment_slots', |
| args: { |
| date: date, |
| timezone: timezone |
| } |
| })).message; |
| let timeslot_container = document.getElementById('timeslot-container'); |
| console.log(slots) |
| if (slots.length <= 0) { |
| let message_div = document.createElement('p'); |
| |
| message_div.innerHTML = "There are no slots available on this date"; |
| timeslot_container.appendChild(message_div); |
| } |
| for (let i = 0; i < slots.length; i++) { |
| const slot = slots[i]; |
| var timeslot_div = document.createElement('div'); |
| timeslot_div.classList.add('time-slot'); |
| timeslot_div.classList.add('col-md'); |
| if (!slot.availability) { |
| timeslot_div.classList.add('unavailable') |
| } |
| timeslot_div.innerHTML = slot.time.substr(11, 20); |
| timeslot_div.id = slot.time.substr(11, 20); |
| timeslot_container.appendChild(timeslot_div); |
| } |
| set_default_timeslot() |
| let time_slot_divs = document.getElementsByClassName('time-slot'); |
| for (var i = 0; i < time_slot_divs.length; i++) { |
| time_slot_divs[i].addEventListener('click', select_time); |
| } |
| } |
| |
| function select_time() { |
| if (this.classList.contains("unavailable")) { |
| return |
| } |
| try { |
| selected_element = document.getElementsByClassName('selected')[0] |
| } catch (e) { |
| this.classList.add("selected") |
| } |
| selected_element.classList.remove("selected"); |
| this.classList.add("selected"); |
| } |
| |
| function set_default_timeslot() { |
| let timeslots = document.getElementsByClassName('time-slot') |
| for (let i = 0; i < timeslots.length; i++) { |
| const timeslot = timeslots[i]; |
| if (!timeslot.classList.contains('unavailable')) { |
| timeslot.classList.add("selected"); |
| break; |
| } |
| } |
| } |
| |
| function initialise_enter_details() { |
| navigator(3); |
| let time_div = document.getElementsByClassName('selected')[0]; |
| let time_span = document.getElementsByClassName('time-span')[0]; |
| time_span.innerHTML = time_div.id |
| } |
| |
| async function submit() { |
| var date = document.getElementById('appointment-date').value; |
| var time = document.getElementsByClassName('selected')[0].id; |
| contact = {}; |
| contact.name = document.getElementById('customer_name').value; |
| contact.number = document.getElementById('customer_number').value; |
| contact.skype = document.getElementById('customer_skype').value; |
| contact.notes = document.getElementById('customer_notes').value; |
| console.log({ date, time, contact }); |
| let abc = (await frappe.call({ |
| method: 'erpnext.www.book-appointment.index.create_appointment', |
| args: { |
| 'date': date, |
| 'time': time, |
| 'contact': contact |
| } |
| })).message; |
| console.log(abc) |
| } |