-
Notifications
You must be signed in to change notification settings - Fork 0
/
reminder.gs
152 lines (137 loc) · 4.43 KB
/
reminder.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
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
var sheetName = "reminder"
var myEmail = Session.getActiveUser().getEmail()
var remindMeAt = 8
var remindMeAtSecond = 8 * 60 * 60
var prefixEventName = "[automated reminder]"
var currentDate = new Date();
currentDate.setSeconds(0)
currentDate.setMinutes(0)
currentDate.setHours(0)
var tomorrow = new Date(currentDate);
tomorrow.setHours(24)
function main() {
var sheetData = fetchReminderData()
var currentEvent = getCalendarEvent(function (){
var dates = []
var datesExist = {}
sheetData.forEach(function(unFinished){
if (datesExist[unFinished.date] === undefined) {
dates.push(new Date(unFinished.date))
datesExist[unFinished.date] = true
}
})
return dates
}())
var decision = matchingExistingCalendar(sheetData, currentEvent)
deleteEvent(decision.deleting)
generateEvent(decision.creating)
}
function matchingExistingCalendar(sheetData, currentEvent) {
var deleting = []
var sheetDataMap = {}
var currentEventMap = {}
sheetData.forEach(function(item) {
var month = parseInt(item.date.getMonth()) + 1
var date = item.date.getFullYear() + "-" + month + "-" + item.date.getDate()
var key = item.name+"-"+date
sheetDataMap[prefixEventName + " " + key] = item
})
currentEvent.forEach(function(item) {
var month = parseInt(item.date.getMonth()) + 1
var date = item.date.getFullYear() + "-" + month + "-" + item.date.getDate()
key = item.name+"-"+date
currentEventMap[key] = item
})
currentEvent.forEach(function(item) {
var month = parseInt(item.date.getMonth())+1
var onlyDate = item.date.getFullYear() + "-" + month + "-" + item.date.getDate()
var nextDay = new Date()
nextDay.setSeconds(60*60*24)
var nextMonth = parseInt(nextDay.getMonth())+1
var nextOnlyDate = nextDay.getFullYear() + "-" + nextMonth + "-" + nextDay.getDate()
key = item.name+"-"+onlyDate
key2 = item.name+"-"+nextOnlyDate
if (sheetDataMap[key] === undefined && sheetDataMap[key2] === undefined) {
deleting.push(item.id)
console.log("deleting : ", item)
delete sheetDataMap[key]
delete sheetDataMap[key2]
}
})
return {
deleting: deleting,
creating: function() {
var result = []
for (v in sheetDataMap) {
if (currentEventMap[v] === undefined) {
result.push(sheetDataMap[v])
}
}
return result
}(),
}
}
function compareDateGreaterEqual(a,b) {
return a>=b
}
function deleteEvent(ids) {
ids.forEach(function(id){
var event = CalendarApp.getDefaultCalendar().getEventById(id)
event.deleteEvent()
console.log("delete event: ", event.getTitle(), event.getStartTime())
})
}
function generateEvent(reminderData) {
reminderData.forEach(function(event) {
monthEta = event.eta.getMonth() + 1
var eta = event.eta.getFullYear() + "/" + monthEta + "/" + event.eta.getDate()
var date = event.date
date.setHours(remindMeAt)
var event = CalendarApp.getDefaultCalendar().createEvent(title= prefixEventName +" "+ event.name, startTime= event.date, endTime= event.date, {
description: event.desc + "\nETA: "+eta,
guests: event.guests,
})
console.log("Event Created: "+ event.getTitle() + " " +CalendarApp.getDefaultCalendar().getEventById(event.getId()).getStartTime())
})
}
function getCalendarEvent(dates) {
var myReminder = []
dates.forEach(function(date){
var untilDate = new Date(date)
untilDate.setSeconds((24*60*60)-1)
var events = CalendarApp.getDefaultCalendar().getEventsForDay(date)
events.forEach(function(e) {
if (e.getTitle().includes(prefixEventName) && e.getCreators() == myEmail) {
myReminder.push({
id: e.getId(),
name: e.getTitle(),
desc: e.getDescription(),
guests: e.getGuestList(),
date: e.getStartTime(),
})
}
})
})
return myReminder
}
function fetchReminderData() {
var reminderRaws = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(sheetName).getDataRange().getValues();
var unFinished = [];
reminderRaws.forEach(function(item){
if (item[0].trim() != "" && item[4] == false) {
var nowDate = new Date(item[2])
if (compareDateGreaterEqual(currentDate, item[2])) {
nowDate = tomorrow
}
unFinished.push({
name: item[0].trim(),
desc: item[1],
date: nowDate,
eta: item[2],
guests: item[3],
notes: item[5]
})
}
})
return unFinished
}