blob: 1482c511d43efd9c055d52731511f1b8de3fb8c0 [file] [log] [blame]
pranav nachnekar27910542019-09-03 12:04:52 +05301
2frappe.ready(() => {
3 initialise_select_date()
4})
5var holiday_list = [];
6
7function 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
24async 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
54function 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
62async 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
106function 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
119function 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
130function 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
137function 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}