The client would like to add a warning message when the kit item is back-ordered in the item fulfillment record.
/**
* @NApiVersion 2.1
* @NScriptType UserEventScript
*/
/*******************************************************************
* UserEventScript
****************************************************************
*
* Date: 04/11/2022
*
* Author: Jobin and Jismi IT Services LLP
*
* REVISION HISTORY
*
* Revision 1.0
*
* Description: Script to pop up an alert of back ordered quantity
*
* Revision 2.0
*
***************************************************************/
define(['N/record', 'N/search', 'N/ui/serverWidget','N/email', 'N/runtime','N/ui/message'],
(record, search, serverWidget,email, runtime,message) => {
/**
* @description the fuctcion to create a search to get member item details
* @param soNum - sales order internal id
*/
function memberDetailSearch(soNum)
{
try {
var memberItemobj = {};
var detailsItemArr=[]
log.debug("inside function")
var salesorderSearchObj = search.create({
type: "salesorder",
filters:
[
["type","anyof","SalesOrd"],
"AND",
["taxline","is","F"],
"AND",
["mainline","is","F"],
"AND",
["shipping","is","F"],
"AND",
["status","anyof","SalesOrd:B","SalesOrd:E","SalesOrd:D"],
"AND",
["formulanumeric: case when (({quantity}-nvl({quantityshiprecv},0)-nvl({quantitycommitted},0))>0) or ({quantitycommitted}<=0) then 1 else 0 end","greaterthan","0"],
"AND",
["internalid","anyof",soNum],
"AND",
["item.type","anyof","Kit"]
],
columns:
[
search.createColumn({
name: "memberitem",
join: "item",
label: "Member Item"
}),
search.createColumn({
name: "memberquantity",
join: "item",
label: "Member Quantity"
}),
search.createColumn({
name: "formulanumeric",
formula: "({quantity}-nvl({quantityshiprecv},0)-nvl({quantitycommitted},0))*{item.memberquantity}",
label: "BACK ORDERED MEMBERQUANTITY"
}),
search.createColumn({
name: "internalid",
join: "item",
label: "Internal ID"
})
]
});
var searchResultCount = salesorderSearchObj.runPaged();
searchResultCount.pageRanges.forEach(function (pageRange)
{
let myPage = searchResultCount.fetch({ index: pageRange.index });
myPage.data.forEach(function (result)
{
var memberItemobj2 = {};
memberItemobj2.itemName= result.getText({
name: "memberitem",
join: "item",
label: "Member Item"
});
memberItemobj2.name=result.getValue({
name: "memberitem",
join: "item",
label: "Member Item"
});
memberItemobj2.kitItemId=result.getValue({
name: "internalid",
join: "item",
label: "Internal ID"
});
memberItemobj2.backordered= result.getValue({
name: "formulanumeric",
formula: "({quantity}-nvl({quantityshiprecv},0)-nvl({quantitycommitted},0))*{item.memberquantity}",
label: "BACK ORDERED MEMBERQUANTITY"
});
detailsItemArr.push(memberItemobj2)
log.debug("detailsItemArr",detailsItemArr)
});
});
return detailsItemArr;
}
catch (e)
{
log.debug("Error @ function",e )
}
}
/**
* Defines the function definition that is executed after record is submitted.
* @param {Object} scriptContext
* @param {Record} scriptContext.newRecord - New record
* @param {Record} scriptContext.oldRecord - Old record
* @param {string} scriptContext.type - Trigger type; use values from the context.UserEventType enum
* @since 2015.2
*/
const beforeLoad = (scriptContext) => {
try
{
if (scriptContext.type=='create' || scriptContext.type=='edit'){
var val='';
let newRecord = scriptContext.newRecord;
let soNum = newRecord.getValue({
fieldId: 'createdfrom'
})
//Search created to find back ordered quantity of components of kit
let itemDetails = memberDetailSearch(soNum)
let count=itemDetails.length
for(var i=0;i<count;i++){
var componentItem = itemDetails[i].itemName;
log.debug("componentItem",componentItem);
var backOrdered=itemDetails[i].backordered
log.debug("backOrdered",backOrdered)
val = val + ',' + componentItem + '(' + backOrdered + ')';
var newVal=val.slice(1)
//log.debug("newVal",newVal)
}
if(val){
var form = scriptContext.form;
form.addPageInitMessage({
type: message.Type.WARNING,
message: `Some Items are Backordered in the Sales order and displayed below in format Item Name(Quantity): ${newVal}`,
duration: 10000
});
}
}
}catch (e) {
log.error("error @ aftersubmit",e)
}
}
return {beforeLoad}
});