I have a Google Sheet based on Form entries for a Purchase order system. I would like the person ordering to receive automatic updates via email as to the progress of their request (PENDING/APPROVED/REJECTED)
. Currently, an order will appear, set itself automatically as PENDING
.
The Manager receives an email, replies to it with APPROVED/REJECTED
(with comments) and the Sheet is automatically updated.
I've tried numerous script attempts with no luck so far. Orders don't get updated in order, some orders get the okay straight away, others require further authorization so take a few days.
Once any order status (Col BH
) is changed via email from Manager (trigger has been set for this) the person who made the order (Col H
) will be emailed automatically without anything required from the user.
UPDATE This is the code I've put together but I have an error popping up:
function onEdit(e) {
var sheetName = "Form responses 1";
var dateModifiedColumnIndex = 64;
var dateModifiedColumnLetter = 'BL';
var range = e.range;
var sheet = range.getSheet();
if (sheet.getName() !== sheetName) {
return;
}
if (range.getColumn() != dateModifiedColumnIndex) {
var row = range.getRow();
var time = new Date();
time = Utilities.formatDate(time, "GMT-08:00", "MM/dd/yy, hh:mm:ss");
var dateModifiedRange = sheet.getRange(dateModifiedColumnLetter + row.toString());
dateModifiedRange.setValue(time);
};
}
function triggerOnEdit(e)
{
sendEmail(e);
}
function checkStatus(e)
{
Logger.log(e); \\Added this to help, error still present\\
var range = e.range; \\**This is where I'm getting the error**\\
if (range.getColumn() <=60 && range.getColumn() >=60)
{
var edited_row = range.getRow();
var status = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Form responses 1").getRange(edited_row,60).getValue();
if (status == "PENDING" || status == "APPROVED" || status == "REJECTED")
{
return edited_row;
}
}
return 0;
}
function sendEmail(e)
{
var approved_row = checkStatus(e);
if (approved_row <=0)
{
return;
}
sendEmailByRow(approved_row);
}
function sendEmailByRow(row)
{
var values = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Form responses 1").getRange(row, 1, row, 63).getValues();
var row_values = values[0];
var candidate_email = composeCandidateEmail(row_values);
MailApp.sendEmail(candidate_email.email,candidate_email.subject,candidate_email.message);
}
function composeCandidateEmail(row_values)
{
var name = row_values [4];
var email = row_values [5];
var comment = row_values [63];
var status = row_values [60];
var link = row_values [61];
var subject = "Your Purchase Order is " +status;
var message = "Hello " +name+ ",\n \n Your Purchase Order is " +status+
". \n \n The following comments were made: /n" +comment+ "\n \n You can find your original Purchase Order here: \n \n" +link;
return({message:message, subject:subject, email:email});
}
Error message shows:
TypeError: Cannot read property 'range' of undefined (line 30, file "Code")
Here is the log feedback:
[20-03-10 15:26:51:220 GMT] null
[20-03-10 15:26:51:227 GMT] TypeError: Cannot read property 'range' of undefined
at checkStatus(Code:31:17)
at sendEmail(Code:46:22)
at triggerOnEdit(Code:25:3)
My trigger settings are here:
Any help would be appreciated