Jira Code : BTN-208
Send an email to every customer about their back ordered items each month.
Send a consolidated email to each sales rep regarding the
back ordered items of their customer.
A CSV file will be attached with each email
/**
* @NApiVersion 2.x
* @NScriptType ScheduledScript
* @NModuleScope SameAccount
*/
/**
* Script Description
* To send consolidated email report to sales Rep,Super Admin with details about sales order,invoice, qty ordered,
* qty back ordered,customer details,item details etc..
* Created on 08-March-2018
*/
/*******************************************************************************
* * Balaji Trading Network | BTN-208 *
* **************************************************************************
*
*
* Author: Jobin & Jismi IT Services LLP
*
* REVISION HISTORY
*
*
******************************************************************************/
/**
* SCRIPT ID : { Name : BTN-208 JJ SS Consolidated Email Re-occu , ID : customscript_btn_208_jj_ss_consolidate_e}
*
* DEPLOYMENT : { Title : BTN-208 JJ SS Consolidated Email Re-occu , ID : customdeploy_btn_208_jj_ss_consolidate_e}
*
*
*/
define(['N/email', 'N/file', 'N/http', 'N/https', 'N/record', 'N/runtime', 'N/search', 'N/task', 'N/xml', 'SuiteScripts/customModule/moment'],
/**
* @param {email} email
* @param {file} file
* @param {http} http
* @param {https} https
* @param {record} record
* @param {runtime} runtime
* @param {search} search
* @param {task} task
* @param {xml} xml
* @param {moment} moment
*/
function (email, file, http, https, record, runtime, search, task, xml, moment) {
/**
* Definition of the Scheduled script trigger point.
*
* @param {Object} scriptContext
* @param {string} scriptContext.type - The context in which the script is executed. It is one of the values from the scriptContext.InvocationType enum.
* @Since 2015.2
*/
function executeConsolidatedReport(scriptContext) {
var currentDate = new Date();
logme('EXECUTION STARTS', 'EXECUTION BEGINS AT ' + (currentDate.toUTCString()));
try {
var remainingUsage = runtime.getCurrentScript().getRemainingUsage();
var lineRep = new Object();
var lineRepID = new Object();
var lineRepName = new Object();
var lineCompanyName = new Object();
var lineOrderDate = new Object();
var lineOrder_Po = new Object();
var lineInvoice = new Object();
var lineBrand = new Object();
//var lineSku_Upc = new Object();
var lineSKU = new Object();
var lineUPC = new Object();
var lineItemTitle = new Object();
var lineQtyOrder = new Object();
var lineQtyBackOrder = new Object();
var currentRepID;
var templineCompanyName, templineOrderDate, templineOrder_Po, templineInvoice, templineBrand, templineSKU, templineUPC, templineItemTitle, templineQtyOrder, templineQtyBackOrder;
var salesorderSearchObj = search.create({
type: "salesorder",
filters: [
["type", "anyof", "SalesOrd"],
"AND",
["formulanumeric: {quantity}-nvl({quantityshiprecv},0)-nvl({quantitycommitted},0)", "greaterthan", "0"],
"AND",
//["status", "anyof", "SalesOrd:B", "SalesOrd:E", "SalesOrd:D"],
["billingtransaction.status", "anyof", "CustInvc:A", "CustInvc:B", "CustInvc:D", "CustInvc:E", "CustInvc:V"],
"AND",
["datecreated","onorafter","startofthisbusinessweek"],
"AND",
["taxline", "is", "F"],
"AND",
["shipping", "is", "F"]
],
columns: [
search.createColumn({
name: "salesrep",
join: "customer",
sort: search.Sort.ASC
}),
"internalid",
"line",
search.createColumn({
name: "internalid",
join: "customer",
sort: search.Sort.ASC
}),
search.createColumn({
name: "entityid",
join: "customer"
}),
"datecreated",
"tranid",
"otherrefnum",
"billingtransaction",
"custcol4",
search.createColumn({
name: "upccode",
join: "item"
}),
"custcol1",
search.createColumn({
name: "custitem6",
join: "item"
}),
"quantity",
search.createColumn({
name: "formulanumeric",
formula: "{quantity}-nvl({quantityshiprecv},0)-nvl({quantitycommitted},0)"
}),
search.createColumn({
name: "companyname",
join: "customer"
})
]
}).run().each(function (result) {
currentRepID = result.getValue({
name: "salesrep",
join: "customer"
});
currentRepID = (currentRepID.toString()).trim();
currentRepID = parseInt(currentRepID);
if (!checkForParameter(currentRepID, 'currentRepID')) {
//currentRepID is key to the objects, if there is no currentRepID,then skip this(current) iteration
return true;
}
if (typeof (lineRep[currentRepID]) == 'undefined' || lineRep[currentRepID] !== true) {
//if objects with key currentRepID doesn't exist -> first entry
lineRep[currentRepID] = true;
lineRepID[currentRepID] = currentRepID;
lineRepName[currentRepID] = [result.getText({
name: "salesrep",
join: "customer"
})];
(lineRepName[currentRepID])[0] = (checkForParameter((lineRepName[currentRepID])[0], '(lineRepName[currentRepID])[0]') ? (lineRepName[currentRepID])[0] : ' ');
lineCompanyName[currentRepID] = [result.getValue({
name: "companyname",
join: "customer"
})];
(lineCompanyName[currentRepID])[0] = (checkForParameter((lineCompanyName[currentRepID])[0], '(lineCompanyName[currentRepID])[0]') ? (lineCompanyName[currentRepID])[0] : ' ');
lineOrderDate[currentRepID] = [result.getValue({
name: "datecreated"
})];
(lineOrderDate[currentRepID])[0] = (checkForParameter((lineOrderDate[currentRepID])[0], '(lineOrderDate[currentRepID])[0]') ? (lineOrderDate[currentRepID])[0] : ' ');
lineOrder_Po[currentRepID] = [result.getValue({
name: "tranid"
}) + '/' + result.getValue({
name: "otherrefnum"
})];
(lineOrder_Po[currentRepID])[0] = (checkForParameter((lineOrder_Po[currentRepID])[0], '(lineOrder_Po[currentRepID])[0]') ? (lineOrder_Po[currentRepID])[0] : ' ');
lineInvoice[currentRepID] = [result.getText({
name: "billingtransaction"
})];
(lineInvoice[currentRepID])[0] = (checkForParameter((lineInvoice[currentRepID])[0], '(lineInvoice[currentRepID])[0]') ? ((lineInvoice[currentRepID])[0]).split('#')[1] : ' ');
lineBrand[currentRepID] = [result.getValue({
name: "custcol4"
})];
(lineBrand[currentRepID])[0] = (checkForParameter((lineBrand[currentRepID])[0], '(lineBrand[currentRepID])[0]') ? (lineBrand[currentRepID])[0] : ' ');
lineSKU[currentRepID] = [result.getValue({
name: "custcol1"
})];
(lineSKU[currentRepID])[0] = (checkForParameter((lineSKU[currentRepID])[0], '(lineSKU[currentRepID])[0]') ? (lineSKU[currentRepID])[0] : ' ');
lineUPC[currentRepID] = [result.getValue({
name: "upccode",
join: "item"
})];
(lineUPC[currentRepID])[0] = (checkForParameter((lineUPC[currentRepID])[0], '(lineUPC[currentRepID])[0]') ? (lineUPC[currentRepID])[0] : ' ');
lineItemTitle[currentRepID] = [result.getValue({
name: "custitem6",
join: "item"
})];
(lineItemTitle[currentRepID])[0] = (checkForParameter((lineItemTitle[currentRepID])[0], '(lineItemTitle[currentRepID])[0]') ? (lineItemTitle[currentRepID])[0] : ' ');
lineQtyOrder[currentRepID] = [result.getValue({
name: "quantity"
})];
(lineQtyOrder[currentRepID])[0] = (checkForParameter((lineQtyOrder[currentRepID])[0], '(lineQtyOrder[currentRepID])[0]') ? (lineQtyOrder[currentRepID])[0] : ' ');
lineQtyBackOrder[currentRepID] = [result.getValue({
name: "formulanumeric",
formula: "{quantity}-nvl({quantityshiprecv},0)-nvl({quantitycommitted},0)"
})];
(lineQtyBackOrder[currentRepID])[0] = (checkForParameter((lineQtyBackOrder[currentRepID])[0], '(lineQtyBackOrder[currentRepID])[0]') ? (lineQtyBackOrder[currentRepID])[0] : ' ');
} else {
//if objects with key currentRepID exist -> Duplicate
templineCompanyName = result.getValue({
name: "companyname",
join: "customer"
});
templineCompanyName = (checkForParameter(templineCompanyName, 'templineCompanyName') ? templineCompanyName : ' ');
templineOrderDate = result.getValue({
name: "datecreated"
});
templineOrderDate = (checkForParameter(templineOrderDate, 'templineOrderDate') ? templineOrderDate : ' ');
templineOrder_Po = result.getValue({
name: "tranid"
}) + '/' + result.getValue({
name: "otherrefnum"
});
templineOrder_Po = (checkForParameter(templineOrder_Po, 'templineOrder_Po') ? templineOrder_Po : ' ');
templineInvoice = result.getText({
name: "billingtransaction"
});
templineInvoice = (checkForParameter(templineInvoice, 'templineInvoice') ? templineInvoice.split('#')[1] : ' ');
templineBrand = result.getValue({
name: "custcol4"
});
templineBrand = (checkForParameter(templineBrand, 'templineBrand') ? templineBrand : ' ');
templineSKU = result.getValue({
name: "custcol1"
});
templineSKU = (checkForParameter(templineSKU, 'templineSKU') ? templineSKU : ' ');
templineUPC = result.getValue({
name: "upccode",
join: "item"
});
templineUPC = (checkForParameter(templineUPC, 'templineUPC') ? templineUPC : ' ');
templineItemTitle = result.getValue({
name: "custitem6",
join: "item"
});
templineItemTitle = (checkForParameter(templineItemTitle, 'templineItemTitle') ? templineItemTitle : ' ');
templineQtyOrder = result.getValue({
name: "quantity"
});
templineQtyOrder = (checkForParameter(templineQtyOrder, 'templineQtyOrder') ? templineQtyOrder : ' ');
templineQtyBackOrder = result.getValue({
name: "formulanumeric",
formula: "{quantity}-nvl({quantityshiprecv},0)-nvl({quantitycommitted},0)"
});
templineQtyBackOrder = (checkForParameter(templineQtyBackOrder, 'templineQtyBackOrder') ? templineQtyBackOrder : ' ');
(lineCompanyName[currentRepID]).push(templineCompanyName);
(lineOrderDate[currentRepID]).push(templineOrderDate);
(lineOrder_Po[currentRepID]).push(templineOrder_Po);
(lineInvoice[currentRepID]).push(templineInvoice);
(lineBrand[currentRepID]).push(templineBrand);
(lineSKU[currentRepID]).push(templineSKU);
(lineUPC[currentRepID]).push(templineUPC);
(lineItemTitle[currentRepID]).push(templineItemTitle);
(lineQtyOrder[currentRepID]).push(templineQtyOrder);
(lineQtyBackOrder[currentRepID]).push(templineQtyBackOrder);
}
return true;
});
var SCRIPT_RERUN_FLAG = false;
var arrayIndex = 0;
var waitForResponse;
var currentLimitJSON, currentLimitFile, fileID, FILE_EXISTS = false;
try {
//If file exists,then arrayIndex exits
currentLimitFile = file.load({
id: 'BTN-208 Re-occurring Reports/Sales Rep/currentLimit.json'
});
currentLimitJSON = currentLimitFile.getContents();
currentLimitJSON = JSON.parse(currentLimitJSON);
arrayIndex = parseInt(currentLimitJSON.arrayIndex);
FILE_EXISTS = true;
logme('EXISTS currentLimit.json', 'Executing the remiander');
} catch (err) {
//If file doesn't exists,then arrayIndex is 0
arrayIndex = 0;
FILE_EXISTS = false;
logme('NO currentLimit.json', 'Executing for first time');
}
/*
Creating JSON object so that we can convert it to CSV
*/
// headers for csv
var headers = {
header_1: 'Company Name',
header_2: 'Order Date',
header_3: 'Order/PO',
header_4: 'Invoice #',
header_5: 'Brand',
header_6: 'SKU',
header_7: 'UPC',
header_8: 'Item Title',
header_9: 'Qty Ordered',
header_10: 'Qty Backordered'
};
var itemsFormatted_Array = new Array();
var itemsFormatted_Object = new Object();
var fileTitle_Object = new Object();
var fileObj;
var currentAgent, currentLine;
var BACK_ORDERED_FLAG = false;
//to send email to sales rep, create JSON content for each sales rep
for (currentAgent = 0; currentAgent < Object.keys(lineRepID).length; currentAgent++) {
itemsFormatted_Array.push(headers);
for (currentLine = 0; currentLine < lineOrderDate[Object.keys(lineRepID)[currentAgent]].length; currentLine++) {
BACK_ORDERED_FLAG = true;
itemsFormatted_Array.push({
header_1: ((lineCompanyName[Object.keys(lineRepID)[currentAgent]])[currentLine]).replace(/,/g, '%2C').replace(/"/g, '%22').replace(/'/g, '%27').replace(/\n/g, '%0A'),
header_2: ((lineOrderDate[Object.keys(lineRepID)[currentAgent]])[currentLine]).replace(/,/g, '%2C').replace(/"/g, '%22').replace(/'/g, '%27').replace(/\n/g, '%0A'),
header_3: (lineOrder_Po[Object.keys(lineRepID)[currentAgent]])[currentLine],
header_4: (lineInvoice[Object.keys(lineRepID)[currentAgent]])[currentLine],
header_5: (lineBrand[Object.keys(lineRepID)[currentAgent]])[currentLine],
header_6: (lineSKU[Object.keys(lineRepID)[currentAgent]])[currentLine],
header_7: (lineUPC[Object.keys(lineRepID)[currentAgent]])[currentLine],
header_8: (((lineItemTitle[Object.keys(lineRepID)[currentAgent]])[currentLine]).replace(/,/g, '%2C').replace(/"/g, '%22').replace(/'/g, '%27').replace(/\n/g, '%0A')).toString(),
header_9: (lineQtyOrder[Object.keys(lineRepID)[currentAgent]])[currentLine],
header_10: (lineQtyBackOrder[Object.keys(lineRepID)[currentAgent]])[currentLine]
});
}
itemsFormatted_Object[Object.keys(lineRepID)[currentAgent]] = itemsFormatted_Array;
fileTitle_Object[Object.keys(lineRepID)[currentAgent]] = lineRepName[Object.keys(lineRepID)[currentAgent]];
itemsFormatted_Array = undefined;
itemsFormatted_Array = new Array();
}
//to send email for each Sales Rep
for (var i = arrayIndex; i < Object.keys(lineRepID).length; i++) {
remainingUsage = runtime.getCurrentScript().getRemainingUsage();
if (parseInt(remainingUsage) < 1200) {
//to reschedule
SCRIPT_RERUN_FLAG = true;
arrayIndex = i;
currentLimitJSON = {
arrayIndex: arrayIndex
};
// save a json file to file cabinet with the current arrayIndex (so that we know where to begin when script reschedules)
currentLimitFile = file.create({
name: 'currentLimit.json',
fileType: file.Type.JSON,
contents: JSON.stringify(currentLimitJSON),
encoding: file.Encoding.UTF8,
isInactive: true,
folder: 9335 // 9335 : BTN-208 Re-occurring Reports > Sales Rep
});
fileID = currentLimitFile.save();
FILE_EXISTS = true;
break;
}
fileObj = exportCSVFile(headers, itemsFormatted_Object[lineRepID[Object.keys(lineRepID)[i]]], fileTitle_Object[lineRepID[Object.keys(lineRepID)[i]]]);
waitForResponse = createEmailTemplate_SalesRep(lineRepID[Object.keys(lineRepID)[i]], lineRepName[Object.keys(lineRepID)[i]], lineCompanyName[Object.keys(lineRepID)[i]], lineOrderDate[Object.keys(lineRepID)[i]], lineOrder_Po[Object.keys(lineRepID)[i]], lineInvoice[Object.keys(lineRepID)[i]], lineBrand[Object.keys(lineRepID)[i]], lineSKU[Object.keys(lineRepID)[i]], lineUPC[Object.keys(lineRepID)[i]], lineItemTitle[Object.keys(lineRepID)[i]], lineQtyOrder[Object.keys(lineRepID)[i]], lineQtyBackOrder[Object.keys(lineRepID)[i]], fileObj);
logme("SEND Sales Rep EMAIL : index,salesRep,waitForResponse", i + "," + lineRepName[Object.keys(lineRepName)[i]] + "," + waitForResponse);
if (FILE_EXISTS && (i == ((Object.keys(lineQtyBackOrder).length) - 1))) {
//to delete file in file cabibet
file.delete({
id: currentLimitFile.id
});
}
}
//to send email for super admin, create the JSON content
itemsFormatted_Array = undefined;
itemsFormatted_Array = new Array();
itemsFormatted_Array.push(headers);
for (currentAgent = 0; currentAgent < Object.keys(lineRepID).length; currentAgent++) {
for (currentLine = 0; currentLine < lineOrderDate[Object.keys(lineRepID)[currentAgent]].length; currentLine++) {
BACK_ORDERED_FLAG = true;
itemsFormatted_Array.push({
header_1: ((lineCompanyName[Object.keys(lineRepID)[currentAgent]])[currentLine]).replace(/,/g, '%2C').replace(/"/g, '%22').replace(/'/g, '%27').replace(/\n/g, '%0A'),
header_2: ((lineOrderDate[Object.keys(lineRepID)[currentAgent]])[currentLine]).replace(/,/g, '%2C').replace(/"/g, '%22').replace(/'/g, '%27').replace(/\n/g, '%0A'),
header_3: (lineOrder_Po[Object.keys(lineRepID)[currentAgent]])[currentLine],
header_4: (lineInvoice[Object.keys(lineRepID)[currentAgent]])[currentLine],
header_5: (lineBrand[Object.keys(lineRepID)[currentAgent]])[currentLine],
header_6: (lineSKU[Object.keys(lineRepID)[currentAgent]])[currentLine],
header_7: (lineUPC[Object.keys(lineRepID)[currentAgent]])[currentLine],
header_8: (((lineItemTitle[Object.keys(lineRepID)[currentAgent]])[currentLine]).replace(/,/g, '%2C').replace(/"/g, '%22').replace(/'/g, '%27').replace(/\n/g, '%0A')).toString(),
header_9: (lineQtyOrder[Object.keys(lineRepID)[currentAgent]])[currentLine],
header_10: (lineQtyBackOrder[Object.keys(lineRepID)[currentAgent]])[currentLine]
});
}
}
if (BACK_ORDERED_FLAG) {
fileObj = exportCSVFile(headers, itemsFormatted_Array, '-5_SuperAdmin');
//to send email for super admin
waitForResponse = createEmailTemplate_Admin(lineRepID['-5'], lineRepName['-5'], itemsFormatted_Array, fileObj);
logme("SEND Super Admin EMAIL : superAdmin,waitForResponse", lineRepName['-5'] + "," + waitForResponse);
}
//to reschedule(rerun) script again
if (SCRIPT_RERUN_FLAG) {
remainingUsage = runtime.getCurrentScript().getRemainingUsage();
logme('remainingUsage', remainingUsage);
currentDate = new Date();
logme('EXECUTION RESCHEDULED AT ARRAYINDEX ' + arrayIndex, 'EXECUTION RESCHEDULED ON ' + (currentDate.toUTCString()));
rescheduleScriptandReturn(arrayIndex);
}
currentDate = new Date();
logme('EXECUTION ENDS', 'EXECUTION ENDS AT ' + (currentDate.toUTCString()));
} catch (err) {
currentDate = new Date();
logme('EXECUTION FAILED', 'EXECUTION THROWS ERROR AT ' + (currentDate.toUTCString()));
handleTryCatchError(err, 'function executeConsolidatedReport()');
}
}
/* convert json to csv*/
function convertToCSV(objArray) {
try {
var array = ((typeof (objArray) != 'object') ? (JSON.parse(objArray)) : (objArray));
var str = '';
for (var i = 0; i < array.length; i++) {
var line = '';
for (var index in array[i]) {
if (line != '') {
line += ',';
}
line += array[i][index];
}
str += line + '\r\n';
}
return str;
} catch (err) {
handleTryCatchError(err, 'function convertToCSV()');
}
}
/* Save file in file cabinet as CSV*/
function exportCSVFile(headers, items, fileTitle) {
try {
/* if (headers) {
items.unshift(headers);
}*/
// Convert Object to JSON
var jsonObject = JSON.stringify(items);
var csvFile = convertToCSV(jsonObject);
var exportedFilename = (checkForParameter(fileTitle, 'fileTitle') ? (fileTitle + '.csv') : ('export.csv'));
var fileObj = file.create({
name: exportedFilename,
fileType: file.Type.CSV,
//contents: (csvFile).replace(/%2C/g, '/'),
contents: csvFile,
encoding: file.Encoding.UTF8,
isInactive: true,
folder: 9335 // 9335 : BTN-208 Re-occurring Reports > Sales Rep
});
//var fileID = fileObj.save();
return fileObj;
} catch (err) {
handleTryCatchError(err, 'function exportCSVFile()');
return false;
}
}
/*to create email template for Sales Rep*/
function createEmailTemplate_SalesRep(CUSTOMER_INTERNAL_ID, lineRepName, lineCompanyName, lineOrderDate, lineOrder_Po, lineInvoice, lineBrand, lineSKU, lineUPC, lineItemTitle, lineQtyOrder, lineQtyBackOrder, fileObj) {
try {
//var SUBJECT = 'MyCoolCell Back Order Report - ' + (getCurrentDate());
var SUBJECT = 'Re-occurring Reports Week(' + (moment().startOf('isoWeek').format('L')) + ') for salesRep ' + CUSTOMER_INTERNAL_ID + ' : ' + lineRepName;
var tableBGFlag = true;
var waitForResponse;
var EMAIL_BODY = "";
EMAIL_BODY += "<br>";
EMAIL_BODY += "<div><div style=\"overflow-x: auto;\"><div>";
EMAIL_BODY += " <table style=\"font-family:arial, sans-serif;border-collapse:collapse;width:100%;\">";
EMAIL_BODY += " <thead>";
EMAIL_BODY += " <tr>";
EMAIL_BODY += " <th style=\"border-width:1px;border-style:solid;border-color:#cecece;text-align:left;padding-top:8px;padding-bottom:8px;padding-right:8px;padding-left:8px;\">Company Name<\/th>";
EMAIL_BODY += " <th style=\"border-width:1px;border-style:solid;border-color:#cecece;text-align:left;padding-top:8px;padding-bottom:8px;padding-right:8px;padding-left:8px;\">Order Date<\/th>";
EMAIL_BODY += " <th style=\"border-width:1px;border-style:solid;border-color:#cecece;text-align:left;padding-top:8px;padding-bottom:8px;padding-right:8px;padding-left:8px;\">Order \/ PO #<\/th>";
EMAIL_BODY += " <th style=\"border-width:1px;border-style:solid;border-color:#cecece;text-align:left;padding-top:8px;padding-bottom:8px;padding-right:8px;padding-left:8px;\">Invoice #<\/th>";
EMAIL_BODY += " <th style=\"border-width:1px;border-style:solid;border-color:#cecece;text-align:left;padding-top:8px;padding-bottom:8px;padding-right:8px;padding-left:8px;\">Brand<\/th>";
EMAIL_BODY += " <th style=\"border-width:1px;border-style:solid;border-color:#cecece;text-align:left;padding-top:8px;padding-bottom:8px;padding-right:8px;padding-left:8px;\">SKU <\/th>";
EMAIL_BODY += " <th style=\"border-width:1px;border-style:solid;border-color:#cecece;text-align:left;padding-top:8px;padding-bottom:8px;padding-right:8px;padding-left:8px;\">UPC <\/th>";
EMAIL_BODY += " <th style=\"border-width:1px;border-style:solid;border-color:#cecece;text-align:left;padding-top:8px;padding-bottom:8px;padding-right:8px;padding-left:8px;\">Item Title<\/th>";
EMAIL_BODY += " <th style=\"border-width:1px;border-style:solid;border-color:#cecece;text-align:left;padding-top:8px;padding-bottom:8px;padding-right:8px;padding-left:8px;\">Qty Ordered<\/th>";
EMAIL_BODY += " <th style=\"border-width:1px;border-style:solid;border-color:#cecece;text-align:left;padding-top:8px;padding-bottom:8px;padding-right:8px;padding-left:8px;\">Qty Backordered<\/th>";
EMAIL_BODY += " <\/tr>";
EMAIL_BODY += " <\/thead>";
EMAIL_BODY += " <tbody>";
for (var i = 0; i < lineOrderDate.length; i++) {
if (tableBGFlag) {
EMAIL_BODY += " <!--FIRST-->";
EMAIL_BODY += " <tr>";
EMAIL_BODY += " <td style=\"border-width:1px;border-style:solid;border-color:#cecece;text-align:left;padding-top:8px;padding-bottom:8px;padding-right:8px;padding-left:8px;background-color:#dddddd;\">" + lineCompanyName[i] + "<\/td>";
EMAIL_BODY += " <td style=\"border-width:1px;border-style:solid;border-color:#cecece;text-align:left;padding-top:8px;padding-bottom:8px;padding-right:8px;padding-left:8px;background-color:#dddddd;\">" + lineOrderDate[i] + "<\/td>";
EMAIL_BODY += " <td style=\"border-width:1px;border-style:solid;border-color:#cecece;text-align:left;padding-top:8px;padding-bottom:8px;padding-right:8px;padding-left:8px;background-color:#dddddd;\">" + lineOrder_Po[i] + "<\/td>";
EMAIL_BODY += " <td style=\"border-width:1px;border-style:solid;border-color:#cecece;text-align:left;padding-top:8px;padding-bottom:8px;padding-right:8px;padding-left:8px;background-color:#dddddd;\">" + lineInvoice[i] + "<\/td>";
EMAIL_BODY += " <td style=\"border-width:1px;border-style:solid;border-color:#cecece;text-align:left;padding-top:8px;padding-bottom:8px;padding-right:8px;padding-left:8px;background-color:#dddddd;\">" + lineBrand[i] + "<\/td>";
EMAIL_BODY += " <td style=\"border-width:1px;border-style:solid;border-color:#cecece;text-align:left;padding-top:8px;padding-bottom:8px;padding-right:8px;padding-left:8px;background-color:#dddddd;\">" + lineSKU[i] + "<\/td>";
EMAIL_BODY += " <td style=\"border-width:1px;border-style:solid;border-color:#cecece;text-align:left;padding-top:8px;padding-bottom:8px;padding-right:8px;padding-left:8px;background-color:#dddddd;\">" + lineUPC[i] + "<\/td>";
EMAIL_BODY += " <td style=\"border-width:1px;border-style:solid;border-color:#cecece;text-align:left;padding-top:8px;padding-bottom:8px;padding-right:8px;padding-left:8px;background-color:#dddddd;\">" + lineItemTitle[i] + "<\/td>";
EMAIL_BODY += " <td style=\"border-width:1px;border-style:solid;border-color:#cecece;text-align:left;padding-top:8px;padding-bottom:8px;padding-right:8px;padding-left:8px;background-color:#dddddd;\">" + lineQtyOrder[i] + "<\/td>";
EMAIL_BODY += " <td style=\"border-width:1px;border-style:solid;border-color:#cecece;text-align:left;padding-top:8px;padding-bottom:8px;padding-right:8px;padding-left:8px;background-color:#dddddd;\">" + lineQtyBackOrder[i] + "<\/td>";
EMAIL_BODY += " <\/tr>";
tableBGFlag = false;
} else {
EMAIL_BODY += " <!--SECOND-->";
EMAIL_BODY += " <tr>";
EMAIL_BODY += " <td style=\"border-width:1px;border-style:solid;border-color:#cecece;text-align:left;padding-top:8px;padding-bottom:8px;padding-right:8px;padding-left:8px;background-color:#ffffff;\">" + lineCompanyName[i] + "<\/td>";
EMAIL_BODY += " <td style=\"border-width:1px;border-style:solid;border-color:#cecece;text-align:left;padding-top:8px;padding-bottom:8px;padding-right:8px;padding-left:8px;background-color:#ffffff;\">" + lineOrderDate[i] + "<\/td>";
EMAIL_BODY += " <td style=\"border-width:1px;border-style:solid;border-color:#cecece;text-align:left;padding-top:8px;padding-bottom:8px;padding-right:8px;padding-left:8px;background-color:#ffffff;\">" + lineOrder_Po[i] + "<\/td>";
EMAIL_BODY += " <td style=\"border-width:1px;border-style:solid;border-color:#cecece;text-align:left;padding-top:8px;padding-bottom:8px;padding-right:8px;padding-left:8px;background-color:#ffffff;\">" + lineInvoice[i] + "<\/td>";
EMAIL_BODY += " <td style=\"border-width:1px;border-style:solid;border-color:#cecece;text-align:left;padding-top:8px;padding-bottom:8px;padding-right:8px;padding-left:8px;background-color:#ffffff;\">" + lineBrand[i] + "<\/td>";
EMAIL_BODY += " <td style=\"border-width:1px;border-style:solid;border-color:#cecece;text-align:left;padding-top:8px;padding-bottom:8px;padding-right:8px;padding-left:8px;background-color:#ffffff;\">" + lineSKU[i] + "<\/td>";
EMAIL_BODY += " <td style=\"border-width:1px;border-style:solid;border-color:#cecece;text-align:left;padding-top:8px;padding-bottom:8px;padding-right:8px;padding-left:8px;background-color:#ffffff;\">" + lineUPC[i] + "<\/td>";
EMAIL_BODY += " <td style=\"border-width:1px;border-style:solid;border-color:#cecece;text-align:left;padding-top:8px;padding-bottom:8px;padding-right:8px;padding-left:8px;background-color:#ffffff;\">" + lineItemTitle[i] + "<\/td>";
EMAIL_BODY += " <td style=\"border-width:1px;border-style:solid;border-color:#cecece;text-align:left;padding-top:8px;padding-bottom:8px;padding-right:8px;padding-left:8px;background-color:#ffffff;\">" + lineQtyOrder[i] + "<\/td>";
EMAIL_BODY += " <td style=\"border-width:1px;border-style:solid;border-color:#cecece;text-align:left;padding-top:8px;padding-bottom:8px;padding-right:8px;padding-left:8px;background-color:#ffffff;\">" + lineQtyBackOrder[i] + "<\/td>";
EMAIL_BODY += " <\/tr>";
tableBGFlag = true;
}
}
EMAIL_BODY += " <\/tbody>";
EMAIL_BODY += " <\/table>";
EMAIL_BODY += "<\/div><\/div><\/div>";
waitForResponse = sendConsolidatedEmailReport(CUSTOMER_INTERNAL_ID, SUBJECT, EMAIL_BODY, fileObj);
return waitForResponse;
} catch (err) {
handleTryCatchError(err, 'function createEmailTemplate_SalesRep()');
return false;
}
}
/*to create email template for super admin*/
function createEmailTemplate_Admin(CUSTOMER_INTERNAL_ID, lineRepName, itemsFormatted_Array, fileObj) {
try {
var SUBJECT = 'Re-occurring Reports Week(' + (moment().startOf('isoWeek').format('L')) + ') for SuperAdmin ' + CUSTOMER_INTERNAL_ID + ' : ' + lineRepName;
var tableBGFlag = true;
var waitForResponse;
var EMAIL_BODY = "";
EMAIL_BODY += "<br>";
EMAIL_BODY += "<div><div style=\"overflow-x: auto;\"><div>";
EMAIL_BODY += " <table style=\"font-family:arial, sans-serif;border-collapse:collapse;width:100%;\">";
EMAIL_BODY += " <thead>";
EMAIL_BODY += " <tr>";
EMAIL_BODY += " <th style=\"border-width:1px;border-style:solid;border-color:#cecece;text-align:left;padding-top:8px;padding-bottom:8px;padding-right:8px;padding-left:8px;\">Company Name<\/th>";
EMAIL_BODY += " <th style=\"border-width:1px;border-style:solid;border-color:#cecece;text-align:left;padding-top:8px;padding-bottom:8px;padding-right:8px;padding-left:8px;\">Order Date<\/th>";
EMAIL_BODY += " <th style=\"border-width:1px;border-style:solid;border-color:#cecece;text-align:left;padding-top:8px;padding-bottom:8px;padding-right:8px;padding-left:8px;\">Order \/ PO #<\/th>";
EMAIL_BODY += " <th style=\"border-width:1px;border-style:solid;border-color:#cecece;text-align:left;padding-top:8px;padding-bottom:8px;padding-right:8px;padding-left:8px;\">Invoice #<\/th>";
EMAIL_BODY += " <th style=\"border-width:1px;border-style:solid;border-color:#cecece;text-align:left;padding-top:8px;padding-bottom:8px;padding-right:8px;padding-left:8px;\">Brand<\/th>";
EMAIL_BODY += " <th style=\"border-width:1px;border-style:solid;border-color:#cecece;text-align:left;padding-top:8px;padding-bottom:8px;padding-right:8px;padding-left:8px;\">SKU<\/th>";
EMAIL_BODY += " <th style=\"border-width:1px;border-style:solid;border-color:#cecece;text-align:left;padding-top:8px;padding-bottom:8px;padding-right:8px;padding-left:8px;\">UPC <\/th>";
EMAIL_BODY += " <th style=\"border-width:1px;border-style:solid;border-color:#cecece;text-align:left;padding-top:8px;padding-bottom:8px;padding-right:8px;padding-left:8px;\">Item Title<\/th>";
EMAIL_BODY += " <th style=\"border-width:1px;border-style:solid;border-color:#cecece;text-align:left;padding-top:8px;padding-bottom:8px;padding-right:8px;padding-left:8px;\">Qty Ordered<\/th>";
EMAIL_BODY += " <th style=\"border-width:1px;border-style:solid;border-color:#cecece;text-align:left;padding-top:8px;padding-bottom:8px;padding-right:8px;padding-left:8px;\">Qty Backordered<\/th>";
EMAIL_BODY += " <\/tr>";
EMAIL_BODY += " <\/thead>";
EMAIL_BODY += " <tbody>";
for (var i = 1; i < itemsFormatted_Array.length; i++) {
if (tableBGFlag) {
EMAIL_BODY += " <!--FIRST-->";
EMAIL_BODY += " <tr>";
EMAIL_BODY += " <td style=\"border-width:1px;border-style:solid;border-color:#cecece;text-align:left;padding-top:8px;padding-bottom:8px;padding-right:8px;padding-left:8px;background-color:#dddddd;\">" + itemsFormatted_Array[i].header_1 + "<\/td>";
EMAIL_BODY += " <td style=\"border-width:1px;border-style:solid;border-color:#cecece;text-align:left;padding-top:8px;padding-bottom:8px;padding-right:8px;padding-left:8px;background-color:#dddddd;\">" + itemsFormatted_Array[i].header_2 + "<\/td>";
EMAIL_BODY += " <td style=\"border-width:1px;border-style:solid;border-color:#cecece;text-align:left;padding-top:8px;padding-bottom:8px;padding-right:8px;padding-left:8px;background-color:#dddddd;\">" + itemsFormatted_Array[i].header_3 + "<\/td>";
EMAIL_BODY += " <td style=\"border-width:1px;border-style:solid;border-color:#cecece;text-align:left;padding-top:8px;padding-bottom:8px;padding-right:8px;padding-left:8px;background-color:#dddddd;\">" + itemsFormatted_Array[i].header_4 + "<\/td>";
EMAIL_BODY += " <td style=\"border-width:1px;border-style:solid;border-color:#cecece;text-align:left;padding-top:8px;padding-bottom:8px;padding-right:8px;padding-left:8px;background-color:#dddddd;\">" + itemsFormatted_Array[i].header_5 + "<\/td>";
EMAIL_BODY += " <td style=\"border-width:1px;border-style:solid;border-color:#cecece;text-align:left;padding-top:8px;padding-bottom:8px;padding-right:8px;padding-left:8px;background-color:#dddddd;\">" + itemsFormatted_Array[i].header_6 + "<\/td>";
EMAIL_BODY += " <td style=\"border-width:1px;border-style:solid;border-color:#cecece;text-align:left;padding-top:8px;padding-bottom:8px;padding-right:8px;padding-left:8px;background-color:#dddddd;\">" + itemsFormatted_Array[i].header_7 + "<\/td>";
EMAIL_BODY += " <td style=\"border-width:1px;border-style:solid;border-color:#cecece;text-align:left;padding-top:8px;padding-bottom:8px;padding-right:8px;padding-left:8px;background-color:#dddddd;\">" + itemsFormatted_Array[i].header_8 + "<\/td>";
EMAIL_BODY += " <td style=\"border-width:1px;border-style:solid;border-color:#cecece;text-align:left;padding-top:8px;padding-bottom:8px;padding-right:8px;padding-left:8px;background-color:#dddddd;\">" + itemsFormatted_Array[i].header_9 + "<\/td>";
EMAIL_BODY += " <td style=\"border-width:1px;border-style:solid;border-color:#cecece;text-align:left;padding-top:8px;padding-bottom:8px;padding-right:8px;padding-left:8px;background-color:#dddddd;\">" + itemsFormatted_Array[i].header_10 + "<\/td>";
EMAIL_BODY += " <\/tr>";
tableBGFlag = false;
} else {
EMAIL_BODY += " <!--SECOND-->";
EMAIL_BODY += " <tr>";
EMAIL_BODY += " <td style=\"border-width:1px;border-style:solid;border-color:#cecece;text-align:left;padding-top:8px;padding-bottom:8px;padding-right:8px;padding-left:8px;background-color:#ffffff;\">" + itemsFormatted_Array[i].header_1 + "<\/td>";
EMAIL_BODY += " <td style=\"border-width:1px;border-style:solid;border-color:#cecece;text-align:left;padding-top:8px;padding-bottom:8px;padding-right:8px;padding-left:8px;background-color:#ffffff;\">" + itemsFormatted_Array[i].header_2 + "<\/td>";
EMAIL_BODY += " <td style=\"border-width:1px;border-style:solid;border-color:#cecece;text-align:left;padding-top:8px;padding-bottom:8px;padding-right:8px;padding-left:8px;background-color:#ffffff;\">" + itemsFormatted_Array[i].header_3 + "<\/td>";
EMAIL_BODY += " <td style=\"border-width:1px;border-style:solid;border-color:#cecece;text-align:left;padding-top:8px;padding-bottom:8px;padding-right:8px;padding-left:8px;background-color:#ffffff;\">" + itemsFormatted_Array[i].header_4 + "<\/td>";
EMAIL_BODY += " <td style=\"border-width:1px;border-style:solid;border-color:#cecece;text-align:left;padding-top:8px;padding-bottom:8px;padding-right:8px;padding-left:8px;background-color:#ffffff;\">" + itemsFormatted_Array[i].header_5 + "<\/td>";
EMAIL_BODY += " <td style=\"border-width:1px;border-style:solid;border-color:#cecece;text-align:left;padding-top:8px;padding-bottom:8px;padding-right:8px;padding-left:8px;background-color:#ffffff;\">" + itemsFormatted_Array[i].header_6 + "<\/td>";
EMAIL_BODY += " <td style=\"border-width:1px;border-style:solid;border-color:#cecece;text-align:left;padding-top:8px;padding-bottom:8px;padding-right:8px;padding-left:8px;background-color:#ffffff;\">" + itemsFormatted_Array[i].header_7 + "<\/td>";
EMAIL_BODY += " <td style=\"border-width:1px;border-style:solid;border-color:#cecece;text-align:left;padding-top:8px;padding-bottom:8px;padding-right:8px;padding-left:8px;background-color:#ffffff;\">" + itemsFormatted_Array[i].header_8 + "<\/td>";
EMAIL_BODY += " <td style=\"border-width:1px;border-style:solid;border-color:#cecece;text-align:left;padding-top:8px;padding-bottom:8px;padding-right:8px;padding-left:8px;background-color:#ffffff;\">" + itemsFormatted_Array[i].header_9 + "<\/td>";
EMAIL_BODY += " <td style=\"border-width:1px;border-style:solid;border-color:#cecece;text-align:left;padding-top:8px;padding-bottom:8px;padding-right:8px;padding-left:8px;background-color:#ffffff;\">" + itemsFormatted_Array[i].header_10 + "<\/td>";
EMAIL_BODY += " <\/tr>";
tableBGFlag = true;
}
}
EMAIL_BODY += " <\/tbody>";
EMAIL_BODY += " <\/table>";
EMAIL_BODY += "<\/div><\/div><\/div>";
waitForResponse = sendConsolidatedEmailReport(CUSTOMER_INTERNAL_ID, SUBJECT, EMAIL_BODY, fileObj);
return waitForResponse;
} catch (err) {
handleTryCatchError(err, 'function createEmailTemplate_Admin()');
return false;
}
}
/*to send email to the customer*/
function sendConsolidatedEmailReport(CUSTOMER_INTERNAL_ID, SUBJECT, EMAIL_BODY, fileObj) {
try {
var senderId = -5; // -5 : albert@mycoolcell.net
var recipientId = CUSTOMER_INTERNAL_ID;
email.send({
author: senderId,
recipients: recipientId,
subject: SUBJECT,
body: EMAIL_BODY,
attachments: [fileObj],
relatedRecords: {
entityId: recipientId
}
});
return true;
} catch (err) {
handleTryCatchError(err, 'function sendConsolidatedEmailReport()');
return false;
}
}
/*Try to reschedule script*/
function rescheduleScriptandReturn(indexParam) {
try {
var mrTask = task.create({
taskType: task.TaskType.SCHEDULED_SCRIPT,
scriptId: "customscript_btn_208_jj_ss_consolidate_e",
deploymentId: "customdeploy_btn_208_jj_ss_consolidate_e",
params: {
arrayIndex: indexParam
}
});
var scriptTaskId = mrTask.submit();
logme("rescheduleScriptandReturn_scriptTaskId", scriptTaskId);
} catch (err) {
handleTryCatchError(err, 'function rescheduleScriptandReturn()');
}
}
/*To get current Date*/
function getCurrentDate() {
//Date format is MM/DD/YYYY
var currentDate = new Date();
var currentMonth = currentDate.getMonth() + 1;
var currentDay = currentDate.getDate();
var currentYear = currentDate.getFullYear();
return (currentMonth + '/' + currentDay + '/' + currentYear);
}
/*to check for a parameter*/
function checkForParameter(parameter, parameterName) {
if (parameter != "" && parameter != null && parameter != undefined && parameter != "undefined" && parameter != " ") {
return true;
} else {
//logme('No ' + parameterName + ' found', 'No ' + parameterName + ' found');
return false;
}
}
/*to handle 'try' error in try-catch statement*/
function handleTryCatchError(error, errorLocation) {
logme('Error on ' + errorLocation, getError(error));
logme('Error on ' + errorLocation, error.message);
}
return {
execute: executeConsolidatedReport
};
});
/*******************************************************************************
* return error
*
* @param e
* @returns
*
*/
function getError(e) {
var stErrMsg = '';
if (e.getDetails != undefined) {
stErrMsg = '_' + e.getCode() + '<br>' + e.getDetails() + '<br>' +
e.getStackTrace();
} else {
stErrMsg = '_' + e.toString();
}
return stErrMsg;
}
/*******************************************************************************
* Log these data
*
* @param title
* @param details
* @returns
*
*/
function logme(title, details) {
log.debug({
title: title,
details: details
});
}
/**
* @NApiVersion 2.x
* @NScriptType ScheduledScript
* @NModuleScope SameAccount
*/
/**
* Script Description
* To send consolidated email report to customers with details about sales order,invoice, qty ordered,
* qty back ordered,item details etc..
* Created on 08-March-2018
*/
/*******************************************************************************
* * Balaji Trading Network | BTN-208 *
* **************************************************************************
*
*
* Author: Jobin & Jismi IT Services LLP
*
* REVISION HISTORY
*
*
******************************************************************************/
/**
* SCRIPT ID : { Name : BTN-208 JJ SS Email Customer Re-occurri , ID : customscript_btn_208_jj_ss_email_custome}
*
* DEPLOYMENT : { Title : BTN-208 JJ SS Email Customer Re-occurri , ID : customdeploy_btn_208_jj_ss_email_custome}
*
*
*/
define(['N/email', 'N/file', 'N/http', 'N/https', 'N/record', 'N/runtime', 'N/search', 'N/task', 'N/xml', 'SuiteScripts/customModule/moment'],
/**
* @param {email} email
* @param {file} file
* @param {http} http
* @param {https} https
* @param {record} record
* @param {runtime} runtime
* @param {search} search
* @param {task} task
* @param {xml} xml
* @param {moment} moment
*/
function (email, file, http, https, record, runtime, search, task, xml, moment) {
/**
* Definition of the Scheduled script trigger point.
*
* @param {Object} scriptContext
* @param {string} scriptContext.type - The context in which the script is executed. It is one of the values from the scriptContext.InvocationType enum.
* @Since 2015.2
*/
function executeCustomerReport(scriptContext) {
var currentDate = new Date();
logme('EXECUTION STARTS', 'EXECUTION BEGINS AT ' + (currentDate.toUTCString()));
try {
var remainingUsage = runtime.getCurrentScript().getRemainingUsage();
var lineCustomer = new Object();
var lineCustomerID = new Object();
var lineCustomerCCEmailID = new Object();
var lineCustomerName = new Object();
var lineCompanyName = new Object();
var lineOrderDate = new Object();
var lineOrder_Po = new Object();
var lineInvoice = new Object();
var lineBrand = new Object();
var lineSKU = new Object();
var lineUPC = new Object();
var lineItemTitle = new Object();
var lineQtyOrder = new Object();
var lineQtyBackOrder = new Object();
var currentCustomerID;
var templineCustomerCCEmailID, templineCompanyName, templineOrderDate, templineOrder_Po, templineInvoice, templineBrand, templineSKU, templineUPC, templineItemTitle, templineQtyOrder, templineQtyBackOrder;
var salesorderSearchObj = search.create({
type: "salesorder",
filters: [
["type", "anyof", "SalesOrd"],
"AND",
["formulanumeric: {quantity}-nvl({quantityshiprecv},0)-nvl({quantitycommitted},0)", "greaterthan", "0"],
"AND",
//["status", "anyof", "SalesOrd:B", "SalesOrd:E", "SalesOrd:D"],
["billingtransaction.status", "anyof", "CustInvc:A", "CustInvc:B", "CustInvc:D", "CustInvc:E", "CustInvc:V"],
"AND",
["datecreated", "onorafter", "startofthisbusinessweek"],
"AND",
["taxline", "is", "F"],
"AND",
["shipping", "is", "F"]
],
columns: [
search.createColumn({
name: "salesrep",
join: "customer",
sort: search.Sort.ASC
}),
"internalid",
"line",
search.createColumn({
name: "internalid",
join: "customer",
sort: search.Sort.ASC
}),
search.createColumn({
name: "entityid",
join: "customer"
}),
"datecreated",
"tranid",
"otherrefnum",
"billingtransaction",
"custcol4",
search.createColumn({
name: "upccode",
join: "item"
}),
"custcol1",
search.createColumn({
name: "custitem6",
join: "item"
}),
"quantity",
search.createColumn({
name: "formulanumeric",
formula: "{quantity}-nvl({quantityshiprecv},0)-nvl({quantitycommitted},0)"
}),
search.createColumn({
name: "companyname",
join: "customer"
}),
search.createColumn({
name: "email",
join: "customer"
}),
search.createColumn({
name: "custentity_bsp_mcc_emailordersto",
join: "customer"
})
]
}).run().each(function (result) {
currentCustomerID = result.getValue({
name: "internalid",
join: "customer"
});
currentCustomerID = (currentCustomerID.toString()).trim();
currentCustomerID = parseInt(currentCustomerID);
if (!checkForParameter(currentCustomerID, 'currentCustomerID')) {
//currentCustomerID is key to the objects, if there is no currentCustomerID,then skip this(current) iteration
return true;
}
if (typeof (lineCustomer[currentCustomerID]) == 'undefined' || lineCustomer[currentCustomerID] != true) {
//if objects with key currentCustomerID doesn't exist -> first entry
lineCustomer[currentCustomerID] = true;
lineCustomerID[currentCustomerID] = currentCustomerID;
lineCustomerName[currentCustomerID] = [result.getValue({
name: "entityid",
join: "customer"
})];
(lineCustomerName[currentCustomerID])[0] = (checkForParameter((lineCustomerName[currentCustomerID])[0], '(lineCustomerName[currentCustomerID])[0]') ? (lineCustomerName[currentCustomerID])[0] : ' ');
lineCompanyName[currentCustomerID] = [result.getValue({
name: "companyname",
join: "customer"
})];
(lineCompanyName[currentCustomerID])[0] = (checkForParameter((lineCompanyName[currentCustomerID])[0], '(lineCompanyName[currentCustomerID])[0]') ? (lineCompanyName[currentCustomerID])[0] : ' ');
lineOrderDate[currentCustomerID] = [result.getValue({
name: "datecreated"
})];
(lineOrderDate[currentCustomerID])[0] = (checkForParameter((lineOrderDate[currentCustomerID])[0], '(lineOrderDate[currentCustomerID])[0]') ? (lineOrderDate[currentCustomerID])[0] : ' ');
lineOrder_Po[currentCustomerID] = [result.getValue({
name: "tranid"
}) + '/' + result.getValue({
name: "otherrefnum"
})];
(lineOrder_Po[currentCustomerID])[0] = (checkForParameter((lineOrder_Po[currentCustomerID])[0], '(lineOrder_Po[currentCustomerID])[0]') ? (lineOrder_Po[currentCustomerID])[0] : ' ');
lineInvoice[currentCustomerID] = [result.getText({
name: "billingtransaction"
})];
(lineInvoice[currentCustomerID])[0] = (checkForParameter((lineInvoice[currentCustomerID])[0], '(lineInvoice[currentCustomerID])[0]') ? ((lineInvoice[currentCustomerID])[0]).split('#')[1] : ' ');
lineBrand[currentCustomerID] = [result.getValue({
name: "custcol4"
})];
(lineBrand[currentCustomerID])[0] = (checkForParameter((lineBrand[currentCustomerID])[0], '(lineBrand[currentCustomerID])[0]') ? (lineBrand[currentCustomerID])[0] : ' ');
lineSKU[currentCustomerID] = [result.getValue({
name: "custcol1"
})];
(lineSKU[currentCustomerID])[0] = (checkForParameter((lineSKU[currentCustomerID])[0], '(lineSKU[currentCustomerID])[0]') ? (lineSKU[currentCustomerID])[0] : ' ');
lineUPC[currentCustomerID] = [result.getValue({
name: "upccode",
join: "item"
})];
(lineUPC[currentCustomerID])[0] = (checkForParameter((lineUPC[currentCustomerID])[0], '(lineUPC[currentCustomerID])[0]') ? (lineUPC[currentCustomerID])[0] : ' ');
lineItemTitle[currentCustomerID] = [result.getValue({
name: "custitem6",
join: "item"
})];
(lineItemTitle[currentCustomerID])[0] = (checkForParameter((lineItemTitle[currentCustomerID])[0], '(lineItemTitle[currentCustomerID])[0]') ? (lineItemTitle[currentCustomerID])[0] : ' ');
lineQtyOrder[currentCustomerID] = [result.getValue({
name: "quantity"
})];
(lineQtyOrder[currentCustomerID])[0] = (checkForParameter((lineQtyOrder[currentCustomerID])[0], '(lineQtyOrder[currentCustomerID])[0]') ? (lineQtyOrder[currentCustomerID])[0] : ' ');
lineQtyBackOrder[currentCustomerID] = [result.getValue({
name: "formulanumeric",
formula: "{quantity}-nvl({quantityshiprecv},0)-nvl({quantitycommitted},0)"
})];
(lineQtyBackOrder[currentCustomerID])[0] = (checkForParameter((lineQtyBackOrder[currentCustomerID])[0], '(lineQtyBackOrder[currentCustomerID])[0]') ? (lineQtyBackOrder[currentCustomerID])[0] : ' ');
templineCustomerCCEmailID = result.getValue({
name: "custentity_bsp_mcc_emailordersto",
join: "customer"
});
if (checkForParameter(templineCustomerCCEmailID, 'templineCustomerCCEmailID')) {
lineCustomerCCEmailID[currentCustomerID] = formatStringtoArray(templineCustomerCCEmailID, ',');
} else {
lineCustomerCCEmailID[currentCustomerID] = undefined;
}
} else {
//if objects with key currentCustomerID exist -> Duplicate
templineCompanyName = result.getValue({
name: "companyname",
join: "customer"
});
templineCompanyName = (checkForParameter(templineCompanyName, 'templineCompanyName') ? templineCompanyName : ' ');
templineOrderDate = result.getValue({
name: "datecreated"
});
templineOrderDate = (checkForParameter(templineOrderDate, 'templineOrderDate') ? templineOrderDate : ' ');
templineOrder_Po = result.getValue({
name: "tranid"
}) + '/' + result.getValue({
name: "otherrefnum"
});
templineOrder_Po = (checkForParameter(templineOrder_Po, 'templineOrder_Po') ? templineOrder_Po : ' ');
templineInvoice = result.getText({
name: "billingtransaction"
});
templineInvoice = (checkForParameter(templineInvoice, 'templineInvoice') ? templineInvoice.split('#')[1] : ' ');
templineBrand = result.getValue({
name: "custcol4"
});
templineBrand = (checkForParameter(templineBrand, 'templineBrand') ? templineBrand : ' ');
templineSKU = result.getValue({
name: "custcol1"
});
templineSKU = (checkForParameter(templineSKU, 'templineSKU') ? templineSKU : ' ');
templineUPC = result.getValue({
name: "upccode",
join: "item"
});
templineUPC = (checkForParameter(templineUPC, 'templineUPC') ? templineUPC : ' ');
templineItemTitle = result.getValue({
name: "custitem6",
join: "item"
});
templineItemTitle = (checkForParameter(templineItemTitle, 'templineItemTitle') ? templineItemTitle : ' ');
templineQtyOrder = result.getValue({
name: "quantity"
});
templineQtyOrder = (checkForParameter(templineQtyOrder, 'templineQtyOrder') ? templineQtyOrder : ' ');
templineQtyBackOrder = result.getValue({
name: "formulanumeric",
formula: "{quantity}-nvl({quantityshiprecv},0)-nvl({quantitycommitted},0)"
});
templineQtyBackOrder = (checkForParameter(templineQtyBackOrder, 'templineQtyBackOrder') ? templineQtyBackOrder : ' ');
(lineCompanyName[currentCustomerID]).push(templineCompanyName);
(lineOrderDate[currentCustomerID]).push(templineOrderDate);
(lineOrder_Po[currentCustomerID]).push(templineOrder_Po);
(lineInvoice[currentCustomerID]).push(templineInvoice);
(lineBrand[currentCustomerID]).push(templineBrand);
(lineSKU[currentCustomerID]).push(templineSKU);
(lineUPC[currentCustomerID]).push(templineUPC);
(lineItemTitle[currentCustomerID]).push(templineItemTitle);
(lineQtyOrder[currentCustomerID]).push(templineQtyOrder);
(lineQtyBackOrder[currentCustomerID]).push(templineQtyBackOrder);
}
return true;
});
var SCRIPT_RERUN_FLAG = false;
var arrayIndex = 0;
var waitForResponse;
var currentLimitJSON, currentLimitFile, fileID, FILE_EXISTS = false;
try {
//If file exists,then arrayIndex exits
currentLimitFile = file.load({
id: 'BTN-208 Re-occurring Reports/Customer/currentLimit.json'
});
currentLimitJSON = currentLimitFile.getContents();
currentLimitJSON = JSON.parse(currentLimitJSON);
arrayIndex = parseInt(currentLimitJSON.arrayIndex);
FILE_EXISTS = true;
logme('EXISTS currentLimit.json', 'Executing the remiander');
} catch (err) {
//If file doesn't exists,then arrayIndex is 0
arrayIndex = 0;
FILE_EXISTS = false;
logme('NO currentLimit.json', 'Executing for first time');
}
/*
Creating JSON object so that we can convert it to CSV
*/
// headers for csv
var headers = {
header_1: 'Company Name',
header_2: 'Order Date',
header_3: 'Order/PO',
header_4: 'Invoice #',
header_5: 'Brand',
header_6: 'SKU',
header_7: 'UPC',
header_8: 'Item Title',
header_9: 'Qty Ordered',
header_10: 'Qty Backordered'
};
var itemsFormatted_Array = new Array();
var itemsFormatted_Object = new Object();
var fileTitle_Object = new Object();
var fileObj;
var currentCustomer, currentLine;
var BACK_ORDERED_FLAG = false;
//to send email to customer, create JSON content for each customer
for (currentCustomer = 0; currentCustomer < Object.keys(lineCustomerID).length; currentCustomer++) {
itemsFormatted_Array.push(headers);
for (currentLine = 0; currentLine < lineOrderDate[Object.keys(lineCustomerID)[currentCustomer]].length; currentLine++) {
BACK_ORDERED_FLAG = true;
itemsFormatted_Array.push({
header_1: ((lineCompanyName[Object.keys(lineCustomerID)[currentCustomer]])[currentLine]).replace(/,/g, '%2C').replace(/"/g, '%22').replace(/'/g, '%27').replace(/\n/g, '%0A'),
header_2: ((lineOrderDate[Object.keys(lineCustomerID)[currentCustomer]])[currentLine]).replace(/,/g, '%2C').replace(/"/g, '%22').replace(/'/g, '%27').replace(/\n/g, '%0A'),
header_3: (lineOrder_Po[Object.keys(lineCustomerID)[currentCustomer]])[currentLine],
header_4: (lineInvoice[Object.keys(lineCustomerID)[currentCustomer]])[currentLine],
header_5: (lineBrand[Object.keys(lineCustomerID)[currentCustomer]])[currentLine],
header_6: (lineSKU[Object.keys(lineCustomerID)[currentCustomer]])[currentLine],
header_7: (lineUPC[Object.keys(lineCustomerID)[currentCustomer]])[currentLine],
header_8: (((lineItemTitle[Object.keys(lineCustomerID)[currentCustomer]])[currentLine]).replace(/,/g, '%2C').replace(/"/g, '%22').replace(/'/g, '%27').replace(/\n/g, '%0A')).toString(),
header_9: (lineQtyOrder[Object.keys(lineCustomerID)[currentCustomer]])[currentLine],
header_10: (lineQtyBackOrder[Object.keys(lineCustomerID)[currentCustomer]])[currentLine]
});
}
itemsFormatted_Object[Object.keys(lineCustomerID)[currentCustomer]] = itemsFormatted_Array;
fileTitle_Object[Object.keys(lineCustomerID)[currentCustomer]] = lineCustomerName[Object.keys(lineCustomerID)[currentCustomer]];
itemsFormatted_Array = undefined;
itemsFormatted_Array = new Array();
}
//to send email for each Customer
for (var i = arrayIndex; i < Object.keys(lineCustomerID).length; i++) {
remainingUsage = runtime.getCurrentScript().getRemainingUsage();
if (parseInt(remainingUsage) < 1000) {
//to reschedule
SCRIPT_RERUN_FLAG = true;
arrayIndex = i;
currentLimitJSON = {
arrayIndex: arrayIndex
};
// save a json file to file cabinet with the current arrayIndex (so that we know where to begin when script reschedules)
currentLimitFile = file.create({
name: 'currentLimit.json',
fileType: file.Type.JSON,
contents: JSON.stringify(currentLimitJSON),
encoding: file.Encoding.UTF8,
isInactive: true,
folder: 9334 // 9334 : BTN-208 Re-occurring Reports > Customer
});
fileID = currentLimitFile.save();
FILE_EXISTS = true;
break;
}
fileObj = exportCSVFile(headers, itemsFormatted_Object[lineCustomerID[Object.keys(lineCustomerID)[i]]], fileTitle_Object[lineCustomerID[Object.keys(lineCustomerID)[i]]]);
waitForResponse = createEmailTemplate(lineCustomerID[Object.keys(lineCustomerID)[i]], lineCustomerCCEmailID[Object.keys(lineCustomerID)[i]], lineCustomerName[Object.keys(lineCustomerID)[i]], lineCompanyName[Object.keys(lineCustomerID)[i]], lineOrderDate[Object.keys(lineCustomerID)[i]], lineOrder_Po[Object.keys(lineCustomerID)[i]], lineInvoice[Object.keys(lineCustomerID)[i]], lineBrand[Object.keys(lineCustomerID)[i]], lineSKU[Object.keys(lineCustomerID)[i]], lineUPC[Object.keys(lineCustomerID)[i]], lineItemTitle[Object.keys(lineCustomerID)[i]], lineQtyOrder[Object.keys(lineCustomerID)[i]], lineQtyBackOrder[Object.keys(lineCustomerID)[i]], fileObj);
logme("SEND Customer EMAIL : index,customer,waitForResponse", i + "," + lineCustomerID[Object.keys(lineCustomerID)[i]] + "," + waitForResponse);
if (FILE_EXISTS && (i == ((Object.keys(lineQtyBackOrder).length) - 1))) {
//to delete file in file cabibet
file.delete({
id: currentLimitFile.id
});
}
}
//to reschedule(rerun) script again
if (SCRIPT_RERUN_FLAG) {
remainingUsage = runtime.getCurrentScript().getRemainingUsage();
logme('remainingUsage', remainingUsage);
currentDate = new Date();
logme('EXECUTION RESCHEDULED AT ARRAYINDEX ' + arrayIndex, 'EXECUTION RESCHEDULED ON ' + (currentDate.toUTCString()));
rescheduleScriptandReturn(arrayIndex);
}
currentDate = new Date();
logme('EXECUTION ENDS', 'EXECUTION ENDS AT ' + (currentDate.toUTCString()));
} catch (err) {
currentDate = new Date();
logme('EXECUTION FAILED', 'EXECUTION THROWS ERROR AT ' + (currentDate.toUTCString()));
handleTryCatchError(err, 'function executeCustomerReport()');
}
}
/* convert json to csv*/
function convertToCSV(objArray) {
try {
var array = ((typeof (objArray) != 'object') ? (JSON.parse(objArray)) : (objArray));
var str = '';
for (var i = 0; i < array.length; i++) {
var line = '';
for (var index in array[i]) {
if (line != '') {
line += ',';
}
line += array[i][index];
}
str += line + '\r\n';
}
return str;
} catch (err) {
handleTryCatchError(err, 'function convertToCSV()');
}
}
/* Save file in file cabinet as CSV*/
function exportCSVFile(headers, items, fileTitle) {
try {
/* if (headers) {
items.unshift(headers);
}*/
// Convert Object to JSON
var jsonObject = JSON.stringify(items);
var csvFile = convertToCSV(jsonObject);
var exportedFilename = (checkForParameter(fileTitle, 'fileTitle') ? (fileTitle + '.csv') : ('export.csv'));
var fileObj = file.create({
name: exportedFilename,
fileType: file.Type.CSV,
//contents: (csvFile).replace(/%2C/g, '/'),
contents: csvFile,
encoding: file.Encoding.UTF8,
isInactive: true,
folder: 9334 // 9334 : BTN-208 Re-occurring Reports > Customer
});
//var fileID = fileObj.save();
return fileObj;
} catch (err) {
handleTryCatchError(err, 'function exportCSVFile()');
return false;
}
}
/*to create email template for customer*/
function createEmailTemplate(CUSTOMER_INTERNAL_ID, lineCustomerCCEmailID, lineCustomerName, lineCompanyName, lineOrderDate, lineOrder_Po, lineInvoice, lineBrand, lineSKU, lineUPC, lineItemTitle, lineQtyOrder, lineQtyBackOrder, fileObj) {
try {
var SUBJECT = 'MyCoolCell Back Order Report Week of ' + (moment().startOf('isoWeek').format('L'));
var tableBGFlag = true;
var waitForResponse;
var EMAIL_BODY = "";
EMAIL_BODY += "<br><p><div style='color:black;font-weight:normal;'>Dear " + (checkForParameter(lineCustomerName, 'lineCustomerName') ? (lineCustomerName) : ('Client')) + ",</div></p>";
EMAIL_BODY += "<br><p><div style='color:black;font-weight:normal;'>This notice is to inform you that the following item(s) from your recent order(s) were not shipped or shipped in full. </div></p>";
EMAIL_BODY += "<br><p><div style='color:black;font-weight:normal;'>We strive to maintain adequate inventory on all our accessories to meet our valued customer's needs, but due to the extensive product selection and ever-changing demands in the marketplace, the products below are out of stock at this time. We apologize for any inconvenience.</div></p>";
EMAIL_BODY += "<br><p><div style='color:red;font-weight:normal;'>If you would like to receive these products when they come back in stock, please contact your MyCoolCell Sales Rep at 888-388-8877 or by email or place a new order on our site. Please note that back ordered items will not automatically be shipped to you once they arrive back in stock.</div></p><br>";
EMAIL_BODY += "<div><div style=\"overflow-x: auto;\"><div>";
EMAIL_BODY += " <table style=\"font-family:arial, sans-serif;border-collapse:collapse;width:100%;\">";
EMAIL_BODY += " <thead>";
EMAIL_BODY += " <tr>";
EMAIL_BODY += " <th style=\"border-width:1px;border-style:solid;border-color:#cecece;text-align:left;padding-top:8px;padding-bottom:8px;padding-right:8px;padding-left:8px;\">Company Name<\/th>";
EMAIL_BODY += " <th style=\"border-width:1px;border-style:solid;border-color:#cecece;text-align:left;padding-top:8px;padding-bottom:8px;padding-right:8px;padding-left:8px;\">Order Date<\/th>";
EMAIL_BODY += " <th style=\"border-width:1px;border-style:solid;border-color:#cecece;text-align:left;padding-top:8px;padding-bottom:8px;padding-right:8px;padding-left:8px;\">Order \/ PO #<\/th>";
EMAIL_BODY += " <th style=\"border-width:1px;border-style:solid;border-color:#cecece;text-align:left;padding-top:8px;padding-bottom:8px;padding-right:8px;padding-left:8px;\">Invoice #<\/th>";
EMAIL_BODY += " <th style=\"border-width:1px;border-style:solid;border-color:#cecece;text-align:left;padding-top:8px;padding-bottom:8px;padding-right:8px;padding-left:8px;\">Brand<\/th>";
EMAIL_BODY += " <th style=\"border-width:1px;border-style:solid;border-color:#cecece;text-align:left;padding-top:8px;padding-bottom:8px;padding-right:8px;padding-left:8px;\">SKU <\/th>";
EMAIL_BODY += " <th style=\"border-width:1px;border-style:solid;border-color:#cecece;text-align:left;padding-top:8px;padding-bottom:8px;padding-right:8px;padding-left:8px;\">UPC <\/th>";
EMAIL_BODY += " <th style=\"border-width:1px;border-style:solid;border-color:#cecece;text-align:left;padding-top:8px;padding-bottom:8px;padding-right:8px;padding-left:8px;\">Item Title<\/th>";
EMAIL_BODY += " <th style=\"border-width:1px;border-style:solid;border-color:#cecece;text-align:left;padding-top:8px;padding-bottom:8px;padding-right:8px;padding-left:8px;\">Qty Ordered<\/th>";
EMAIL_BODY += " <th style=\"border-width:1px;border-style:solid;border-color:#cecece;text-align:left;padding-top:8px;padding-bottom:8px;padding-right:8px;padding-left:8px;\">Qty Backordered<\/th>";
EMAIL_BODY += " <\/tr>";
EMAIL_BODY += " <\/thead>";
EMAIL_BODY += " <tbody>";
for (var i = 0; i < lineOrderDate.length; i++) {
if (tableBGFlag) {
EMAIL_BODY += " <!--FIRST-->";
EMAIL_BODY += " <tr>";
EMAIL_BODY += " <td style=\"border-width:1px;border-style:solid;border-color:#cecece;text-align:left;padding-top:8px;padding-bottom:8px;padding-right:8px;padding-left:8px;background-color:#dddddd;\">" + lineCompanyName[i] + "<\/td>";
EMAIL_BODY += " <td style=\"border-width:1px;border-style:solid;border-color:#cecece;text-align:left;padding-top:8px;padding-bottom:8px;padding-right:8px;padding-left:8px;background-color:#dddddd;\">" + lineOrderDate[i] + "<\/td>";
EMAIL_BODY += " <td style=\"border-width:1px;border-style:solid;border-color:#cecece;text-align:left;padding-top:8px;padding-bottom:8px;padding-right:8px;padding-left:8px;background-color:#dddddd;\">" + lineOrder_Po[i] + "<\/td>";
EMAIL_BODY += " <td style=\"border-width:1px;border-style:solid;border-color:#cecece;text-align:left;padding-top:8px;padding-bottom:8px;padding-right:8px;padding-left:8px;background-color:#dddddd;\">" + lineInvoice[i] + "<\/td>";
EMAIL_BODY += " <td style=\"border-width:1px;border-style:solid;border-color:#cecece;text-align:left;padding-top:8px;padding-bottom:8px;padding-right:8px;padding-left:8px;background-color:#dddddd;\">" + lineBrand[i] + "<\/td>";
EMAIL_BODY += " <td style=\"border-width:1px;border-style:solid;border-color:#cecece;text-align:left;padding-top:8px;padding-bottom:8px;padding-right:8px;padding-left:8px;background-color:#dddddd;\">" + lineSKU[i] + "<\/td>";
EMAIL_BODY += " <td style=\"border-width:1px;border-style:solid;border-color:#cecece;text-align:left;padding-top:8px;padding-bottom:8px;padding-right:8px;padding-left:8px;background-color:#dddddd;\">" + lineUPC[i] + "<\/td>";
EMAIL_BODY += " <td style=\"border-width:1px;border-style:solid;border-color:#cecece;text-align:left;padding-top:8px;padding-bottom:8px;padding-right:8px;padding-left:8px;background-color:#dddddd;\">" + lineItemTitle[i] + "<\/td>";
EMAIL_BODY += " <td style=\"border-width:1px;border-style:solid;border-color:#cecece;text-align:left;padding-top:8px;padding-bottom:8px;padding-right:8px;padding-left:8px;background-color:#dddddd;\">" + lineQtyOrder[i] + "<\/td>";
EMAIL_BODY += " <td style=\"border-width:1px;border-style:solid;border-color:#cecece;text-align:left;padding-top:8px;padding-bottom:8px;padding-right:8px;padding-left:8px;background-color:#dddddd;\">" + lineQtyBackOrder[i] + "<\/td>";
EMAIL_BODY += " <\/tr>";
tableBGFlag = false;
} else {
EMAIL_BODY += " <!--SECOND-->";
EMAIL_BODY += " <tr>";
EMAIL_BODY += " <td style=\"border-width:1px;border-style:solid;border-color:#cecece;text-align:left;padding-top:8px;padding-bottom:8px;padding-right:8px;padding-left:8px;background-color:#ffffff;\">" + lineCompanyName[i] + "<\/td>";
EMAIL_BODY += " <td style=\"border-width:1px;border-style:solid;border-color:#cecece;text-align:left;padding-top:8px;padding-bottom:8px;padding-right:8px;padding-left:8px;background-color:#ffffff;\">" + lineOrderDate[i] + "<\/td>";
EMAIL_BODY += " <td style=\"border-width:1px;border-style:solid;border-color:#cecece;text-align:left;padding-top:8px;padding-bottom:8px;padding-right:8px;padding-left:8px;background-color:#ffffff;\">" + lineOrder_Po[i] + "<\/td>";
EMAIL_BODY += " <td style=\"border-width:1px;border-style:solid;border-color:#cecece;text-align:left;padding-top:8px;padding-bottom:8px;padding-right:8px;padding-left:8px;background-color:#ffffff;\">" + lineInvoice[i] + "<\/td>";
EMAIL_BODY += " <td style=\"border-width:1px;border-style:solid;border-color:#cecece;text-align:left;padding-top:8px;padding-bottom:8px;padding-right:8px;padding-left:8px;background-color:#ffffff;\">" + lineBrand[i] + "<\/td>";
EMAIL_BODY += " <td style=\"border-width:1px;border-style:solid;border-color:#cecece;text-align:left;padding-top:8px;padding-bottom:8px;padding-right:8px;padding-left:8px;background-color:#ffffff;\">" + lineSKU[i] + "<\/td>";
EMAIL_BODY += " <td style=\"border-width:1px;border-style:solid;border-color:#cecece;text-align:left;padding-top:8px;padding-bottom:8px;padding-right:8px;padding-left:8px;background-color:#ffffff;\">" + lineUPC[i] + "<\/td>";
EMAIL_BODY += " <td style=\"border-width:1px;border-style:solid;border-color:#cecece;text-align:left;padding-top:8px;padding-bottom:8px;padding-right:8px;padding-left:8px;background-color:#ffffff;\">" + lineItemTitle[i] + "<\/td>";
EMAIL_BODY += " <td style=\"border-width:1px;border-style:solid;border-color:#cecece;text-align:left;padding-top:8px;padding-bottom:8px;padding-right:8px;padding-left:8px;background-color:#ffffff;\">" + lineQtyOrder[i] + "<\/td>";
EMAIL_BODY += " <td style=\"border-width:1px;border-style:solid;border-color:#cecece;text-align:left;padding-top:8px;padding-bottom:8px;padding-right:8px;padding-left:8px;background-color:#ffffff;\">" + lineQtyBackOrder[i] + "<\/td>";
EMAIL_BODY += " <\/tr>";
tableBGFlag = true;
}
}
EMAIL_BODY += " <\/tbody>";
EMAIL_BODY += " <\/table>";
EMAIL_BODY += "<\/div><\/div><\/div>";
EMAIL_BODY += "<br><p><div style='color:black;font-weight:bold;'>We appreciate your business and look forward to servicing you in the future.<br>Thank you for choosing MyCoolCell!<br> <a href='http://www.mycoolcell.net/' style='color:blue;font-weight:bold;'>www.mycoolcell.net</a> </div></p><br><br>";
waitForResponse = sendCustomerEmailReport(CUSTOMER_INTERNAL_ID, lineCustomerCCEmailID, SUBJECT, EMAIL_BODY, fileObj);
return waitForResponse;
} catch (err) {
handleTryCatchError(err, 'function createEmailTemplate()');
return false;
}
}
/*to send email to the customer*/
function sendCustomerEmailReport(CUSTOMER_INTERNAL_ID, CustomerCCEmailID, SUBJECT, EMAIL_BODY, fileObj) {
try {
var senderId = -5; // -5 : albert@mycoolcell.net
var recipientId = CUSTOMER_INTERNAL_ID;
if (checkForParameter(CustomerCCEmailID, 'CustomerCCEmailID')) {
email.send({
author: senderId,
recipients: recipientId,
subject: SUBJECT,
body: EMAIL_BODY,
attachments: [fileObj],
cc: CustomerCCEmailID,
relatedRecords: {
entityId: recipientId,
}
});
} else {
email.send({
author: senderId,
recipients: recipientId,
subject: SUBJECT,
body: EMAIL_BODY,
attachments: [fileObj],
relatedRecords: {
entityId: recipientId,
}
});
}
return true;
} catch (err) {
handleTryCatchError(err, 'function sendCustomerEmailReport()');
return false;
}
}
/*Try to reschedule script*/
function rescheduleScriptandReturn(indexParam) {
try {
var mrTask = task.create({
taskType: task.TaskType.SCHEDULED_SCRIPT,
scriptId: "customscript_btn_208_jj_ss_email_custome",
deploymentId: "customdeploy_btn_208_jj_ss_email_custome",
params: {
arrayIndex: indexParam
}
});
var scriptTaskId = mrTask.submit();
logme("rescheduleScriptandReturn_scriptTaskId", scriptTaskId);
} catch (err) {
handleTryCatchError(err, 'function rescheduleScriptandReturn()');
}
}
/*To get current Date for start of the week (Date of Monday)*/
function getCurrentDate() {
//Date format is MM/DD/YYYY
var currentDate = new Date();
var currentMonth = currentDate.getMonth() + 1;
var currentDay = currentDate.getDate();
var currentYear = currentDate.getFullYear();
return (currentMonth + '/' + currentDay + '/' + currentYear);
}
/*to check for a parameter*/
function checkForParameter(parameter, parameterName) {
if (parameter != "" && parameter != null && parameter != undefined && parameter != "undefined" && parameter != " ") {
return true;
} else {
//logme('No ' + parameterName + ' found', 'No ' + parameterName + ' found');
return false;
}
}
/*to handle 'try' error in try-catch statement*/
function handleTryCatchError(error, errorLocation) {
logme('Error on ' + errorLocation, getError(error));
logme('Error on ' + errorLocation, error.message);
}
/*to format string to array*/
function formatStringtoArray(dataStr, delimiter) {
var result = new Array();
if (dataStr.indexOf(delimiter) > 0) {
dataStr = dataStr.split(delimiter);
}
if (!Array.isArray(dataStr)) {
result.push(dataStr);
} else {
result = dataStr;
}
if (checkForParameter(result, 'formatStringtoArray result')) {
var index = 0;
while (index < result.length) {
result[index] = (((result[index]).toString()).trim());
if (!validateEmail(((checkForParameter(result[index], 'emailSTR')) ? (result[index]) : ('false')))) {
result.remove(index);
index--;
}
index++;
}
}
return result;
}
/*to format string to array*/
function validateEmail(emailStr) {
var reEmail = /^(?:[\w\!\#\$\%\&\'\*\+\-\/\=\?\^\`\{\|\}\~]+\.)*[\w\!\#\$\%\&\'\*\+\-\/\=\?\^\`\{\|\}\~]+@(?:(?:(?:[a-zA-Z0-9](?:[a-zA-Z0-9\-](?!\.)){0,61}[a-zA-Z0-9]?\.)+[a-zA-Z0-9](?:[a-zA-Z0-9\-](?!$)){0,61}[a-zA-Z0-9]?)|(?:\[(?:(?:[01]?\d{1,2}|2[0-4]\d|25[0-5])\.){3}(?:[01]?\d{1,2}|2[0-4]\d|25[0-5])\]))$/;
if (emailStr.match(reEmail)) {
return true;
} else {
return false;
}
}
return {
execute: executeCustomerReport
};
});
/*******************************************************************************
* return error
*
* @param e
* @returns
*
*/
function getError(e) {
var stErrMsg = '';
if (e.getDetails != undefined) {
stErrMsg = '_' + e.getCode() + '<br>' + e.getDetails() + '<br>' +
e.getStackTrace();
} else {
stErrMsg = '_' + e.toString();
}
return stErrMsg;
}
/*******************************************************************************
* Log these data
*
* @param title
* @param details
* @returns
*
*/
function logme(title, details) {
log.debug({
title: title,
details: details
});
}
/*******************************************************************************/
// to delete an element from an Array
Array.prototype.remove = function (from, to) {
var rest = this.slice(parseInt(to || from) + 1 || this.length);
this.length = from < 0 ? this.length + from : from;
return this.push.apply(this, rest);
};