-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathSheets2Calendar.gs
85 lines (71 loc) · 3.09 KB
/
Sheets2Calendar.gs
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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
const calendarId = "integrate ID, ending in @group.calendar.google.com";
const dataRange = "A2:I176";
var lineBreak = "\r\n";
var PlaceholderFutureDate = new Date("2026"); // Lmao there is no method to get everything after x
function onOpen() {
SpreadsheetApp.getUi().createMenu('Calendar')
.addItem('Push Upcoming Shifts to Calendar', "addEventsToCalendar")
.addToUi();
}
function deleteAutoCreatedEvents(StartDate) {
var eventCal = CalendarApp.getCalendarById(calendarId);
var events = eventCal.getEvents(StartDate, PlaceholderFutureDate);
var removecount = 0;
for (var i = 0; i < events.length; i++) {
var ev = events[i];
var title = ev.getTitle();
var starttime = ev.getStartTime();
var endtime = ev.getEndTime();
ev.deleteEvent();
var removecount = removecount + 1
Logger.log(`Deleted ${title}${lineBreak}from ${starttime}${lineBreak}to ${endtime}`);
}
return removecount
}
function parseTimeslot(rawinput) {
let [rawtime, period] = rawinput.split(/(AM|PM)/i);
let [hour, minutes] = rawtime.trim().split(":").map(Number);
if (minutes == null){
minutes = 0
}
if (period.toUpperCase() === "PM" && Number(hour) !== 12) {
hour = Number(hour) + 12;
} else if (period.toUpperCase() === "AM" && Number(hour) === 12) {
hour = 0;
}
return [hour,minutes]
}
function addEventsToCalendar(StartDate = new Date(new Date().toDateString())) {
var events = SpreadsheetApp.getActiveSheet().getRange(dataRange).getValues().filter(function(r) {
return r.join("").length > 0;
});
var removecount = deleteAutoCreatedEvents(StartDate);
Logger.log(`---------- deleteAutoCreatedEvents() ran successfully ----------`);
var addcount = 0
for (var event of events) {
var date = event[1];
var timeslot = event[3];
var worklocation = event[4];
var locationtype = event[6];
var shifthours = event[7];
var totalpay = event[8];
if (timeslot !== 'OFF' && date >= StartDate) {
var times = timeslot.split(" - ");
let [startHour, startMinute] = parseTimeslot(times[0]);
let [endHour, endMinute] = parseTimeslot(times[1]);
var startDateTime = new Date(date.setHours(startHour,startMinute));
var endDateTime = new Date(date.setHours(endHour,endMinute));
CalendarApp.getCalendarById(calendarId).createEvent(`work @ ${worklocation}`,
startDateTime,endDateTime,
{ description: `${shifthours}h shift${lineBreak}$${totalpay} Total Pay`,
location: `${locationtype}`});
Logger.log(`Added work @ ${worklocation}${lineBreak}from ${startDateTime}${lineBreak}to ${endDateTime}`);
var addcount = addcount + 1
};
}
SpreadsheetApp.getActive().toast(`${addcount} added, ${removecount} removed`, `✅ Shifts pushed to calendar`, 15);
Logger.log(`${addcount} added, ${removecount} removed`)
}
function CycleALL() {
addEventsToCalendar(new Date("2022"));
}