Vendor Select Page on a custom record

Jira code: UMAR-5

A suitelet page which allows selecting the vendors for a specific main job based some filters such as Vessel, Class, Port, Region, Equipment, Equipment Type, Model, and Maker. User can redirect to this page from a button on the Main Job. User can have the options for go to the next session, go back to the Main Job, reset all the filters, Apply filter and view the result.

User Event Script and Client script for the Vendor Select Button

http://www.jobinandjismi.in/2019/04/09/customization-on-main-job-custom-record/

Suitelet for Vendor selection

    /**
     * @NApiVersion 2.x
     * @NScriptType Suitelet
     * @NModuleScope SameAccount
     */
    define(['N/ui/serverWidget', 'N/search'],

        function(serverWidget, search) {

            /**
             * Definition of the Suitelet script trigger point.
             *
             * @param {Object} context
             * @param {ServerRequest} context.request - Encapsulation of the incoming request
             * @param {ServerResponse} context.response - Encapsulation of the Suitelet response
             * @Since 2015
             */
            function onRequest(context) {
                var vendorForm = serverWidget.createForm({
                    title: 'Vendor Selection'
                });


                vendorForm.clientScriptFileId = 1599;
                if (context.request.method == 'GET') {

                    var jobId = context.request.parameters.custpage_jobid;
                    //Getting the Main Job Details
                    var mainjobDtls = search.lookupFields({
                        type: 'customrecord_netu_main_job',
                        id: jobId,
                        columns: ['name', 'custrecord_netu_customer', 'custrecord_netu_customer_reference', 'custrecord_netu_vessel',
                            'custrecord_netu_job_class', 'custrecord_netu_loa', 'custrecord_netu_beam', 'custrecord_netu_subsidiary'
                        ]
                    });
                    var mainJobGroup = 'mainJobGroup';
                    //Job specific fields
                    vendorForm.addFieldGroup({
                        id: mainJobGroup,
                        label: 'Job Details',
                    });

                    createFormTextField(vendorForm, 'job_number', serverWidget.FieldType.TEXT, 'Our Reference', null, mainJobGroup, true, mainjobDtls.name);
                    if (mainjobDtls.custrecord_netu_customer[0]) {
                        createFormTextField(vendorForm, 'customer', serverWidget.FieldType.TEXT, 'Customer', null, mainJobGroup, true, mainjobDtls.custrecord_netu_customer[0].text);
                    }
                    createFormTextField(vendorForm, 'customer_refernce', serverWidget.FieldType.TEXT, 'Customer Reference', null, mainJobGroup, true, mainjobDtls.custrecord_netu_customer_reference);
                    if (mainjobDtls.custrecord_netu_vessel[0]) {
                        createFormTextField(vendorForm, 'vessel', serverWidget.FieldType.TEXT, 'Vessel', null, mainJobGroup, true, mainjobDtls.custrecord_netu_vessel[0].text);
                    }
                    createFormTextField(vendorForm, 'jobid', serverWidget.FieldType.TEXT, 'Job Id', null, mainJobGroup, true, jobId);
                    if (mainjobDtls.custrecord_netu_job_class[0]) {
                        createFormTextField(vendorForm, 'class', serverWidget.FieldType.SELECT, 'Classification', 'classification', mainJobGroup, true, mainjobDtls.custrecord_netu_job_class[0].value);
                    }
                    var filterGroupId = 'filterGroupId';
                    vendorForm.addFieldGroup({
                        id: filterGroupId,
                        label: 'Filters',
                    });


                    var subsidiry = mainjobDtls.custrecord_netu_subsidiary[0].value;

                    if (subsidiry != 2) {
                        createFormTextField(vendorForm, 'loa', serverWidget.FieldType.FLOAT, 'LOA', null, filterGroupId, false, mainjobDtls.custrecord_netu_loa);
                        createFormTextField(vendorForm, 'beam', serverWidget.FieldType.FLOAT, 'BEAM', null, filterGroupId, false, mainjobDtls.custrecord_netu_beam);
                    }

                    createFormTextField(vendorForm, 'port', serverWidget.FieldType.MULTISELECT, 'Port', 'customrecord_netu_port', filterGroupId, false, "");
                    createFormTextField(vendorForm, 'region', serverWidget.FieldType.MULTISELECT, 'Region', 'customrecord_netu_region', filterGroupId, false, "");
                    createFormTextField(vendorForm, 'equipment', serverWidget.FieldType.SELECT, 'Equipment', 'customrecord_netu_equipment', filterGroupId, false, "");
                    createFormTextField(vendorForm, 'equipment_type', serverWidget.FieldType.SELECT, 'Equipment Type', 'customrecord_netu_equipment_type', filterGroupId, false, "");
                    createFormTextField(vendorForm, 'model', serverWidget.FieldType.SELECT, 'Model', 'customrecord_netu_model', filterGroupId, false, "");
                    createFormTextField(vendorForm, 'maker', serverWidget.FieldType.MULTISELECT, 'Maker', 'customrecord_netu_maker', filterGroupId, false, "");

                    //adding subsidiary as hidden field
                    createFormTextFieldSubsidiary(vendorForm, 'subsidiry', serverWidget.FieldType.TEXT, 'subsidiry', null, filterGroupId, true, subsidiry);

                    
                    var mainGroupFieldsId = 'mainGroupId';
                    vendorForm.addFieldGroup({
                        id: mainGroupFieldsId,
                        label: 'Choose vendor',
                    });
                    createFormTextField(vendorForm, 'select_vendor_name', serverWidget.FieldType.SELECT, 'Select Vendor', null, mainGroupFieldsId, false, "");

                    vendorForm.addSubmitButton({
                        label: 'Next'
                    });

                    vendorForm.addButton({
                        id: 'job_back',
                        label: 'Back',
                        functionName: 'moveBackAction'
                    });
                    vendorForm.addResetButton({
                        label: 'Reset'
                    });
                    vendorForm.addButton({
                        id: 'apply_filter',
                        label: 'Apply Filter',
                        functionName: 'applyFiltersToSearch',
                        container: 'filterGroupId'
                    });
                    var vendorList = vendorForm.addSublist({
                        id: 'vendor_sublist',
                        label: 'Vendor List',
                        type: serverWidget.SublistType.INLINEEDITOR
                    });

                    vendorList.addField({
                        id: 'vendor_select',
                        label: 'Select',
                        type: serverWidget.FieldType.CHECKBOX,
                    });
                    var vendorid = vendorList.addField({
                        id: 'id',
                        label: 'ID',
                        type: serverWidget.FieldType.TEXT
                    });

                    vendorid.updateDisplayType({
                        displayType: serverWidget.FieldDisplayType.HIDDEN
                    });

                    createListTextField(vendorList, 'entityid', 'Vendor Name', serverWidget.FieldType.SELECT, 'vendor', false);
                    createListTextField(vendorList, 'custentity_netu_country', 'Country', serverWidget.FieldType.TEXT, 'country', true);
                    createListTextField(vendorList, 'custentity_netu_port', 'Ports', serverWidget.FieldType.TEXT, 'custentity_netu_port', true);
                    createListTextField(vendorList, 'category', 'Category', serverWidget.FieldType.TEXT, 'vendorcategory', true);

                    vendorList.addField({
                        id: 'vendor_job_type',
                        label: 'Is Direct',
                        type: serverWidget.FieldType.CHECKBOX,
                    });
                    context.response.writePage(vendorForm);
                }



                /**
                 * Create field in the form
                 */
                function createFormTextField(vendorForm, id, type, label, source, containerId, isDisabled, fieldValue) {
                    var classField;
                    if (source != null) {
                        classField = vendorForm.addField({
                            id: 'custpage_' + id,
                            type: type,
                            label: label,
                            source: source,
                            container: containerId
                        });
                    } else {
                        classField = vendorForm.addField({
                            id: 'custpage_' + id,
                            type: type,
                            label: label,
                            container: containerId
                        });
                    }
                    if (fieldValue) {
                        classField.defaultValue = fieldValue;
                    }
                    if (isDisabled) {
                        classField.updateDisplayType({
                            displayType: serverWidget.FieldDisplayType.INLINE

                        });
                    }
                }
                
                //to create subsidiary with hidden field
                function createFormTextFieldSubsidiary(vendorForm, id, type, label, source, containerId, isDisabled, fieldValue) {
                    var classField;
                    if (source != null) {
                        classField = vendorForm.addField({
                            id: 'custpage_' + id,
                            type: type,
                            label: label,
                            source: source,
                            container: containerId
                        });
                    } else {
                        classField = vendorForm.addField({
                            id: 'custpage_' + id,
                            type: type,
                            label: label,
                            container: containerId
                        });
                    }
                    if (fieldValue) {
                        classField.defaultValue = fieldValue;
                    }
                    if (isDisabled) {
                        classField.updateDisplayType({
                            //displayType: serverWidget.FieldDisplayType.DISABLED/
                            displayType: serverWidget.FieldDisplayType.HIDDEN
                        });
                    }
                }
                
                

                function createListTextField(vendorList, id, label, type, source, isDisabled) {
                    var category = vendorList.addField({
                        id: id,
                        label: label,
                        type: type,
                        source: source
                    });
                    if (isDisabled) {
                        category.updateDisplayType({
                            displayType: serverWidget.FieldDisplayType.DISABLED

                        });
                    }

                }


            }


            return {
                onRequest: onRequest
            };

        });

