Custom page for display sales order based on the status

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}

    });


Avatar photo

By Nandesh

I’m a Junior Software Engineer in Kerala, a Graduate with a passion for computer science, and electrical engineering.

Leave a comment

Your email address will not be published. Required fields are marked *