Skip to content

Instantly share code, notes, and snippets.

@arran4
Last active March 21, 2019 02:22
Show Gist options
  • Save arran4/9ce89b4c59df4bd7774f93a249ea8604 to your computer and use it in GitHub Desktop.
Save arran4/9ce89b4c59df4bd7774f93a249ea8604 to your computer and use it in GitHub Desktop.
function createTimesheet(id, date, m, tu, w, th, f, mode) {
if (id != "") {
return id;
}
var dateStr = Utilities.formatDate(date, "Australia/Melbourne", "yyyy-MM-dd");
var timesheetTemplateId = <Document ID here>;
var prefix = "";
if (mode == "test") {
prefix = "Test ";
}
var copyFile = DriveApp.getFileById(timesheetTemplateId).makeCopy(prefix + <yourname here> timesheet " + dateStr);
var doc = DocumentApp.openById(copyFile.getId());
doc.getBody().replaceText("YYYY-MM-DD", dateStr);
var c = 0;
if (!isNaN(m)) {
c+=m;
dayReplace(doc, 1, true, m);
} else {
dayReplace(doc, 1, false, m);
}
if (!isNaN(tu)) {
c+=tu;
dayReplace(doc, 2, true, tu);
} else {
dayReplace(doc, 2, false, tu);
}
if (!isNaN(w)) {
c+=w;
dayReplace(doc, 3, true, w);
} else {
dayReplace(doc, 3, false, w);
}
if (!isNaN(th)) {
c+=th;
dayReplace(doc, 4, true, th);
} else {
dayReplace(doc, 4, false, th);
}
if (!isNaN(f)) {
c+=f;
dayReplace(doc, 5, true, f);
} else {
dayReplace(doc, 5, false, f);
}
doc.getBody().replaceText("TOTAL", c + " days");
doc.saveAndClose();
if (c == 0) {
return doc.getId();
}
if (mode == "") {
MailApp.sendEmail(<timesheet email address here>, <your name here>\'s timesheet for ' + dateStr, 'Please find attached.', {
name: 'Automatic Emailer Script',
attachments: [doc.getAs(MimeType.PDF)]
});
}
MailApp.sendEmail(<your email here>, prefix + <your name here>\'s timesheet for ' + dateStr, 'Please find attached.', {
name: 'Automatic Emailer Script',
attachments: [doc.getAs(MimeType.PDF)]
});
return doc.getId();
}
function dayReplace(doc, dayNum, worked, value) {
if (worked) {
doc.getBody().replaceText("D"+dayNum+"S", "9am");
switch (value) {
case .5:
doc.getBody().replaceText("D"+dayNum+"E", "1pm");
break;
default:
doc.getBody().replaceText("D"+dayNum+"E", "6pm");
}
doc.getBody().replaceText("D"+dayNum+"HW", value + " day");
} else {
doc.getBody().replaceText("D"+dayNum+"S", "");
doc.getBody().replaceText("D"+dayNum+"E", "");
doc.getBody().replaceText("D"+dayNum+"HW", "");
}
}
function testCreateTimesheet() {
createTimesheet("", new Date(2018,01,05), 1, parseFloat(".5", 10), .5, NaN, parseFloat("", 10), "test");
}
function testParseInt() {
var p1 = parseInt("", 10);
Logger.log(p1);
Logger.log(parseInt("0.5", 10));
Logger.log(parseInt(".5", 10));
}
function testParseFloat() {
var p1 = parseFloat("", 10);
Logger.log(p1);
Logger.log(parseFloat("0.5", 10));
Logger.log(parseFloat(".5", 10));
}
function testNan() {
Logger.log(isNaN(NaN));
}
function onOpen() {
var ui = SpreadsheetApp.getUi();
// Or DocumentApp or FormApp.
ui.createMenu('Timesheets')
.addItem('Send remaining timesheets', 'menuItem1')
.addItem('Send test timesheets', 'testCreateTimesheet')
.addToUi();
}
function menuItem1() {
var ui = SpreadsheetApp.getUi();
var c = 0;
for (i = 2; i < 54; i++) {
var days = SpreadsheetApp.getActiveSpreadsheet().getRange("G"+i).getValue();
var timesheet = SpreadsheetApp.getActiveSpreadsheet().getRange("J"+i).getValue();
if (days != "" && days > 0 && timesheet == "") {
var date = SpreadsheetApp.getActiveSpreadsheet().getRange("A"+i).getValue();
var d1 = SpreadsheetApp.getActiveSpreadsheet().getRange("B"+i).getValue();
var d2 = SpreadsheetApp.getActiveSpreadsheet().getRange("C"+i).getValue();
var d3 = SpreadsheetApp.getActiveSpreadsheet().getRange("D"+i).getValue();
var d4 = SpreadsheetApp.getActiveSpreadsheet().getRange("E"+i).getValue();
var d5 = SpreadsheetApp.getActiveSpreadsheet().getRange("F"+i).getValue();
c++;
SpreadsheetApp.getActiveSpreadsheet().getRange("J"+i).setValue(createTimesheet(timesheet, date, parseFloat(d1,10), parseFloat(d2,10), parseFloat(d3,10), parseFloat(d4,10), parseFloat(d5,10), ""));
}
}
ui.alert('Finished: '+c+' sent!');
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment