Automatic Inventory Updation in SO creation.

Jira Code: AFGU-01

Inventory details updated automatically when a Sales Order created.
Inventory number are allocated always in the ascending order.
UE script AFGU-01 JJ UE Inventory Update for Sales Order used to update the inventory details.

Script

/**
 * @NApiVersion 2.x
 * @NScriptType UserEventScript
 * @NModuleScope SameAccount
 */

/* Script Description
 * This user event script will change the inventory details of a sales order after saved.
   Automatically allocate  inventory lots for items added,in ascending order.

 ******************************************************************************************************
   Aspire Food Group USA Inc.
 ******************************************************************************************************
 * Date: 03/08/2018
 * 
 * Author: Jobin & Jismi IT Services LLP*/
/*****************************************************************************************************/


define(['N/record', 'N/search'],

    function(record, search) {

        /**
         * Function definition to be triggered before record is loaded.
         *
         * @param {Object} scriptContext
         * @param {Record} scriptContext.newRecord - New record
         * @param {string} scriptContext.type - Trigger type
         * @param {Form} scriptContext.form - Current form
         * @Since 2015.2
         */
        /*function beforeLoad(scriptContext) {

        }*/

        /**
         * Function definition to be triggered before record is loaded.
         *
         * @param {Object} scriptContext
         * @param {Record} scriptContext.newRecord - New record
         * @param {Record} scriptContext.oldRecord - Old record
         * @param {string} scriptContext.type - Trigger type
         * @Since 2015.2
         */
        /*function beforeSubmit(scriptContext) {

           

        }*/

        /**
         * Function definition to be triggered before record is loaded.
         *
         * @param {Object} scriptContext
         * @param {Record} scriptContext.newRecord - New record
         * @param {Record} scriptContext.oldRecord - Old record
         * @param {string} scriptContext.type - Trigger type
         * @Since 2015.2
         */
        function afterSubmit(scriptContext) {

            try {

                var REC = scriptContext.newRecord.id;

                var SALES_ORDER = record.load({
                    type: record.Type.SALES_ORDER,
                    id: REC,
                    isDynamic: true

                });

                var custlocation = SALES_ORDER.getValue({
                    fieldId: 'location'
                });

                var custlocationtext = SALES_ORDER.getText({ fieldId: 'location' });




                var lineCountItemSublist = SALES_ORDER.getLineCount({ sublistId: 'item' });
                for (var i = 0; i < lineCountItemSublist; i++) {
                    try {

                        var itemQuatity = SALES_ORDER.getSublistValue({
                            sublistId: 'item',
                            fieldId: 'quantity',
                            line: i
                        });




                        var itemId = SALES_ORDER.getSublistValue({
                            sublistId: 'item',
                            fieldId: 'item',
                            line: i
                        });


                        var netresult = createCustomerItemInventorysearch(custlocation, itemId);


                        SALES_ORDER.selectLine({
                            sublistId: 'item',
                            line: i
                        });


                        var INVENTORY_DETAIL_REC = SALES_ORDER.getCurrentSublistSubrecord({
                            sublistId: 'item',
                            fieldId: 'inventorydetail'
                        });

                        var lineCountInvntDet = INVENTORY_DETAIL_REC.getLineCount({ sublistId: 'inventoryassignment' });

                        if (lineCountInvntDet == 0) {


                            Inventoryarray = inventoryarrayfunction(netresult, itemQuatity);



                            for (var x = 0; x < Inventoryarray.length; x++) {



                                if (Inventoryarray.length == 1) {


                                    setvaluecase1(SALES_ORDER, INVENTORY_DETAIL_REC, Inventoryarray);

                                } else {



                                    if (x == 0) {
                                        setvaluecase1(SALES_ORDER, INVENTORY_DETAIL_REC, Inventoryarray);


                                    } else {


                                        setvaluecase2(x, SALES_ORDER, INVENTORY_DETAIL_REC, Inventoryarray);

                                    }
                                }

                            }

                        } else {

                            log.debug("mesage", "Inventory is already allocated for this item", itemId);
                        }
                        SALES_ORDER.commitLine({
                            sublistId: 'item'
                        });
                    } catch (e) {
                        log.debug({
                            title: 'i value',
                            details: e.message
                        });
                        continue;
                    }
                }
                var CSRecordId = SALES_ORDER.save({
                    enableSourcing: 'false',
                    ignoreMandatoryFields: 'false'
                });



            } catch (e) {
                log.debug({
                    title: 'Mainfunction error',
                    details: e.message
                });
            }
        }

        /**********************************************************************************************************/

        /* CEARTING SAVED SEARCH */

        function createCustomerItemInventorysearch(custlocation, itemId) {

            try {
                //var itemObj = new Object();
                var itemarray = new Array();


                var itemSearchObj = search.create({
                    type: "item",
                    filters: [
                        ["islotitem", "is", "T"],
                        "AND", ["inventorylocation.internalid", "anyof", custlocation],
                        "AND", ["internalid", "anyof", itemId],
                        "AND", ["inventorynumber.quantityavailable", "notequalto", "0"]
                    ],
                    columns: [
                        search.createColumn({
                            name: "item",
                            join: "inventoryDetail",
                            label: "Item"
                        }),
                        search.createColumn({ name: "internalid", label: "Internal ID" }),
                        search.createColumn({ name: "locationquantityonhand", label: "Location On Hand" }),
                        search.createColumn({
                            name: "quantityonhand",
                            join: "inventoryNumber",
                            /* sort: search.Sort.ASC,*/
                            label: "On Hand"
                        }),
                        search.createColumn({
                            name: "inventorynumber",
                            join: "inventoryNumber",
                            sort: search.Sort.ASC,
                            label: "Number"
                        }),
                        search.createColumn({
                            name: "quantityavailable",
                            join: "inventoryNumber",
                            label: "Available"
                        })
                    ]

                }).run().each(function(result) {
                    var itemobj = new Object();
                    // .run().each has a limit of 4,000 results
                    itemobj.internal = result.getValue({
                        name: "internalid",
                        /* join: "inventoryDetail"*/
                    });
                    //itemObj[internal] = {};

                    /*itemObj[internal].inventorynumber  =  result.getValue({
                             name: "inventorynumber",
                             join: "inventoryDetail",
                             label: " Number"
                          });*/
                    itemobj.inventorynumber = result.getValue({
                        name: "inventorynumber",
                        join: "inventoryNumber",
                        label: "Number"
                    });


                    itemobj.locationquantityonhand = result.getValue({
                        name: "locationquantityonhand",
                        /*join: "inventoryDetail",*/
                        label: "Location On Hand"
                    });

                    /*itemObj[internal].locationquantityonhand  =  result.getText({
                             name: "locationquantityonhand",
                             join: "inventoryDetail",
                             label: " Location On Hand"
                          });*/
                    itemobj.quantityonhand = result.getValue({
                        name: "quantityonhand",
                        join: "inventoryNumber",
                        label: "On Hand"
                    });
                    itemobj.quantityavailable = result.getValue({
                        name: "quantityavailable",
                        join: "inventoryNumber",
                        label: "Available"
                    });

                    itemarray.push(itemobj);



                    return true;

                });


                return itemarray;
            } catch (e) {
                log.debug({
                    title: 'createCustomerItemInventorysearch error',
                    details: e.message
                });
            }
        }

        /***********************************************************************************************************/

        /*ARRANGING INVENTORY DETAILS FOR EACH ITEM*/

        function inventoryarrayfunction(netresult, itemQuatity) {
            try {
                var inventoryarray = new Array();
                for (var k = 0; k < netresult.length; k++) {
                    var inventoryObject = new Object();
                    if (netresult[k].quantityavailable >= itemQuatity) {

                        inventoryObject.invntNumber = netresult[k].inventorynumber;
                        inventoryObject.itemQuatity = itemQuatity;

                        inventoryarray.push(inventoryObject);

                        break;
                    } else {


                        itemQuatity = itemQuatity - (netresult[k].quantityavailable);
                        inventoryObject.invntNumber = netresult[k].inventorynumber;
                        inventoryObject.itemQuatity = netresult[k].quantityavailable;


                        inventoryarray.push(inventoryObject);


                    }
                }
                return inventoryarray;
            } catch (e) {
                log.debug({
                    title: 'inventoryarrayfunction error',
                    details: e.message
                });
            }
        }

        /***********************************************************************************************************/

        /* REPLACING VALUES TO THE FIRST LINE OF INVENTORY DETAILS RECORD*/

        function setvaluecase1(SALES_ORDER, INVENTORY_DETAIL_REC, Inventoryarray) {
            try {
                var INVENTORY_DETAIL_REC = SALES_ORDER.getCurrentSublistSubrecord({
                    sublistId: 'item',
                    fieldId: 'inventorydetail'
                });

                INVENTORY_DETAIL_REC.selectNewLine({
                    sublistId: 'inventoryassignment'
                });


                INVENTORY_DETAIL_REC.setCurrentSublistText({
                    sublistId: 'inventoryassignment',
                    fieldId: 'issueinventorynumber',
                    text: Inventoryarray[0].invntNumber
                });


                INVENTORY_DETAIL_REC.setCurrentSublistValue({
                    sublistId: 'inventoryassignment',
                    fieldId: 'quantity',
                    value: Inventoryarray[0].itemQuatity
                });

                INVENTORY_DETAIL_REC.commitLine({
                    sublistId: 'inventoryassignment'
                });


            } catch (e) {
                log.debug({
                    title: 'setvaluecase1 error',
                    details: e.message
                });
            }
        }

        /***********************************************************************************************************/

        /*  SET VALUES FROM INVENTORY ARRAY INTO NEW LINE OF INVENTORY RECORD*/

        function setvaluecase2(x, SALES_ORDER, INVENTORY_DETAIL_REC, Inventoryarray) {
            try {


                var INVENTORY_DETAIL_REC = SALES_ORDER.getCurrentSublistSubrecord({
                    sublistId: 'item',
                    fieldId: 'inventorydetail'
                });
                INVENTORY_DETAIL_REC.selectNewLine({
                    sublistId: 'inventoryassignment'
                });


                INVENTORY_DETAIL_REC.setCurrentSublistText({
                    sublistId: 'inventoryassignment',
                    fieldId: 'issueinventorynumber',
                    text: Inventoryarray[x].invntNumber
                });


                INVENTORY_DETAIL_REC.setCurrentSublistValue({
                    sublistId: 'inventoryassignment',
                    fieldId: 'quantity',
                    value: Inventoryarray[x].itemQuatity
                });



                INVENTORY_DETAIL_REC.commitLine({
                    sublistId: 'inventoryassignment'
                });




            } catch (e) {
                log.debug({
                    title: 'setvaluuecase2 error',
                    details: e.message
                });
            }
        }


        return {
            /*beforeLoad: beforeLoad,
            beforeSubmit: beforeSubmit,*/
            afterSubmit: afterSubmit,
            createCustomerItemInventorysearch: createCustomerItemInventorysearch,
            inventoryarrayfunction: inventoryarrayfunction,
            setvaluecase1: setvaluecase1,
            setvaluecase2: setvaluecase2

        };

    });

Leave a comment

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