Skip to content

Instantly share code, notes, and snippets.

@Pho3nix
Last active October 23, 2017 20:02
Show Gist options
  • Save Pho3nix/f27d856ceedd83d23727659883b91be5 to your computer and use it in GitHub Desktop.
Save Pho3nix/f27d856ceedd83d23727659883b91be5 to your computer and use it in GitHub Desktop.
Added Vacation Reporter
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