-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathCode.js
More file actions
140 lines (125 loc) · 4.43 KB
/
Code.js
File metadata and controls
140 lines (125 loc) · 4.43 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
/**
* onOpen() function creates a the Menu and adds the item called 'Send Certificates'.
* 'sendCertificates' is the function name sendCertificates()
*/
function onOpen() {
var ui = SpreadsheetApp.getUi();
ui.createMenu('Automation')
.addItem('Send Certificates', 'sendCertificates')
.addToUi();
}
/**
* sendCertificates() function gets the row and sheet of the spreadsheet to which
* the script is attached to.
* last_row is used to interate till the last row of the sheet, 'Sheet1' here.
*/
function sendCertificates() {
var row = SpreadsheetApp.getActiveSheet().getActiveCell().getRow();
var sheet = SpreadsheetApp.getActive().getSheetByName('Sheet1');
var last_row = sheet.getDataRange().getLastRow();
for(var row=2; row <= last_row; row++)
{
var isSent = sendEmailWithAttachment(row);
// Update the status
if(isSent)
sheet.getRange(row,5).setValue("Email Sent."); // 5 indicates the E column
else
sheet.getRange(row,5).setValue("Failed."); // 5 indicates the E column
}
}
/**
* sendEmailWithAttachment(@param {*} row)
* @param {*} row contains the single row data
*
* This function gets the HTML template, email_template.html and
* file to be attached and sent mail to the 'email' ID in the row.
*/
function sendEmailWithAttachment(row){
var client = getCoreTeamMemberInfo(row);
var template = HtmlService
.createTemplateFromFile('email_template');
template.client = client;
var message = template.evaluate().getContent();
console.log(client);
var fileName = client.certificateID + ".pdf";
var file = getCertificateFile(fileName);
if(file == null){
console.error("File Not Found:" + fileName);
return false;
}
// Update the File Name only if it's available
var sheet = SpreadsheetApp.getActive().getSheetByName('Sheet1');
sheet.getRange(row,4).setValue(fileName);
console.log("client.email: " + client.email);
MailApp.sendEmail({
to: client.email,
subject: "Congratulations on completing the Core Team Member Tenure Successfully!",
htmlBody: message,
attachments: [file.getAs(MimeType.PDF)]
});
return true;
}
/**
* getCoreTeamMemberInfo(@param {*} row)
* @param {*} row contains the single row data
*
* This function retrives the values in the row and store it as a Js object, member, and returns the same.
*/
function getCoreTeamMemberInfo(row){
var sheet = SpreadsheetApp.getActive().getSheetByName("Sheet1");
var values = sheet.getRange(row, 1, row, 4).getValues();
var record = values[0];
var member = {
certificateID: record[0], // 1st Column - A
name: record[1], // 2nd Column - B
email: record[2], // 3rd Column - C
fileName: record[3] // 4th Column - D
};
return member;
}
/**
* getCertificateFile(@param {*} fileName)
* @param {*} fileName is the file name to be retrieved from Google Drive.
* Return the found file
*
* This function retrives the file with file name, @param fileName in the CoreTeamCertificates folder.
*/
function getCertificateFile(fileName){
var folder = DriveApp.getFoldersByName("CoreTeamCertificates");
var files = folder.next().getFiles();
while(files.hasNext()) {
var file = files.next();
console.log("Name: " + file.getName());
if(file.getName() == fileName){
return file;
}
}
return null;
}
/**
* updateCertificateFileDownloadUrl(@param {*} folderName)
* @param {*} folderName is the folder name to be retrieved from Google Drive.
*
* This function retrives the instance of the SpreadsheetApp of 'Sheet1'. Open the Drive folder with the folder name
* @param {*} folderName and iterates the files in it. Copies the download URL of the files and adds into the Spreadsheet.
* By default download URLs are pasted into the spreadsheet's 4th column.
*/
function updateCertificateFileDownloadUrl(folderName = "Certificates 2016 - 2020 - Kavin Raju S"){
var row = SpreadsheetApp.getActiveSheet().getActiveCell().getRow();
var sheet = SpreadsheetApp.getActive().getSheetByName('Sheet1');
var row=2;
var folders = DriveApp.getFolders();
while (folders.hasNext()) {
var folder = folders.next();
if(folder.getName() == folderName){
var files = folder.getFiles();
while(files.hasNext()){
var file = files.next();
Logger.log("FileName: " + file.getDownloadUrl());
sheet.getRange(row,4).setValue(file.getDownloadUrl());
row++;
}
}
Logger.log(folder.getName());
}
}