Last active
October 18, 2017 08:06
-
-
Save Pho3nix/624f6cadff0faf5049c779486570025c to your computer and use it in GitHub Desktop.
Fixed issue
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
function getURL(debug) { | |
if(!debug) | |
//#team-playmobile channel | |
return slack.inputHook.teamplaymobile; | |
else { | |
//#Me Slackbot | |
return slack.inputHook.sam; | |
} | |
} | |
var tomorrow = new Date(); | |
tomorrow.setDate(tomorrow.getDate() + 1); | |
function reportTomorrow() { | |
var date = tomorrow; | |
return getTeamMemberVacationStatus(date,1); | |
} | |
function reportToday() { | |
var date = new Date(); | |
return getTeamMemberVacationStatus(date,1); | |
} | |
function getTeamMemberVacationStatus(date,forecast) { | |
var members = fetchTeamMembersWithA1Notation(); | |
var dates = getDatesAndValuesOfVacationSheetWithA1Notation(date,forecast); | |
var text = ''; | |
for(i = 0; i < dates.dates.length; i++) { | |
var dateSheet = dates.dates[i]; | |
var map = dates.mapping[dateSheet]; | |
dateEntries = ''; | |
for(j = 0; j < members.members.length; j++) { | |
var member = members.members[j]; | |
var value = map.values[j] | |
if(value) { | |
dateEntries += '• _' + member + '_: *' + value + '*\n'; | |
} | |
} | |
if(dateEntries != '' && forecast > 1) { | |
text += Utilities.formatDate(dateSheet, "GMT+2", "E dd/MM/yyyy") + ':\n'+ dateEntries; | |
} else if(dateEntries != '' && forecast === 1 && datesDaysEqual(date,new Date())) { | |
text += 'Today:\n'+ dateEntries; | |
} else if(dateEntries != '' && forecast === 1 && datesDaysEqual(tomorrow,date)) { | |
text += 'Tomorrow:\n'+ dateEntries; | |
} | |
} | |
return text; | |
} | |
function datesDaysEqual(date1,date2) { | |
var date1String = Utilities.formatDate(date1, "GMT+2","dd/MM/yyyy") | |
var date2String = Utilities.formatDate(date2, "GMT+2","dd/MM/yyyy") | |
return date1String == date2String; | |
} | |
function sendVacationReportForTomorrow() { | |
var url = getURL(false); | |
var payload = { | |
"text" : reportTomorrow(),// <-- required parameter | |
"mrkdwn": true, | |
} | |
sendToSlack_(url,payload) | |
} | |
function sendVacationReportForTodayAndTomorrow() { | |
var url = getURL(false); | |
var today = reportToday(); | |
var tomorrow = reportTomorrow(); | |
if(today + tomorrow == '') { | |
return; | |
} | |
var payload = { | |
"text" : today+'\n'+tomorrow, | |
"mrkdwn": true, | |
} | |
sendToSlack_(url,payload) | |
} | |
function sendToSlack_(url,payload) { | |
var options = { | |
"method" : "post", | |
"contentType" : "application/json", | |
"payload" : JSON.stringify(payload) | |
}; | |
return UrlFetchApp.fetch(url, options) | |
} | |
function getDatesAndValuesOfVacationSheetWithA1Notation(startDate,howManyDays) { | |
var sheet = getVacationFirstSheet(); | |
var lastRow = sheet.getLastRow(); | |
var lastColumn = sheet.getLastColumn(); | |
var newDates = []; | |
var mapping = {}; | |
for(i = 0; i < lastRow-3; i++) { | |
range = sheet.getRange(3+i,1,1); | |
if(!(range.getValue().getDate().valueOf() < startDate.getDate().valueOf())) { | |
rangeValues = sheet.getRange(3+i,3,1,lastColumn-3); | |
mapping[range.getValue()] = {'notation': range.getA1Notation().slice( 1 ),'values': rangeValues.getValues()[0]}; | |
newDates.push(range.getValue()); | |
} | |
if(newDates.length >= howManyDays) { | |
break; | |
} | |
} | |
return {dates:newDates, mapping:mapping}; | |
} |
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
function getSpreadsheet() { | |
return SpreadsheetApp.openById(google.spreadsheet); | |
} | |
function getWhosOutCalendar() { | |
return CalendarApp.getCalendarById(google.calendarWhosOut); | |
} | |
function getVacationFirstSheet() { | |
var ss = getSpreadsheet(); | |
var sheet = ss.getSheetByName('Vacations'); | |
return sheet; | |
} | |
function listAllCalendars() { | |
var calendars = CalendarApp.getAllCalendars(); | |
for(i = 0; i < calendars.length; i++) { | |
var calendar = calendars[i] | |
Logger.log('Found %s with ID: %s',calendar.getName(),calendar.getId()) | |
} | |
} | |
function updateVacationPlan() { | |
var vacationsA1 = getA1NotationsOfVacations(); | |
var sheet = getVacationFirstSheet(); | |
for(i = 0; i < vacationsA1.length; i++) { | |
var vac = vacationsA1[i]; | |
var cell = sheet.getRange(vac); | |
if(cell.getValue() != 'Sick') { | |
cell.setValue('Vacation'); | |
} | |
} | |
} | |
function getA1NotationsOfVacations() { | |
var dates = getDatesOfVacationSheetWithA1Notation(); | |
var members = fetchTeamMembersWithA1Notation(); | |
var A1NotVacations = []; | |
for(i = 0; i < dates.dates.length; i++) { | |
var date = dates.dates[i]; | |
var events = fetchCalendarEvents(date); | |
var membersOnVacation = filterToRelevantTeamMembers(events,members.members); | |
var rowMap = dates.mapping[date]; | |
for(j = 0; j < membersOnVacation.length; j++) { | |
var member = membersOnVacation[j]; | |
var colMap = members.mapping[member]; | |
A1NotVacations.push(colMap+rowMap); | |
} | |
} | |
return A1NotVacations; | |
} | |
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 getDatesOfVacationSheetWithA1Notation() { | |
var sheet = getVacationFirstSheet(); | |
var lastRow = sheet.getLastRow(); | |
var lastColumn = sheet.getLastColumn(); | |
var newDates = []; | |
var mapping = {}; | |
for(i = 0; i < lastRow-3; i++) { | |
range = sheet.getRange(3+i,1,1); | |
mapping[range.getValue()] = range.getA1Notation().slice( 1 ); | |
newDates.push(range.getValue()); | |
} | |
return {dates:newDates, mapping:mapping}; | |
} | |
function fetchTeamMembersWithA1Notation() { | |
var sheet = getVacationFirstSheet(); | |
var lastColumn = sheet.getLastColumn(); | |
var range = sheet.getRange(2, 3,1,lastColumn-3); | |
var members = range.getValues()[0]; | |
var mapping = {}; | |
for(i = 0; i < lastColumn-3; i++) { | |
range = sheet.getRange(2,3+i,1,1); | |
mapping[range.getValue()] = range.getA1Notation()[0]; | |
} | |
return {members: members,mapping: mapping}; | |
} | |
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'); | |
if(event.getTitle().match(regex)) { | |
membersHasEvent.push(member) | |
} | |
} | |
} | |
return membersHasEvent; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment