/**
* @NApiVersion 2.1
* @NScriptType MapReduceScript
*/
define(['N/email', 'N/record', 'N/render', 'N/recordContext', 'N/runtime','N/currentRecord', 'N/search','N/file'],
/**
* @param{email} email
* @param{record} record
* @param{recordContext} recordContext
* @param{runtime} runtime
* @param{search} search
*/
(email, record,render, recordContext, runtime, currentRecord, search, file) => {
/**
* @description the function to check whether a value exists in parameter
* @param parameter -passing parameter
* @param parameterName - passing parameter name
* @returns{Boolean}
*/
function checkForParameter(parameter, parameterName) {
if (
parameter != "" &&
parameter != null &&
parameter != undefined &&
parameter != "null" &&
parameter != "undefined" &&
parameter != " " &&
parameter != false
) {
return true;
} else {
if (parameterName)
log.debug(
"Empty Value found",
"Empty Value for parameter " + parameterName
);
return false;
}
}
const getInputData = (inputContext) => {
try {
var requestBody = runtime.getCurrentScript().getParameter('custscript_jj_poid')
log.debug("requestBody", requestBody);
var fileObj = file.load({ id: requestBody });
var poArray = [];
var purchaseObj = fileObj.getContents();
log.debug("purchaseObj", purchaseObj)
var purchaseOrd = JSON.parse(purchaseObj)
var purchaseOrder=purchaseOrd.purchaseorder
log.debug("purchaseOrder",purchaseOrder)
var objLength = Object.keys(purchaseOrder).length
log.debug("objLength", objLength);
const isEmpty = Object.keys(purchaseOrder).every(x => (x === null || x === ''));
log.debug("isEmpty",isEmpty)
// create dynamic filters
var filteredIDs= [
["type", "anyof", "PurchOrd"],
"AND",
["mainline","is","T"],
"AND",
["cogs","is","F"],
"AND",
["taxline","is","F"],
"AND",
["shipping","is","F"],
"AND",
];
var filterArray=[];
var identificationFlag = 0;
for (let i = 0; i < objLength; i++) {
var poNum = Object.keys(purchaseOrder)[i]
//check the poNum value is empty or not
if(checkForParameter(poNum)){
identificationFlag++;
filterArray.push([["numbertext", "is", poNum]])
filterArray.push('OR');
}
}
filterArray.pop();
filteredIDs.push(filterArray)
log.debug("filteredIDs",filteredIDs)
if(identificationFlag == 0){
return [];
}
// search to get the internal id of the PO
var purchaseorderSearchObj = search.create({
type: "purchaseorder",
filters:[filteredIDs],
columns:
[
search.createColumn({name: "tranid", label: "Document Number"}),
search.createColumn({name: "internalid", label: "Internal ID"})
]
});
var docArray = [];
var searchResultCount = purchaseorderSearchObj.runPaged().count;
if (searchResultCount > 0) {
purchaseorderSearchObj.run().each(function (result) {
var docObj={};
docObj.poId = result.getValue({ name: "tranid",label: "Document Number"});
docObj.internalId = result.getValue({name: "internalid",label: "Internal ID"});
docArray.push(docObj);
return true;
});
}
log.debug('docArray',docArray)
return docArray
}
catch (e) {
log.debug('Error @ GetInputData',e);
return [];
}
}
const reduce = (reduceContext) => {
try {
var requestBody = runtime.getCurrentScript().getParameter('custscript_jj_poid')
var purchaseObj = file.load({id: requestBody}).getContents();
var purchaseOrd = JSON.parse(purchaseObj);
var purchaseOrder = purchaseOrd.purchaseorder;
var dataObj = JSON.parse(reduceContext.values);
var docNum = dataObj.poId;
var inId = dataObj.internalId;
var addTracknum = search.lookupFields({
type: "purchaseorder",
id: inId,
columns: ["trackingnumbers"]
}).trackingnumbers
var trackNo = purchaseOrder[docNum];
log.debug("trackNo",trackNo);
if (!addTracknum) {
record.submitFields({
type: record.Type.PURCHASE_ORDER,
id: inId,
values: {
'trackingnumbers': trackNo.toString()
}
});
// create object for storing po and tracking number
var poObject = {
ponum: docNum,
tracknum: trackNo
}
log.debug("poObject", poObject)
reduceContext.write({
key: 'success',
value: poObject
})
}
} catch (e) {
log.debug('Error@Reduce',e)
}
}
const summarize = (summaryContext) => {
try{
var flagCount = 0;
var poArray= ["PO Number", "Tracking Number"];
var csvFileData= poArray.toString() + '\r\n';
summaryContext.output.iterator().each(function (key,value) {
let parseSummary= JSON.parse(value);
//csvArray.push(parseSummary)
if(key==='success')
flagCount++;
csvFileData += parseSummary.ponum +','+parseSummary.tracknum+'\r\n'
return true;
});
log.debug('flagCount',flagCount);
if(flagCount > 0){
var today= new Date();
var csvfileObj = file.create({
name: 'Tracking number update:' + today + '.csv',
fileType: file.Type.CSV,
contents: csvFileData,
encoding: file.Encoding.UTF8,
});
var recEmail= 'jacob@alliedpowerandcontrol.com';
var authId=-5
//send email to the user
email.send({
author:authId,
recipients:recEmail,
body:'Update Tracking Numbers',
subject:'Tracking Number Updation',
attachments:[csvfileObj]
});
}
}catch (e) {
log.debug('Error@summarize',e)
}
}
return {getInputData, reduce,summarize}
});