Scheduling Fixed Asset Creation

Scenario: If the bill/journal contains lines that don’t have fixed assets created is greater than 100,  The script will create fixed assets with scheduled process. The script will be scheduled for every 1 hour. And the scheduled script will send the email to the bill owner after creating the fixed asset for that bill.

Solution:

For rescheduling, you need to create a custom record. If more than one user attempt to create fixed asset at a time, both attempts should create fixed asset. In usual case, only first attempt will create fixed asset. So if a custom record creates, all attempt’s details will store in this custom record. So using this record you can create fixed asset with all attempts.

//JJ UE FAScheduling.js

/**
 * @NApiVersion 2.1
 * @NScriptType UserEventScript
 */
define(['N/currentRecord', 'N/record', 'N/runtime', 'N/search', 'N/task'],
    /**
 * @param{currentRecord} currentRecord
 * @param{record} record
 * @param{runtime} runtime
 * @param{search} search
 * @param{task} task
 */
    (currentRecord, record, runtime, search, task) => {
        /**
         * Defines the function definition that is executed before record is loaded.
         * @param {Object} scriptContext
         * @param {Record} scriptContext.newRecord - New record
         * @param {string} scriptContext.type - Trigger type; use values from the context.UserEventType enum
         * @param {Form} scriptContext.form - Current form
         * @param {ServletRequest} scriptContext.request - HTTP request information sent from the browser for a client action only.
         * @since 2015.2
         */
        const beforeLoad = (scriptContext) => {

        }

        /**
         * 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) => {

        }

        /**
         * Function to convert date to dateString format.
         * @param {Date} iDate - Date fieldValue
         * @returns {string} res - converted DateString
         * @since 2015.2
         */
        function convertDate(iDate){
            try {
                var d = new Date(iDate).getDate()
                switch (d) {
                    case '01' : d = '1'; break;
                    case '02' : d = '2'; break;
                    case '03' : d = '3'; break;
                    case '04' : d = '4'; break;
                    case '05' : d = '5'; break;
                    case '06' : d = '6'; break;
                    case '07' : d = '7'; break;
                    case '08' : d = '8'; break;
                    case '09' : d = '9'; break;
                    default: break;
                }
                var m = new Date(iDate).getMonth()+1
                var y = new Date(iDate).getFullYear()
                var res = d+'/'+m+'/'+y
                return res;
            }
            catch (e) {
                log.debug("Error in Date function: ",e.name+': '+e.message)
            }
        }

        /**
         * Function to check whether the field has an empty value or not.
         *
         * @param {parameter} parameter - fieldValue
         * @returns {boolean} true - if the value is not empty
         * @returns {boolean} false - if the value is empty
         *
         * @since 2015.2
         */
        function checkForParameter(parameter) {
            try{
                if (parameter != "" && parameter != null && parameter != undefined && parameter != "null" && parameter != "undefined" && parameter != " " && parameter != false) {
                    return true;
                }
                else {
                    log.debug("Empty Value found");
                    return false;
                }
            }
            catch (e) {
                log.debug("Error @ empty check Function: ",e.name+' : '+e.message)
            }
        }

        /**
         * Function to convert dateString to date 'd/m/yyyy' format.
         * @returns {Date} convertedDate - converted Date
         * @since 2015.2
         */
        function dateCreator(){
            try{

                //Date operations
                var d= new Date();
                var m;
                if(d.getMonth() == 11){
                    m= '1'
                }
                else{
                    m= d.getMonth()+2
                }
                var y = (d.getMonth()==11) ? (d.getFullYear()+1) : d.getFullYear()
                var dt = '1'+'/'+m+'/'+y
                var convertedDate = format.parse({
                    value: dt,
                    type: format.Type.DATE
                });
                return convertedDate

            }
            catch (e) {
                log.debug("Error @ date Creator function: ",e.name+' : '+e.message)
            }
        }

        /**
         * Function to list vendor bills / journals which has pending FA lines.
         *
         * @param {string} id - record ID
         * @returns {string} cnt - Count of lines in each record which has no related Records. ie; lines which hasn't Fixed asset
         *
         * @since 2015.2
         */
        function transactionSearch() {
            var transactionSearchObj = search.create({
                type: "transaction",
                filters:
                    [
                        ["type","anyof","VendBill","Journal"],
                        "AND",
                        ["custcol_far_trn_relatedasset","anyof","@NONE@"],
                        "AND",
                        [["custcol_far_asset_type","noneof","@NONE@"],"OR",["custcol_far_asset_types","noneof","@NONE@"]],
                        // "AND",
                        // ["custcol_far_exclude_asset_type","is","F"],
                        "AND",
                        ["creditamount","isempty",""]

                    ],
                columns:
                    [
                        search.createColumn({
                            name: "internalid",
                            summary: "GROUP",
                            label: "Internal ID"
                        }),
                        search.createColumn({
                            name: "lineuniquekey",
                            summary: "COUNT",
                            label: "Line Unique Key"
                        }),
                        search.createColumn({
                            name: "type",
                            summary: "GROUP",
                            label: "Record Type"
                        })
                    ]
            });
            var searchResultCount = transactionSearchObj.runPaged().count;
            log.debug("transactionSearch result count",searchResultCount);
            var resArr = [];
            transactionSearchObj.run().each(function(result){
                // .run().each has a limit of 4,000 results
                var id = result.getValue({
                    name: "internalid",
                    summary: "GROUP"
                })
                var cnt = result.getValue({
                    name: "lineuniquekey",
                    summary: "COUNT",
                })
                var type = result.getValue({
                    name: "type",
                    summary: "GROUP"
                })
                resArr.push({
                    recId: id,
                    recType: type,
                    lCount: cnt
                })
                return true;
            });
            log.debug("resArr: ",resArr)
            return resArr;
        }

        function rescheduleScriptandReturn() {
            try {
                //endrange is the last range of the just finished search.
                //Next search range when rescheduled will start from this endRange
                log.debug("RESCHEDULING STARTS")
                // log.debug("ID: ",id)
                var ssTask = task.create({
                    taskType: task.TaskType.SCHEDULED_SCRIPT,
                    scriptId: 2109,
                    deploymentId: "customdeploy_jj_ss_scheduled_script_fa",
                    // params: {
                    //     custscript_rec_id: id
                    //     // custscript_endrange: endRange
                    //     // custscript_tot_count: n
                    // }
                });
                var scriptTaskId = ssTask.submit();
                log.debug("RESCHEDULED SCRIPT TASK ID: ", scriptTaskId)

            } catch (err) {
                log.debug("Error @ rescheduling: ",err.name+": "+err.message)
                log.error({
                    title: 'error on rescheduleScriptandReturn',
                    details: err
                });
            }

        }

        /**
         * 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 afterSubmit = (scriptContext) => {
            try{
                if(scriptContext.type == 'create' || 'edit'){
                    var rec = scriptContext.newRecord
                    var recId = rec.id
                    var recType = rec.type
                    log.debug("recId: ",recId)
                    log.debug("recType: ",recType)

                    var scriptObj = runtime.getCurrentScript();
                    log.debug('SCRIPT: ' + scriptObj);


                    if((recType == 'vendorbill') || (recType == 'journalentry')){

                        var resArr = transactionSearch();
                        log.debug("RESULT: ",resArr)
                        log.debug("Length: ",resArr.length)
                        if(resArr.length>0){
                            var remaingUsage = scriptObj.getRemainingUsage()

                            for(var i=0;i<resArr.length;i++){

                                log.debug('Remaining governance units: ' , remaingUsage);
                                if (remaingUsage < 500) {
                                    rescheduleScriptandReturn()
                                }
                                else {
                                    if (resArr[i].lCount >= 10) {
                                        var faScheduleRec = record.create({
                                            type: 'customrecord_fa_scheduling',
                                            isDynamic: true
                                        })
                                        faScheduleRec.setValue({
                                            fieldId: 'custrecord_fa_schedule_rec_id',
                                            value: resArr[i].recId
                                        })
                                        faScheduleRec.setValue({
                                            fieldId: 'custrecord_fa_schedule_rec_type',
                                            value: resArr[i].recType
                                        })
                                        faScheduleRec.setValue({
                                            fieldId: 'custrecord_fa_schedule_line_count',
                                            value: resArr[i].lCount
                                        })
                                        var savedRecId = faScheduleRec.save()
                                        log.debug("savedRecId: ", savedRecId)

                                    }
                                }
                            }
                        }

                    }
                }
            }
            catch (e) {
                log.debug("Error @ Scheduling After submit: ",e.name+" : "+e.message)
            }
        }

        return {beforeLoad, beforeSubmit, afterSubmit}

    });

//JJ SS FAScheduling.js

/**
 * @NApiVersion 2.1
 * @NScriptType ScheduledScript
 */
define(['N/email', 'N/error', 'N/record', 'N/search','N/runtime','N/currentRecord','N/format'],
    /**
     * @param{email} email
     * @param{error} error
     * @param{record} record
     * @param{search} search
     * @param{runtime} runtime
     * @param{currentRecord} currentRecord
     * @param{format} format
     */
    (email, error, record, search,runtime,currentRecord, format) => {

        /**
         * Function to check whether the field has an empty value or not.
         * @param {parameter} parameter - fieldValue
         * @returns {boolean} true - if the value is not empty
         * @returns {boolean} false - if the value is empty
         */
        function checkForParameter(parameter) {
            try{
                if (parameter != "" && parameter != null && parameter != undefined && parameter != "null" && parameter != "undefined" && parameter != " " && parameter != false) {
                    return true;
                }
                else {
                    log.debug("Empty Value found");
                    return false;
                }
            }
            catch (e) {
                log.debug("Error @ empty check Function: ",e.name+' : '+e.message)
            }
        }

        /**
         * Function to convert dateString to date 'd/m/yyyy' format.
         * @returns {Date} convertedDate - converted Date
         */
        function dateCreator(){
            try{

                //Date operations
                var d= new Date();
                var m;
                if(d.getMonth() == 11){
                    m= '1'
                }
                else{
                    m= d.getMonth()+2
                }
                var y = (d.getMonth()==11) ? (d.getFullYear()+1) : d.getFullYear()
                var dt = '1'+'/'+m+'/'+y
                var convertedDate = format.parse({
                    value: dt,
                    type: format.Type.DATE
                });
                return convertedDate

            }
            catch (e) {
                log.debug("Error @ date Creator function: ",e.name+' : '+e.message)
            }
        }

        /**
         * Function to convert date to dateString format.
         * @param {Date} iDate - Date fieldValue
         * @returns {string} res - converted DateString
         */
        function convertDate(iDate){
            try {
                var d = new Date(iDate).getDate()
                switch (d) {
                    case '01' : d = '1'; break;
                    case '02' : d = '2'; break;
                    case '03' : d = '3'; break;
                    case '04' : d = '4'; break;
                    case '05' : d = '5'; break;
                    case '06' : d = '6'; break;
                    case '07' : d = '7'; break;
                    case '08' : d = '8'; break;
                    case '09' : d = '9'; break;
                    default: break;
                }
                var m = new Date(iDate).getMonth()+1
                var y = new Date(iDate).getFullYear()
                var res = d+'/'+m+'/'+y
                return res;
            }
            catch (e) {
                log.debug("Error in Date function: ",e.name+': ',e.message)
            }
        }

        /**
         * Function to list vendor bills / journals which has pending FA lines.
         * @param {string} id - record ID
         * @returns [{obj}] resArr - array of Object, which contains Count of lines, record Id and Record type of each record which has no related Records. ie; lines which hasn't Fixed asset
         */
        function transactionSearch() {
            var transactionSearchObj = search.create({
                type: "transaction",
                filters:
                    [
                        ["type","anyof","VendBill","Journal"],
                        "AND",
                        ["custcol_far_trn_relatedasset","anyof","@NONE@"],
                        "AND",
                        [["custcol_far_asset_type","noneof","@NONE@"],"OR",["custcol_far_asset_types","noneof","@NONE@"]],
                        // "AND",
                        // ["custcol_far_exclude_asset_type","is","F"],
                        "AND",
                        ["creditamount","isempty",""]
                    ],
                columns:
                    [
                        search.createColumn({
                            name: "internalid",
                            summary: "GROUP",
                            label: "Internal ID"
                        }),
                        search.createColumn({
                            name: "lineuniquekey",
                            summary: "COUNT",
                            label: "Line Unique Key"
                        }),
                        search.createColumn({
                            name: "type",
                            summary: "GROUP",
                            label: "Record Type"
                        })
                    ]
            });
            var searchResultCount = transactionSearchObj.runPaged().count;
            log.debug("TRANSACTION SEARCH count",searchResultCount);
            var resArr = [];
            transactionSearchObj.run().each(function(result){
                // .run().each has a limit of 4,000 results
                var recType = result.getValue({
                    name: "type",
                    summary: "GROUP"
                })
                var recId = result.getValue({
                    name: "internalid",
                    summary: "GROUP"
                })
                var lCount = result.getValue({
                    name: "lineuniquekey",
                    summary: "COUNT"
                })
                resArr.push({
                    recType: recType,
                    recId: recId,
                    lCount: lCount
                })
                return true;
            });
            log.debug("RES ARR: ",resArr)
            return resArr
        }

        function FAScheduling(){
            try{
                var customrecord_fa_schedulingSearchObj = search.create({
                    type: "customrecord_fa_scheduling",
                    filters:
                        [
                            ["custrecord_fa_schedule_is_created","is","F"]
                        ],
                    columns:
                        [
                            search.createColumn({name: "internalid", sort: search.Sort.ASC, label: "Internal ID"}),
                            search.createColumn({name: "custrecord_fa_schedule_rec_id", label: "Record ID"}),
                            search.createColumn({name: "custrecord_fa_schedule_rec_type", label: "Record Type"}),
                            search.createColumn({name: "custrecord_fa_schedule_line_count", label: "Line Count"}),
                            search.createColumn({name: "custrecord_fa_schedule_is_created", label: "Created"})
                        ]
                });
                var searchResultCount = customrecord_fa_schedulingSearchObj.runPaged().count;
                log.debug("customrecord_fa_schedulingSearchObj result count",searchResultCount);
                var res = []
                if(searchResultCount>0) {
                    customrecord_fa_schedulingSearchObj.run().each(function (result) {
                        var internalId = result.getValue({name: "internalid"})
                        var recId = result.getValue({name: "custrecord_fa_schedule_rec_id"})
                        var recType = result.getValue({name: "custrecord_fa_schedule_rec_type"})
                        var lineCount = result.getValue({name: "custrecord_fa_schedule_line_count"})
                        var createStatus = result.getValue({name: "custrecord_fa_schedule_is_created"})
                        res.push({
                            internalId: internalId,
                            recId: recId,
                            recType: recType,
                            lineCount: lineCount,
                            createStatus: createStatus
                        })
                        // .run().each has a limit of 4,000 results
                        return true;
                    });
                }
                log.debug("res: ",res)
                return res;
            }
            catch (e) {
                log.debug("Error @ FAScheduling: ",e.name+" : "+e.message)
            }
        }

        /**
         * Defines the Scheduled script trigger point.
         * @param {Object} scriptContext
         * @param {string} scriptContext.type - Script execution context. Use values from the scriptContext.InvocationType enum.
         * @since 2015.2
         */
        const execute = (scriptContext) => {
            try{
                var param = runtime.getCurrentScript();
                var k = param.getParameter({name: 'custscript_email_param'});
                log.debug("PARAM: ",k)
                FACreation(k)
            }
            catch (e) {
                log.debug("Error @ Scheduled : ",e.name+" : ",+e.message)
            }
        }

        /**
         * The function calls functions for Fixed Asset creation in journal and Vendor Bill.
         * @param {string} param - ScriptParameter which contains the internal ID of the Email Recipient
         */
        function FACreation(param) {
            try{
                var paramContext = param
                journalFACreation(paramContext)
                vendorFACreation(paramContext)
            }
            catch (e) {
                log.debug("Error @ FACreation: ",e.name+" : "+e.message)
            }
        }

        /**
         * The function creates Fixed Asset for journals.
         */
        function journalFACreation(paramContext) {
            try{
                var jRes = FAScheduling()
                if(jRes.length>0) {
                    var journalRes = jRes.filter(res => res.recType == 'Journal');
                    var journalFA = [];
                    if (journalRes.length > 0) {
                        for (var j = 0; j < journalRes.length; j++) {

                            log.debug("EXECUTING LINE: ", j)

                            var custRecId = journalRes[j].internalId
                            log.debug("custRecId: ", custRecId)

                            var totalCount = journalRes[j].lineCount
                            log.debug("TOT COunt: ", totalCount)

                            if (totalCount >= 10) {
                                var rec = record.load({
                                    type: 'journalentry',
                                    id: journalRes[j].recId,
                                    isDynamic: true
                                })
                                var recId = journalRes[j].recId

                                var subsidary = rec.getValue({
                                    fieldId: 'subsidiary'
                                })
                                var transDate = rec.getValue({
                                    fieldId: 'trandate'
                                })

                                var initialFormattedDateString = convertDate(transDate);
                                var parsedDateStringAsRawDateObject = format.parse({
                                    value: initialFormattedDateString,
                                    type: format.Type.DATE
                                });

                                var convertedDate = dateCreator()

                                //>>>>>>>>>>>>>>>>>>>>>>>>>>>> JOURNAL LINE <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<//

                                var lineCount = rec.getLineCount({
                                    sublistId: 'line'
                                })
                                log.debug("Journal lineCount: ", lineCount)

                                if (lineCount > 0) {
                                    for (var i = 0; i < lineCount; i++) {
                                        var jAcc = rec.getSublistValue({
                                            sublistId: 'line',
                                            fieldId: 'account',
                                            line: i
                                        })
                                        var jAsset = rec.getSublistValue({
                                            sublistId: 'line',
                                            fieldId: 'custcol_far_asset_type',
                                            line: i
                                        })
                                        var excludeCheck = rec.getSublistValue({
                                            sublistId: 'line',
                                            fieldId: 'custcol_far_exclude_asset_type',
                                            line: i
                                        })
                                        var jMemo = rec.getSublistValue({
                                            sublistId: 'line',
                                            fieldId: 'memo',
                                            line: i
                                        })
                                        var jAmount = rec.getSublistValue({
                                            sublistId: 'line',
                                            fieldId: 'debit',
                                            line: i
                                        })
                                        var jEmployee = rec.getSublistValue({
                                            sublistId: 'line',
                                            fieldId: 'custcol_far_employee',
                                            line: i
                                        })
                                        var jDepartment = rec.getSublistValue({
                                            sublistId: 'line',
                                            fieldId: 'custcol_assettype_department',
                                            line: i
                                        })
                                        var jClass = rec.getSublistValue({
                                            sublistId: 'line',
                                            fieldId: 'custcol_assettype_class',
                                            line: i
                                        })
                                        var jLocation = rec.getSublistValue({
                                            sublistId: 'line',
                                            fieldId: 'custcol_assettype_location',
                                            line: i
                                        })
                                        var jRelRec = rec.getSublistValue({
                                            sublistId: 'line',
                                            fieldId: 'custcol_far_trn_relatedasset',
                                            line: i
                                        })

                                        //Account Record
                                        var accountRec = record.load({
                                            type: record.Type.ACCOUNT,
                                            id: jAcc,
                                            isDynamic: true
                                        })

                                        var accType = accountRec.getValue({
                                            fieldId: 'accttype'
                                        })

                                        if (accType == 'FixedAsset') { // if the account type is Fixed Asset
                                            if (checkForParameter(jAsset) == true) { // if asset type is not null
                                                log.debug("INSIDE FIRST LOOP: ",jAsset)
                                                // if ((checkForParameter(jRelRec) == false) && (Boolean(excludeCheck) == false)) { // if related record is null and exclude check is false
                                                if (checkForParameter(jRelRec) == false) {
                                                    log.debug("INSIDE SECOND LOOP: ", jRelRec)
                                                    //Asset type Record
                                                    var assettypeRec = record.load({
                                                        type: 'customrecord_ncfar_assettype',
                                                        id: jAsset,
                                                        isDynamic: true
                                                    })
                                                    var assetDepreciationPeriod = assettypeRec.getValue({
                                                        fieldId: 'custrecord_assttype_dep_next_period'
                                                    })

                                                    var accountingMethod = assettypeRec.getValue({
                                                        fieldId: 'custrecord_assettypeaccmethod'
                                                    })

                                                    if (checkForParameter(jAmount) == true) {

                                                        //Creation of Fixed Asset
                                                        var FArecord = record.create({
                                                            type: 'customrecord_ncfar_asset',
                                                            isDynamic: true
                                                        })
                                                        //NAME
                                                        FArecord.setValue({
                                                            fieldId: 'altname',
                                                            value: jMemo ? jMemo : 'Auto Generated Asset'
                                                        })
                                                        //ASSET DESCRIPTION
                                                        FArecord.setValue({
                                                            fieldId: 'custrecord_assetdescr',
                                                            value: jMemo ? jMemo : 'Auto Generated Asset'
                                                        })
                                                        //ASSET TYPE
                                                        FArecord.setValue({
                                                            fieldId: 'custrecord_assettype',
                                                            value: jAsset
                                                        })
                                                        //ASSET ORIGINAL COST
                                                        FArecord.setValue({
                                                            fieldId: 'custrecord_assetcost',
                                                            value: jAmount
                                                        })
                                                        //ASSET CURRENT COST
                                                        FArecord.setValue({
                                                            fieldId: 'custrecord_assetcurrentcost',
                                                            value: jAmount
                                                        })
                                                        //CUSTODIAN
                                                        FArecord.setValue({
                                                            fieldId: 'custrecord_assetcaretaker',
                                                            value: jEmployee
                                                        })
                                                        //DEPARTMENT
                                                        FArecord.setValue({
                                                            fieldId: 'custrecord_employee_department',
                                                            value: jDepartment
                                                        })
                                                        //CLASS
                                                        FArecord.setValue({
                                                            fieldId: 'custrecord_employee_class',
                                                            value: jClass
                                                        })
                                                        //LOCATION
                                                        FArecord.setValue({
                                                            fieldId: 'custrecord_employee_location',
                                                            value: jLocation
                                                        })
                                                        //SUBSIDIARY
                                                        FArecord.setValue({
                                                            fieldId: 'custrecord_assetsubsidiary',
                                                            value: subsidary
                                                        })
                                                        //PURCHASE DATE
                                                        FArecord.setValue({
                                                            fieldId: 'custrecord_assetpurchasedate',
                                                            value: parsedDateStringAsRawDateObject
                                                        })

                                                        //DEPRECIATION START DATE
                                                        if (Boolean(assetDepreciationPeriod) == false) {
                                                            FArecord.setValue({
                                                                fieldId: 'custrecord_assetdeprstartdate',
                                                                value: parsedDateStringAsRawDateObject
                                                            });
                                                        }
                                                        if (Boolean(assetDepreciationPeriod) == true) {
                                                            FArecord.setValue({
                                                                fieldId: 'custrecord_assetdeprstartdate',
                                                                value: convertedDate
                                                            })
                                                        }

                                                        //PARENT TRANSACTION
                                                        FArecord.setValue({
                                                            fieldId: 'custrecord_assetsourcetrn',
                                                            value: recId
                                                        })
                                                        //PARENT TRANSACTION LINE
                                                        FArecord.setValue({
                                                            fieldId: 'custrecord_assetsourcetrnline',
                                                            value: i + 1
                                                        })
                                                        //RESIDUAL VALUE
                                                        FArecord.setValue({
                                                            fieldId: 'custrecord_assetresidualvalue',
                                                            value: 0.00
                                                        })
                                                        //DEPRECIATION METHOD
                                                        FArecord.setValue({
                                                            fieldId: 'custrecord_assetaccmethod',
                                                            value: accountingMethod ? accountingMethod : 3
                                                        })

                                                        //Saving Record
                                                        var saved = FArecord.save()
                                                        log.debug("jSaved: ", saved)
                                                        journalFA.push(saved)

                                                        //Setting Related Assets
                                                        const updateRec = record.load({
                                                            type: 'journalentry',
                                                            id: recId,
                                                            isDynamic: true
                                                        })

                                                        updateRec.selectLine({
                                                            sublistId: 'line',
                                                            line: i
                                                        })
                                                        updateRec.setCurrentSublistValue({
                                                            sublistId: 'line',
                                                            fieldId: 'custcol_far_trn_relatedasset',
                                                            value: saved,
                                                            line: i
                                                        })
                                                        updateRec.commitLine({
                                                            sublistId: 'line'
                                                        })
                                                        var saved = updateRec.save();
                                                        log.debug("saved: ", saved)

                                                        log.debug("BEFORE INDEX CONDITION: ", j)
                                                        if(j == (journalRes.length-1)) {
                                                            var custRec = record.load({
                                                                type: 'customrecord_fa_scheduling',
                                                                id: custRecId,
                                                                isDynamic: true
                                                            })

                                                            custRec.setValue({
                                                                fieldId: 'custrecord_fa_schedule_is_created',
                                                                value: true
                                                            })
                                                            var custSaved = custRec.save();
                                                            log.debug("custSaved: ", custSaved)
                                                        }

                                                    }
                                                }
                                            }
                                        }
                                    }
                                    log.debug("SENDING EMAIL FROM JOURNAL", journalFA)
                                    if (journalFA.length > 0) {
                                        email.send({
                                            // author: paramContext,
                                            // recipients: paramContext,
                                            author: 3316450,
                                            recipients: 3316450,
                                            subject: 'Fixed Asset Created from Journal',
                                            body: 'Hi,' + '\n' + " Fixed Assets" + '\n' + journalFA + "are created from Journal " + '\n'
                                        })
                                        log.debug("SEND EMAIL")
                                    }

                                }// End of if(journalCount>0)
                            }
                        }
                    }
                }
            }
            catch (e) {
                log.debug("Error @ journalFACreation: ", e.name+": "+e.message)
            }
        }

        /**
         * The function creates Fixed Asset for Vendor Bills.
         */
        function vendorFACreation(paramContext){
            try{
                var vRes = FAScheduling()
                if(vRes.length>0) {
                    var vendorRes = vRes.filter(res => res.recType == 'VendBill')
                    log.debug("vendorRes: ", vendorRes)
                    log.debug("vendorRes LENGTH: ", vendorRes.length)
                    var vendorFA = [];
                    if (vendorRes.length > 0) {
                        for (var j = 0; j < vendorRes.length; j++) {
                            log.debug("EXECUTING LINE: ", j)

                            var custRecId = vendorRes[j].internalId
                            log.debug("custRecId: ", custRecId)

                            var totalCount = vendorRes[j].lineCount
                            log.debug("TOT COunt: ", totalCount)

                            if (totalCount >= 10) {
                                log.debug("REC ID IN LOOP: ",vendorRes[j].recId)
                                var rec = record.load({
                                    type: 'vendorbill',
                                    id: vendorRes[j].recId,
                                    isDynamic: true
                                })

                                var recId = vendorRes[j].recId
                                var ex = rec.getLineCount({
                                    sublistId: 'expense'
                                })
                                log.debug("EX: ",ex)
                                var item = rec.getLineCount({
                                    sublistId: 'item'
                                })
                                log.debug("ITEM: ",item)

                                var subsidary = rec.getValue({
                                    fieldId: 'subsidiary'
                                })
                                var transDate = rec.getValue({
                                    fieldId: 'trandate'
                                })
                                var vendorName = rec.getValue({
                                    fieldId: 'entity'
                                })

                                var initialFormattedDateString = convertDate(transDate);
                                var parsedDateStringAsRawDateObject = format.parse({
                                    value: initialFormattedDateString,
                                    type: format.Type.DATE
                                });

                                var convertedDate = dateCreator()

                                //EXPENSE
                                if (ex > 0) {
                                    log.debug("INSIDE EXPENSE SUBLIST")
                                    for (var i = 0; i < ex; i++) {
                                        log.debug("INSIDE EXPENSE SUBLIST LOOP: ",i)
                                        var exAcc = rec.getSublistValue({
                                            sublistId: 'expense',
                                            fieldId: 'account',
                                            line: i
                                        })
                                        log.debug("exAcc: ",exAcc)
                                        var exAsset = rec.getSublistValue({
                                            sublistId: 'expense',
                                            fieldId: 'custcol_far_asset_type',
                                            line: i
                                        })
                                        log.debug("exAsset: ",exAsset)
                                        var excludeCheck = rec.getSublistValue({
                                            sublistId: 'expense',
                                            fieldId: 'custcol_far_exclude_asset_type',
                                            line: i
                                        })
                                        var exMemo = rec.getSublistValue({
                                            sublistId: 'expense',
                                            fieldId: 'memo',
                                            line: i
                                        })
                                        log.debug("exMemo: ",exMemo)
                                        var exAmount = rec.getSublistValue({
                                            sublistId: 'expense',
                                            fieldId: 'amount',
                                            line: i
                                        })
                                        log.debug("exAmount: ",exAmount)
                                        var exEmployee = rec.getSublistValue({
                                            sublistId: 'expense',
                                            fieldId: 'custcol_far_employee',
                                            line: i
                                        })
                                        log.debug("exEmployee: ",exEmployee)

                                        var exDepartment = rec.getSublistValue({
                                            sublistId: 'expense',
                                            fieldId: 'custcol_assettype_department',
                                            line: i
                                        })
                                        log.debug("exDepartment: ",exDepartment)
                                        var exClass = rec.getSublistValue({
                                            sublistId: 'expense',
                                            fieldId: 'custcol_assettype_class',
                                            line: i
                                        })
                                        log.debug("exClass: ",exClass)
                                        var exLocation = rec.getSublistValue({
                                            sublistId: 'expense',
                                            fieldId: 'custcol_assettype_location',
                                            line: i
                                        })
                                        log.debug("exLocation: ",exLocation)

                                        var exQty = rec.getSublistValue({
                                            sublistId: 'expense',
                                            fieldId: 'custcol_expense_quantity',
                                            line: i
                                        })
                                        log.debug("exQty: ",exQty)
                                        // var exPurchaseOrder = rec.getSublistValue({
                                        //     sublistId: 'purchaseorders',
                                        //     fieldId: 'poid',
                                        //     line: i
                                        // })
                                        // log.debug("Related PURCHASE ORDER: ",exPurchaseOrder)

                                        var relRec = rec.getSublistValue({
                                            sublistId: 'expense',
                                            fieldId: 'custcol_far_trn_relatedasset',
                                            line: i
                                        })

                                        //Account Record
                                        var accountRec = record.load({
                                            type: record.Type.ACCOUNT,
                                            id: exAcc,
                                            isDynamic: true
                                        })

                                        var accType = accountRec.getValue({
                                            fieldId: 'accttype'
                                        })

                                        if (accType == 'FixedAsset') { // if the account type is Fixed Asset

                                            // if ((checkForParameter(relRec)==false) && (Boolean(excludeCheck) == false)) { // if asset type is not null, So the check value can be either true or false. It doesn't matter for the creation of fixed asset record
                                            if ((checkForParameter(exAsset) == true) && (checkForParameter(relRec) == false)) {
                                                //Asset type Record
                                                var assettypeRec = record.load({
                                                    type: 'customrecord_ncfar_assettype',
                                                    id: exAsset,
                                                    isDynamic: true
                                                })
                                                var assetDepreciationPeriod = assettypeRec.getValue({
                                                    fieldId: 'custrecord_assttype_dep_next_period'
                                                })
                                                var accountingMethod = assettypeRec.getValue({
                                                    fieldId: 'custrecord_assettypeaccmethod'
                                                })

                                                //Creation of Fixed Asset
                                                var FArecord = record.create({
                                                    type: 'customrecord_ncfar_asset',
                                                    isDynamic: true
                                                })
                                                //NAME
                                                FArecord.setValue({
                                                    fieldId: 'altname',
                                                    value: exMemo ? exMemo : 'Auto Generated Asset'
                                                })
                                                //ASSET DESCRIPTION
                                                FArecord.setValue({
                                                    fieldId: 'custrecord_assetdescr',
                                                    value: exMemo ? exMemo : 'Auto Generated Asset'
                                                })
                                                //ASSET TYPE
                                                FArecord.setValue({
                                                    fieldId: 'custrecord_assettype',
                                                    value: exAsset
                                                })
                                                //ASSET ORIGINAL COST
                                                FArecord.setValue({
                                                    fieldId: 'custrecord_assetcost',
                                                    value: exAmount
                                                })
                                                //ASSET CURRENT COST
                                                FArecord.setValue({
                                                    fieldId: 'custrecord_assetcurrentcost',
                                                    value: exAmount
                                                })
                                                //CUSTODIAN
                                                FArecord.setValue({
                                                    fieldId: 'custrecord_assetcaretaker',
                                                    value: exEmployee
                                                })
                                                //DEPARTMENT
                                                FArecord.setValue({
                                                    fieldId: 'custrecord_employee_department',
                                                    value: exDepartment
                                                })
                                                //CLASS
                                                FArecord.setValue({
                                                    fieldId: 'custrecord_employee_class',
                                                    value: exClass
                                                })
                                                //LOCATION
                                                FArecord.setValue({
                                                    fieldId: 'custrecord_employee_location',
                                                    value: exLocation
                                                })
                                                //QUANTITY
                                                FArecord.setValue({
                                                    fieldId: 'custrecord_ncfar_quantity',
                                                    value: exQty ? exQty : 1
                                                })
                                                //SUBSIDIARY
                                                FArecord.setValue({
                                                    fieldId: 'custrecord_assetsubsidiary',
                                                    value: subsidary
                                                })
                                                //PURCHASE DATE
                                                FArecord.setValue({
                                                    fieldId: 'custrecord_assetpurchasedate',
                                                    value: parsedDateStringAsRawDateObject
                                                })

                                                //DEPRECIATION START DATE
                                                if (Boolean(assetDepreciationPeriod) == false) {
                                                    FArecord.setValue({
                                                        fieldId: 'custrecord_assetdeprstartdate',
                                                        value: parsedDateStringAsRawDateObject
                                                    });
                                                }
                                                if (Boolean(assetDepreciationPeriod) == true) {
                                                    FArecord.setValue({
                                                        fieldId: 'custrecord_assetdeprstartdate',
                                                        value: convertedDate
                                                    })
                                                }

                                                //SUPPLIER
                                                FArecord.setValue({
                                                    fieldId: 'custrecord_assetsupplier',
                                                    value: vendorName
                                                })
                                                //PURCHASE ORDER
                                                FArecord.setValue({
                                                    fieldId: 'custrecord_assetpurchaseorder',
                                                    value: ''
                                                })
                                                //PARENT TRANSACTION
                                                FArecord.setValue({
                                                    fieldId: 'custrecord_assetsourcetrn',
                                                    value: recId
                                                })
                                                //PARENT TRANSACTION LINE
                                                FArecord.setValue({
                                                    fieldId: 'custrecord_assetsourcetrnline',
                                                    value: i + 1
                                                })
                                                //RESIDUAL VALUE
                                                FArecord.setValue({
                                                    fieldId: 'custrecord_assetresidualvalue',
                                                    value: 0.00
                                                })
                                                //DEPRECIATION METHOD
                                                FArecord.setValue({
                                                    fieldId: 'custrecord_assetaccmethod',
                                                    value: accountingMethod ? accountingMethod : 3
                                                })

                                                //Saving Record
                                                var saved = FArecord.save()
                                                log.debug("Saved: ", saved)
                                                vendorFA.push(saved)

                                                //Setting Related Assets
                                                const vendRec = record.load({
                                                    type: 'vendorbill',
                                                    id: recId,
                                                    isDynamic: true
                                                })

                                                vendRec.selectLine({
                                                    sublistId: 'expense',
                                                    line: i
                                                })
                                                vendRec.setCurrentSublistValue({
                                                    sublistId: 'expense',
                                                    fieldId: 'custcol_far_trn_relatedasset',
                                                    value: saved,
                                                    line: i
                                                })
                                                vendRec.commitLine({
                                                    sublistId: 'expense'
                                                })
                                                var z = vendRec.save();
                                                log.debug("sd: ", z)

                                                log.debug("BEFORE INDEX CONDITION: ", j)
                                                if(j == (vendorRes.length-1)) {
                                                    var custRec = record.load({
                                                        type: 'customrecord_fa_scheduling',
                                                        id: custRecId,
                                                        isDynamic: true
                                                    })

                                                    custRec.setValue({
                                                        fieldId: 'custrecord_fa_schedule_is_created',
                                                        value: true
                                                    })
                                                    var custSaved = custRec.save();
                                                    log.debug("custSaved: ", custSaved)
                                                }
                                            }
                                        }
                                    }
                                }// End of if(ex>0)

                                //ITEM
                                if (item > 0) {
                                    for (var i = 0; i < item; i++) {

                                        var itmItem = rec.getSublistValue({
                                            sublistId: 'item',
                                            fieldId: 'item',
                                            line: i
                                        })
                                        var itmDescription = rec.getSublistValue({
                                            sublistId: 'item',
                                            fieldId: 'description',
                                            line: i
                                        })

                                        var itmAssetType = rec.getSublistValue({
                                            sublistId: 'item',
                                            fieldId: 'custcol_far_asset_types',
                                            line: i
                                        })

                                        var itmAmount = rec.getSublistValue({
                                            sublistId: 'item',
                                            fieldId: 'amount',
                                            line: i
                                        })

                                        var itmExcludeCheckvalue = rec.getSublistValue({
                                            sublistId: 'item',
                                            fieldId: 'custcol_far_exclude_asset_type',
                                            line: i
                                        })
                                        var itmEmployee = rec.getSublistValue({
                                            sublistId: 'item',
                                            fieldId: 'custcol_far_employee',
                                            line: i
                                        })
                                        var itmDepartment = rec.getSublistValue({
                                            sublistId: 'item',
                                            fieldId: 'custcol_assettype_department',
                                            line: i
                                        })
                                        var itmClass = rec.getSublistValue({
                                            sublistId: 'item',
                                            fieldId: 'custcol_assettype_class',
                                            line: i
                                        })
                                        var itmLocation = rec.getSublistValue({
                                            sublistId: 'item',
                                            fieldId: 'custcol_assettype_location',
                                            line: i
                                        })
                                        var itmRelRec = rec.getSublistValue({
                                            sublistId: 'item',
                                            fieldId: 'custcol_far_trn_relatedasset',
                                            line: i
                                        })
                                        var itmQty = rec.getSublistValue({
                                            sublistId: 'item',
                                            fieldId: 'quantity',
                                            line: i
                                        })
                                        log.debug("itmQty: ",itmQty)

                                        var sublists = rec.getSublists()
                                        log.debug("sublists: ",sublists)

                                        // var itmPurchaseOrder = rec.getSublistValue({
                                        //     sublistId: 'purchaseorders',
                                        //     fieldId: 'poid',
                                        //     line: i
                                        // })
                                        // log.debug("Related PURCHASE ORDER: ",itmPurchaseOrder)

                                        // if (checkForParameter(itmRelRec) == false && (Boolean(itmExcludeCheckvalue) == false)) { // check whether the asset type is null ie; checking the account type is Fixed asset
                                        if ((checkForParameter(itmAssetType) == true) && (checkForParameter(itmRelRec) == false)) {
                                            //Asset Type record
                                            var assettypeRec = record.load({
                                                type: 'customrecord_ncfar_assettype',
                                                id: itmAssetType,
                                                isDynamic: true
                                            })

                                            var assetDepreciationPeriod = assettypeRec.getValue({
                                                fieldId: 'custrecord_assttype_dep_next_period'
                                            })

                                            var accountingMethod = assettypeRec.getValue({
                                                fieldId: 'custrecord_assettypeaccmethod'
                                            })

                                            //Creation of Fixed Asset
                                            var FArecord = record.create({
                                                type: 'customrecord_ncfar_asset',
                                                isDynamic: true
                                            })
                                            //NAME
                                            FArecord.setValue({
                                                fieldId: 'altname',
                                                value: itmDescription ? itmDescription : 'Auto Generated Asset'
                                            })
                                            //ASSET DESCRIPTION
                                            FArecord.setValue({
                                                fieldId: 'custrecord_assetdescr',
                                                value: itmDescription ? itmDescription : 'Auto Generated Asset'
                                            })
                                            //ASSET TYPE
                                            FArecord.setValue({
                                                fieldId: 'custrecord_assettype',
                                                value: itmAssetType
                                            })
                                            //ASSET ORIGINAL COST
                                            FArecord.setValue({
                                                fieldId: 'custrecord_assetcost',
                                                value: itmAmount
                                            })
                                            //ASSET CURRENT COST
                                            FArecord.setValue({
                                                fieldId: 'custrecord_assetcurrentcost',
                                                value: itmAmount
                                            })
                                            //CUSTODIAN
                                            FArecord.setValue({
                                                fieldId: 'custrecord_assetcaretaker',
                                                value: itmEmployee
                                            })
                                            //DEPARTMENT
                                            FArecord.setValue({
                                                fieldId: 'custrecord_employee_department',
                                                value: itmDepartment
                                            })
                                            //CLASS
                                            FArecord.setValue({
                                                fieldId: 'custrecord_employee_class',
                                                value: itmClass
                                            })
                                            //LOCATION
                                            FArecord.setValue({
                                                fieldId: 'custrecord_employee_location',
                                                value: itmLocation
                                            })
                                            //QUANTITY
                                            FArecord.setValue({
                                                fieldId: 'custrecord_ncfar_quantity',
                                                value: itmQty ? itmQty : 1
                                            })
                                            //SUBSIDIARY
                                            FArecord.setValue({
                                                fieldId: 'custrecord_assetsubsidiary',
                                                value: subsidary
                                            })
                                            //PURCHASE DATE
                                            FArecord.setValue({
                                                fieldId: 'custrecord_assetpurchasedate',
                                                value: parsedDateStringAsRawDateObject
                                            })

                                            //DEPRECIATION START DATE
                                            if (Boolean(assetDepreciationPeriod) == false) {
                                                FArecord.setValue({
                                                    fieldId: 'custrecord_assetdeprstartdate',
                                                    value: parsedDateStringAsRawDateObject
                                                });
                                            }
                                            if (Boolean(assetDepreciationPeriod) == true) {
                                                FArecord.setValue({
                                                    fieldId: 'custrecord_assetdeprstartdate',
                                                    value: convertedDate
                                                })
                                            }

                                            //SUPPLIER
                                            FArecord.setValue({
                                                fieldId: 'custrecord_assetsupplier',
                                                value: vendorName
                                            })
                                            //PURCHASE ORDER
                                            FArecord.setValue({
                                                fieldId: 'custrecord_assetpurchaseorder',
                                                value: ''
                                            })
                                            //PARENT TRANSACTION
                                            FArecord.setValue({
                                                fieldId: 'custrecord_assetsourcetrn',
                                                value: recId
                                            })
                                            //PARENT TRANSACTION LINE
                                            FArecord.setValue({
                                                fieldId: 'custrecord_assetsourcetrnline',
                                                value: i + 1
                                            })
                                            //RESIDUAL VALUE
                                            FArecord.setValue({
                                                fieldId: 'custrecord_assetresidualvalue',
                                                value: 0.00
                                            })
                                            //DEPRECIATION METHOD
                                            FArecord.setValue({
                                                fieldId: 'custrecord_assetaccmethod',
                                                value: accountingMethod ? accountingMethod : 3
                                            })

                                            //Saving Record
                                            var saved = FArecord.save()
                                            log.debug("Item FA Saved: ", saved)
                                            vendorFA.push(saved)

                                            //Setting Related Assets
                                            const vendRec = record.load({
                                                type: 'vendorbill',
                                                id: recId,
                                                isDynamic: true
                                            })

                                            vendRec.selectLine({
                                                sublistId: 'item',
                                                line: i
                                            })
                                            vendRec.setCurrentSublistValue({
                                                sublistId: 'item',
                                                fieldId: 'custcol_far_trn_relatedasset',
                                                value: saved,
                                                line: i
                                            })
                                            vendRec.commitLine({
                                                sublistId: 'item'
                                            })
                                            var z = vendRec.save();
                                            log.debug("Linesd: ", z)

                                            log.debug("BEFORE INDEX CONDITION IN ITEM: ", j)
                                            if(j == (vendorRes.length-1)) {
                                                var custRec = record.load({
                                                    type: 'customrecord_fa_scheduling',
                                                    id: custRecId,
                                                    isDynamic: true
                                                })

                                                custRec.setValue({
                                                    fieldId: 'custrecord_fa_schedule_is_created',
                                                    value: true
                                                })
                                                var custSaved = custRec.save();
                                                log.debug("custSaved: ", custSaved)
                                            }
                                        }

                                    }// End of for loop
                                } // End of if(item>0)
                            }

                        }
                        log.debug("SENDING EMAIL FROM VENDOR BILL: ",vendorFA)
                        if(vendorFA.length>0) {
                            email.send({
                                // author: paramContext,
                                // recipients: paramContext,
                                author: 3316450,
                                recipients: 3316450,
                                subject: 'Fixed Assets created from Vendor Bill',
                                body: 'Hi,' + '\n' + " Fixed Assets" + '\n ' +vendorFA+ " are created from Vendor Bill "
                            })
                            log.debug("SEND EMAIL")
                        }
                    }
                }
            }
            catch (e) {
                log.debug("Error @ vendorFACreation: ",e.name+": "+e.message)
            }
        }

        return {execute}

    });

//JJ CS Validation.js

/**
 * @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 check whether the field has an empty value or not.
         * @param {parameter} parameter - fieldValue
         * @returns {boolean} true - if the value is not empty
         * @returns {boolean} false - if the value is empty
         */
        function checkForParameter(parameter) {
            try{
                if (parameter != "" && parameter != null && parameter != undefined && parameter != "null" && parameter != "undefined" && parameter != " " && parameter != false) {
                    return true;
                }
                else {
                    console.log("Empty Value found");
                    return false;
                }
            }
            catch (e) {
                console.log("Error @ empty check Function: ",e.name+' : '+e.message)
            }
        }

        /**
         * Function to be executed when field is slaved.
         *
         * @param {Object} scriptContext
         * @param {Record} scriptContext.currentRecord - Current form record
         * @param {string} scriptContext.sublistId - Sublist name
         * @param {string} scriptContext.fieldId - Field name
         *
         * @since 2015.2
         */
        // function postSourcing(scriptContext) {
        //     try{
        //         var rec = scriptContext.currentRecord
        //         if(scriptContext.sublistId == 'expense' || scriptContext.sublistId == 'item' || scriptContext.sublistId == 'line'){
        //             rec.setCurrentSublistValue({
        //                 sublistId: scriptContext.sublistId,
        //                 fieldId: 'custcol_far_trn_relatedasset',
        //                 value: null
        //             })
        //             return true
        //         }
        //     }
        //     catch (e) {
        //         console.log("Error @ postSourcing : ",e.name+" : "+e.message)
        //     }
        // }

        /**
         * Validation function to be executed when sublist line is committed.
         *
         * @param {Object} scriptContext
         * @param {Record} scriptContext.currentRecord - Current form record
         * @param {string} scriptContext.sublistId - Sublist name
         *
         * @returns {boolean} Return true if sublist line is valid
         *
         * @since 2015.2
         */
        function validateLine(scriptContext) {
            try{
                var rec = scriptContext.currentRecord

                var recSubsidary = rec.getValue({
                    fieldId: 'subsidiary'
                })

                var checkValue = rec.getCurrentSublistValue({
                    sublistId: scriptContext.sublistId,
                    fieldId: 'custcol_far_exclude_asset_type'
                })

                var relatedAsset = rec.getCurrentSublistValue({
                    sublistId: scriptContext.sublistId,
                    fieldId: 'custcol_far_trn_relatedasset'
                })

                if(checkForParameter(relatedAsset)==true){
                    alert("You can't Edit or Copy a line which has Already Fixed Asset")
                    return false
                }
                 var employee = rec.getCurrentSublistValue({
                     sublistId: scriptContext.sublistId,
                     fieldId: 'custcol_far_employee'
                 })
                console.log("Employee: ",employee)
                if(checkForParameter(employee)==true){
                    var empRec = record.load({
                        type: record.Type.EMPLOYEE,
                        id: employee,
                        isDynamic: true
                    })
                    var empDep = empRec.getValue({
                        fieldId: 'department'
                    })
                    console.log("empDep: ",empDep)
                    var empClass = empRec.getValue({
                        fieldId: 'class'
                    })
                    console.log("empClass: ",empClass)
                    if(checkForParameter(empDep)==true) {
                        var depRec = record.load({
                            type: record.Type.DEPARTMENT,
                            id: empDep,
                            isDynamic: true
                        })
                        var depInactive = depRec.getValue({
                            fieldId: 'isinactive'
                        })
                        console.log("INACTIVE: ", depInactive)
                        if (depInactive == true) {
                            alert("Selected Employee has an inactive Department. Please choose another Employee")
                            return false;
                        }
                        else{
                            return true
                        }
                    }
                    if(checkForParameter(empDep)==false){
                        return true;
                    }
                    if(checkForParameter(empClass)==true){
                        var classRec = record.load({
                            type: record.Type.CLASSIFICATION,
                            id: empClass,
                            isDynamic: true
                        })
                        var classInactive = classRec.getValue({
                            fieldId: 'isinactive'
                        })
                        console.log("classInactive: ", classInactive)
                        if (classInactive == true) {
                            alert("Selected Employee has an inactive Class. Please choose another Employee")
                            return false;
                        }
                        else{
                            return true
                        }
                    }
                    if(checkForParameter(empClass)==false){
                        return true;
                    }
                }

                var assetType;

                //For Vendor Bill
                if(scriptContext.sublistId == 'expense'){

                    var exAcc = rec.getCurrentSublistValue({
                        sublistId: 'expense',
                        fieldId: 'account'
                    })
                    console.log('exAcc: ',exAcc)
                    if(checkForParameter(exAcc)==true){
                        var accRec = record.load({
                            type: 'account',
                            id: exAcc,
                            isDynamic: true
                        })
                        var accType = accRec.getValue({
                            fieldId: 'accttype'
                        })
                        console.log('accType: ',accType)
                        if(accType != 'FixedAsset'){
                            alert("Selected Account is not a Fixed Asset Type Account. So You can't create Fixed Asset from this account")
                            // return true;
                        }
                    }
                }

                if(scriptContext.sublistId == 'expense' || 'item'){
                    var amount = rec.getCurrentSublistValue({
                        sublistId: scriptContext.sublistId,
                        fieldId: 'amount'
                    })
                    console.log("amount: ",amount)
                    if(checkForParameter(amount)==true) {
                        if (Number(amount) < 0) {
                            alert("You can't provide an amount less than zero")
                            return false;
                        }
                    }
                }
                if(scriptContext.sublistId == 'line'){
                    var debit = rec.getCurrentSublistValue({
                        sublistId: scriptContext.sublistId,
                        fieldId: 'debit'
                    })
                    if(checkForParameter(debit)) {
                        if (Number(debit) < 0) {
                            alert("You can't provide an amount less than zero to a debit entry")
                            return false;
                        }
                    }
                    var credit = rec.getCurrentSublistValue({
                        sublistId: scriptContext.sublistId,
                        fieldId: 'credit'
                    })
                    if(checkForParameter(credit)) {
                        if (Number(credit) < 0) {
                            alert("You can't provide an amount less than zero to a credit entry")
                            return false;
                        }
                    }
                }

                if(scriptContext.sublistId == 'expense' || 'line'){
                    assetType = rec.getCurrentSublistValue({
                        sublistId: scriptContext.sublistId,
                        fieldId: 'custcol_far_asset_type'
                    })

                    if(checkForParameter(assetType)== true){
                        var atRec = record.load({
                            type: 'customrecord_ncfar_assettype',
                            id: assetType,
                            isDynamic: true
                        })
                        var atSubsidary = atRec.getValue({
                            fieldId: 'custrecord_assettype_subsidiary'
                        })

                        if(atSubsidary.includes(recSubsidary)==true){
                            return true;
                        }
                        else{
                            alert("Subsidiary of Asset type and Bill/Journal should be the same")
                            return false;
                        }
                    }

                    var jAcc = rec.getCurrentSublistValue({
                        sublistId: scriptContext.sublistId,
                        fieldId: 'account'
                    })
                    if(checkForParameter(jAcc)==true){
                        //Account Record
                        var accountRec = record.load({
                            type: record.Type.ACCOUNT,
                            id: jAcc,
                            isDynamic: true
                        })

                        var accType = accountRec.getValue({
                            fieldId: 'accttype'
                        })

                        if(accType == 'FixedAsset'){
                            // if((checkForParameter(assetType) == false) && (Boolean(checkValue) == false)){
                            if(checkForParameter(assetType) == false){
                                // alert(" Invalid Choose. If you want to exclude Fixed Asset please check the Exclude Fixed Asset Checkbox or please provide valid Asset type ")
                                alert("Invalid Choose. Please Select an Asset type. You can't create Fixed asset without Asset Type")
                                return false
                            }
                            else {
                                return true
                            }
                        }
                        else{
                            return true
                        }
                    }
                }


                if(scriptContext.sublistId == 'item'){
                    assetType = rec.getCurrentSublistValue({
                        sublistId: scriptContext.sublistId,
                        fieldId: 'custcol_far_asset_types'
                    })
                    if(checkForParameter(assetType)== true){
                        var atRec = record.load({
                            type: 'customrecord_ncfar_assettype',
                            id: assetType,
                            isDynamic: true
                        })
                        var atSubsidary = atRec.getValue({
                            fieldId: 'custrecord_assettype_subsidiary'
                        })

                        if(atSubsidary.includes(recSubsidary)==true){
                            return true;
                        }
                        else{
                            alert("Subsidiary of Asset type and Bill should be the same")
                            return false;
                        }
                    }
                    // if((checkForParameter(assetType) == false) && (Boolean(checkValue) == false)){
                    if(checkForParameter(assetType) == false){
                        // alert(" Invalid Choose. If you want to exclude Fixed Asset please check the Exclude Fixed Asset Checkbox or please provide valid Asset type ")
                        alert("Invalid Choose. Please Select an Asset type. You can't create Fixed asset without Asset Type")
                        return false
                    }
                    else {
                        return true
                    }
                }

            }
            catch (e) {
                console.log("Error @ valiadte Line: ",e.name+" : "+e.message)
            }
        }

        /**
         * 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 Save")
                return true
            }
            catch (e) {
                console.log("Error @ Save : ",e.name+" : "+e.message)
            }

        }

        return {
            // postSourcing: postSourcing,
            validateLine: validateLine,
            saveRecord: saveRecord
        };

    });

Leave a comment

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