/**
* @NApiVersion 2.1
* @NScriptType ClientScript
* @NModuleScope SameAccount
*/
define(['N/search'],
/**
* @param{currentRecord} currentRecord
* @param{record} record
*/
function(search) {
/**
* Function to be executed after page is initialized.
* @param {Object} scriptContext
* @param {Record} scriptContext.currentRecord - Current form record
* @param {string} scriptContext.mode - The mode in which the record is being accessed (create, copy, or edit)
* @since 2015.2
*/
function pageInit(scriptContext) {
console.log("In pageInit");
}
/**
* Function to be executed when field is changed.
* @param {Object} scriptContext
* @param {Record} scriptContext.currentRecord - Current form record
* @param {string} scriptContext.sublistId - Sublist name
* @param {string} scriptContext.fieldId - Field name
* @param {number} scriptContext.lineNum - Line number. Will be undefined if not a sublist or matrix field
* @param {number} scriptContext.columnNum - Line number. Will be undefined if not a matrix field
* @since 2015.2
*/
function fieldChanged(scriptContext) {
try {
if(scriptContext.sublistId === 'item' && scriptContext.fieldId === 'item') {
let currentRecordObj = scriptContext.currentRecord;
stockAvailabilityOnOtherLocation(currentRecordObj, scriptContext.line);
console.log("updated successfully");
}
} catch (e) {
log.error({title: "error@fieldChanged", details: e});
}
}
/**
* Validation function to be executed when sublist line is committed.
* @param {Object} scriptContext
* @param {Record} scriptContext.currentRecord - Current form record
* @param {string} scriptContext.sublistId - Sublist name
* @returns {boolean} Return true if sublist line is valid
* @since 2015.2
*/
function validateLine(scriptContext) {
try {
console.log("In validateLine");
if (scriptContext.sublistId === 'item') {
let currentRecordObj = scriptContext.currentRecord;
stockAvailabilityOnOtherLocation(currentRecordObj, scriptContext.line);
console.log("item line updated successfully");
}
return true;
} catch (e) {
log.error({title: "error@validateLine", details: e});
}
}
/**
* @description to find the stock available on both New Plymouth and Auckland locations and store them on corresponding custom item line fields
* @param {*} currentRecordObj
* @param {*} currentLine
*/
function stockAvailabilityOnOtherLocation(currentRecordObj, currentLine){
try{
console.log("in stockAvailabilityOnOtherLocation()");
let currentItemId = currentRecordObj.getCurrentSublistValue({
sublistId: 'item',
fieldId: 'item'
});
console.log("currentItemId", currentItemId);
let inventoryitemSearchObj = search.create({
type: "item",
filters:
[
["internalid","anyof",currentItemId],
"AND",
["inventorylocation","anyof","3","1","15","13"]
],
columns:
[
search.createColumn({
name: "itemid",
summary: "GROUP",
sort: search.Sort.ASC,
label: "Name"
}),
search.createColumn({
name: "locationquantityavailable",
summary: "SUM",
label: "Location Available"
}),
search.createColumn({
name: "formulanumeric",
summary: "SUM",
formula: "CASE WHEN {inventorylocation.id} IN ('1', '3') THEN {locationquantityavailable} ELSE null END",
label: "Formula (Numeric)"
}),
search.createColumn({
name: "formulanumeric",
summary: "SUM",
formula: "CASE WHEN {inventorylocation.id} IN ('13', '15') THEN {locationquantityavailable} ELSE null END",
label: "Formula (Numeric)"
})
]
});
let searchResultCount = inventoryitemSearchObj.runPaged().count;
console.log("inventoryitemSearchObj result count",searchResultCount);
let newPlymouthAvailableQty,aucklandAvailableQty;
if(searchResultCount >0){
inventoryitemSearchObj.run().each(function(result){
newPlymouthAvailableQty = result.getValue(inventoryitemSearchObj.columns[2]);
aucklandAvailableQty = result.getValue(inventoryitemSearchObj.columns[3]);
return true;
});
}
console.log("newPlymouthAvailableQty",newPlymouthAvailableQty);
console.log("aucklandAvailableQty",aucklandAvailableQty);
currentRecordObj.setCurrentSublistValue({sublistId:'item',fieldId:'custcol_jj_qty_available_new_plymouth',value:newPlymouthAvailableQty,ignoreFieldChange:true});
currentRecordObj.setCurrentSublistValue({sublistId:'item',fieldId:'custcol_jj_qty_available_auckland',value:aucklandAvailableQty,ignoreFieldChange:true});
}
catch (e) {
log.error({title: "error@stockAvailabilityOnOtherLocation", details: e});
}
}
return {
pageInit:pageInit,
fieldChanged: fieldChanged,
validateLine: validateLine
};
});