Jira code: MR-161
User should be able to add the items into Inventory Transfer record by scanning product barcode.
Client Script: MR-161 CL Barcode Scanning
/**
* @NApiVersion 2.x
* @NScriptType ClientScript
* @NModuleScope SameAccount
*/
define(["N/search", "N/currentRecord"], function(search,currentRecord) {
function fieldChanged(context) {
try {
if (context.fieldId == "barcode") {
var item, internalid,description;
var subsidiary = getParameterByName('subsi');
console.log('subsidiary',subsidiary)
search.create({
type: "inventorynumber",
filters: [
["inventorynumber", "is", context.currentRecord.getCurrentSublistValue({ fieldId: "barcode",sublistId: "items" })],
"AND",
["item.subsidiary","anyof",subsidiary],
"AND",
["item.isinactive","is","F"]
],
columns: [
search.createColumn({ name: "item", label: "Item" }),
search.createColumn({
name: "salesdescription",
join: "item",
label: "Description"
})
]
}).run().each(function(r) {
internalid = r.getValue({ name: "item", label: "Item" });
item = r.getText({ name: "item", label: "Item" });
description = r.getValue({ name: "salesdescription",join: "item", label: "Description" });
return false;
});
console.log('item',item)
if (item) {
context.currentRecord.setCurrentSublistValue({ fieldId: "items", sublistId: "items", value: item });
context.currentRecord.setCurrentSublistValue({ fieldId: "internalid", sublistId: "items", value: internalid });
context.currentRecord.setCurrentSublistValue({ fieldId: "description", sublistId: "items", value: description });
return true;
}else{
context.currentRecord.setCurrentSublistValue({ fieldId: "barcode", sublistId: "items", value: null});
alert('The item has a different subsidiary or the item is inactive')
return false;
}
}
} catch (err) {
console.log(err);
}
// for getting parameter by name .................
function getParameterByName(name, url) {
if (!url)
url = window.location.href;
name = name.replace(/[\[\]]/g, "\\$&");
var regex = new RegExp("[?&]" + name + "(=([^&#]*)|&|#|$)"),
results = regex
.exec(url);
if (!results)
return null;
if (!results[2])
return ' ';
return decodeURIComponent(results[2].replace(/\+/g, " "));
}
}
function addItems() {
try {
var currentRec = currentRecord.get();
var itemsArray=[];
var itemsCumulative=[];
for(var i=0;i<currentRec.getLineCount({sublistId: "items"});i++)
{
var itemId=currentRec.getSublistValue({sublistId: "items",fieldId: "internalid",line :i});
var description = currentRec.getSublistValue({sublistId: "items",fieldId: "description",line :i});
var itemName=currentRec.getSublistValue({sublistId: "items",fieldId: "items",line :i});
var index=itemsArray.indexOf(itemId);
if(index==-1)
{
itemsArray.push(itemId);
itemsCumulative.push({itemId:itemId,qty:1,itemName:itemName,description:description});
}
else itemsCumulative[index].qty++;
}
// window.opener.setFile(data,line,id,price,itemclass,increment,percent,totalOptional,itemLine,totalAdditional,totalFree);
// window.ITEMS_SELECTED=itemsCumulative;
// window.open("/core/media/media.nl?id=285957&c=3815745&h=bdf9fb3c331a5f92e7b3&_xt=.html", "Preview", "height=700,width=800");
window.opener.ADD_ITEMS(itemsCumulative);
window.onbeforeunload=function(){};
window.close();
} catch (err) {
alert("error@addItems"+err)
console.log(err);
}
}
function previewItems() {
try {
var currentRec = currentRecord.get();
var itemsArray=[];
var itemsCumulative=[];
for(var i=0;i<currentRec.getLineCount({sublistId: "items"});i++)
{
var itemId=currentRec.getSublistValue({sublistId: "items",fieldId: "internalid",line :i});
var description = currentRec.getSublistValue({sublistId: "items",fieldId: "description",line :i});
var itemName=currentRec.getSublistValue({sublistId: "items",fieldId: "items",line :i});
var index=itemsArray.indexOf(itemId);
if(index==-1)
{
itemsArray.push(itemId);
itemsCumulative.push({itemId:itemId,qty:1,description:description,itemName:itemName});
}
else itemsCumulative[index].qty++;
}
//window.opener.setFile(data,line,id,price,itemclass,increment,percent,totalOptional,itemLine,totalAdditional,totalFree);
window.ITEMS_SELECTED=itemsCumulative;
window.open("/core/media/media.nl?id=285957&c=3815745&h=bdf9fb3c331a5f92e7b3&_xt=.html", "Preview", "height=700,width=800");
//window.opener.ADD_ITEMS(itemsCumulative);
//window.close();
} catch (err) {
alert("error@addItems")
console.log(err);
}
}
return {
validateField:fieldChanged,
addItems:addItems,
previewItems:previewItems
}
});
Client Script: MR-161 CS Add Item Function
/**
* @NApiVersion 2.x
* @NScriptType ClientScript
* @NModuleScope SameAccount
*/
define(["N/currentRecord"],
function(currentRecord) {
function additem() {
var subsid;
var currentRec = currentRecord.get();
if(window.ADD_ITEMS==undefined)
window.ADD_ITEMS=function(items)
{
var rConfig = JSON.parse( '{}' ) ;
rConfig['context'] = '/SuiteBundles/Bundle 20038/Megatel Custom/Jobin and Jismi/MR-161 CS Add item function';
var entryPointRequire = require.config(rConfig); entryPointRequire(['/SuiteBundles/Bundle 20038/Megatel Custom/Jobin and Jismi/MR-161 CS Add item function'],
function(mod){ try{ if (!!window) {
var origScriptIdForLogging = window.NLScriptIdForLogging;
var origDeploymentIdForLogging = window.NLDeploymentIdForLogging;
window.NLScriptIdForLogging = 'customscript_jj_mr161_ue_add_item_button';
window.NLDeploymentIdForLogging = 'CUSTOMDEPLOY_JJ_MR161_UE_ADD_ITEM_BUTTON';
}mod.addItemsToLine(items);}finally{
if (!!window) {
window.NLScriptIdForLogging = origScriptIdForLogging;
window.NLDeploymentIdForLogging = origDeploymentIdForLogging;
}} }); return false;
}
subsid = currentRec.getValue({
fieldId: 'subsidiary'
});
console.log('subsid',subsid)
if(subsid){
window.open("/app/site/hosting/scriptlet.nl?script=499&deploy=1&subsi="+subsid, "Scan Barcode", "height=700,width=800");
}else{
alert('please select the subsidiary first')
}
}
/**
* 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) {
}
function addItemsToLine(items){
try{
//items array of [{itemId:1234,qty:2},.....]
var currentRec = currentRecord.get();
console.log('currentRec',currentRec)
console.log('items.length',items.length)
// var numLines = currentRec.getLineCount({
// sublistId: 'inventory'
// });
for(var i=0;i<items.length;i++)
{
console.log(items);
currentRec.selectNewLine({sublistId:"inventory"});
currentRec.setCurrentSublistValue({ sublistId: "inventory",fieldId: "item",value: items[i].itemId,ignoreFieldChange: true,forceSyncSourcing:true});
currentRec.setCurrentSublistValue({ sublistId: "inventory",fieldId: "adjustqtyby", value: items[i].qty,ignoreFieldChange: true,forceSyncSourcing:true});
currentRec.setCurrentSublistValue({ sublistId: "inventory",fieldId: "description", value: items[i].description,ignoreFieldChange: true,forceSyncSourcing:true });
currentRec.commitLine({sublistId:"inventory"});
console.log('items[i].qty',items[i].qty);
}
}catch(err)
{
console.log(err);
}
}
return {
pageInit: pageInit,
additem: additem,
addItemsToLine:addItemsToLine
};
});
Suitelet script: MR-161 SL Barcode scanning
/**
* @NApiVersion 2.x
* @NScriptType Suitelet
* @NModuleScope SameAccount
*/
define(['N/ui/serverWidget'],
function(serverWidget) {
/**
* Definition of the Suitelet script trigger point.
*
* @param {Object} context
* @param {ServerRequest} context.request - Encapsulation of the incoming request
* @param {ServerResponse} context.response - Encapsulation of the Suitelet response
* @Since 2015.2
*/
/**
* MR-161 Add Items button in Inventory transfer Record
* Able to add the items into Inventory Transfer record by scanning product barcode
* Description : Scan the item barcode and add the multiple items into the inventory transfer.
*/
// var CLIENT_SCRIPT = "SuiteScripts/Jobin & Jismi IT Services LLP/MR - 161/CL/MR- 161 CL Barcode scanning.js";
var CLIENT_SCRIPT =285726
function createForm(context)
{
try{
var form = serverWidget.createForm({ title: 'Barcode Items'});
form.clientScriptFileId = CLIENT_SCRIPT;
form.addButton({
id: 'add_item',
label: 'Add items',
functionName: 'addItems',
align : serverWidget.LayoutJustification.RIGHT
});
form.addButton({
id: 'preview_page',
label: 'Preview',
functionName: 'previewItems',
align : serverWidget.LayoutJustification.RIGHT
});
var sublist = form.addSublist({
id: 'items',
type: serverWidget.SublistType.EDITOR,
label: 'Add item'
});
var barcode = sublist.addField({
id : 'barcode',
type : serverWidget.FieldType.TEXT,
label : 'Barcode'
});
barcode.isMandatory =true;
var internalid = sublist.addField({
id : 'internalid',
type : serverWidget.FieldType.TEXT,
source:"item",
label : 'internalId'
});
// internalid.isMandatory =true;
internalid.updateDisplayType({
displayType : serverWidget.FieldDisplayType.HIDDEN
});
var description = sublist.addField({
id : 'description',
type : serverWidget.FieldType.TEXT,
label : 'description'
});
description.updateDisplayType({
displayType : serverWidget.FieldDisplayType.HIDDEN
});
var items = sublist.addField({
id : 'items',
type : serverWidget.FieldType.TEXT,
source:"item",
label : 'Items'
});
items.updateDisplayType({ displayType : serverWidget.FieldDisplayType.DISABLED });
items.isMandatory =true;
return form;
}
catch(err)
{
log.debug("err",err);
return;
}
}
function onRequest(context) {
try {
context.response.writePage(createForm(context));
} catch (err) {
log.debug("err", err);
}
}
return {
onRequest: onRequest
};
});