Auto Populate Preferred Vendor on Item Record

Requirement

In the item record, there is a custom field called PRIMARY VENDOR. When it is selected then under the purchase and inventory tab we need to set it as the primary vendor, in the standard sublist.

Solution

/**
 * @NApiVersion 2.1
 * @NScriptType UserEventScript
 */

define(['N/currentRecord', 'N/record', 'N/search'],
    /**
     * @param{currentRecord} currentRecord
     * @param{record} record
     * @param{search} search
     */
    (currentRecord, record, search) => {


        /**
         * Defines the function definition that is executed before 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 beforeSubmit = (scriptContext) => {
            try {
                let newRec = scriptContext.newRecord
               
                let newPrimaryVendor = newRec.getValue({
                    fieldId: 'custitem_jj_primary_vendor'
                })
                

                if (checkForParameter(newPrimaryVendor)) {
                    setPrimaryVendor(newRec, newPrimaryVendor)
                }
            } catch (e) {
                log.debug('error@afterSubmit', e)
            }
        }

        /**
         * @description Check whether the given parameter argument has value on it or is it empty.
         * ie, To check whether a value exists in parameter
         * @param {*} parameter parameter which contains some values
         * @returns {Boolean} true if there exist a value, else false
         */

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

        /**
         * @description Defines the function definition that is set the preferred vendor in the standard sublist with the value in the custom primary vendor field.
         * @param {Record} newRec :  New Record
         * @param {Number} newPrimaryVendor :  New Primary Vendor Value
         * The sublist field wil be set with the primary vendor field value.
         */

        function setPrimaryVendor(newRec, newPrimaryVendor) {
            try {
              
                let lineCount = newRec.getLineCount({
                    sublistId: 'itemvendor'
                });
                

                if (lineCount > 0) {
                    for (let key = 0; key < lineCount; key++) {
                        let preffered = newRec.getSublistValue({
                            sublistId: 'itemvendor',
                            fieldId: 'preferredvendor',
                            line: key
                        });

                        if (preffered == true) {
                            let currentPreferredvendor = newRec.getSublistValue({
                                sublistId: 'itemvendor',
                                fieldId: 'vendor',
                                line: key
                            });

                            if (newPrimaryVendor != currentPreferredvendor) {
                                log.debug('Not equal')
                                newRec.setSublistValue({
                                    sublistId: 'itemvendor',
                                    fieldId: 'vendor',
                                    value: Number(newPrimaryVendor),
                                    line: key
                                });
                            }
                            else{
                                return false
                            }
                        }
                        else{
                            // let currentPreferredvendor = newRec.getSublistValue({
                            //     sublistId: 'itemvendor',
                            //     fieldId: 'vendor',
                            //     line: key
                            // });



                            if (newPrimaryVendor == currentPreferredvendor) {
                                
                                newRec.setSublistValue({
                                    sublistId: 'itemvendor',
                                    fieldId: 'preferredvendor',
                                    value: true,
                                    line: key
                                });
                            }else{
                               
                                let call=addVendorSublist(newPrimaryVendor,newRec,lineCount)
                               
                            }

                        }

                    }
                } else {
                  
                    let call=addVendorSublist(newPrimaryVendor,newRec,lineCount)
                 
                }

            } catch (e) {
                log.debug('error@setPrimaryVendor', e)
            }
        }

        function vendorSearch(newPrimaryVendor) {
            try {
                var vendorSearchObj = search.create({
                    type: "vendor",
                    filters:
                        [
                            ["internalid", "anyof", newPrimaryVendor]
                        ],
                    columns:
                        [
                            search.createColumn({name: "internalid", label: "Internal ID"}),
                            search.createColumn({
                                name: "entityid",
                                sort: search.Sort.ASC,
                                label: "Name"
                            }),
                            search.createColumn({name: "subsidiary", label: "Primary Subsidiary"}),
                        ]
                });
                let searchResultCount = vendorSearchObj.runPaged().count;
                let vendorSearchResult = vendorSearchObj.run().getRange({
                    start: 0,
                    end: 1
                })

                if (searchResultCount > 0) {
                    return vendorSearchResult
                } else {
                    return false
                }

            } catch (e) {
                log.debug('vendorSearch', vendorSearch)
            }
        }


        function addVendorSublist(newPrimaryVendor,newRec,lineCount)
        {
            try{
                let vendorSearchRes = vendorSearch(newPrimaryVendor)

                var objSublist = newRec.getSublist({
                    sublistId: 'itemvendor'
                });
             
                newRec.setSublistValue({
                    sublistId: 'itemvendor',
                    fieldId: 'vendor',
                    value: newPrimaryVendor,
                    line:lineCount
                });
                newRec.setSublistValue({
                    sublistId: 'itemvendor',
                    fieldId: 'preferredvendor',
                    value: true,
                    line:lineCount
                });
                newRec.setSublistValue({
                    sublistId: 'itemvendor',
                    fieldId: 'subsidiary',
                    value: vendorSearchRes[0].getValue({name: "subsidiary", label: "Primary Subsidiary"}),
                    line:lineCount
                });
                
            }
            catch (e) {
                log.debug('error@setVendorSublist',e)
            }
        }

        return {beforeSubmit}

    });

Leave a comment

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