/**
* @NApiVersion 2.1
* @NScriptType UserEventScript
*/
define(['N/email', 'N/record', 'N/render', 'N/runtime', 'N/search'],
/**
* @param{email} email
* @param{record} record
* @param{render} render
* @param{runtime} runtime
* @param{search} search
*/
(email, record, render, runtime, search) => {
const afterSubmit = (scriptContext) => {
try {
if (scriptContext.type === scriptContext.UserEventType.CREATE) {
let currentRec = scriptContext.newRecord;
log.debug("record Id", currentRec);
let paymentId = currentRec.getValue({
fieldId: 'id'
})
log.debug("paymentId", paymentId);
let payId = currentRec.id;
var customerpaymentSearchObj = search.create({
type: "customerpayment",
filters:
[
["type", "anyof", "CustPymt"],
"AND",
["appliedtotransaction.type", "anyof", "CustInvc"],
"AND",
["internalid", "anyof", paymentId]
],
columns:
[
search.createColumn({
name: "internalid",
join: "appliedToTransaction",
label: "Internal ID"
})
]
});
var searchResult = customerpaymentSearchObj.run();
log.debug("customerpaymentSearchObj result ", searchResult);
var invoiceId;
var results = searchResult.getRange({start: 0, end: 50});
log.debug("results", results);
for (var i = 0; i < results.length; i++) {
invoiceId = results[i].getValue({
name: "internalid",
join: "appliedToTransaction",
label: "Internal ID"
});
log.debug("invoiceId", invoiceId);
var objRecord = record.load({
type: record.Type.INVOICE,
id: invoiceId,
isDynamic: true,
});
let terms = objRecord.getValue({
fieldId: 'terms'
})
log.debug("terms", terms)
let status = objRecord.getValue({
fieldId: 'statusRef'
})
log.debug("status", status)
log.debug("objRecord", objRecord)
if (status === "paidInFull") {
let customerName = objRecord.getValue({
fieldId: 'entity'
})
log.debug("Customer Name", customerName);
// load search
var customerSearch = search.load({
id: 'customsearch_jj_ctg_31_customer_search'
});
var custArray = [];
var internalId;
var searchResultCount = customerSearch.runPaged().count;
//log.debug("customerSearchObj result count",searchResultCount);
customerSearch.run().each(function (result) {
internalId = result.getValue({name: "internalid", label: "Internal ID"})
custArray.push(internalId)
return true;
});
log.debug("custArray", custArray);
var checkExist =custArray.includes(customerName);
log.debug("checkExist", checkExist);
if(checkExist === true){
var contactSearchObj = search.create({
type: "contact",
filters:
[
["company", "anyof", customerName],
"AND",
["custentity_invoicenotification", "is", "T"]
],
columns:
[
search.createColumn({
name: "entityid",
sort: search.Sort.ASC,
label: "Name"
}),
search.createColumn({name: "email", label: "Email"}),
search.createColumn({name: "company", label: "Company"}),
search.createColumn({name: "internalid", label: "Internal ID"}),
search.createColumn({
name: "custentity_invoicenotification",
label: "Receive Invoices"
})
]
});
var searchResultnew = contactSearchObj.run();
log.debug("customerSearchObj result ", searchResultnew);
var emailid;
var resultsInv = searchResultnew.getRange({start: 0, end: 50});
log.debug("resultsInv", resultsInv)
for (var k = 0; k < resultsInv.length; k++) {
emailid = resultsInv[k].getValue({name: "email", label: "Email"});
log.debug("email", emailid);
var currentuser = runtime.getCurrentUser().id;
log.debug("currentuser", currentuser)
//Get Email Template
var mergeResult = render.mergeEmail({
templateId: 10,
transactionId: parseInt(invoiceId),
entity: {
type: 'customer',
id: parseInt(customerName)
}
});
var emailSubject = mergeResult.subject;
var emailBody = mergeResult.body;
// Creating PDF object of the transaction
var transactionFile = render.transaction({
entityId: parseInt(invoiceId),
printMode: render.PrintMode.PDF
});
if (emailid && !terms) {
email.send({
author: 4885,
recipients: emailid,
subject: emailSubject,
body: emailBody,
attachments: [transactionFile],
relatedRecords: {
transactionId: parseInt(payId)
}
});
}
}
}
}
}
}
} catch (e) {
log.debug("error", e);
}
}
return {afterSubmit}
});