Jira Code: AFGU-01
Inventory details updated automatically when a Sales Order created.
Inventory number are allocated always in the ascending order.
UE script AFGU-01 JJ UE Inventory Update for Sales Order used to update the inventory details.
Script
/**
* @NApiVersion 2.x
* @NScriptType UserEventScript
* @NModuleScope SameAccount
*/
/* Script Description
* This user event script will change the inventory details of a sales order after saved.
Automatically allocate inventory lots for items added,in ascending order.
******************************************************************************************************
Aspire Food Group USA Inc.
******************************************************************************************************
* Date: 03/08/2018
*
* Author: Jobin & Jismi IT Services LLP*/
/*****************************************************************************************************/
define(['N/record', 'N/search'],
function(record, search) {
/**
* Function definition to be triggered before record is loaded.
*
* @param {Object} scriptContext
* @param {Record} scriptContext.newRecord - New record
* @param {string} scriptContext.type - Trigger type
* @param {Form} scriptContext.form - Current form
* @Since 2015.2
*/
/*function beforeLoad(scriptContext) {
}*/
/**
* Function definition to be triggered before record is loaded.
*
* @param {Object} scriptContext
* @param {Record} scriptContext.newRecord - New record
* @param {Record} scriptContext.oldRecord - Old record
* @param {string} scriptContext.type - Trigger type
* @Since 2015.2
*/
/*function beforeSubmit(scriptContext) {
}*/
/**
* Function definition to be triggered before record is loaded.
*
* @param {Object} scriptContext
* @param {Record} scriptContext.newRecord - New record
* @param {Record} scriptContext.oldRecord - Old record
* @param {string} scriptContext.type - Trigger type
* @Since 2015.2
*/
function afterSubmit(scriptContext) {
try {
var REC = scriptContext.newRecord.id;
var SALES_ORDER = record.load({
type: record.Type.SALES_ORDER,
id: REC,
isDynamic: true
});
var custlocation = SALES_ORDER.getValue({
fieldId: 'location'
});
var custlocationtext = SALES_ORDER.getText({ fieldId: 'location' });
var lineCountItemSublist = SALES_ORDER.getLineCount({ sublistId: 'item' });
for (var i = 0; i < lineCountItemSublist; i++) {
try {
var itemQuatity = SALES_ORDER.getSublistValue({
sublistId: 'item',
fieldId: 'quantity',
line: i
});
var itemId = SALES_ORDER.getSublistValue({
sublistId: 'item',
fieldId: 'item',
line: i
});
var netresult = createCustomerItemInventorysearch(custlocation, itemId);
SALES_ORDER.selectLine({
sublistId: 'item',
line: i
});
var INVENTORY_DETAIL_REC = SALES_ORDER.getCurrentSublistSubrecord({
sublistId: 'item',
fieldId: 'inventorydetail'
});
var lineCountInvntDet = INVENTORY_DETAIL_REC.getLineCount({ sublistId: 'inventoryassignment' });
if (lineCountInvntDet == 0) {
Inventoryarray = inventoryarrayfunction(netresult, itemQuatity);
for (var x = 0; x < Inventoryarray.length; x++) {
if (Inventoryarray.length == 1) {
setvaluecase1(SALES_ORDER, INVENTORY_DETAIL_REC, Inventoryarray);
} else {
if (x == 0) {
setvaluecase1(SALES_ORDER, INVENTORY_DETAIL_REC, Inventoryarray);
} else {
setvaluecase2(x, SALES_ORDER, INVENTORY_DETAIL_REC, Inventoryarray);
}
}
}
} else {
log.debug("mesage", "Inventory is already allocated for this item", itemId);
}
SALES_ORDER.commitLine({
sublistId: 'item'
});
} catch (e) {
log.debug({
title: 'i value',
details: e.message
});
continue;
}
}
var CSRecordId = SALES_ORDER.save({
enableSourcing: 'false',
ignoreMandatoryFields: 'false'
});
} catch (e) {
log.debug({
title: 'Mainfunction error',
details: e.message
});
}
}
/**********************************************************************************************************/
/* CEARTING SAVED SEARCH */
function createCustomerItemInventorysearch(custlocation, itemId) {
try {
//var itemObj = new Object();
var itemarray = new Array();
var itemSearchObj = search.create({
type: "item",
filters: [
["islotitem", "is", "T"],
"AND", ["inventorylocation.internalid", "anyof", custlocation],
"AND", ["internalid", "anyof", itemId],
"AND", ["inventorynumber.quantityavailable", "notequalto", "0"]
],
columns: [
search.createColumn({
name: "item",
join: "inventoryDetail",
label: "Item"
}),
search.createColumn({ name: "internalid", label: "Internal ID" }),
search.createColumn({ name: "locationquantityonhand", label: "Location On Hand" }),
search.createColumn({
name: "quantityonhand",
join: "inventoryNumber",
/* sort: search.Sort.ASC,*/
label: "On Hand"
}),
search.createColumn({
name: "inventorynumber",
join: "inventoryNumber",
sort: search.Sort.ASC,
label: "Number"
}),
search.createColumn({
name: "quantityavailable",
join: "inventoryNumber",
label: "Available"
})
]
}).run().each(function(result) {
var itemobj = new Object();
// .run().each has a limit of 4,000 results
itemobj.internal = result.getValue({
name: "internalid",
/* join: "inventoryDetail"*/
});
//itemObj[internal] = {};
/*itemObj[internal].inventorynumber = result.getValue({
name: "inventorynumber",
join: "inventoryDetail",
label: " Number"
});*/
itemobj.inventorynumber = result.getValue({
name: "inventorynumber",
join: "inventoryNumber",
label: "Number"
});
itemobj.locationquantityonhand = result.getValue({
name: "locationquantityonhand",
/*join: "inventoryDetail",*/
label: "Location On Hand"
});
/*itemObj[internal].locationquantityonhand = result.getText({
name: "locationquantityonhand",
join: "inventoryDetail",
label: " Location On Hand"
});*/
itemobj.quantityonhand = result.getValue({
name: "quantityonhand",
join: "inventoryNumber",
label: "On Hand"
});
itemobj.quantityavailable = result.getValue({
name: "quantityavailable",
join: "inventoryNumber",
label: "Available"
});
itemarray.push(itemobj);
return true;
});
return itemarray;
} catch (e) {
log.debug({
title: 'createCustomerItemInventorysearch error',
details: e.message
});
}
}
/***********************************************************************************************************/
/*ARRANGING INVENTORY DETAILS FOR EACH ITEM*/
function inventoryarrayfunction(netresult, itemQuatity) {
try {
var inventoryarray = new Array();
for (var k = 0; k < netresult.length; k++) {
var inventoryObject = new Object();
if (netresult[k].quantityavailable >= itemQuatity) {
inventoryObject.invntNumber = netresult[k].inventorynumber;
inventoryObject.itemQuatity = itemQuatity;
inventoryarray.push(inventoryObject);
break;
} else {
itemQuatity = itemQuatity - (netresult[k].quantityavailable);
inventoryObject.invntNumber = netresult[k].inventorynumber;
inventoryObject.itemQuatity = netresult[k].quantityavailable;
inventoryarray.push(inventoryObject);
}
}
return inventoryarray;
} catch (e) {
log.debug({
title: 'inventoryarrayfunction error',
details: e.message
});
}
}
/***********************************************************************************************************/
/* REPLACING VALUES TO THE FIRST LINE OF INVENTORY DETAILS RECORD*/
function setvaluecase1(SALES_ORDER, INVENTORY_DETAIL_REC, Inventoryarray) {
try {
var INVENTORY_DETAIL_REC = SALES_ORDER.getCurrentSublistSubrecord({
sublistId: 'item',
fieldId: 'inventorydetail'
});
INVENTORY_DETAIL_REC.selectNewLine({
sublistId: 'inventoryassignment'
});
INVENTORY_DETAIL_REC.setCurrentSublistText({
sublistId: 'inventoryassignment',
fieldId: 'issueinventorynumber',
text: Inventoryarray[0].invntNumber
});
INVENTORY_DETAIL_REC.setCurrentSublistValue({
sublistId: 'inventoryassignment',
fieldId: 'quantity',
value: Inventoryarray[0].itemQuatity
});
INVENTORY_DETAIL_REC.commitLine({
sublistId: 'inventoryassignment'
});
} catch (e) {
log.debug({
title: 'setvaluecase1 error',
details: e.message
});
}
}
/***********************************************************************************************************/
/* SET VALUES FROM INVENTORY ARRAY INTO NEW LINE OF INVENTORY RECORD*/
function setvaluecase2(x, SALES_ORDER, INVENTORY_DETAIL_REC, Inventoryarray) {
try {
var INVENTORY_DETAIL_REC = SALES_ORDER.getCurrentSublistSubrecord({
sublistId: 'item',
fieldId: 'inventorydetail'
});
INVENTORY_DETAIL_REC.selectNewLine({
sublistId: 'inventoryassignment'
});
INVENTORY_DETAIL_REC.setCurrentSublistText({
sublistId: 'inventoryassignment',
fieldId: 'issueinventorynumber',
text: Inventoryarray[x].invntNumber
});
INVENTORY_DETAIL_REC.setCurrentSublistValue({
sublistId: 'inventoryassignment',
fieldId: 'quantity',
value: Inventoryarray[x].itemQuatity
});
INVENTORY_DETAIL_REC.commitLine({
sublistId: 'inventoryassignment'
});
} catch (e) {
log.debug({
title: 'setvaluuecase2 error',
details: e.message
});
}
}
return {
/*beforeLoad: beforeLoad,
beforeSubmit: beforeSubmit,*/
afterSubmit: afterSubmit,
createCustomerItemInventorysearch: createCustomerItemInventorysearch,
inventoryarrayfunction: inventoryarrayfunction,
setvaluecase1: setvaluecase1,
setvaluecase2: setvaluecase2
};
});