Last active
October 23, 2017 20:02
-
-
Save Pho3nix/f27d856ceedd83d23727659883b91be5 to your computer and use it in GitHub Desktop.
Added Vacation Reporter
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
var teamMembers = ['Christian Strunk','Kirill Khaidukov']; | |
var googleCalendar = google.calendarWhosOut; | |
var slackInputHook = slack.inputHook.sam; | |
function sendVacationReportForTomorrow() { | |
var url = slackInputHook; | |
var payload = { | |
"text" : todayReport(),// <-- required parameter | |
"mrkdwn": true, | |
} | |
sendToSlack_(url,payload) | |
} | |
function todayReport() { | |
var date = new Date(); | |
var muha = fetchCalendarEventsForMembers(teamMembers,date); | |
return Utilities.formatString("*%s:*\n%s",formatDateToHuman(muha.date),formatterWhosOutArray(muha.whosout)); | |
} | |
function formatterWhosOutArray(array) { | |
text = ''; | |
separator = '\n'; | |
for(var i=0; i < array.length; i++) { | |
var whosout = array[i]; | |
text = text + formatterWhosOut(whosout) + separator; | |
} | |
return text; | |
} | |
/* | |
* formatterWhosOut | |
* whosout: {member:string,type:string} | |
* returning string | |
*/ | |
function formatterWhosOut(whosout) { | |
return Utilities.formatString("• _%s_: *%s*", whosout.member,whosout.type); | |
} | |
function formatterDate(date) { | |
return Utilities.formatDate(date, "GMT+2", "E dd/MM/yyyy"); | |
} | |
function formatDateToHuman(date) { | |
var dateDate = date.getDate(); | |
var today = new Date().getDate(); | |
var tomorrow = new Date().setDate(today + 1); | |
if(dateDate == today) { | |
return 'Today'; | |
} else if(dateDate == tomorrow) { | |
return 'Tomorrow'; | |
} | |
return formatterDate(date); | |
} | |
function getWhosOutCalendar() { | |
return CalendarApp.getCalendarById(google.calendarWhosOut); | |
} | |
function fetchCalendarEventsForMembersAndDates(members,startDate,endDate) { | |
var days = dayDiv(startDate,endDate); | |
return fetchCalendarEventsForMembersAndDateAndAmountOfDays(members,startDate,days); | |
} | |
function fetchCalendarEventsForMembersAndDateAndAmountOfDays(members,startDate,amountOfDays) { | |
var array = []; | |
for(var i=0; i<amountOfDays; i++) { | |
var currentDate = new Date(); | |
currentDate.setDate(currentDate.getDate() + i); | |
array.push(fetchCalendarEventsForMembers(members,currentDate)); | |
} | |
return array; | |
} | |
function fetchCalendarEventsForMembers(members,date) { | |
var events = fetchCalendarEvents(date); | |
var filteredToRelevantEvents = filterToRelevantTeamMembers(events,members); | |
return {date:date, whosout: filteredToRelevantEvents}; | |
} | |
function fetchCalendarEvents(date) { | |
var returnEvents = [] | |
var calendar = getWhosOutCalendar() | |
var events = calendar.getEventsForDay(date); | |
for(j = 0; j < events.length; j++) { | |
var event = events[j] | |
returnEvents.push(event); | |
} | |
return returnEvents; | |
} | |
function filterToRelevantTeamMembers(events,members) { | |
var membersHasEvent = []; | |
for(e = 0; e < events.length; e++) { | |
event = events[e]; | |
for(m = 0; m < members.length; m++) { | |
member = members[m]; | |
var regex = new RegExp(member,'g'); | |
var title = event.getTitle() | |
if(title.match(regex)) { | |
if(title.match(new RegExp('.*Home Office.*','g'))) { | |
membersHasEvent.push({'member': member,'type': 'HomeOffice'}); | |
} else { | |
membersHasEvent.push({'member': member,'type': 'Vacation'}); | |
} | |
} | |
} | |
} | |
return membersHasEvent; | |
} | |
function dayDiv(startDate,endDate) { | |
return Math.round((startDate-endDate)/(1000*60*60*24)); | |
} | |
function sendToSlack_(url,payload) { | |
var options = { | |
"method" : "post", | |
"contentType" : "application/json", | |
"payload" : JSON.stringify(payload) | |
}; | |
return UrlFetchApp.fetch(url, options) | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment