pranav nachnekar | 2791054 | 2019-09-03 12:04:52 +0530 | [diff] [blame] | 1 | |
| 2 | frappe.ready(() => { |
| 3 | initialise_select_date() |
| 4 | }) |
| 5 | var holiday_list = []; |
| 6 | |
| 7 | function navigator(page_no) { |
| 8 | let select_date_div = document.getElementById('select-date'); |
| 9 | select_date_div.style.display = 'none'; |
| 10 | let select_time_div = document.getElementById('select-time'); |
| 11 | select_time_div.style.display = 'none'; |
| 12 | let contact_details_div = document.getElementById('enter-details'); |
| 13 | contact_details_div.style.display = 'none'; |
| 14 | let page; |
| 15 | switch (page_no) { |
| 16 | case 1: page = select_date_div; break; |
| 17 | case 2: page = select_time_div; break; |
| 18 | case 3: page = contact_details_div; break; |
| 19 | } |
| 20 | page.style.display = 'block' |
| 21 | } |
| 22 | |
| 23 | // Page 1 |
| 24 | async function initialise_select_date() { |
| 25 | navigator(1); |
| 26 | let timezones, settings; |
| 27 | settings = (await frappe.call({ |
| 28 | method: 'erpnext.www.book-appointment.index.get_appointment_settings' |
| 29 | })).message |
| 30 | timezones = (await frappe.call({ |
| 31 | method: 'erpnext.www.book-appointment.index.get_timezones' |
| 32 | })).message; |
| 33 | holiday_list = (await frappe.call({ |
| 34 | method: 'erpnext.www.book-appointment.index.get_holiday_list', |
| 35 | args: { |
| 36 | 'holiday_list_name': settings.holiday_list |
| 37 | } |
| 38 | })).message; |
| 39 | let date_picker = document.getElementById('appointment-date'); |
| 40 | date_picker.max = holiday_list.to_date; |
| 41 | date_picker.min = holiday_list.from_date; |
| 42 | date_picker.value = (new Date()).toISOString().substr(0, 10); |
| 43 | let timezones_element = document.getElementById('appointment-timezone'); |
| 44 | var offset = new Date().getTimezoneOffset(); |
| 45 | timezones.forEach(timezone => { |
| 46 | var opt = document.createElement('option'); |
| 47 | opt.value = timezone.offset; |
| 48 | opt.innerHTML = timezone.timezone_name; |
| 49 | opt.defaultSelected = (offset == timezone.offset) |
| 50 | timezones_element.appendChild(opt) |
| 51 | }); |
| 52 | } |
| 53 | |
| 54 | function validate_date() { |
| 55 | let date_picker = document.getElementById('appointment-date'); |
| 56 | if (date_picker.value === '') { |
| 57 | frappe.throw('Please select a date') |
| 58 | } |
| 59 | } |
| 60 | |
| 61 | // Page 2 |
| 62 | async function navigate_to_time_select() { |
| 63 | navigator(2); |
| 64 | timezone = document.getElementById('appointment-timezone').value |
| 65 | date = document.getElementById('appointment-date').value; |
| 66 | var date_spans = document.getElementsByClassName('date-span'); |
| 67 | for (var i = 0; i < date_spans.length; i++) date_spans[i].innerHTML = date; |
| 68 | // date_span.addEventListener('click',initialise_select_date) |
| 69 | // date_span.style.color = '#5e64ff'; |
| 70 | // date_span.style.textDecoration = 'underline'; |
| 71 | // date_span.style.cursor = 'pointer'; |
| 72 | var slots = (await frappe.call({ |
| 73 | method: 'erpnext.www.book-appointment.index.get_appointment_slots', |
| 74 | args: { |
| 75 | date: date, |
| 76 | timezone: timezone |
| 77 | } |
| 78 | })).message; |
| 79 | let timeslot_container = document.getElementById('timeslot-container'); |
| 80 | console.log(slots) |
| 81 | if (slots.length <= 0) { |
| 82 | let message_div = document.createElement('p'); |
| 83 | |
| 84 | message_div.innerHTML = "There are no slots available on this date"; |
| 85 | timeslot_container.appendChild(message_div); |
| 86 | } |
| 87 | for (let i = 0; i < slots.length; i++) { |
| 88 | const slot = slots[i]; |
| 89 | var timeslot_div = document.createElement('div'); |
| 90 | timeslot_div.classList.add('time-slot'); |
| 91 | timeslot_div.classList.add('col-md'); |
| 92 | if (!slot.availability) { |
| 93 | timeslot_div.classList.add('unavailable') |
| 94 | } |
| 95 | timeslot_div.innerHTML = slot.time.substr(11, 20); |
| 96 | timeslot_div.id = slot.time.substr(11, 20); |
| 97 | timeslot_container.appendChild(timeslot_div); |
| 98 | } |
| 99 | set_default_timeslot() |
| 100 | let time_slot_divs = document.getElementsByClassName('time-slot'); |
| 101 | for (var i = 0; i < time_slot_divs.length; i++) { |
| 102 | time_slot_divs[i].addEventListener('click', select_time); |
| 103 | } |
| 104 | } |
| 105 | |
| 106 | function select_time() { |
| 107 | if (this.classList.contains("unavailable")) { |
| 108 | return |
| 109 | } |
| 110 | try { |
| 111 | selected_element = document.getElementsByClassName('selected')[0] |
| 112 | } catch (e) { |
| 113 | this.classList.add("selected") |
| 114 | } |
| 115 | selected_element.classList.remove("selected"); |
| 116 | this.classList.add("selected"); |
| 117 | } |
| 118 | |
| 119 | function set_default_timeslot() { |
| 120 | let timeslots = document.getElementsByClassName('time-slot') |
| 121 | for (let i = 0; i < timeslots.length; i++) { |
| 122 | const timeslot = timeslots[i]; |
| 123 | if (!timeslot.classList.contains('unavailable')) { |
| 124 | timeslot.classList.add("selected"); |
| 125 | break; |
| 126 | } |
| 127 | } |
| 128 | } |
| 129 | |
| 130 | function initialise_enter_details() { |
| 131 | navigator(3); |
| 132 | let time_div = document.getElementsByClassName('selected')[0]; |
| 133 | let time_span = document.getElementsByClassName('time-span')[0]; |
| 134 | time_span.innerHTML = time_div.id |
| 135 | } |
| 136 | |
| 137 | function submit() { |
| 138 | var date = document.getElementById('appointment-date').value; |
| 139 | var time = document.getElementsByClassName('selected')[0].id; |
| 140 | contact = {}; |
| 141 | contact.name = document.getElementById('customer_name').value; |
| 142 | contact.number = document.getElementById('customer_number').value; |
| 143 | contact.skype = document.getElementById('customer_skype').value; |
| 144 | contact.notes = document.getElementById('customer_notes').value; |
| 145 | console.log({ date, time, contact }); |
| 146 | } |