-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathscheduleEvents.js
56 lines (49 loc) · 1.91 KB
/
scheduleEvents.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
function scheduleEvents(userSlotPairs, startDate, startTime, endTime) {
const slots = getDateTimeSlots(userSlotPairs.length, startDate, startTime, endTime);
for (let i = 0, slot = 0; i < userSlotPairs.length; i++, slot++) {
for (let j = 0; j < userSlotPairs[i].length; j++) {
if (!hasDummyUser(userSlotPairs[i][j])) {
createCalendarEvent(
userSlotPairs[i][j][0], userSlotPairs[i][j][1],
slots[slot].startDateTimeObj.toISOString(), slots[slot].endDateTimeObj.toISOString()
);
}
}
}
}
function getDateTimeSlots(slotCount, startDate, startTime, endTime) {
const dateTimeSlots = [];
startDate = dateTimeBuilder(startDate);
if (isWeekend(startDate)) {
startDate = getNextWorkingDay(startDate);
}
for (let slot = 0; slot < slotCount;) {
for (let itr = 0; itr < startTime.length && slot < slotCount; itr++, slot++) {
let startDateTimeObj = dateTimeBuilder(startDate, startTime[itr]);
let endDateTimeObj = dateTimeBuilder(startDate, endTime[itr]);
dateTimeSlots.push({startDateTimeObj, endDateTimeObj});
}
startDate = getNextWorkingDay(startDate);
}
return dateTimeSlots;
}
function dateTimeBuilder(date, time = null) {
const dateTimeObj = new Date(date);
if(time) {
const splitTime = time.split(':');
dateTimeObj.setHours(splitTime[0], splitTime[1], 0);
}
return dateTimeObj;
}
function getNextWorkingDay(date) {
date.setDate(date.getDate() + 1);
if (date.getDay() === 6) date.setDate(date.getDate() + 2);
if (date.getDay() === 0) date.setDate(date.getDate() + 1);
return date;
}
function isWeekend(date) {
return date.getDay() === 0 || date.getDay() === 6;
}
function hasDummyUser(pairs) {
return pairs.includes(PropertiesService.getUserProperties().getProperty('DUMMY_USER'));
}