This script facilitates the addition of multiple items to a sales order by allowing users to search for items and add them to a cart on the suitelet page. The page displays items in a list format where users can specify quantities and use buttons associated with each item to add them to the cart. The items added to the cart are stored in a sublist named “cart”. Users can continue searching and adding items to the cart as needed. Once all desired items are in the cart, users can proceed to add them to the sales order using the “Add Items in Cart to Transaction” button available on the page.

/**
* @NApiVersion 2.1
* @NScriptType Suitelet
*/
/*************************************************************************************************************************
* SecondSourceRx
* SSRX-575 Sales order item selection page update
* Epic: SSRX-573
*
*********************************************************************************************************************
*
* Author: Jobin & Jismi
*
* Date Created : 12-February-2024
*
* Description : This is the item selection page to add item in the sales order.
*
* REVISION HISTORY
*
* @version 1.0 SSRX-575 : 12-February-2024 : Created the initial build by JJ0053
*
**************************************************************************************************************************/
define(['N/record', 'N/search', 'N/runtime', 'N/ui/serverWidget'],
/**
* @param{record} record
* @param{search} search
*/
(record, search, runtime, serverWidget) => {
let scr = `jQuery(document).ready(function () {
// console.info('document.ready');
let recObj=currentRecord.get();
// focus on input field selects all in field
jQuery('[name^="custpage_last_sell_price"], [name^="custpage_quantity"]').on('focus', function (event) {
event.preventDefault();
/* Act on the event */
jQuery(this).select();
});
// update button on lines already in the cart
let cartCount = recObj.getLineCount('custpage_cart');
let items = [];
for (let int = 0, count = cartCount; int < count; int++) {
items.push(recObj.getSublistValue({sublistId:'custpage_cart', fieldId:'custpage_item', line:int}));
}
// console.info('cart contents', items);
for (let ant = 0, cant = items.length - 1; ant <= cant; ant++) {
jQuery('button#add-' + items[ant]).css({
'backgroundColor': '#419641',
'color': 'whitesmoke',
'cursor': 'not-allowed',
'display': 'inline-block',
'padding': '6px 12px',
'margin-bottom': '2px',
'font-size': '14px',
'font-weight': '400',
'line-height': '1.42857143',
'text-align': 'center',
'white-space': 'nowrap',
'vertical-align': 'middle',
'border': '1px solid #398439',
'border-radius': '2px'
}).html('Added!');
}
jQuery('button[id^="add-"]').click(function (e) {
// console.info('AddToCart - btn', e);
e.preventDefault();
let item = jQuery(this).attr('id').replace('add-', '');
let lineNumber = jQuery(this).attr('data-line');
let itemName = recObj.getSublistValue({sublistId:'custpage_results', fieldId:'custpage_item_name', line:Number(lineNumber)-1});
let quantity = recObj.getSublistValue({sublistId:'custpage_results', fieldId:'custpage_quantity', line:Number(lineNumber)-1});
let sellprice = recObj.getSublistValue({sublistId:'custpage_results', fieldId:'custpage_last_sell_price', line:Number(lineNumber)-1});
console.log('itemName',itemName)
// let quantity = jQuery('input#'+item).val();
// let sellprice = jQuery('input#sellprice-'+item).val();
// give alert and stop if quantity or sellprice are not populate
if (!sellprice || sellprice == '' || !quantity || quantity == '' || quantity == 0) {
alert("Sell Price and Quantity are required fields.");
return false;
}
let lotNumber = jQuery('#lotexpiration-' + item).val();
let description = nlapiGetLineItemValue('custpage_results', 'custpage_description', lineNumber);
if (lotNumber) {
let lotNumberArray = lotNumber.split('-');
}
// Add Item to "Cart"
recObj.selectNewLine('custpage_cart');
recObj.setCurrentSublistValue({sublistId:'custpage_cart', fieldId:'custpage_item', value:item|| ''});
recObj.setCurrentSublistValue({sublistId:'custpage_cart', fieldId:'custpage_item_name', value:itemName|| ''});
recObj.setCurrentSublistValue({sublistId:'custpage_cart', fieldId:'custpage_quantity', value:quantity|| ''});
recObj.setCurrentSublistValue({sublistId:'custpage_cart', fieldId:'custpage_sellprice', value:sellprice|| ''});
recObj.setCurrentSublistValue({sublistId:'custpage_cart', fieldId:'custpage_description', value:description|| ''});
if (lotNumber) {
recObj.setCurrentSublistValue({sublistId:'custpage_cart', fieldId:'custpage_lot_expiration', value:lotNumberArray[1] + '-' + lotNumberArray[2]|| ''});
recObj.setCurrentSublistValue({sublistId:'custpage_cart', fieldId:'custpage_lot_expiration_hidden', value:lotNumberArray[0]|| ''});
}
recObj.commitLine('custpage_cart');
// Remove Quantity and update Button to reflect the
// Item existing in the Cart
nlapiSetLineItemValue('custpage_results', 'custpage_quantity', lineNumber, '');
jQuery('button#add-' + item).html('Added!');
let bgColor = jQuery('button#add-' + item).css('backgroundColor');
let textColor = jQuery('button#add-' + item).css('color');
jQuery('button#add-' + item).css({
'backgroundColor': '#419641',
'color': 'whitesmoke',
'cursor': 'not-allowed',
'display': 'inline-block',
'padding': '6px 12px',
'margin-bottom': '2px',
'font-size': '14px',
'font-weight': '400',
'line-height': '1.42857143',
'text-align': 'center',
'white-space': 'nowrap',
'vertical-align': 'middle',
'border': '1px solid #398439',
'border-radius': '2px'
});
});
});`;
/**
* function to create the html for the item add button
* @param {String} type
* @param {String} item
* @param {String} lineNumber
* @returns {String}
*/
function getHtml(type, item, lineNumber) {
let html = '';
if (type == 'quantity') {
html += '<input id="' + item + '" type="integer" />';
}
else if (type == 'add') {
html += '<button id="add-' + item + '" type="button" data-line="' + lineNumber + '" style="cursor:pointer;background-color : #337ab7;color : whitesmoke;display: inline-block;padding: 6px 12px;margin-bottom: 2px;font-size: 14px;font-weight: 400;line-height: 1.42857143;text-align: center;white-space: nowrap;vertical-align: middle;border: 1px solid #245580;border-radius: 2px;">Add to Cart</button>';
}
return html;
}
/**
* function to create html
* @param {String} item
* @param {String} lotexpiration
* @returns {String}
*/
function getHtmlForLotExpiration(item, lotexpiration) {
let html = '';
html += '<select id="lotexpiration-' + item + '">';
for (let i = 0; i < lotexpiration.length; i++) {
html += '<option value="' + lotexpiration[i].id + '-' + lotexpiration[i].inventorynumber + '-' + lotexpiration[i].expirationdate + '">';
html += lotexpiration[i].inventorynumber + '-' + lotexpiration[i].expirationdate;
html += '</option>';
}
html += '</select>';
return html;
}
/**
*
* @param {String} item
* @param {String} sellprice
* @returns {String}
*/
function getHtmlForSellPrice(item, sellprice) {
let html = '';
html += '<input id="sellprice-' + item + '" value="' + sellprice + '"/>';
return html;
}
/**
*
* @param {String} name
* @param {String} item
* @param {String} value
* @returns {String}
*/
function getHtmlForItem(name, item, value) {
let html = '<input id="' + name + '-' + item + '" value = "' + value + '" readonly/>';
return html;
}
/**
* Function to serch items
* @param {String} nameFilter
* @param {String} brandFilter
* @param {String} descFilter
* @param {String} drugFamilyFilter
* @param {String} customerId
* @param {String} itemFilter
* @param {String} marketingCategoryFilter
* @param {String} dateAddedFilter
* @param {String} agFilter
* @param {String} shortDateFilter
* @param {String} specialsFilter
* @param {String} pageFilter
* @returns {object}
*/
function getItemsVersion2(nameFilter, brandFilter, descFilter, drugFamilyFilter, customerId, itemFilter, marketingCategoryFilter, dateAddedFilter, agFilter, shortDateFilter, specialsFilter, pageFilter) {
try {
let data = {};
data.ids = [];
data.records = {};
if (!customerId) {
return data;
}
let user = runtime.getCurrentUser();
let filter = [
["inventorylocation", "anyof", "3"],
"AND",
["isinactive", "is", "F"],
"AND",
["locationquantityavailable", "greaterthan", "0"]
];
filter.push('AND', ['pricing.customer', 'anyof', customerId]);
if (nameFilter) {
filter.push('AND')
filter.push(['itemid', 'startswith', nameFilter]);
}
if (brandFilter) {
filter.push('AND')
filter.push(['custitem_brandname', 'startswith', brandFilter]);
}
if (descFilter) {
filter.push('AND')
filter.push(['description', 'startswith', descFilter]);
}
if (drugFamilyFilter) {
filter.push('AND')
filter.push(['custitem11', 'anyof', drugFamilyFilter]);
}
if (itemFilter) {
filter.push('AND')
filter.push(['custitem_2srx_item_number', 'startswith', itemFilter]);
}
if (marketingCategoryFilter) {
filter.push('AND')
filter.push(['custitem21', 'anyof', marketingCategoryFilter]);
}
if (dateAddedFilter) {
filter.push('AND')
filter.push(['custitem24', 'onorafter', dateAddedFilter]);
}
if (agFilter && agFilter == 'T') {
filter.push('AND')
filter.push(['custitem19', 'is', 'T']);
}
if (shortDateFilter && shortDateFilter == 'T') {
filter.push('AND')
filter.push(['custitem22', 'is', 'T']);
}
if (specialsFilter && specialsFilter == 'T') {
filter.push('AND')
filter.push(['custitem_specials', 'is', 'T']);
}
log.debug('filter', filter);
let itemSearchObj = search.create({
type: 'item',
filters: filter,
columns: [
search.createColumn({ name: 'internalid' }),
search.createColumn({ name: 'itemid' }),
search.createColumn({ name: 'custitem_2srx_item_number' }),
search.createColumn({ name: 'custitem10' }),
search.createColumn({ name: 'custitem12' }),
search.createColumn({ name: 'price10' }),
search.createColumn({ name: 'maximumquantity' }),
search.createColumn({ name: 'custitem_brandname' }),
search.createColumn({ name: 'custitem6' }),
search.createColumn({ name: 'locationquantityavailable' }),
search.createColumn({ name: 'salesdescription', sort: search.Sort.ASC }),
search.createColumn({ name: 'baseprice' }),
search.createColumn({ name: 'unitprice', join: 'pricing' }),
]
});
let searchResultCount = itemSearchObj.runPaged().count;
log.debug("inventorynumberSearchObj result count", searchResultCount);
let pagedData = itemSearchObj.runPaged({
pageSize: 500
});
let pageCount = pagedData.pageRanges.length;
log.debug('pageCount', pageCount);
let hasPage = pagedData.pageRanges.filter((pageRange) => {
return Number(pageRange.index) == (pageFilter ? Number(pageFilter) - 1 : 0);
});
pageFilter = hasPage.length ? Number(hasPage[0].index) + 1 : 1
// pagedData.pageRanges.forEach((pageRange) => {
// log.debug('index', pageRange.index)
let page = pagedData.fetch({ index: hasPage.length ? hasPage[0].index : 0 });
page.data.forEach((result) => {
let id = result.getValue('internalid');
// log.debug('id', id);
if (user.id != 25049) {
data.ids.push(id);
data[id] = {
'custpage_item': id,
'custpage_item_name': result.getValue('itemid'),
'custpage_item_number': result.getValue('custitem_2srx_item_number'),
'custpage_drug_color': result.getText('custitem10'),
'custpage_case_pack': result.getText('custitem12'),
'custpage_floor_price': result.getValue('price10'),
'custpage_max_qty': result.getValue('maximumquantity'),
'custpage_brand': result.getValue('custitem_brandname'),
'custpage_manufacturer': result.getText('custitem6'),
'custpage_available': (isNaN(parseInt(result.getValue('locationquantityavailable'))) ? '0' : removeDecimal(result.getValue('locationquantityavailable'))),
'custpage_description': result.getValue({ name: 'salesdescription', sort: search.Sort.ASC }),
'custpage_baseprice': '$' + result.getValue('baseprice'),
'custpage_last_sell_price': '$' + result.getValue({ name: 'unitprice', join: 'pricing' }),
'custpage_quantity': '0',
'custpage_add': getHtml('add', id, data.ids.length)
};
} else {
if (data.ids.length <= 50) {
data.ids.push(id);
data[id] = {
'custpage_item': id,
'custpage_item_name': result.getValue('itemid'),
'custpage_item_number': result.getValue('custitem_2srx_item_number'),
'custpage_drug_color': result.getText('custitem10'),
'custpage_case_pack': result.getText('custitem12'),
'custpage_floor_price': result.getValue('price10'),
'custpage_max_qty': result.getValue('maximumquantity'),
'custpage_brand': result.getValue('custitem_brandname'),
'custpage_manufacturer': result.getText('custitem6'),
'custpage_available': (isNaN(parseInt(result.getValue('locationquantityavailable'))) ? '0' : removeDecimal(result.getValue('locationquantityavailable'))),
'custpage_description': result.getValue({ name: 'salesdescription', sort: search.Sort.ASC }),
'custpage_baseprice': '$' + result.getValue('baseprice'),
'custpage_last_sell_price': '$' + result.getValue({ name: 'unitprice', join: 'pricing' }),
'custpage_quantity': '0',
'custpage_add': 'F'
};
}
}
return true;
});
// });
return { data: data, pageCount: pageCount, pageFilter: pageFilter };
} catch (e) {
log.error('error@getItemsVersion2', e);
return { data: {}, pageCount: 0, pageFilter: 1 };
}
}
/**
* function to remove decimal
* @param {String} value
* @returns {String}
*/
function removeDecimal(value) {
return value.replace('.0', '');
}
/**
* Function to get lot data
* @param {String} data
* @returns {Object}
*/
function getLotExpiration(data) {
try {
let filter = [["quantityavailable", "greaterthan", "0"]];
let inventorySearchObj = search.create({
type: 'inventorynumber',
filters: filter,
columns: [
search.createColumn({ name: 'inventorynumber', summary: 'GROUP' }),
search.createColumn({ name: 'expirationdate', summary: 'GROUP' }),
search.createColumn({ name: 'internalid', summary: 'GROUP' }),
search.createColumn({ name: 'internalid', join: 'item', summary: 'GROUP' })
]
})
// log('Results found for getLotExpiration : ', results.length);
let lotExpirations = {};
lotExpirations.ids = [];
let pagedData = inventorySearchObj.runPaged({
pageSize: 1000
});
pagedData.pageRanges.forEach((pageRange) => {
let page = pagedData.fetch({ index: pageRange.index });
page.data.forEach((result) => {
let lotExpirationObject = {};
lotExpirationObject.id = result.getValue({ name: 'internalid', summary: 'GROUP' });
itemid = result.getValue({ name: 'internalid', join: 'item', summary: 'GROUP' });
lotExpirationObject.itemid = itemid;
lotExpirationObject.inventorynumber = result.getValue({ name: 'inventorynumber', summary: 'GROUP' });
lotExpirationObject.expirationdate = result.getValue({ name: 'expirationdate', summary: 'GROUP' });
if (lotExpirations.ids.indexOf(itemid) == -1) {
lotExpirations.ids.push(itemid);
lotExpirations[itemid] = [];
}
lotExpirations[itemid].push(lotExpirationObject);
return true;
});
});
for (let i = 0; i < lotExpirations.ids.length; i++) {
let id = lotExpirations.ids[i];
if (data[id]) {
// log('Found LotExpiration for id: ', lotExpirations[id]);
data[id].custpage_lot_expiration = getHtmlForLotExpiration(id, lotExpirations[id]);
}
}
return data;
} catch (e) {
log.error('error@getLotExpiration', e);
return data;
}
}
/**
* Function to set sublist
* @param {Object} sublist
* @param {Array} sublistRecords
*/
function setResultSublist(sublist, sublistRecords) {
try {
for (let i = 0; i < sublistRecords.length; i++) {
for (let key in sublistRecords[i]) {
if (sublistRecords[i][key])
sublist.setSublistValue({
id: key,
value: sublistRecords[i][key],
line: i
});
}
}
} catch (e) {
log.error('error@setResultSublist', e);
}
}
/**
* Defines the Suitelet script trigger point.
* @param {Object} scriptContext
* @param {ServerRequest} scriptContext.request - Incoming request
* @param {ServerResponse} scriptContext.response - Suitelet response
* @since 2015.2
*/
const onRequest = (scriptContext) => {
try {
let params = scriptContext.request.parameters;
log.debug('params', params);
p_data = {};
for (let param in params) {
if (param !== 'script' && param !== 'deploy' && param !== 'callback' && param !== 'compid' && param != '_' && param != 'h') p_data[param] = params[param];
}
let form, sublist;
let nameFilter = '';
let brandFilter = '';
let descFilter = '';
let drugFamilyFilter = '';
let itemFilter = '';
let marketingCategoryFilter = '';
let dateAddedFilter = '';
let agFilter = '';
let shortDateFilter = '';
let specialsFilter = '';
let pageFilter = 1;
if (scriptContext.request.method == 'GET' || scriptContext.request.method == 'POST') {
let startOfExecution = new Date().getTime();
let cart_contents = [];
if (scriptContext.request.method == 'POST') {
/* Extract Cart data */
let sublist_fields = p_data.custpage_cartfields.split('u0001');
let sublist_data = p_data.custpage_cartdata.split('u0002');
for (let i = 0, count = sublist_data.length; i < count; i++) {
let line_data = sublist_data[i].split('u0001');
let temp = {}, valid = false;
for (let f = 0, count_f = line_data.length; f < count_f; f++) {
temp[sublist_fields[f]] = line_data[f];
if (line_data[f]) valid = true;
}
if (valid) cart_contents.push(temp);
}
nameFilter = params['custpage_namefilter'];
brandFilter = params['custpage_brandfilter'];
descFilter = params['custpage_descfilter'];
drugFamilyFilter = params['custpage_drugfamilyfilter'];
itemFilter = params['custpage_itemfilter'];
marketingCategoryFilter = params['custpage_category'];
dateAddedFilter = params['custpage_date'];
agFilter = params['custpage_ag'];
shortDateFilter = params['custpage_short_date'];
specialsFilter = params['custpage_specials'];
pageFilter = params['custpage_page'];
}
/* Create Form */
let user = runtime.getCurrentUser();
form = serverWidget.createForm({ title: 'Search & Add Items', hideNavBar: false });
let itemField = form.addField({ id: 'custpage_itemfilter', type: 'text', label: 'Item #' });
itemField.defaultValue = itemFilter;
let ndcField = form.addField({ id: 'custpage_namefilter', type: 'text', label: 'NDC' });
ndcField.defaultValue = nameFilter;
let descField = form.addField({ id: 'custpage_descfilter', type: 'text', label: 'Generic Description' });
descField.defaultValue = descFilter;
let drugFamilyField = form.addField({ id: 'custpage_drugfamilyfilter', type: 'select', label: 'Drug Family', source: 'customlist203' });
drugFamilyField.defaultValue = drugFamilyFilter;
let brandField = form.addField({ id: 'custpage_brandfilter', type: 'text', label: 'Brand Name' })
brandField.defaultValue = brandFilter;
brandField.updateBreakType({ breakType: "startcol" });
let marketCatField = form.addField({ id: 'custpage_category', type: 'select', label: 'Marketing Category', source: 'customlist237' });
marketCatField.defaultValue = marketingCategoryFilter;
let dateAddField = form.addField({ id: 'custpage_date', type: 'date', label: 'Date Added' });
dateAddField.defaultValue = dateAddedFilter;
let agField = form.addField({ id: 'custpage_ag', type: 'checkbox', label: 'AG' })
agField.defaultValue = agFilter;
agField.updateBreakType({ breakType: "startcol" });
let shortDateField = form.addField({ id: 'custpage_short_date', type: 'checkbox', label: 'Short Date' });
shortDateField.defaultValue = shortDateFilter;
let specialField = form.addField({ id: 'custpage_specials', type: 'checkbox', label: 'Specials' });
specialField.defaultValue = specialsFilter;
let customerId = scriptContext.request.parameters['custpage_customer'] || null;
log.debug('customerId', customerId);
let customer = form.addField({ id: 'custpage_customer', type: 'text', label: 'Customer' });
customer.updateDisplayType({ displayType: 'hidden' });
customer.defaultValue = params['custpage_customer'];
let pageField = form.addField({ id: 'custpage_page', type: 'select', label: 'Page' });
let htmlField = form.addField({ id: 'custpage_html', type: 'inlinehtml', label: 'Html' });
htmlField.defaultValue = "<script>jQuery(function($){require(['N/currentRecord'], function(currentRecord){" + scr + ";})})</script>"
form.clientScriptModulePath = '../SSRX-573/jj_cs_item_selection_ssrx_573.js';
// see if user can see item cost
log.debug('pageFilter', pageFilter);
let allItemsArr = getItemsVersion2(nameFilter, brandFilter, descFilter, drugFamilyFilter, customerId, itemFilter, marketingCategoryFilter, dateAddedFilter, agFilter, shortDateFilter, specialsFilter, pageFilter);
for (let i = 1; i <= allItemsArr.pageCount; i++) {
pageField.addSelectOption({
value: i,
text: 'Page-' + i
});
}
log.debug('allItemsArr.pageFilter', allItemsArr.pageFilter);
pageField.defaultValue = allItemsArr.pageFilter ? allItemsArr.pageFilter : 1;
allItems = getLotExpiration(allItemsArr.data);
sublist = form.addSublist({ id: 'custpage_results', type: 'list', label: 'Search Results' });
sublist.addField({ id: 'custpage_item_number', type: 'text', label: 'Item #' })
.updateDisplayType({ displayType: 'inline' });
sublist.addField({ id: 'custpage_item', type: 'select', label: 'NDC', source: 'item' })
.updateDisplayType({ displayType: 'inline' });
sublist.addField({ id: 'custpage_item_name', type: 'text', label: 'Name' })
.updateDisplayType({ displayType: 'hidden' });
sublist.addField({ id: 'custpage_description', type: 'textarea', label: 'Description' })
.updateDisplayType({ displayType: 'inline' });
sublist.addField({ id: 'custpage_drug_color', type: 'text', label: 'Drug Color' })
.updateDisplayType({ displayType: 'inline' });
sublist.addField({ id: 'custpage_case_pack', type: 'text', label: 'Case Pack' })
.updateDisplayType({ displayType: 'inline' });
sublist.addField({ id: 'custpage_manufacturer', type: 'text', label: 'Manufacturer' })
.updateDisplayType({ displayType: 'inline' });
sublist.addField({ id: 'custpage_brand', type: 'text', label: 'Brand Name' })
.updateDisplayType({ displayType: 'inline' });
sublist.addField({ id: 'custpage_lot_expiration', type: 'textarea', label: 'Lot Expiration' })
.updateDisplayType({ displayType: 'hidden' });
sublist.addField({ id: 'custpage_floor_price', type: 'text', label: 'Floor Price' })
.updateDisplayType({ displayType: 'inline' });
sublist.addField({ id: 'custpage_baseprice', type: 'text', label: 'Base Price' })
.updateDisplayType({ displayType: 'hidden' });
sublist.addField({ id: 'custpage_available', type: 'integer', label: 'Available' })
.updateDisplayType({ displayType: 'inline' });
sublist.addField({ id: 'custpage_max_qty', type: 'text', label: 'Max Qty' })
.updateDisplayType({ displayType: 'inline' });
sublist.addField({ id: 'custpage_last_sell_price', type: 'text', label: 'Sell Price' })
.updateDisplayType({ displayType: 'entry' });
sublist.addField({ id: 'custpage_quantity', type: 'float', label: 'Quantity' })
.updateDisplayType({ displayType: 'entry' });
if (user.id != 25049) {
sublist.addField({ id: 'custpage_add', type: 'textarea', label: 'Add Item' })
.updateDisplayType({ displayType: 'inline' });
}
else {
sublist.addField({ id: 'custpage_add', type: 'checkbox', label: 'Add Item' });
}
let sublistRecords = [];
for (let i = 0, count = allItems.ids.length; i < count; i++) {
sublistRecords.push(allItems[allItems.ids[i]]);
}
sublistRecords.sort(function (a, b) {
let alc = a.custpage_description.toLowerCase(), blc = b.custpage_description.toLowerCase();
return alc > blc ? 1 : alc < blc ? -1 : 0;
});
for (let i = 0, count = sublistRecords.length; i < count; i++) {
if (user.id != 25049) {
sublistRecords[i].custpage_add = getHtml('add', sublistRecords[i].custpage_item, i + 1);
}
}
setResultSublist(sublist, sublistRecords)
sublist = form.addSublist({ id: 'custpage_cart', type: 'inlineeditor', label: 'Cart' });
sublist.addField({ id: 'custpage_item_name', type: 'text', label: 'Item' })
.updateDisplayType({ displayType: 'disabled' });
sublist.addField({ id: 'custpage_item', type: 'text', label: 'Item' })
.updateDisplayType({ displayType: 'hidden' });
sublist.addField({ id: 'custpage_description', type: 'textarea', label: 'Description' })
.updateDisplayType({ displayType: 'disabled' });
sublist.addField({ id: 'custpage_lot_expiration', type: 'text', label: 'Lot Expiration' })
.updateDisplayType({ displayType: 'hidden' });
sublist.addField({ id: 'custpage_sellprice', type: 'text', label: 'Sell Price' })
.updateDisplayType({ displayType: 'disabled' });
sublist.addField({ id: 'custpage_quantity', type: 'integer', label: 'Quantity' })
.updateDisplayType({ displayType: 'normal' });
sublist.addField({ id: 'custpage_lot_expiration_hidden', type: 'text', label: 'Lot Expiration' })
.updateDisplayType({ displayType: 'hidden' });
setResultSublist(sublist, cart_contents)
form.addSubmitButton('Apply Filters and Search Again');
form.addButton({ id: 'custpage_addtotransaction', label: 'Add Items in Cart to Transaction', functionName: '_add_items()' });
form.addButton({ id: 'custpage_sale_history', label: 'Sales History', functionName: '_history()' });
scriptContext.response.writePage(form);
let endOfExecution = new Date().getTime();
let executionTime = endOfExecution - startOfExecution;
log.debug('User : ' + user.id + ', Execution time: ' + (executionTime / 1000) + ' seconds');
}
} catch (e) {
log.error('error@onRequest', e);
}
}
return { onRequest }
});