Create a custom form that will display sales orders which need to be fulfilled or billed.
The sublist columns contain,
- Internal IDs
- Document Name
- Date
- Status
- Subsidiary
- Line Number
- Tax Type
- Total Committed Quantity
The page should contain the following filter,
- Subsidiary
The value should be updated dynamically based on the filters.
/**
* @NApiVersion 2.1
* @NScriptType Suitelet
*/
define(['N/currentRecord', 'N/record', 'N/search', 'N/ui/serverWidget'],
/**
* @param{currentRecord} currentRecord
* @param{record} record
* @param{search} search
* @param{serverWidget} serverWidget
*/
(currentRecord, record, search, serverWidget) => {
/**
* 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
{
//Filters-------------------------------------------
var form = serverWidget.createForm({title: 'SALES ORDERS TO BE FULFILLED AND BILLED'});
if (scriptContext.request.method === 'GET'){
form.clientScriptFileId = 239;
var subsidiary_filter = form.addField({
id: 'subsidiary',
type: serverWidget.FieldType.SELECT,
label: 'SUBSIDIARY',
source: '-117'
});
//Getting filtering parameter from client script--------
var statusFilter = scriptContext.request.parameters.statusref;
var nameFilter = scriptContext.request.parameters.name;
var subsidiaryFilter = scriptContext.request.parameters.subsidiary;
// if subsidiaryFilter has a value then set defaultValue
if (subsidiaryFilter)
{
subsidiary_filter.defaultValue = subsidiaryFilter;
}
//columns-------------------------------
var sublist = form.addSublist({
id: 'sublist',
type: serverWidget.SublistType.LIST,
label: 'View SO Details'
});
sublist.addField({
id: 'internalid',
type: serverWidget.FieldType.TEXT,
label: 'Internal ID'
});
sublist.addField({
id: 'tranid',
type: serverWidget.FieldType.TEXT,
label: 'Document Number',
align: serverWidget.LayoutJustification.RIGHT
});
sublist.addField({
id: 'trandate',
type: serverWidget.FieldType.TEXT,
label: 'Date',
align: serverWidget.LayoutJustification.RIGHT
});
sublist.addField({
id: 'subsidiary',
type: serverWidget.FieldType.TEXT,
label: 'Subsidiary',
align: serverWidget.LayoutJustification.RIGHT
});
sublist.addField({
id: 'taxtype',
type: serverWidget.FieldType.TEXT,
label: 'Tax Type',
align: serverWidget.LayoutJustification.RIGHT
});
sublist.addField({
id: 'totalcommitted',
type: serverWidget.FieldType.TEXT,
label: 'Total Quantity Committed',
align: serverWidget.LayoutJustification.RIGHT
});
sublist.addField({
id: 'statusref',
type: serverWidget.FieldType.TEXT,
label: 'Status',
align: serverWidget.LayoutJustification.RIGHT
});
sublist.addField({
id: 'lineuniquekey',
type: serverWidget.FieldType.TEXT,
label: 'Line Unique Key',
align: serverWidget.LayoutJustification.RIGHT
});
sublist.addField({
id: 'entityid',
type: serverWidget.FieldType.TEXT,
label: 'Name',
align: serverWidget.LayoutJustification.RIGHT
});
filter=[];
//creating filter if subsidiaryFilter has a value
if(subsidiaryFilter)
{
filter.push( ["subsidiary", "is", subsidiaryFilter]);
}
//-----------Search Creation---------
var salesorderSearchObj = search.create({
type: "salesorder",
filters:
[
["type","anyof","SalesOrd"],
"AND",
["status","anyof","SalesOrd:D","SalesOrd:E","SalesOrd:B"],
"AND",
["formulanumeric: case when {quantity} = {quantitycommitted} then 1 else 0 end","equalto","1"]
],
columns:
[
search.createColumn({name: "trandate", label: "Date"}),
search.createColumn({name: "tranid", label: "Document Number"}),
search.createColumn({
name: "taxtype",
join: "taxItem",
label: "Tax Type"
}),
search.createColumn({name: "subsidiary", label: "Subsidiary"}),
search.createColumn({name: "totalcommitted", label: "Total Quantity Committed"}),
search.createColumn({name: "statusref", label: "Status"}),
search.createColumn({name: "internalid", label: "Internal ID"}),
search.createColumn({name: "lineuniquekey", label: "Line Unique Key"})
],
filters:filter
});
//----------Running search------------
var resultSet = salesorderSearchObj.run();
var results = resultSet.getRange({start: 0, end: 500});
var arr = [];
var obj;
for (var i in results)
{
obj = {};
obj.trandate = results[i].getValue(resultSet.columns[0]);
obj.tranid = results[i].getValue(resultSet.columns[1]);
obj.taxtype = results[i].getValue(resultSet.columns[2]);
obj.subsidiary = results[i].getValue(resultSet.columns[3]);
obj.totalcommitted = results[i].getValue(resultSet.columns[4]);
obj.statusref = results[i].getValue(resultSet.columns[5]);
obj.internalid = results[i].getValue(resultSet.columns[6]);
obj.lineuniquekey = results[i].getText(resultSet.columns[7]);
log.debug("object", obj);
arr.push(obj);
}
log.debug("Array", arr);
//Rendering the array to sublist
for (var j = 0; j < arr.length; j++) {
log.debug("internal", arr[j].internalid);
sublist.setSublistValue({
id: 'trandate',
line: j,
value: arr[j].trandate||"null"
});
sublist.setSublistValue({
id: 'tranid',
line: j,
value: arr[j].tranid||"null"
});
sublist.setSublistValue({
id: 'taxtype',
line: j,
value: arr[j].taxtype||"null"
});
sublist.setSublistValue({
id: 'subsidiary',
line: j,
value: arr[j].subsidiary||"null"
});
sublist.setSublistValue({
id: 'totalcommitted',
line: j,
value: arr[j].totalcommitted||"null"
});
sublist.setSublistValue({
id: 'statusref',
line: j,
value: arr[j].statusref||"null"
});
sublist.setSublistValue({
id: 'internalid',
line: j,
value: arr[j].internalid||"null"
});
sublist.setSublistValue({
id: 'lineuniquekey',
line: j,
value: arr[j].lineuniquekey||"null"
});
}
}
scriptContext.response.writePage(form);
}
catch (e)
{
log.debug("Error", e);
}
}
return {onRequest}
});