Adding Warning Message For Back ordered kit items.

The client would like to add a warning message when the kit item is back-ordered in the item fulfillment record.

/**
* @NApiVersion 2.1
* @NScriptType UserEventScript
*/
/*******************************************************************
 *   UserEventScript
 ****************************************************************
 *
 * Date: 04/11/2022
 *
 * Author: Jobin and Jismi IT Services LLP
 *
 * REVISION HISTORY
 *
 * Revision 1.0
 *
 * Description: Script to pop up an alert of back ordered quantity
 *
 * Revision 2.0
 *
 ***************************************************************/
define(['N/record', 'N/search', 'N/ui/serverWidget','N/email', 'N/runtime','N/ui/message'],

    (record, search, serverWidget,email, runtime,message) => {
        /**
         * @description the fuctcion to create a search to get member item details
         * @param soNum - sales order internal id
         */
        function memberDetailSearch(soNum)
        {
            try {
                var memberItemobj = {};
                var detailsItemArr=[]
                log.debug("inside function")
                var salesorderSearchObj = search.create({
                    type: "salesorder",
                    filters:
                        [
                            ["type","anyof","SalesOrd"],
                            "AND",
                            ["taxline","is","F"],
                            "AND",
                            ["mainline","is","F"],
                            "AND",
                            ["shipping","is","F"],
                            "AND",
                            ["status","anyof","SalesOrd:B","SalesOrd:E","SalesOrd:D"],
                            "AND",
                            ["formulanumeric: case when (({quantity}-nvl({quantityshiprecv},0)-nvl({quantitycommitted},0))>0) or ({quantitycommitted}<=0) then 1 else 0 end","greaterthan","0"],
                            "AND",
                            ["internalid","anyof",soNum],
                            "AND",
                            ["item.type","anyof","Kit"]
                        ],
                    columns:
                        [
                            search.createColumn({
                                name: "memberitem",
                                join: "item",
                                label: "Member Item"
                            }),
                            search.createColumn({
                                name: "memberquantity",
                                join: "item",
                                label: "Member Quantity"
                            }),
                            search.createColumn({
                                name: "formulanumeric",
                                formula: "({quantity}-nvl({quantityshiprecv},0)-nvl({quantitycommitted},0))*{item.memberquantity}",
                                label: "BACK ORDERED MEMBERQUANTITY"
                            }),
                            search.createColumn({
                                name: "internalid",
                                join: "item",
                                label: "Internal ID"
                            })
                        ]

                });
                var searchResultCount = salesorderSearchObj.runPaged();
                searchResultCount.pageRanges.forEach(function (pageRange)
                {
                    let myPage = searchResultCount.fetch({ index: pageRange.index });
                    myPage.data.forEach(function (result)

                    {
                        var memberItemobj2 = {};
                        memberItemobj2.itemName= result.getText({
                            name: "memberitem",
                            join: "item",
                            label: "Member Item"

                        });
                        memberItemobj2.name=result.getValue({
                            name: "memberitem",
                            join: "item",
                            label: "Member Item"

                        });
                        memberItemobj2.kitItemId=result.getValue({
                            name: "internalid",
                            join: "item",
                            label: "Internal ID"
                        });
                        memberItemobj2.backordered= result.getValue({
                            name: "formulanumeric",
                            formula: "({quantity}-nvl({quantityshiprecv},0)-nvl({quantitycommitted},0))*{item.memberquantity}",
                            label: "BACK ORDERED MEMBERQUANTITY"
                        });

                        detailsItemArr.push(memberItemobj2)

                        log.debug("detailsItemArr",detailsItemArr)

                    });
                });
                return detailsItemArr;

            }
            catch (e)
            {
                log.debug("Error @ function",e )

            }
        }
        /**
         * Defines the function definition that is executed after record is submitted.
         * @param {Object} scriptContext
         * @param {Record} scriptContext.newRecord - New record
         * @param {Record} scriptContext.oldRecord - Old record
         * @param {string} scriptContext.type - Trigger type; use values from the context.UserEventType enum
         * @since 2015.2
         */

        const beforeLoad = (scriptContext) => {
            try
            {
                if (scriptContext.type=='create' || scriptContext.type=='edit'){
                    var val='';
                    let newRecord = scriptContext.newRecord;
                    let soNum = newRecord.getValue({
                        fieldId: 'createdfrom'
                    })
                    //Search created to find back ordered quantity of components of kit
                    let itemDetails = memberDetailSearch(soNum)
                    let count=itemDetails.length
                    for(var i=0;i<count;i++){
                        var componentItem = itemDetails[i].itemName;
                        log.debug("componentItem",componentItem);
                        var backOrdered=itemDetails[i].backordered
                        log.debug("backOrdered",backOrdered)
                        val = val  + ',' + componentItem + '(' + backOrdered + ')';
                        var newVal=val.slice(1)
                        //log.debug("newVal",newVal)
                    }
                    if(val){
                        var form = scriptContext.form;
                        form.addPageInitMessage({
                            type: message.Type.WARNING,
                            message: `Some Items are Backordered in the Sales order and displayed below in format Item Name(Quantity): ${newVal}`,
                            duration: 10000
                        });
                    }
                }

            }catch (e) {
                log.error("error @ aftersubmit",e)
            }
        }
        return {beforeLoad}
    });

Leave a comment

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