Client Script

        /**
         * @NApiVersion 2.x
         * @NScriptType ClientScript
         * @NModuleScope SameAccount
         * edited for setting loa and beam
         */
        define(['N/currentRecord', 'N/search', 'N/url', 'N/record','./NetU_CS_Vendor_Library.js'],

            function(currentRecord, search, url, recordlib,vendorlib) {

                /**
                 * Function to be executed after page is initialized.
                 *
                 * @param {Object} scriptContext
                 * @param {Record} scriptContext.currentRecord - Current form record
                 * @param {string} scriptContext.mode - The mode in which the record is being accessed (create, copy, or edit)
                 *
                 * @since 2015.2
                 */
                function pageInit(scriptContext) {
                        var isBackPressed = getParameterByName('is_back');
                        if (isBackPressed) {
                        var vendorFilters = localStorage.getItem('vendor_filters_str');
                        if (vendorFilters) {
                            var vendorObj = JSON.parse(vendorFilters);
                            var filterArray = ['custpage_port', 'custpage_region', 'custpage_equipment', 'custpage_equipment_type', 'custpage_model',
                                'custpage_maker', 'custpage_loa','custpage_beam','custpage_subsidiry'
                            ];
                            for (var i = 0; i < filterArray.length; i++) {
                                var fieldId = filterArray[i];
                                scriptContext.currentRecord.setValue({
                                    fieldId: fieldId,
                                    value: vendorObj[fieldId],
                                    ignoreFieldChange: true

                                });

                            }

                            applyFiltersToSearch();
                        }
                        var vendor_select_record_str = localStorage.getItem('vendor_select_record_str');
                        var vendorSelectRecord = JSON.parse(vendor_select_record_str);
                       setVendorListView(scriptContext.currentRecord, vendorSelectRecord);
                    }

                }




                function setVendorListView(vendorList, vendorSelectRecord) {

                    for (var index = 0; index < vendorSelectRecord.length; index++) {
                        //checkes whether the vendor is in the list
                         var vendorObj = vendorSelectRecord[index];
                         checkWhetherVendorExistsInList(vendorList,vendorObj);
                    }

                }

                //if vendor exists in the list mark the vendors as selected else add as additional line
                function checkWhetherVendorExistsInList(currentRecord,vendorObj){
                    var lineNumber = currentRecord.findSublistLineWithValue({
                        sublistId: 'vendor_sublist',
                        fieldId: 'id',
                        value: vendorObj.id
                    });

                    if (lineNumber > -1) {
                        currentRecord.selectLine({
                            sublistId: 'vendor_sublist',
                            line: lineNumber

                        });
                        currentRecord.setCurrentSublistValue({
                            sublistId: 'vendor_sublist',
                            fieldId: 'vendor_select',
                            value: true,
                            ignoreFieldChange: true
                        });
                        if(vendorObj.job_type =='Direct'){
                            vendorObj.job_type = true;
                        }else{
                            vendorObj.job_type= false;
                        }
                        currentRecord.setCurrentSublistValue({
                            fieldId: 'vendor_job_type',
                            sublistId: 'vendor_sublist',
                            value: vendorObj.job_type
                        });
                        currentRecord.commitLine({
                            sublistId: 'vendor_sublist'
                        });

                    }else{
                        setAdditionalVendorDetails(currentRecord,vendorObj);

                    }
                }

                //Function create an additional line in the sublist and save the vendor details
                function setAdditionalVendorDetails( vendorList, vendorObj){
                /*  vendorList.selectNewLine({
                            sublistId: 'vendor_sublist',
                         });*/
                    var numLines = vendorList.getLineCount({
                        sublistId: 'vendor_sublist'
                    });
                    var lastVendorName  = vendorList.getSublistValue({
                        fieldId : 'id',
                        sublistId : 'vendor_sublist',
                        line :numLines-1
                    });
                    console.log('lastvendorname'+lastVendorName);
                    if(lastVendorName=="" || !lastVendorName|| lastVendorName==null ||lastVendorName ==undefined){
                        vendorList.selectLine({
                            sublistId: 'vendor_sublist',
                            line:numLines-1
                        });
                    }else{
                        vendorList.selectNewLine({
                            sublistId: 'vendor_sublist',
                         });
                    }
                    vendorList.setCurrentSublistValue({
                        fieldId : 'id',
                        sublistId : 'vendor_sublist',
                        value :vendorObj.id
                    });
                    vendorList.setCurrentSublistValue({
                        fieldId : 'entityid',
                        sublistId : 'vendor_sublist',
                        value :vendorObj.id
                    });

                    vendorList.setCurrentSublistValue({
                        fieldId : 'custentity_netu_country',
                        sublistId : 'vendor_sublist',
                        value :vendorObj.country
                    });


                    vendorList.setCurrentSublistValue({
                        fieldId : 'custentity_netu_port',
                        sublistId : 'vendor_sublist',
                        value :vendorObj.port
                    });


                    vendorList.setCurrentSublistValue({
                        fieldId : 'category',
                        sublistId : 'vendor_sublist',
                        value : vendorObj.category
                    });
                    if(vendorObj.job_type =='Direct'){
                        vendorObj.job_type = true;
                    }else{
                        vendorObj.job_type= false;
                    }
                    vendorList.setCurrentSublistValue({
                        fieldId : 'vendor_job_type',
                        sublistId : 'vendor_sublist',
                            value :vendorObj.job_type
                        });
                    vendorList.commitLine({ 
                        sublistId : 'vendor_sublist'
                    });
                }


                function getParameterByName(name, url) {
                    if (!url) url = window.location.href;
                    name = name.replace(/[\[\]]/g, "\\$&");
                    var regex = new RegExp("[?&]" + name + "(=([^&#]*)|&|#|$)"),
                        results = regex.exec(url);
                    if (!results) return null;
                    if (!results[2]) return '';
                    return decodeURIComponent(results[2].replace(/\+/g, " "));
                }


                /**
                 * Function to be executed when field is changed.
                 *
                 * @param {Object} scriptContext
                 * @param {Record} scriptContext.currentRecord - Current form record
                 * @param {string} scriptContext.sublistId - Sublist name
                 * @param {string} scriptContext.fieldId - Field name
                 * @param {number} scriptContext.lineNum - Line number. Will be undefined if not a sublist or matrix field
                 * @param {number} scriptContext.columnNum - Line number. Will be undefined if not a matrix field
                 *
                 * @since 2015.2
                 */
                function fieldChanged(scriptContext) {
                    var currentRecord = scriptContext.currentRecord;
                    var fieldId = scriptContext.fieldId;
                    if (fieldId == 'custpage_select_vendor_name') {
                        var vendorId = currentRecord.getValue({
                            fieldId: fieldId
                        });

                        var lineNumber = currentRecord.findSublistLineWithValue({
                            sublistId: 'vendor_sublist',
                            fieldId: 'id',
                            value: vendorId
                        });
                        console.log("vendor select no" + lineNumber);

                        if (lineNumber > -1) {
                            currentRecord.selectLine({
                                sublistId: 'vendor_sublist',
                                line: lineNumber

                            });
                            currentRecord.setCurrentSublistValue({
                                sublistId: 'vendor_sublist',
                                fieldId: 'vendor_select',
                                value: true,
                                ignoreFieldChange: true
                            });
                            currentRecord.commitLine({
                                sublistId: 'vendor_sublist'
                            });
                            currentRecord.setValue({
                                fieldId: fieldId,
                                value: 0,
                                ignoreFieldChange: true
                            });

                        } else if (vendorId == 0) {
                            //Noting to be done
                        } else {
                            alert('Vendor not found');
                        }

                    } else if (fieldId == 'entityid') {
                        var vendorId = currentRecord.getCurrentSublistValue({
                            fieldId: fieldId,
                            sublistId: 'vendor_sublist'
                        });
                        console.log('vendorId' + vendorId);
                        setVendorDetails(vendorId, currentRecord);

                    }
                }


                function setVendorDetails(entityId, vendorList) {

                    var vendorSearch = search.create({
                        type: 'vendor',
                        columns: ['entityid', 'custentity_netu_country', 'custentity_netu_port',
                            search.createColumn({
                                name: 'category',
                                sort: 'ASC'
                            })
                        ]

                    });
                    var idFilter = search.createFilter({
                        name: 'internalid',
                        operator: 'IS',
                        values: entityId
                    });
                    vendorSearch.filters.push(idFilter);
                    var vendorResults = vendorSearch.run().getRange({
                        start: 0,
                        end: 1
                    });


                    if (vendorResults) {
                        var result = vendorResults[0];
                        vendorList.setCurrentSublistValue({
                            fieldId: 'id',
                            sublistId: 'vendor_sublist',
                            value: result.id
                        });
                        var country = result.getText({
                            name: 'custentity_netu_country'
                        });
                        if (country == null || country == undefined || !country) {
                            country = "-";
                        }
                        vendorList.setCurrentSublistValue({
                            fieldId: 'custentity_netu_country',
                            sublistId: 'vendor_sublist',
                            value: country
                        });
                        var category = result.getText({
                            name: 'category'
                        });
                        if (category == null || category == undefined || !category) {
                            category = "-";
                        }
                        vendorList.setCurrentSublistValue({
                            fieldId: 'category',
                            sublistId: 'vendor_sublist',
                            value: category
                        });

                        var port = result.getText({
                            name: 'custentity_netu_port'
                        });
                        if (port == null || port == undefined || !port) {
                            port = "-";
                        }
                        vendorList.setCurrentSublistValue({
                            fieldId: 'custentity_netu_port',
                            sublistId: 'vendor_sublist',
                            value: port
                        });
                    }
                    vendorList.setCurrentSublistValue({
                        fieldId: 'vendor_select',
                        sublistId: 'vendor_sublist',
                        value: true
                    });
                    vendorList.setCurrentSublistValue({
                        fieldId: 'vendor_job_type',
                        sublistId: 'vendor_sublist',
                        value: true
                    });
                }

                function applyFiltersToSearch() {

                    var record = currentRecord.get();
                    var regionFilter, portFilter, equipmentFilter, equipmentTypeFilter, modelFilter, makerFilter, classFilter, loaFilter, beamFilter;

                    var vendorSearch = search.create({
                        type: 'vendor',
                        columns: ['custentity_netu_country', 'custentity_netu_port',
                            search.createColumn({
                                name: 'category',
                                sort: 'ASC'
                            }),
                            search.createColumn({
                                name: 'entityid',
                                sort: 'ASC'
                            }),
                        ]

                    });
                    vendorSearch.filters.push(search.createFilter({
                        name: 'isinactive',
                        operator: 'IS',
                        values: 'F'
                    }));

                    var subsidiry = record.getValue({
                        fieldId: 'custpage_subsidiry'
                    });

                    if (subsidiry != null && subsidiry != undefined && subsidiry != "") {
                        subsidiryFilter = search.createFilter({
                            name: 'subsidiary',
                            operator: 'IS',
                            values: subsidiry
                        });
                        vendorSearch.filters.push(subsidiryFilter);
                    }



                    var region = record.getValue({
                        fieldId: 'custpage_region'
                    });

                    if (region != null && region != undefined && region != "") {
                        regionFilter = search.createFilter({
                            name: 'custentity_netu_region',
                            operator: 'IS',
                            values: region
                        });
                        vendorSearch.filters.push(regionFilter);
                    }



                    var port = record.getValue({
                        fieldId: 'custpage_port'
                    });                     
                    if (port != null && port != undefined && port != "") {
                        portFilter = search.createFilter({
                            name: 'internalid',
                            join: 'custentity_netu_port',
                            operator: 'IS',
                            values: port
                        });
                        vendorSearch.filters.push(portFilter);
                    }




                    //FILTERS FROM PRODUCTS RECORD

                    var equipment = record.getValue({
                        fieldId: 'custpage_equipment'
                    });
                    if (equipment != null && equipment != undefined && equipment != "") {
                        equipmentFilter = search.createFilter({
                            name: 'custrecord_netu_equipment',
                            join: 'custrecord_netu_product_vendor',
                            operator: 'IS',
                            values: equipment
                        });
                        vendorSearch.filters.push(equipmentFilter);
                    }

                    var equipment_type = record.getValue({
                        fieldId: 'custpage_equipment_type'
                    });
                    if (equipment_type != null && equipment_type != undefined && equipment_type != "") {
                        equipmentTypeFilter = search.createFilter({
                            name: 'custrecord_netu_equipment_type',
                            join: 'custrecord_netu_product_vendor',
                            operator: 'IS',
                            values: equipment_type
                        });
                        vendorSearch.filters.push(equipmentTypeFilter);
                    }
                    var model = record.getValue({
                        fieldId: 'custpage_model'
                    });
                    if (model != null && model != undefined && model != "") {
                        modelFilter = search.createFilter({
                            name: 'custrecord_netu_model',
                            join: 'custrecord_netu_product_vendor',
                            operator: 'IS',
                            values: model
                        });
                        vendorSearch.filters.push(modelFilter);

                    }
                    var maker = record.getValue({
                        fieldId: 'custpage_maker'
                    });
                    if (maker != null && maker != undefined && maker != "") {
                        makerFilter = search.createFilter({
                            name: 'custrecord_netu_maker',
                            join: 'custrecord_netu_product_vendor',
                            operator: 'IS',
                            values: maker
                        });
                        vendorSearch.filters.push(makerFilter);
                    }

                    var classification = record.getValue({
                        fieldId: 'custpage_class'
                    });
                    if (classification != null && classification != undefined && classification != "") {
                        classFilter = search.createFilter({
                            name: 'internalid',
                            join: 'custentity_netu_vendor_facilities_class',
                            operator: 'IS',
                            values: classification
                        });
                        vendorSearch.filters.push(classFilter);
                    }



                    /*AU starts*/

                  //--------

                    var loa = record.getValue({
                        fieldId: 'custpage_loa'
                    });
                    console.log('LOA', loa);
                    if (loa != null && loa != undefined && loa != "") {
                        loaFilter = search.createFilter({
                            name: 'custrecord_netu_v_loa',
                            join: 'custrecord_netu_vendor_dt',
                            operator: 'greaterthanorequalto',
                            values: loa
                        });

                        vendorSearch.filters.push(loaFilter);

                    }

                    var beam = record.getValue({
                        fieldId: 'custpage_beam'
                    });

                    if (beam != null && beam != undefined && beam != "") {
                        beamFilter = search.createFilter({
                            name: 'custrecord_netu_v_beam',
                            join: 'custrecord_netu_vendor_dt',
                            operator: 'greaterthanorequalto',
                            values: beam
                        });
                        vendorSearch.filters.push(beamFilter);

                    }   


                    //TODO based on vendors number                    
                    var vendorResults = vendorSearch.run().getRange({
                        start: 0,
                        end: 1000
                    });


                    var numLines = record.getLineCount({
                        sublistId: 'vendor_sublist'
                    });
                    console.log(numLines);

                    var vendorResultsCount = vendorSearch.runPaged().count;

                    if(vendorResultsCount<=0){
                        alert("Vendors not found for these filters");
                        for (var i = numLines - 1; i > -1; i--) {
                            record.removeLine({
                                sublistId: 'vendor_sublist',
                                line: i,
                                ignoreRecalc: true
                            });
                        }
                        record.commitLine({
                            sublistId: 'vendor_sublist'
                        });
                        record.selectLine({
                            sublistId: 'vendor_sublist',
                            line:0,
                        });

                        return false;
                    }

                    for (var i = numLines - 1; i > -1; i--) {
                        record.removeLine({
                            sublistId: 'vendor_sublist',
                            line: i,
                            ignoreRecalc: true
                        });
                    }
                    record.commitLine({
                        sublistId: 'vendor_sublist'
                    });

                    setVendorSublist(vendorResults, record);

                }


                //Function to set the options for select vendor dropdown
                function setSelectedVendors(selectedVendorList) {

                    var record = currentRecord.get();
                    var field = record.getField({
                        fieldId: 'custpage_select_vendor_name'
                    });
                    //remove all the values
                    field.removeSelectOption({
                        value: null
                    });
                    for (var key in selectedVendorList) {
                        if (key == 0) {
                            field.insertSelectOption({
                                value: 0,
                                text: "Select"
                            });
                        }
                        field.insertSelectOption({
                            value: selectedVendorList[key].id,
                            text: selectedVendorList[key].name
                        });


                    }
                }

                function setVendorSublist(vendorResults, vendorList) {
                    if (vendorResults) {
                        var index = 0;
                        var selectedVendorList = [];
                        vendorResults.forEach(function(result) {

                            var vendorName = result.getValue({
                                name: 'entityid'
                            });
                            if (vendorName == null || vendorName == undefined) {
                                vendorName = "";
                            }
                            if(index ==0){
                                 vendorList.selectLine({
                                        sublistId: 'vendor_sublist',
                                        line:0,
                                    });
                            }else{
                                vendorList.selectNewLine({
                                    sublistId: 'vendor_sublist',
                                    ignoreRecalc: true
                                });
                            }

                            console.log('---test' + vendorName);
                            //--insert vendor to vendor name list
                            var selectedVendorObj = {};
                            selectedVendorObj.id = result.id;
                            selectedVendorObj.name = vendorName;
                            selectedVendorList.push(selectedVendorObj);

                            //---End----

                            vendorList.setCurrentSublistValue({
                                fieldId: 'entityid',
                                sublistId: 'vendor_sublist',
                                value: result.id,
                                ignoreFieldChange: true
                            });
                            vendorList.setCurrentSublistValue({
                                fieldId: 'id',
                                sublistId: 'vendor_sublist',
                                value: result.id
                            });

                            var country = result.getText({
                                name: 'custentity_netu_country'
                            });
                            if (country == null || country == undefined || !country) {
                                country = "-";
                            }
                            vendorList.setCurrentSublistValue({
                                fieldId: 'custentity_netu_country',
                                sublistId: 'vendor_sublist',
                                value: country
                            });
                            var category = result.getText({
                                name: 'category'
                            });
                            if (category == null || category == undefined || !category) {
                                category = "-";
                            }
                            vendorList.setCurrentSublistValue({
                                fieldId: 'category',
                                sublistId: 'vendor_sublist',
                                value: category
                            });

                            var port = result.getText({
                                name: 'custentity_netu_port'
                            });
                            if (port == null || port == undefined || !port) {
                                port = "-";
                            }
                            vendorList.setCurrentSublistValue({
                                fieldId: 'custentity_netu_port',
                                sublistId: 'vendor_sublist',
                                value: port
                            });

                            vendorList.setCurrentSublistValue({
                                fieldId: 'vendor_job_type',
                                sublistId: 'vendor_sublist',
                                value: true
                            });
                            vendorList.setCurrentSublistValue({
                                fieldId: 'vendor_select',
                                sublistId: 'vendor_sublist',
                                value: false
                            });

                            vendorList.commitLine({
                                sublistId: 'vendor_sublist'
                            });
                            index++;
                        });
                        //TODO --insert vendor list to vendor drop down
                        setSelectedVendors(selectedVendorList);


                    } else {
                        vendorList.removeLine({
                            sublistId: 'vendor_sublist',
                            line: 0,
                            ignoreRecalc: true
                        });
                        vendorList.commitLine({
                            sublistId: 'vendor_sublist'
                        });
                    }
                }

                function saveRecord() {
                    var record = currentRecord.get();


                    var jobclass = record.getValue({
                        fieldId: 'custpage_class'
                    });

                    var jobclassName = record.getText({
                        fieldId: 'custpage_class'
                    });

                    //console.log('jobclass '+jobclass);

                    var itemCode=null;

                    //Searching for the item code of the Main Job's Class
                    var customrecord_netu_class_revenue_mapSearchObj = search.create({
                        type: "customrecord_netu_class_revenue_map",
                        filters: [
                           ["custrecord_netu_map_class","anyof",jobclass]
                        ],
                        columns: [
                            "custrecord_netu_item_code"
                        ]
                      });

                     var classMapsearchResultCount = customrecord_netu_class_revenue_mapSearchObj.runPaged().count;
                     if(classMapsearchResultCount !=0){
                         var classMapResults = customrecord_netu_class_revenue_mapSearchObj.run().getRange({                            start:0,
                             start:0,
                             end:1
                         });

                         itemCode = classMapResults[0].getValue({
                             name: 'custrecord_netu_item_code'
                         });
                     }

                    console.log('itemCode '+itemCode);

                    if((itemCode==null) || (itemCode=="") || (itemCode==undefined) ){
                        alert('Itemcode is not defined for the Class "'+jobclassName+'"');
                        return false;
                    }

                    var numLines = record.getLineCount({
                        sublistId: 'vendor_sublist'
                    });
                    console.log('numLines', numLines);

                    if(numLines==0){                            
                        alert("Please select atleat one vendor to Proceed");
                        return false;                           
                    }

                    var count=0;

                     for (var i = 0; i < numLines; i++) {

                        record.selectLine({
                            sublistId: 'vendor_sublist',
                            line: i

                        });
                        var isSelect = record.getCurrentSublistValue({
                            sublistId: 'vendor_sublist',
                            fieldId: 'vendor_select'
                        });
                        if (isSelect) {
                            var entityid = record.getCurrentSublistText({
                                sublistId: 'vendor_sublist',
                                fieldId: 'entityid'
                            });
                            console.log('entityid', entityid);
                            if( (entityid == null) || (entityid == undefined) || (entityid == "")){
                                alert("Vendor is missing in Vendor List Line "+i);
                                return false;
                            }
                        }
                        else{
                            count=count+1;
                        }

                    }

                     if(count==numLines){
                         alert("Please select atleat one vendor to Proceed");
                        return false;
                     }


                    var params = {};
                    params['custpage_jobid'] = record.getValue({
                        fieldId: 'custpage_jobid'
                    });
                    var previewUrl = url.resolveScript({
                        scriptId: 'customscript_netu_vendor_select_preview',
                        deploymentId: 'customdeploy_netu_vendor_select_preview',
                        returnExternalUrl: false,
                        params: params
                    });

                    localStorage.setItem('vendor_select_record_str', createParamsForSublist(record));
                    localStorage.setItem('vendor_filters_str', createFilterParams(record));
                    localStorage.setItem('itemCode', itemCode);

                    if (window.onbeforeunload) {
                        window.onbeforeunload = function() {
                            null;
                        };
                    };

                    window.location = previewUrl;
                }

                function createFilterParams(record) {
                    var filterArray = ['custpage_port', 'custpage_region', 'custpage_equipment', 'custpage_equipment_type', 'custpage_model',
                        'custpage_maker', 'custpage_class', 'custpage_loa', 'custpage_beam', 'custpage_subsidiry'
                    ];
                    var filterObj = {};
                    for (var i = 0; i < filterArray.length; i++) {
                        var fieldId = filterArray[i];
                        filterObj[fieldId] = record.getValue({
                            fieldId: fieldId
                        });

                    }
                    return JSON.stringify(filterObj);
                }

                function createParamsForSublist(record) {
                    var numLines = record.getLineCount({
                        sublistId: 'vendor_sublist'
                    });
                    var vendorArray = [];
                    for (var i = numLines - 1; i > -1; i--) {

                        record.selectLine({
                            sublistId: 'vendor_sublist',
                            line: i

                        });
                        var isSelect = record.getCurrentSublistValue({
                            sublistId: 'vendor_sublist',
                            fieldId: 'vendor_select'
                        });
                        if (isSelect) {
                            var vendorObj = {};
                            vendorObj.id = record.getCurrentSublistValue({
                                sublistId: 'vendor_sublist',
                                fieldId: 'id'
                            });
                            vendorObj.entityid = record.getCurrentSublistText({
                                sublistId: 'vendor_sublist',
                                fieldId: 'entityid'
                            });
                            vendorObj.country = record.getCurrentSublistValue({
                                sublistId: 'vendor_sublist',
                                fieldId: 'custentity_netu_country'
                            });
                            vendorObj.category = record.getCurrentSublistValue({
                                sublistId: 'vendor_sublist',
                                fieldId: 'category'
                            });

                            vendorObj.port = record.getCurrentSublistValue({
                                sublistId: 'vendor_sublist',
                                fieldId: 'custentity_netu_port'
                            });
                            vendorObj.job_type = record.getCurrentSublistValue({
                                sublistId: 'vendor_sublist',
                                fieldId: 'vendor_job_type'
                            });
                            if (vendorObj.job_type == true) {
                                vendorObj.job_type = 'Direct';
                            } else {
                                vendorObj.job_type = 'Part';

                            }

                            vendorArray.push(vendorObj);
                        }
                    }

                    return JSON.stringify(vendorArray);
                }



                function moveBackAction() {
                    var record = currentRecord.get();
                    var jobId = record.getValue({
                        fieldId: 'custpage_jobid'
                    });
                    var params = {};
                    params['custpage_jobid'] = jobId;
                    var backUrl = url.resolveRecord({
                        recordType: 'customrecord_netu_main_job',
                        recordId: jobId,
                        isEditMode: false
                    });

                    if (window.onbeforeunload) {
                        window.onbeforeunload = function() {
                            null;
                        };
                    }
                    window.location = backUrl;
                }
                return {
                    setVendorDetails: setVendorDetails,
                    applyFiltersToSearch: applyFiltersToSearch,
                    pageInit: pageInit,
                    moveBackAction: moveBackAction,
                    fieldChanged: fieldChanged,
                    saveRecord: saveRecord,
                    getParameterByName: getParameterByName
                };

            });

Leave a comment

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