Skip to content

Instantly share code, notes, and snippets.

@Pho3nix
Last active October 18, 2017 08:06
Show Gist options
  • Save Pho3nix/624f6cadff0faf5049c779486570025c to your computer and use it in GitHub Desktop.
Save Pho3nix/624f6cadff0faf5049c779486570025c to your computer and use it in GitHub Desktop.
Fixed issue
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};
}
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