/**
/**
* @NApiVersion 2.1
* @NScriptType MassUpdateScript
*/
/********************************************************************************************************************************************************************
* IBS Electronics Group-USA-NS
*
* ${IEGUN-510} : ${Set Requsted Order by Line Key on Purchase Order}
*
*********************************************************************************************************************************************************************
*
* Author: Jobin & Jismi
*
* Date Created : 16-January-2024
*
* Description :This Mass script is used to set the request order based on the request key for historal purchase orders.
*
* REVISION HISTORY
*
* @version 1.0 IEGUN-510 : 16-January-2024 : Created the initial build by JJ0170
*
***********************************************************************************************************************************************************************/
define([‘N/record’, ‘N/search’],
/**
* @param{record} record
* @param{search} search
*/
(record, search) => {
/**
* Function to check whether the given parameter argument has value on it or is it empty.
* @param {*} parameter – parameter which contains/references some values
* @returns {boolean} – true if there exist a value else false
*/
function checkForParameter(parameter) {
try {
if (parameter !== “” && parameter !== null && parameter !== undefined && parameter !== false && parameter !== “null” && parameter !== “undefined” && parameter !== ” “ && parameter !== ‘false’) {
return true;
}
else {
return false;
}
}
catch (e) {
log.error(“Error @ checkForParameter”, e);
return false;
}
}
/**
* Function to fetch the sales order id based on the item line unique key
* @param {number} requestKeyArray – Line unique key
* @returns {number} requestOrderArray – array of objects containing request key and request order
*/
function fetchRequestOrderFromSalesOrder(requestKeyArray) {
try {
let requestKeys = [];
if (typeof (requestKeyArray) == “string”) {
requestKeys = `’${requestKeyArray}‘` //to put requestKeysArray within single quotes
}
else if (requestKeyArray.length > 0 && typeof (requestKeyArray) == “object”) {
for (let i = 0; i < requestKeyArray.length; i++) {
if (i == 0) {
if (requestKeyArray.length == 1) {
requestKeys += “‘”
requestKeys += requestKeyArray[i].trim();
requestKeys += “‘”
}
else {
requestKeys += “‘”
requestKeys += requestKeyArray[i].trim();
requestKeys += “‘,”
}
}
else if (i == (requestKeyArray.length – 1)) {
if (requestKeyArray.length !== 1) {
requestKeys += “‘”
requestKeys += requestKeyArray[i].trim();
requestKeys += “‘”
}
}
else {
requestKeys += “‘”
requestKeys += requestKeyArray[i].trim();
requestKeys += “‘,”
}
}
}
let salesorderSearchObj = search.create({
type: “salesorder”,
filters:
[
[“type”, “anyof”, “SalesOrd”],
“AND”,
[“mainline”, “is”, “F”],
“AND”,
[“formulanumeric: case when {lineuniquekey} in (“ + requestKeys + “) then 1 else 0 end”, “equalto”, “1”]
],
columns:
[
search.createColumn({ name: “lineuniquekey”, label: “Line Unique Key” }),
search.createColumn({ name: “internalid”, label: “Internal ID” })
]
});
let searchResultCount = salesorderSearchObj.runPaged().count;
let requestOrderArray = [];
if (searchResultCount > 0) {
salesorderSearchObj.run().each(function (result) {
let requestOrderObj = {};
requestOrderObj.requestKey = result.getValue({ name: “lineuniquekey”, label: “Line Unique Key” });
requestOrderObj.requestOrder = result.getValue({ name: “internalid”, label: “Internal ID” });
requestOrderArray.push(requestOrderObj);
return true;
});
}
return requestOrderArray;
}
catch (e) {
log.error(“Error @ fetchRequestOrderFromSalesOrder”, e);
return [];
}
}
/**
* Function to set the request order in the purchase order item line
* @param {object} purchaseOrderRec – object of the transaction
*/
function setRequestOrderOnItemLine(purchaseOrderRec) {
try {
let itemCount = purchaseOrderRec.getLineCount({ sublistId: “item” });
let requestKeyArray = [];
for (let i = 0; i < itemCount; i++) {
let requestKey = purchaseOrderRec.getSublistValue({
sublistId: “item”,
fieldId: “custcol_mhi_ibs_request_key”,
line: i
});
requestKeyArray.push(requestKey);
}
let requestOrderArray = [];
if (checkForParameter(requestKeyArray)) {
requestOrderArray = fetchRequestOrderFromSalesOrder(requestKeyArray);
}
//set the request order
for (let i = 0; i < itemCount; i++) {
let requestKeyFromPurchaseOrder = purchaseOrderRec.getSublistValue({
sublistId: “item”,
fieldId: “custcol_mhi_ibs_request_key”,
line: i
});
let foundOrder = requestOrderArray.find(item => item.requestKey == requestKeyFromPurchaseOrder);
if (checkForParameter(requestOrderArray) && foundOrder) {
purchaseOrderRec.setSublistValue({
sublistId: “item”,
fieldId: “custcol_mhi_ibs_request_order”,
line: i,
value: foundOrder.requestOrder
});
}
else {
purchaseOrderRec.setSublistValue({
sublistId: “item”,
fieldId: “custcol_mhi_ibs_request_order”,
line: i,
value: ”
});
}
}
purchaseOrderRec.save();
} catch (e) {
log.error(“Error @ setRequestOrderOnItemLine”, e);
}
}
/**
* Defines the Mass Update trigger point.
* @param {Object} params
* @param {string} params.type – Record type of the record being processed
* @param {number} params.id – ID of the record being processed
* @since 2016.1
*/
const each = (params) => {
try {
let purchaseOrderRec = record.load({
type: params.type,
id: params.id
});
setRequestOrderOnItemLine(purchaseOrderRec);
}
catch (e) {
log.error(“Error @ each”, e);
}
}
return { each }
});