Displaying PO# and Order# duplicate alert in sales order record

REQUIREMENT

Need to display an alert if the PO# with that customer exists in sales order record. Also, display an alert message if sales order is tried to save with the duplicate order# value.

SOLUTION

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

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

        /**
         * Function to be executed after page is initialized.
         *
         * @param {Object} scriptContext
         * @param {Record} scriptContext.currentRecord - Current form record
         * @param {string} scriptContext.mode - The mode in which the record is being accessed (create, copy, or edit)
         *
         * @since 2015.2
         */


        //Search to check if duplicate PO and Customer combination exists.
        // It returns the count, if count >0, duplicate PO nad customer combination exists. If count =0, combination does not exists

        function checkDuplicatePO(poNum, customer) {
            var salesorderSearchObj = search.create({
                type: "salesorder",
                filters:
                    [
                        ["type", "anyof", "SalesOrd"],
                        "AND",
                        ["formulatext: {otherrefnum}", "is", poNum],
                        "AND",
                        ["customer.internalid", "anyof", customer],
                        "AND",
                        ["mainline", "is", "T"]
                    ],
                columns:
                    [
                        search.createColumn({name: "internalid", label: "Internal ID"}),
                        search.createColumn({name: "otherrefnum", label: "PO/Check Number"})
                    ]
            });
            var searchRes = salesorderSearchObj.runPaged().count;
            console.log('Counnt in search', searchRes)
            return searchRes;
        }


        function pageInit(scriptContext) {
            try {
          
                console.log('In cs page inint')
            } catch (e) {
             
                console.log('error@ pageInit', e)
            }
        }


        /**
         * Validation function to be executed when record is saved.
         *
         * @param {Object} scriptContext
         * @param {Record} scriptContext.currentRecord - Current form record
         * @returns {boolean} Return true if record is valid
         *
         * @since 2015.2
         */
        function saveRecord(scriptContext) {

            try {

                console.log('IN cs ')

                //Get Current Record
                var currentRec = scriptContext.currentRecord;

                var currentRecId = currentRec.id
                log.debug('currentRecId', currentRecId)

                //Get po#
                var poNum = currentRec.getValue({
                    fieldId: 'otherrefnum'
                });
                //Get Customer
                var customer = currentRec.getValue({
                    fieldId: 'entity'
                });
                //Get subsidiary
                var sub = currentRec.getValue({
                    fieldId: 'subsidiary'
                });


                //Following code executes only if Po# and customer value is present
                if ((poNum != '') && (customer != '')) {

                    //Check the subsidiary for Australia , US and UK
                    if (sub == 2 || sub == 7 || sub == 9) {
                        console.log('In sub ')

                        if (!(scriptContext.currentRecord.id)) {

                            //Calling the function to check if duplicate PO exists
                            var searchResultCount = checkDuplicatePO(poNum, customer);
                            console.log('Count', searchResultCount)

                            //If duplicate PO exists searchResultCount will be greater than 0, and will displays an alert
                            if (searchResultCount > 0) {
                                alert('You have entered a duplicate PO# for this customer')
                                return false
                            }
                        
                        }
                      
                    }
                  
                }


                var soNum = currentRec.getValue({
                    fieldId: 'tranid'
                })
                log.debug('soNum', soNum)
                // var searchConfig
                if ((soNum != '') && (customer != '')) {
                
                    //if in edit context
                    if (checkForParameter(currentRecId)) {

                        var searchConfig = [["internalid", "noneof", currentRecId]]
                    } else {
                      
                        var searchConfig = [["internalid", "noneof", "@NONE@"]]
                    }
              
                    var searchResultCount = checkDuplicateSOEdit(soNum, customer, searchConfig)
                    if (searchResultCount > 0) {
                        alert('You have entered a duplicate Order# for this sales order !')
                        return false
                    }
                 
                }
               
                return true;

            } catch (e) {
                console.log('Error@SveRecord', e)
            }

        }


        function checkDuplicateSO(soNum, customer) {
            try {

                log.debug('In duplicate SO create')

                var salesorderSearchObjSo = search.create({
                    type: "salesorder",
                    filters:
                        [
                            ["type", "anyof", "SalesOrd"],
                            "AND",                         
                            ["formulatext: {tranid}","is","SO-177953"],                       
                            "AND",
                            ["mainline", "is", "T"]
                        ],
                    columns:
                        [
                            search.createColumn({name: "internalid", label: "Internal ID"}),
                            //  search.createColumn({name: "otherrefnum", label: "PO/Check Number"})
                        ]
                });
             
                var resultCount = salesorderSearchObjSo.runPaged().count;
           

                return resultCount;
            } catch (e) {
                log.debug('error@checkDuplicateSO', e)
            }
        }

        function checkDuplicateSOEdit(soNum, customer, searchConfig) {
            try {

                var salesorderSearchObjSOEdit = search.create({
                    type: "salesorder",
                    filters:
                        [
                            [searchConfig],
                            "AND",
                            ["type", "anyof", "SalesOrd"],

                            "AND",
                            ["formulatext: {tranid}","is",soNum],
                           
                            "AND",
                            ["mainline", "is", "T"]
                        ],
                    columns:
                        [
                            search.createColumn({name: "internalid", label: "Internal ID"}),
                            search.createColumn({name: "otherrefnum", label: "PO/Check Number"})
                        ]
                });
                log.debug('In salesorderSearchObj SO', salesorderSearchObjSOEdit)
                var resultCount = salesorderSearchObjSOEdit.runPaged().count;
          

                return resultCount;
            } catch (e) {
                log.debug('error@checkDuplicateSOEdit', e)
            }
        }

        function checkForParameter(parameter) {
            try {
                if (parameter != "" && parameter != null && parameter != undefined && parameter != "null" && parameter != "undefined" && parameter != " " && parameter != false) {
                    return true;
                } else {
                    return false;
                }
            } catch (e) {
                console.log("Error @ empty check Function: ", e.name + ' : ' + e.message)
            }
        }


        return {
            pageInit: pageInit,
            saveRecord: saveRecord
        };

    });

Leave a comment

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