Suitelet Script for creating custom page for shipdate update on sales orders

define(["N/record", "N/search", "N/ui/serverWidget",'N/https','N/runtime',"N/format"], (
    record,
    search,
    serverWidget,
    https,
    runtime,
    format

) => {
    const PAGE_SIZE = 100;
    /**
     * Defines the Suitelet script trigger point.
     * @param {Object} scriptContext
     * @param {ServerRequest} scriptContext.request - Incoming request
     * @param {ServerResponse} scriptContext.response - Suitelet response
     * @since 2015.2
     */

    function checkForParameter(parameter) {
        if (
            parameter != "" &&
            parameter !== null &&
            parameter !== undefined &&
            parameter !== false &&
            parameter !== "null" &&
            parameter !== "undefined" &&
            parameter !== "false" &&
            parameter != " "
        )
            return parameter;
        else {
            return 0;
        }
    }

    /**
     *
     * @param pageId
     * @param pageCount
     * @param sublist
     * @param form
     * @param count
     * @returns {number}
     */
    function addPagination(pageId, pageCount, sublist, form, count,scriptContext) {
        try {

            var salesOrderList = form.addField({
                id: "custpage_salesorder_field",
                type: serverWidget.FieldType.TEXT,
                // type: serverWidget.FieldType.SELECT,
                label: "Sales Order #",
                // source: "SALESORDER",
            });
            var poList = form.addField({
                id: "custpage_po_field",
                type: serverWidget.FieldType.TEXT,
                label: "PO #",
            });

            var progressBarField =form.addField({
                id: 'custpage_progress_bar',
                type: serverWidget.FieldType.INLINEHTML,
                label: 'Progress bar'
            });

            var loadingUrl = "https://4594915.app.netsuite.com/core/media/media.nl?id=2919379&c=4594915&h=5VJFw6xdqF7mY2o8no5GUDCDZLs8AObTJv-Svveq8NlpZsd9";
            var htmlCode = "<div><img id='custpage_load_img_new' style='height:50px;width:50px;top: 110px;left:745px;margin-left: auto; margin-right: auto; position: absolute;display: none;' src='" + loadingUrl + "'/></div>";
            progressBarField.defaultValue = htmlCode;



            var shipDate = form.addField({
                id: "custpage_date_field",
                type: serverWidget.FieldType.DATE,
                label: "Ship Date",
                //container: "custpage_primary",
            });
            shipDate.isMandatory = true;

            var soId=scriptContext.request.parameters.soid;
            if (soId)
                salesOrderList.defaultValue = soId
            var poHash=scriptContext.request.parameters.ponum
            if (poHash)
                poList.defaultValue = poHash

            if (!pageId || pageId < 0) pageId = 0;
            else if (pageId >= pageCount) pageId = pageCount - 1;
            if (pageId != 0) {
                sublist.addButton({
                    id: "custpage_previous",
                    label: "Previous",
                    functionName: "getSuiteletPage(" + (pageId - 1) + ")",
                });
            }
            if (pageId != pageCount-1 ) {
                sublist.addButton({
                    id: "custpage_next",
                    label: "Next",
                    // container: 'custpage_tertiary',
                    functionName: "getSuiteletPage(" + (pageId + 1) + ")",
                });
            }
            const selectOptions = form.addField({
                id: "custpage_pageid",
                label: "Page Index",
                //container: 'custpage_tertiary',
                type: serverWidget.FieldType.SELECT,
            });
            for (let i = 0; i < pageCount; i++) {
                if (i === pageId && i === pageCount - 1) {
                    selectOptions.addSelectOption({
                        value: "pageid_" + i,
                        text: i * PAGE_SIZE + 1 + " - " + count,
                        isSelected: true,
                    });
                } else if (i === pageId) {
                    selectOptions.addSelectOption({
                        value: "pageid_" + i,
                        text: i * PAGE_SIZE + 1 + " - " + (i + 1) * PAGE_SIZE,
                        isSelected: true,
                    });
                } else if (i === pageCount - 1) {
                    selectOptions.addSelectOption({
                        value: "pageid_" + i,
                        text: i * PAGE_SIZE + 1 + " - " + count,
                    });
                } else {
                    selectOptions.addSelectOption({
                        value: "pageid_" + i,
                        text: i * PAGE_SIZE + 1 + " - " + (i + 1) * PAGE_SIZE,
                    });
                }
            }
            selectOptions.defaultValue = "pageid_" + pageId;
            return pageId;
        } catch (error) {
            log.error("Error @pagination", error);
        }
    }

    /**
     * Function for creating custom page
     */

    function createPage(form, itemSublist, sublistValue,scriptContext) {
        try{

            form.clientScriptModulePath ='SuiteScripts/Jobin and Jismi IT Solutions/MARL-927/JJ CS Field change and button action MARL-928.js'

            itemSublist.addMarkAllButtons();

            var checkbox = itemSublist.addField({
                id: "custpage_chk",
                label: "Update Ship Date",
                type: serverWidget.FieldType.CHECKBOX,
            });
            var internalId = itemSublist.addField({
                id: "custpage_intid",
                label: "Internal Id",
                type: serverWidget.FieldType.TEXT,
            });
            internalId.updateDisplayType({
                displayType: serverWidget.FieldDisplayType.HIDDEN
            });
            var documentNum = itemSublist.addField({
                id: "custpage_docnum",
                label: "SO #",
                type: serverWidget.FieldType.TEXT,
            });

            var customer = itemSublist.addField({
                id: "custpage_customer",
                label: "Customer",
                type: serverWidget.FieldType.TEXT,
            });

            var poField = itemSublist.addField({
                id: "custpage_po",
                label: "PO #",
                type: serverWidget.FieldType.TEXT,
            });

            var itemName = itemSublist.addField({
                id: "custpage_unique_key",
                label: "Line Unique Key",
                type: serverWidget.FieldType.TEXT,
            });
            itemName.updateDisplayType({
                displayType: serverWidget.FieldDisplayType.HIDDEN
            });
            var uniqueKey = itemSublist.addField({
                id: "custpage_item_name",
                label: "Item Name",
                type: serverWidget.FieldType.TEXT,
            });
            var itemDescription = itemSublist.addField({
                id: "custpage_description",
                label: "Item Description",
                type: serverWidget.FieldType.TEXT,
            });
            var itemQuantity = itemSublist.addField({
                id: "custpage_qty",
                label: "Item Quantity",
                type: serverWidget.FieldType.TEXT,
            });
            var shipDate = itemSublist.addField({
                id: "custpage_shipdate",
                label: "Ship Date",
                type: serverWidget.FieldType.TEXT,
            });
            var createBy = itemSublist.addField({
                id: "custpage_createdby",
                label: "Created By",
                type: serverWidget.FieldType.TEXT,
            });
            var soStatus = itemSublist.addField({
                id: "custpage_sostatus",
                label: "Sales Order Status",
                type: serverWidget.FieldType.TEXT,
            });

            if(sublistValue) {
                //set values in sublist

                for (var i = 0; i < sublistValue.length; i++) {
                    itemSublist.setSublistValue({
                        id: "custpage_intid",
                        line: i,
                        value: sublistValue[i].intId,
                    });
                    if(sublistValue[i].poNumber){
                        itemSublist.setSublistValue({
                            id: "custpage_po",
                            line: i,
                            value: sublistValue[i].poNumber,
                        });

                    }
                    itemSublist.setSublistValue({
                        id: "custpage_docnum",
                        line: i,
                        value: sublistValue[i].docNumber,
                    });
                    itemSublist.setSublistValue({
                        id: "custpage_customer",
                        line: i,
                        value: sublistValue[i].custName,
                    });
                    itemSublist.setSublistValue({
                        id: "custpage_unique_key",
                        line: i,
                        value: sublistValue[i].uniqueKeyName,
                    });
                    itemSublist.setSublistValue({
                        id: "custpage_item_name",
                        line: i,
                        value: sublistValue[i].item,
                    });
                    if (sublistValue[i].itemDescr) {
                        itemSublist.setSublistValue({
                            id: "custpage_description",
                            line: i,
                            value: sublistValue[i].itemDescr,
                        });
                    }

                    if (sublistValue[i].quantity) {
                        itemSublist.setSublistValue({
                            id: "custpage_qty",
                            line: i,
                            value: sublistValue[i].quantity,
                        });
                    }
                    itemSublist.setSublistValue({
                        id: "custpage_shipdate",
                        line: i,
                        value: sublistValue[i].shipdate,
                    });
                    if (sublistValue[i].createdby) {
                        itemSublist.setSublistValue({
                            id: "custpage_createdby",
                            line: i,
                            value: sublistValue[i].createdby,
                        });
                    }

                    var soStatus=sublistValue[i].status
                    itemSublist.setSublistValue({
                        id: "custpage_sostatus",
                        line: i,
                        value: soStatus[0].toUpperCase() + soStatus.substring(1),
                    });
                }
            }
            form.addButton({
                id: "custpage_update_shipdate",
                label: "SUBMIT",
                functionName: "updateShipdate",
            });
            return form;
        } catch (error) {
            log.error("Error @createPage", error);
        }
    }
    /**
     * Function for getting the sales orders
     */
    function soSearch(scriptContext) {
        try {
            var filters_all = []
            filters_all.push(["type", "anyof", "SalesOrd"]);
            filters_all.push("AND");
            filters_all.push(["item.type", "anyof", "InvtPart"]);
            filters_all.push("AND");
            filters_all.push(["status", "noneof", "SalesOrd:C", "SalesOrd:H", "SalesOrd:G", "SalesOrd:A"]);
            filters_all.push("AND");
            filters_all.push(["item", "noneof", "@NONE@"]);
            filters_all.push("AND");
            filters_all.push(["taxline", "is", "F"]);
            filters_all.push("AND");
            filters_all.push(["shipping", "is", "F"]);
            filters_all.push("AND");
            filters_all.push(["formulanumeric: CASE when {quantity}={quantityshiprecv} then 1 else 0 end", "equalto", "0"]);
            var soID = scriptContext.request.parameters.soid;
            if (checkForParameter(soID)) {
                filters_all.push("AND");
                filters_all.push(["numbertext","is", soID]);
            }
            var poNum = scriptContext.request.parameters.ponum;
            if (checkForParameter(poNum)) {
                filters_all.push("AND");
                filters_all.push(["otherrefnum", "equalto", poNum]);
            }
            var salesorderSearchObj = search.create({
                type: "salesorder",
                filters: filters_all,
                columns: [
                    search.createColumn({name: "internalid", label: "Internal ID"}),
                    search.createColumn({name: "tranid", label: "Document Number"}),
                    search.createColumn({
                        name: "entityid",
                        join: "customerMain",
                        label: "Name",
                    }),
                    search.createColumn({
                        name: "itemid",
                        join: "item",
                        label: "Name",
                    }),
                    // search.createColumn({
                    //     name: "salesdescription",
                    //     join: "item",
                    //     label: "Description",
                    // }),

                    search.createColumn({name: "memo", label: "Memo"}),
                    search.createColumn({name: "quantity", label: "Quantity"}),
                    search.createColumn({name: "shipdate", label: "Ship Date"}),
                    search.createColumn({name: "custbody_created_by", label: "Created By"}),
                    search.createColumn({name: "statusref", label: "Status"}),
                    search.createColumn({name: "lineuniquekey", label: "Line Unique Key"}),
                    search.createColumn({name: "otherrefnum", label: "PO/Check Number"}),
                    search.createColumn({
                        name: "formulatext",
                        formula:
                            "Case When TO_CHAR({shipdate},'MM/DD/YYYY') IS NULL Then ' ' Else TO_CHAR({shipdate},'MM/DD/YYYY') End",
                        label: "Formula (Text)",
                    }),
                ],
            });
            return salesorderSearchObj.runPaged({
                pageSize: PAGE_SIZE,
            });
        }catch (e) {
            log.error("error@soSearch",e)
        }
    }
    /**
     *
     * @param pagedData
     * @param i
     * @returns {boolean|*[]}
     */
    function fetchResult (pagedData, i)  {
        try {
            var soArray = [];
            // fetch the current page data
            var currentPage = pagedData.fetch(i);
            // and forEach() thru all results
            currentPage.data.forEach(function (result) {
                var soObj = {};
                soObj.intId =result.getValue({
                    name: "internalid",
                    label: "Internal ID"
                })
                soObj.docNumber = result.getValue({
                    name: "tranid",
                    label: "Document Number",
                });
                soObj.poNumber=result.getValue({
                    name: "otherrefnum",
                    label: "PO/Check Number"
                });
                soObj.custName = result.getValue({
                    name: "entityid",
                    join: "customerMain",
                    label: "Name",
                });
                soObj.uniqueKeyName = result.getValue({
                    name: "lineuniquekey",
                    label: "Line Unique Key",
                });
                soObj.item = result.getValue({
                    name: "itemid",
                    join: "item",
                    label: "Name",
                });

                soObj.itemDescr = result.getValue({
                    name: "memo",
                    label: "Memo"
                });

                soObj.quantity = result.getValue({
                    name: "quantity",
                    label: "Quantity",
                });
                soObj.shipdate = result.getValue({
                    name: "formulatext",
                    formula:
                        "Case When TO_CHAR({shipdate},'MM/DD/YYYY') IS NULL Then ' ' Else TO_CHAR({shipdate},'MM/DD/YYYY') End",
                    label: "Formula (Text)",
                });
                soObj.createdby = result.getText({
                    name: "custbody_created_by",
                    label: "Created By",
                });
                soObj.status = result.getText({ name: "statusref", label: "Status" });
                soArray.push(soObj);
                return true;
            });
            if (soArray.length>0) {
                return soArray;
            } else {
                return [];
            }

        } catch (error) {
            log.error("Error @fetchResult", error.message);
        }
    }

    const onRequest = (scriptContext) => {
        try {
            var form = serverWidget.createForm({
                title: "Sales Order - Ship Date Update",
                hideNavBar: false,
            });
            var itemSublist = form.addSublist({
                id: "custpage_item_lines",
                type: serverWidget.SublistType.LIST,
                label: "Item List",
            });
            var searchResultObj = soSearch(scriptContext);
            log.debug("searchResultObj",searchResultObj)
            var soID = scriptContext.request.parameters.soid;
            var count = searchResultObj?.count;

                const pageCount = Math.ceil(count / PAGE_SIZE);
                var pageId = scriptContext.request.parameters.page;
                var pageID = addPagination(pageId, pageCount, itemSublist, form, count, scriptContext);
            if (count && count > 0) {
                var sublistValue = fetchResult(searchResultObj, pageID);
            }

            var page = createPage(form, itemSublist, sublistValue,scriptContext);
            scriptContext.response.writePage(page);



        } catch (e) {
            log.debug("error@onRequest", e);
        }
    };

    return { onRequest };
});

Leave a comment

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