Creating Commission Reports based on Items and Salespersons from Invoice records

Clients need a commission report based on the item and salesperson in an invoice record.

We have provided a solution using custom record entries. In an invoice for each item and sales team combination we will create a custom record entry and the data on the custom record entry will be displayed in the suitelet report

Suitelet

/**
 * @NApiVersion 2.1
 * @NScriptType Suitelet
 */
/************************************************************************************************
 * * Suitelet **
 *  * To view the Payments Received/Paid Report **
 *  * VCPRL-32 :  Payments Received/Paid Report **
 *
 * **********************************************************************************************
 *
 * Author: Jobin and Jismi
 *
 * Date Created : 29 June 2022
 *
 * Created By: Athul Krishna, Jobin and Jismi
 *
 * Description :
 *
 * REVISION HISTORY
 *
 *
 *
 *
 ***********************************************************************************************/
define([
        "N/log",
        "N/record",
        "N/task",
        "N/ui/serverWidget",
        "N/util",
        "N/url",
        "N/runtime",
        "../Library/JJ CM NS Utility.js",
        "../Model/JJ CM Resolver Model.js",
        "../Excel Template/JJ CM Resolver Template",

    ]
    /**
     * @param{log} log
     * @param{record} record
     * @param{task} task
     * @param{serverWidget} serverWidget
     * @param{util} util
     * @param{url} url
     * @param{runtime} runtime
     * @param{jjUtil} jjUtil
     * @param{modelResolver} modelResolver
     * @param{templateResolver} templateResolver
     */, (
        log,
        record,
        task,
        serverWidget,
        util,
        url,
        runtime,
        jjUtil,
        modelResolver,
        templateResolver,

    ) => {
        let fetchModel;
        let templateFetch;
        const PAGE_SIZE = 1000;
        const DEFAULT_SUBSIDIARY = "ALL";
        /**
         * To generate Date String on the format YYYY-MM-DD
         * @param {Date} dateObj - javascript Date Object
         */
        const generateDateString = function (dateObj) {
            return (
                dateObj.getFullYear() +
                "-" +
                (dateObj.getMonth() + 1) +
                "-" +
                dateObj.getDate()
            );
        };

        const form = {
            /**
             * to refer suitelet form object
             */
            formObj: null,
            /**
             * repository to refer all buttons
             */
            buttons: {},
            /**
             * repository to refer all body fields
             */
            bodyFields: {},
            /**
             * repository to refer all sublists
             */
            subLists: {},
            /**
             * repository to refer all fieldgroups
             */
            fieldGroups: {},
            subtab:{},
            init(formObj) {
                this.formObj = formObj;
            },
            setformFieldProperty(field, propObj) {
                const setFieldProp = {
                    updateLayoutType: function (field, value) {
                        field.updateLayoutType({
                            layoutType: value,
                        });
                    },
                    updateBreakType: function (field, value) {
                        field.updateBreakType({
                            breakType: value,
                        });
                    },
                    updateDisplayType: function (field, value) {
                        field.updateDisplayType({
                            displayType: value,
                        });
                    },
                    setHelpText: function (field, value) {
                        field.setHelpText({
                            help: value,
                        });
                    },
                    isMandatory: function (field, value) {
                        field.isMandatory = value;
                    },
                    defaultValue: function (field, value) {
                        field.defaultValue = value;
                    },
                };
                for (let prop in propObj)
                    if (propObj[prop]) setFieldProp[prop](field, propObj[prop]);
            },
            /**
             * To set buttons in the Suitelet form
             */
            setBodyButtons() {
                let formObj = form.formObj;

                form.buttons.custpage_btn_export = formObj.addButton({
                    id: "custpage_btn_export",
                    label: "Download",
                    functionName: "triggerExport",
                });
                form.buttons.custpage_btn_search = formObj.addButton({
                    id: "custpage_btn_search",
                    label: "Search",
                    functionName: 'triggerSearch',
                });
            },
            /**
             * To set body fields in the Suitelet form
             */
            setBodyFields() {
                let formObj = form.formObj;
                //Inline HTML Field (Hidden)
                form.bodyFields.custpage_field_hidden_inlinehtml = formObj.addField({
                    id: "custpage_field_hidden_inlinehtml",
                    type: serverWidget.FieldType.INLINEHTML,
                    label: "Inline HTML",
                });
                form.setformFieldProperty(
                    form.bodyFields.custpage_field_hidden_inlinehtml,
                    {
                        setHelpText: "Inline HTML",
                        isMandatory: true,
                        defaultValue: `<script>
                window.ns_screenfields_suiteletform = window.ns_screenfields_suiteletform || {};
                window.ns_screenfields_suiteletform.suiteletFormUrl = "${url.resolveScript(
                            {
                                scriptId: "customscript_jj_sl_commi_report_ahap60",
                                deploymentId: "customdeploy_jj_sl_commi_report_ahap60",
                            }
                        )}";
                </script>`,
                    }
                );

                //Field Group
                form.fieldGroups.custpage_group_filter = formObj.addFieldGroup({
                    id: "custpage_group_filter",
                    label: "Filter",
                });
                //form.fieldGroups.custpage_group_filter.isSingleColumn = true;

                //Sales Person

                let currentUser=runtime.getCurrentUser().id
                let name= runtime.getCurrentUser().name
                let currentRole=runtime.getCurrentUser().role
                log.debug("current Role",currentRole)
                log.debug("Current User",currentUser)
                log.debug("Current",runtime.getCurrentUser())
                // if(currentRole==='3'|| currentRole===3){
                //     form.bodyFields.custpage_filter_salesperson = formObj.addField({
                //         id: "custpage_filter_salesperson",
                //         label: "SalesPerson",
                //         type: serverWidget.FieldType.SELECT,
                //         source: 'employee',
                //         container: "custpage_group_filter",
                //     });
                // }else {


                    form.bodyFields.custpage_filter_salesperson = formObj.addField({
                        id: "custpage_filter_salesperson",
                        label: "SalesPerson",
                        type: serverWidget.FieldType.SELECT,
                        //source: 'subsidiary',
                        container: "custpage_group_filter",
                    });
                    const salesPersonSavedSearchResult = fetchModel.models.fetchSalesPerson({
                        filterConfig: {},
                        searchConfig: {
                            PAGE_INDEX: false,
                            PAGE_SIZE: 1000,
                        },
                        role: currentRole,
                        user: currentUser
                    });
                    if(currentRole==='3'|| currentRole===3 || currentRole===1099 ||currentRole==='1099' || currentRole==1038 || currentRole=='1038') {
                        form.bodyFields.custpage_filter_salesperson.addSelectOption({
                            value: currentUser,
                            text: name,
                            //isSelected: true,
                        });

                        for (let elem of salesPersonSavedSearchResult) {
                            form.bodyFields.custpage_filter_salesperson.addSelectOption({
                                value: elem?.["Internal ID"].value,
                                text: elem?.["Name"].value,
                                //isSelected: true,
                            });
                        }
                    }
                    if(currentRole==1057 || currentRole==1045 || currentRole==1060){
                        form.bodyFields.custpage_filter_salesperson.addSelectOption({
                            value: currentUser,
                            text: name,
                            //isSelected: true,
                        });
                    }
                    if(currentRole==1088 || currentRole==1046 || currentRole==1055 || currentRole==1058){
                        form.bodyFields.custpage_filter_salesperson.addSelectOption({
                            value: currentUser,
                            text: name,
                            //isSelected: true,
                        });
                    }
                // }

                form.setformFieldProperty(form.bodyFields.custpage_filter_salesperson, {
                    // updateLayoutType: serverWidget.FieldLayoutType.STARTROW,
                    setHelpText: "Choose SalesPerson",
                    isMandatory: true,
                    defaultValue:
                        exports.parameters?.custpage_filter_salesperson || DEFAULT_SUBSIDIARY,
                });
                //Location
                const locationSavedSearchResult = fetchModel.models.fetchLocation({

                    filterConfig: {},
                    searchConfig: {
                        PAGE_INDEX: false,
                        PAGE_SIZE: 1000,
                    },
                    role: currentRole,
                    user: currentUser,
                });
                //if(currentRole==='3'|| currentRole===3) {
                //     form.bodyFields.custpage_filter_location = formObj.addField({
                //         id: "custpage_filter_location",
                //         label: "Location",
                //         type: serverWidget.FieldType.SELECT,
                //         source: 'location',
                //         container: "custpage_group_filter",
                  //  });
                //}else {
                    form.bodyFields.custpage_filter_location = formObj.addField({
                        id: "custpage_filter_location",
                        label: "Location",
                        type: serverWidget.FieldType.SELECT,
                        // source: 'location',
                        container: "custpage_group_filter",
                    });
                //if(currentRole==='3'|| currentRole===3) {
                    form.bodyFields.custpage_filter_location.addSelectOption({
                        value: "ALL",
                        text: "- All -",
                        //isSelected: true,
                    });
                //}
                    for (let elem of locationSavedSearchResult) {
                        form.bodyFields.custpage_filter_location.addSelectOption({
                            value: elem?.["Internal ID"].value,
                            text: elem?.["Name"].value,
                            //isSelected: true,
                        });
                    }
                //}
                form.setformFieldProperty(form.bodyFields.custpage_filter_location, {
                    // updateLayoutType: serverWidget.FieldLayoutType.STARTROW,
                    setHelpText: "Choose Location",
                    isMandatory: true,
                    defaultValue: exports.parameters?.custpage_filter_location || "ALL",
                });
                //Vendor
                // const vendorSavedSearchResult = fetchModel.models.fetchVendor({
                //     filterConfig: {},
                //     searchConfig: {
                //         PAGE_INDEX: false,
                //         PAGE_SIZE: 1000,
                //     },
                // });
                form.bodyFields.custpage_filter_start_date = formObj.addField({
                    id: "custpage_filter_start_date",
                    label: "Start Date",
                    type: serverWidget.FieldType.DATE,
                    container: "custpage_group_filter",
                });
                form.setformFieldProperty(form.bodyFields.custpage_filter_start_date, {
                    // updateLayoutType: serverWidget.FieldLayoutType.STARTROW,
                    setHelpText: "Choose Start Date",
                    isMandatory: true,
                    defaultValue: exports.parameters?.custpage_filter_start_date || new Date()
                });

                form.bodyFields.custpage_filter_end_date = formObj.addField({
                    id: "custpage_filter_end_date",
                    label: "End Date",
                    type: serverWidget.FieldType.DATE,
                    container: "custpage_group_filter",
                });
                form.setformFieldProperty(form.bodyFields.custpage_filter_end_date, {
                    // updateLayoutType: serverWidget.FieldLayoutType.STARTROW,
                    setHelpText: "Choose End Date",
                    isMandatory: true,
                    defaultValue: exports.parameters?.custpage_filter_end_date || new Date()
                });
                form.bodyFields.custpage_total_commission = formObj.addField({
                    id: "custpage_total_commission",
                    label: "Total Commission",
                    type: serverWidget.FieldType.TEXT,
                    container: "custpage_group_filter",

                });
                form.setformFieldProperty(form.bodyFields.custpage_total_commission, {
                    // updateLayoutType: serverWidget.FieldLayoutType.STARTROW,
                    setHelpText: "Total Commission",
                    isMandatory: false,
                    updateDisplayType: serverWidget.FieldDisplayType.DISABLED,
                });
               // form.bodyFields.custpage_total_commission.updateDisplayType=serverWidget.FieldDisplayType.DISABLED
            },
            /**
             * To set the sublist in the Suitelet form
             */
            
            setSublistFields() {
                form.subtab.custpage_sub_tab=form.formObj.addSubtab({id: 'custpage_tab',label: 'Commission Report'});
                form.subLists.custpage_subl_report = form.formObj.addSublist({
                    id: "custpage_subl_report",
                    type: serverWidget.SublistType.LIST,
                    label: "Commission Report",
                });
                // custpage_subl_report = form.subLists.custpage_subl_report;

                const columnMap = {
                    SalesPerson: {
                        id: "custpage_salesperson",
                        label: "Sales Person",
                        type: serverWidget.FieldType.TEXT,
                    },
                    TranDate: {
                        id: "custpage_tran_date",
                        label: "Transaction Date",
                        type: serverWidget.FieldType.DATE,
                    },
                    ScheduledDate: {
                        id: "custpage_sched_date",
                        label: "Delivery Date",
                        type: serverWidget.FieldType.DATE,
                    },
                    ProductNumber: {
                        id: "custpage_product_number",
                        label: "Product Number",
                        type: serverWidget.FieldType.TEXT,
                    },
                    Quantity:{
                        id: "custpage_quantity",
                        label: "Quantity",
                        type: serverWidget.FieldType.TEXT,
                    },
                    Brand: {
                        id: "custpage_brand",
                        label: "Brand",
                        type: serverWidget.FieldType.TEXT,
                    },
                    Parent:{
                        id: "custpage_parent_class",
                        label: "Parent Class",
                        type: serverWidget.FieldType.TEXT,
                    },
                    Class:{
                        id: "custpage_class",
                        label: "Class",
                        type: serverWidget.FieldType.TEXT,
                    },
                    Status:{
                        id: "custpage_status",
                        label: "Status",
                        type: serverWidget.FieldType.TEXT,
                    },
                    OpenBox:{
                        id: "custpage_open_box",
                        label: "Open Box/Display",
                        type: serverWidget.FieldType.TEXT,
                    },
                    InvoiceNumber: {
                        id: "custpage_total_invoice_number",
                        label: "Invoice Number",
                        type: serverWidget.FieldType.TEXT,
                    },
                    InvoiceType:{
                        id: "custpage_invoice_type",
                        label: "Invoice Type",
                        type: serverWidget.FieldType.TEXT,
                    },
                    ParentRecord: {
                        id: "custpage_parent_record",
                        label: "Parent Record",
                        type: serverWidget.FieldType.TEXT,
                    },
                    ParentDate:{
                        id: "custpage_parent_date",
                        label: "Parent Tran Date",
                        type: serverWidget.FieldType.DATE,
                    },
                    UnitPrice: {
                        id: "custpage_unit_price",
                        label: "Sales Amount",
                        type: serverWidget.FieldType.TEXT,
                    },
                    SalesInvoiceCost: {
                        id: "custpage_total_cost",
                        label: "SALES INVOICE COST",
                        type: serverWidget.FieldType.TEXT,
                    },
                    Rebate: {
                        id: "custpage_rebate",
                        label: "Rebate Amount",
                        type: serverWidget.FieldType.TEXT,
                    },
                    TotalMargin: {
                        id: "custpage_total_margin",
                        label: "GP AMT AFTER REBATES",
                        type: serverWidget.FieldType.TEXT,
                    },
                    MarginPercentage: {
                        id: "custpage_margin_percentage",
                        label: "GP % AFTER REBATES",
                        type: serverWidget.FieldType.TEXT,
                    },
                    // PreLocCalculation: {
                    //     id: "custpage_pre_loc_calculation",
                    //     label: "Pre-Loc Calculated Commission",
                    //     type: serverWidget.FieldType.TEXT,
                    // },

                    LocationCalculation: {
                        id: "custpage_location_calculation",
                        label: "Calculated Commission",
                        type: serverWidget.FieldType.TEXT,
                    },
                    Contribution: {
                        id: "custpage_contribution",
                        label: "Contribution %",
                        type: serverWidget.FieldType.TEXT,
                    },
                    SalesLocation: {
                        id: "custpage_sales_location",
                        label: "Sales Location",
                        type: serverWidget.FieldType.TEXT,
                    },
                    // GpAmountExpected:{
                    //     id: "custpage_gp_amnt_expect",
                    //     label: "GP Amount  Expected",
                    //     type: serverWidget.FieldType.TEXT,
                    // },
                    // GpPercentExpected:{
                    //     id: "custpage_gp_per_expect",
                    //     label: "GP % Expected",
                    //     type: serverWidget.FieldType.TEXT,
                    // },
                    //
                    // CommissionExpected:{
                    //     id: "custpage_commission_expect",
                    //     label: "Commission Expected",
                    //     type: serverWidget.FieldType.TEXT,
                    // },

                };
                let currentRole1=runtime.getCurrentUser().role
                for (let column in columnMap) {
                    if ((currentRole1 == 1045 || currentRole1==1057) && (column == 'SalesInvoiceCost' || column == 'Rebate' )) {
                    } else {
                        form.subLists.custpage_subl_report.addField({
                            id: columnMap[column].id,
                            label: columnMap[column].label,
                            type: columnMap[column].type,
                            align: serverWidget.LayoutJustification.LEFT,
                        });
                    }
                }



                const runSearchResult = fetchModel.models.runSearch({
                    filterConfig: {
                        salesPerson: exports.parameters?.custpage_filter_salesperson
                            ? exports.parameters?.custpage_filter_salesperson === "ALL"
                                ? false
                                : exports.parameters?.custpage_filter_salesperson
                            : false,
                        location: exports.parameters?.custpage_filter_location_formatted
                            ? exports.parameters?.custpage_filter_location_formatted === "ALL"
                                ? false
                                : exports.parameters?.custpage_filter_location_formatted
                            : false,
                        startDate: exports.parameters?.custpage_filter_start_date
                            ? exports.parameters?.custpage_filter_start_date === "ALL"
                                ? false
                                : exports.parameters?.custpage_filter_start_date
                            : false,
                        endDate: exports.parameters?.custpage_filter_end_date
                            ? exports.parameters?.custpage_filter_end_date === "ALL"
                                ? false
                                : exports.parameters?.custpage_filter_end_date
                            : false,
                    },
                    searchConfig: {},
                });
                log.debug("Run Search Result In Suitelet Page",runSearchResult)
                // const fetchTotalPayable = fetchModel.models.fetchTotalPayable({
                //     filterConfig: {},
                //     searchConfig: {},
                // });
                let total=0.00;
                if (runSearchResult?.length) {
                    for (
                        let index = 0, len = runSearchResult.length;
                        index < len;
                        index++
                    )
                        for (let key in columnMap)

                            if((key=='ScheduledDate'&&runSearchResult[index][key]=='' )||(key=='ParentDate'&&runSearchResult[index][key]=='')){

                            }else {
                                if(key=='LocationCalculation' && runSearchResult[index][key]<0) {
                                    form.subLists.custpage_subl_report.setSublistValue({
                                        id: columnMap[key].id,
                                        line: index,
                                        value:
                                            index == len
                                                ? `<p style="color: #ff0000;">${jjUtil.assignDefaultValue(
                                                runSearchResult[index][key],
                                                runSearchResult[index][key]
                                            )}</p>` || "---"
                                                :`<p style="color: #ff0000;">${ jjUtil.assignDefaultValue(
                                                runSearchResult[index][key],
                                                runSearchResult[index][key]
                                            ) }</p>`|| " ",
                                    });
                                }
                                else if((key=='UnitPrice'|| key=='SalesInvoiceCost'|| key=='TotalMargin'||key=='MarginPercentage') && runSearchResult[index]['InvoiceNumber'].includes('CM') ) {
                                    form.subLists.custpage_subl_report.setSublistValue({
                                        id: columnMap[key].id,
                                        line: index,
                                        value:
                                            index == len
                                                ? `<p style="color: #ff0000;">${jjUtil.assignDefaultValue(
                                                runSearchResult[index][key],
                                                runSearchResult[index][key]
                                            )}</p>` || "---"
                                                :`<p style="color: #ff0000;">${ jjUtil.assignDefaultValue(
                                                runSearchResult[index][key],
                                                runSearchResult[index][key]
                                            ) }</p>`|| " ",
                                    });
                                }
                                else {
                                    form.subLists.custpage_subl_report.setSublistValue({
                                        id: columnMap[key].id,
                                        line: index,
                                        value:
                                            index == len
                                                ? jjUtil.assignDefaultValue(
                                                runSearchResult[index][key],
                                                runSearchResult[index][key]
                                            ) || "---"
                                                : jjUtil.assignDefaultValue(
                                                runSearchResult[index][key],
                                                runSearchResult[index][key]
                                            ) || " ",
                                    });
                                }
                                if(key=='LocationCalculation'){
                                    total=total+parseFloat(runSearchResult[index][key])
                                }

                            }
                }
                log.debug("total",total)
                form.setformFieldProperty(form.bodyFields.custpage_total_commission, {
                    // updateLayoutType: serverWidget.FieldLayoutType.STARTROW,
                    defaultValue: parseFloat(total).toFixed(2)
                });

            },
            generateForm() {
                log.debug("generateForm", "generateForm");

                //Initialize Suitelet Form
                form.init(
                    serverWidget.createForm({
                        title: "Commission Report",
                    })
                );

                //Associate Client Script with Suitelet
                form.formObj.clientScriptModulePath =
                    "./JJ CS Commission Report AHAP-60.js";

                //Set Body Buttons
                form.setBodyButtons();

                //Set Body Fields
                form.setBodyFields();

                //Set Sublist Fields
                form.setSublistFields();

                return this.formObj;
            },
        };
        jjUtil.applyTryCatch(
            form,
            "JJ SL Commission  VCPRL-32.js, form"
        );

        const exports = {
            context: "",
            method: "",
            parameters: {
                custpage_filter_salesperson: "",
                custpage_filter_location: "",
                custpage_filter_start_date: "",
                custpage_filter_end_date: "",

                custpage_filter_start_date_formatted: "",
                custpage_filter_end_date_formatted: "",
                custpage_filter_location_formatted: "",
                custpage_filter_pageindex: "",
                custpage_filter_salesperson_formatted: "",
                toBeDownloaded: false,
                toBeScheduled: false,
            },
            body: "",
            /**
             * To initialise the
             * @param {Object} scriptContext
             * @param {ServerRequest} scriptContext.request - Incoming request
             * @param {ServerResponse} scriptContext.response - Suitelet response
             * @since 2015.2
             */
            init(scriptContext) {
                this.context = scriptContext;
                this.method = scriptContext.request.method;
                this.parameters = scriptContext.request.parameters;
                this.body = scriptContext.request.body;
            },
            /**
             * To initiate the direct report process export
             * @returns {Boolean}
             */
            toBeDownloaded() {
                 fetchModel = modelResolver.modelFetch("COMMISSION_REPORT");


                const runSearchResult = fetchModel.models.runSearch({
                    filterConfig: {
                        salesPerson: exports.parameters?.custpage_filter_salesperson
                            ? exports.parameters?.custpage_filter_salesperson === "ALL"
                                ? false
                                : exports.parameters?.custpage_filter_salesperson
                            : false,
                        location: exports.parameters?.custpage_filter_location_formatted
                            ? exports.parameters?.custpage_filter_location_formatted === "ALL"
                                ? false
                                : exports.parameters?.custpage_filter_location_formatted
                            : false,
                        startDate: exports.parameters?.custpage_filter_start_date
                            ? exports.parameters?.custpage_filter_start_date === "ALL"
                                ? false
                                : exports.parameters?.custpage_filter_start_date
                            : false,
                        endDate: exports.parameters?.custpage_filter_end_date
                            ? exports.parameters?.custpage_filter_end_date === "ALL"
                                ? false
                                : exports.parameters?.custpage_filter_end_date
                            : false,
                    },
                    searchConfig: {},
                });
                log.debug("Run Search Result In Download",runSearchResult)
                 /*const vendorsList = [];
                 const modelSearchResult = [];
                 if (
                     exports.parameters?.custpage_filter_vendor &&
                     exports.parameters?.custpage_filter_vendor !== "ALL"
                 ) {
                     vendorsList.push(exports.parameters?.custpage_filter_vendor);
                 } else {
                     const searchResult = fetchModel.models.fetchVendors({
                         filterConfig: {
                             subsidiary: exports.parameters?.custpage_filter_subsidiary
                                 ? exports.parameters?.custpage_filter_subsidiary === "ALL"
                                     ? false
                                     : exports.parameters?.custpage_filter_subsidiary
                                 : false,
                             market: exports.parameters?.custpage_filter_department
                                 ? exports.parameters?.custpage_filter_department === "ALL"
                                     ? false
                                     : exports.parameters?.custpage_filter_department
                                 : false,
                             quarter: exports.parameters?.custpage_filter_period_of_quarter
                                 ? exports.parameters?.custpage_filter_period_of_quarter === "ALL"
                                     ? false
                                     : exports.parameters?.custpage_filter_period_of_quarter
                                 : false,
                             year: exports.parameters?.custpage_filter_period_of_year
                                 ? exports.parameters?.custpage_filter_period_of_year === "ALL"
                                     ? false
                                     : exports.parameters?.custpage_filter_period_of_year
                                 : false,
                             isClosed: exports.parameters?.custpage_filter_isclosed
                                 ? exports.parameters?.custpage_filter_isclosed === "EITHER"
                                     ? false
                                     : exports.parameters?.custpage_filter_isclosed
                                 : false,
                         },
                         searchConfig: {
                             PAGE_INDEX:
                                 Number(exports.parameters?.custpage_filter_pageindex) || 1,
                             PAGE_SIZE: PAGE_SIZE,
                         },
                     });
                     searchResult?.lines?.forEach((el) => {
                         if (el.VendorID.value !== "- None -") {
                             vendorsList.push(el.VendorID.value);
                         }
                     });
                 }
                 const runSearchResult = fetchModel.models.runSearch({
                     filterConfig: {
                         subsidiary: exports.parameters?.custpage_filter_subsidiary
                             ? exports.parameters?.custpage_filter_subsidiary === "ALL"
                                 ? false
                                 : exports.parameters?.custpage_filter_subsidiary
                             : false,
                         market: exports.parameters?.custpage_filter_department
                             ? exports.parameters?.custpage_filter_department === "ALL"
                                 ? false
                                 : exports.parameters?.custpage_filter_department
                             : false,
                         quarter: exports.parameters?.custpage_filter_period_of_quarter
                             ? exports.parameters?.custpage_filter_period_of_quarter === "ALL"
                                 ? false
                                 : exports.parameters?.custpage_filter_period_of_quarter
                             : false,
                         year: exports.parameters?.custpage_filter_period_of_year
                             ? exports.parameters?.custpage_filter_period_of_year === "ALL"
                                 ? false
                                 : exports.parameters?.custpage_filter_period_of_year
                             : false,
                         buyer: exports.parameters?.custpage_filter_buyer
                             ? exports.parameters?.custpage_filter_buyer === "ALL"
                                 ? false
                                 : exports.parameters?.custpage_filter_buyer
                             : false,
                         isClosed: exports.parameters?.custpage_filter_isclosed
                             ? exports.parameters?.custpage_filter_isclosed === "EITHER"
                                 ? false
                                 : exports.parameters?.custpage_filter_isclosed
                             : false,
                         vendorsList: vendorsList,
                     },
                     searchConfig: {},
                 });
                 const fetchTotalPayable = fetchModel.models.fetchTotalPayable({
                     filterConfig: {},
                     searchConfig: {},
                 });


                 for (let key in runSearchResult) {
                     if (runSearchResult[key]) {
                         let tempArray = [...new Set(runSearchResult[key]["poId"])];
                         let total = "0.00";
                         tempArray.forEach((el) => {
                             if (fetchTotalPayable[el]) {
                                 total = parseFloat(total) + parseFloat(fetchTotalPayable[el]);
                             }
                         });
                         runSearchResult[key]["TotalPayable"] = total;
                         runSearchResult[key]["Difference"] =
                             parseFloat(runSearchResult[key]["TotalReceivable"]) -
                             parseFloat(runSearchResult[key]["TotalPayable"]);
                         delete runSearchResult[key]["poId"];
                         modelSearchResult.push(runSearchResult[key]);
                     }
                 }*/
                 templateFetch = templateResolver.templateFetch(
                     "ITEM PRICING REPORT"
                 );
                 log.debug("templateFetch",templateFetch)
                 let renderObj = templateFetch.templateRender.init();
                 log.debug("after")
                 templateFetch.templateRender.addCustomDataSource(renderObj, {
                     header: {
                         salesPerson: exports.parameters?.custpage_filetr_sale
                             ? exports.parameters?.custpage_filetr_sale
                             : "ALL",
                         location: exports.parameters?.custpage_filter_location_formatted
                             ? exports.parameters?.custpage_filter_location_formatted
                             : "ALL",
                         startDate: exports.parameters?.custpage_filter_start_date
                             ? exports.parameters?.custpage_filter_start_date
                             : "ALL",
                         endDate: exports.parameters?.custpage_filter_end_date
                             ? exports.parameters?.custpage_filter_end_date
                             : "ALL",
                         /*buyer: exports.parameters?.custpage_filter_buyer_formatted
                             ? exports.parameters?.custpage_filter_buyer_formatted
                             : "ALL",
                         vendor: exports.parameters?.custpage_filter_vendor_formatted
                             ? exports.parameters?.custpage_filter_vendor_formatted
                             : "ALL",
                         isClosed: exports.parameters?.custpage_filter_isclosed
                             ? exports.parameters?.custpage_filter_isclosed
                             : "Either",*/
                     },
                     lines: runSearchResult,
                     summary: {},
                 });
                 let objXlsFile = templateFetch.templateRender.renderAsExcel(renderObj, {
                     filename: "",
                 });
                 return {
                     status: "EXPORT_SUCCESS",
                     value: objXlsFile,
                 };
             },
            /**
             * To initiate the schedule process for report export
             * @returns {Boolean}
             */
            toBeScheduled() {
            },
            /**
             * Defines the Suitelet script trigger point.
             * @param {Object} scriptContext
             * @param {ServerRequest} scriptContext.request - Incoming request
             * @param {ServerResponse} scriptContext.response - Suitelet response
             * @returns {Boolean}
             * @since 2015.2
             */
            onRequest(scriptContext) {
                try {
                    //Initialize Suitelet
                    exports.init(scriptContext);
                     if (this.method == "POST") {
                         log.debug("In Post",exports.parameters.toBeDownloaded)
                         if (exports.parameters.toBeDownloaded == "true") {
                             log.debug("Inside Second IF")
                             let handleExportRequest = exports.toBeDownloaded();
                             log.debug("handleExportRequest",handleExportRequest)
                             if (
                                 handleExportRequest &&
                                 handleExportRequest.status == "EXPORT_SUCCESS"
                             ) {
                                 return (
                                     exports.context.response.writeFile({
                                         file: handleExportRequest.value,
                                     }),
                                         false
                                 );
                             } else if (
                                 handleExportRequest &&
                                 handleExportRequest.status == "CANNOT_EXPORT_CAN_SCHEDULE"
                             ) {
                                 return (
                                     exports.context.response.write("CANNOT_EXPORT_CAN_SCHEDULE"),
                                         false
                                 );
                             } else if (
                                 handleExportRequest &&
                                 handleExportRequest.status == "CANNOT_EXPORT_CANNOT_SCHEDULE"
                             ) {
                                 return (
                                     exports.context.response.write("CANNOT_EXPORT_CANNOT_SCHEDULE"),
                                         false
                                 );
                             } else {
                                 return (
                                     exports.context.response.write("SOMETHING_WENT_WRONG"), false
                                 );
                             }
                         } else if (exports.parameters.toBeScheduled == "true") {
                             let handleScheduleRequest = exports.toBeScheduled();
                             if (handleScheduleRequest) {
                                 return exports.context.response.write("REPORT_SCHEDULED"), true;
                             } else {
                                 return (
                                     exports.context.response.write("REPORT_CANNOT_BE_SCHEDULED"),
                                         true
                                 );
                             }
                         } else {
                             return (
                                 exports.context.response.write("ACTION_NOT_SPECIFIED"), false
                             );
                         }
                     } else
                    if (this.method == "GET") {
                        log.debug("exports.parameters", exports.parameters);
                        fetchModel = modelResolver.modelFetch("COMMISSION_REPORT");
                        const suiteletForm = form.generateForm();
                        if (suiteletForm)
                            return exports.context.response.writePage(suiteletForm), true;
                        return exports.context.response.write("SOMETHING_WENT_WRONG"), false;
                    }
                    return exports.context.response.write("SOMETHING_WENT_WRONG"), false;
                } catch (err) {
                    log.error("err@suiteletForm", err);
                    return exports.context.response.write("SOMETHING_WENT_WRONG"), false;
                }
            },
        };
        return exports;
    });

Client Script

/**
* @NApiVersion 2.x
* @NScriptType ClientScript
* @NModuleScope SameAccount
*/
/************************************************************************************************
* * ClientScript **
* * To view the Commission Report **
* * AHAP-60 : Commission Report **
*
* **********************************************************************************************
*
* Author: Jobin and Jismi
*
* Date Created : 26 September 2022
*
* Created By: Athul Krishna, Jobin and Jismi
*
* Description :
*
* REVISION HISTORY
*
*
*
*
***********************************************************************************************/
define(["N/currentRecord", "N/ui/message"]
/**
* @param{currentRecord} currentRecord
* @param{message} message
*/, function (currentRecord, message) {
var recordObj;

/**
* 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) {
recordObj = currentRecord.get();
console.log("recordObj",recordObj)
window.onbeforeunload = function () {
return "";
};
window.onbeforeunload = null;
window.addEventListener("beforeunload", function (event) {
// Cancel the event as stated by the standard.
event.preventDefault();
// Chrome requires returnValue to be set.
event.returnValue = "";
});
return true;

}

/**
* 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) {
if (
[
// "custpage_filter_subsidiary",
// "custpage_filter_period_of_year",
// "custpage_filter_period_of_quarter",
// "custpage_filter_vendor",
// "custpage_filter_buyer",
// "custpage_filter_department",
// "custpage_filter_isclosed"
"custpage_filter_pageindex"
].indexOf(scriptContext.fieldId) > -1
)
triggerSearch({});
// else triggerSearch({});
return true;
}

/**
* Validation 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
*
* @returns {boolean} Return true if field is valid
*
* @since 2015.2
*/
function validateField(scriptContext) {
return true;
}

/**
* 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) {
return true;
}

function dateGenerate(date){

console.debug("Before change",date)
var currentDate=new Date(date);
console.log("Before ",currentDate)
var day=currentDate.getDate()
if(day<10)
day="0"+day;
var month=(currentDate.getMonth())+1;
console.log("Month",month);
// var originalDate=currentDate.getFullYear()+"-"+month+"-"+currentDate.getDate();
var originalDate=month+"/"+day+"/"+currentDate.getFullYear()
console.debug("original Date",originalDate)
return originalDate;
}

/**
* To set URL Parameters for filtering and pagination
* @param{Object} defaultParam - To override values to parameter
* @param{Boolean} doNotNavigate - Do not navigate the page, instead send back the URL
* @returns {boolean}
*/
function triggerSearch(defaultParam, doNotNavigate) {
var salesperson= recordObj.getValue({
fieldId: " custpage_filter_salesperson",
})
var location=recordObj.getValue({
fieldId: " custpage_filter_location",
})


var paramObj = {
custpage_filter_salesperson: recordObj.getValue({
fieldId: "custpage_filter_salesperson",
}),
custpage_filetr_sale:recordObj.getText({
fieldId: "custpage_filter_salesperson",
}),
custpage_filter_loc: recordObj.getValue({
fieldId: "custpage_filter_location",
}),
// custpage_filter_period_of_quarter: recordObj.getValue({
// fieldId: "custpage_filter_period_of_quarter",
// }),
custpage_filter_location: recordObj.getValue({
fieldId: "custpage_filter_location",
}),
// custpage_filter_buyer: recordObj.getValue({
// fieldId: "custpage_filter_buyer",
// }),
custpage_filter_start_date: dateGenerate(recordObj.getValue({
fieldId: "custpage_filter_start_date",
})),
custpage_filter_end_date: dateGenerate(recordObj.getValue({
fieldId: "custpage_filter_end_date",
})),
// custpage_filter_period_of_year: recordObj.getValue({
// fieldId: "custpage_filter_period_of_year",
// }),
// custpage_filter_pageindex: recordObj.getValue({
// fieldId: "custpage_filter_pageindex",
// }),
// custpage_filter_isclosed: recordObj.getValue({
// fieldId: "custpage_filter_isclosed"
// })
};
for (var key in paramObj) {
if (!paramObj[key]) {
alert("Fill all the mandatory fields");
return false;
}
}
paramObj = Object.assign(paramObj, defaultParam);
console.log("paramObj", paramObj)
paramObj.custpage_filter_salesperson_formatted = recordObj.getValue({
fieldId: "custpage_filter_salesperson",
});
paramObj.custpage_filetr_sale=recordObj.getText({
fieldId: "custpage_filter_salesperson",
}),
paramObj.custpage_filter_loc=recordObj.getValue({
fieldId: "custpage_filter_location",
}),
// paramObj.custpage_filter_year_formatted = recordObj.getText({
// fieldId: "custpage_filter_period_of_year",
// });
// paramObj.custpage_filter_as_of_date = recordObj.getText({
// fieldId: "custpage_filter_period_of_quarter",
// });
// paramObj.custpage_filter_subsidiary_formatted = recordObj.getValue({
// fieldId: "custpage_filter_subsidiary",
// });
paramObj.custpage_filter_location = recordObj.getValue({
fieldId: "custpage_filter_location",
});
paramObj.custpage_filter_location_formatted = recordObj.getText({
fieldId: "custpage_filter_location",
});
paramObj.custpage_filter_start_date_formatted = dateGenerate(recordObj.getValue({
fieldId: "custpage_filter_start",
}));


// paramObj.custpage_filter_buyer_formatted = recordObj.getText({
// fieldId: "custpage_filter_buyer",
// });
paramObj.custpage_filter_end_date_formatted = recordObj.getValue({
fieldId: "custpage_filter_end_date",
});
var urlparam = "";
for (var key in paramObj) urlparam += "&" + key + "=" + paramObj[key];
var generatedURL =
window.location.origin +
window.ns_screenfields_suiteletform.suiteletFormUrl +
urlparam;
console.log("Generated URL",generatedURL)

if (doNotNavigate) return generatedURL;
else return (window.location.href = generatedURL), true;
}

/**
* To trigger Report Export or Report Schedule
* @returns {boolean}
*/
function triggerExport() {
var paramObj = {
custpage_filter_salesperson: recordObj.getValue({
fieldId: "custpage_filter_salesperson",
}),
// custpage_filter_period_of_quarter: recordObj.getValue({
// fieldId: "custpage_filter_period_of_quarter",
// }),
custpage_filter_location: recordObj.getValue({
fieldId: "custpage_filter_location",
}),
// custpage_filter_buyer: recordObj.getValue({
// fieldId: "custpage_filter_buyer",
// }),
custpage_filter_start_date: recordObj.getValue({
fieldId: "custpage_filter_start_date",
}),
// custpage_filter_period_of_year: recordObj.getValue({
// fieldId: "custpage_filter_period_of_year",
// }),
custpage_filter_end_date: recordObj.getValue({
fieldId: "custpage_filter_end_date",
}),
// custpage_filter_isclosed: recordObj.getValue({
// fieldId: "custpage_filter_isclosed"
// }),
};
for (var key in paramObj) {
if (!paramObj[key]) {
alert("Fill all the mandatory fields");
return false;
}
}

var pageLength = 1;
var subsidiary = recordObj.getValue({
fieldId: "custpage_filter_salesperson",
});
//if (pageLength == 0) return alert("There is no data to download");
message
.create({
title: "REPORT EXPORT",
message: "Please wait and do not navigate while we prepare the export",
type: message.Type.CONFIRMATION,
})
.show({
duration: 15000, // will disappear after 15s
});
for (var index = 1; index <= pageLength; index++) {
(function (iNum, uniqueUrl) {
fetch(uniqueUrl, {
method: "POST",
headers: {
// 'Content-Type': 'application/json',
},
body: JSON.stringify({}),
})
.then(function (response) {
return response.blob();
})
.then(function (blob) {
var url = window.URL.createObjectURL(blob);
var a = document.createElement("a");
a.href = url;
a.download =
subsidiary + "-" + iNum + "-" + Date.now() / 1000 + ".xls";
document.body.appendChild(a); // we need to append the element to the dom -> otherwise it will not work in firefox
a.click();
a.remove(); //afterwards we remove the element again
});
})(
index,
triggerSearch(
{
custpage_filter_pageindex: index,
toBeDownloaded: true,
toBeScheduled: false,
},
true
)
);
//break;
}
return true;
}

/**
* To generate Date String on the format YYYY-MM-DD
* @param {Date} dateObj - javascript Date Object
*/
function generateDateString(dateObj) {
return (
dateObj.getFullYear() +
"-" +
(dateObj.getMonth() + 1) +
"-" +
dateObj.getDate()
);
}

return {
pageInit: pageInit,
fieldChanged: fieldChanged,
validateField: validateField,
saveRecord: saveRecord,
generateDateString: generateDateString,
triggerSearch: triggerSearch,
triggerExport: triggerExport,
};
});

Custom Module

/**
 * @NApiVersion 2.1
 */
/************************************************************************************************
 * * Model for Payments Received/Paid Report**
 *
 *
 * **********************************************************************************************
 *
 * Author: Jobin and Jismi
 *
 * Date Created : 29-June-2022
 *
 * Created By: Athul Krishna, Jobin and Jismi
 *
 * Description : Model
 *
 * REVISION HISTORY
 *
 *
 *
 *
 ***********************************************************************************************/
define(["N/search", "N/util", "../../Library/JJ CM NS Utility.js","N/runtime"], /**
 * @param{search} search
 * @param{util} util
 * @param{jjUtil} jjUtil
 * @param{runtime} runtime
 */ (search, util, jjUtil,runtime) => {
    /**
     * To handle large results more than 4000
     * @param s
     * @returns {*[]}
     */
    const handleLargeResults = (s) => {
        try {
            let results = s.run();
            let searchResults = [];
            let searchId = 0;
            do {
                var resultSlice = results.getRange({
                    start: searchId,
                    end: searchId + 1000,
                });
                resultSlice.forEach(function (slice) {
                    searchResults.push(slice);
                    searchId++;
                });
            } while (resultSlice.length >= 1000);
            return searchResults;
        } catch (e) {
            log.error("Error @handleLargeResults", e);
            return [];
        }
    };
    const models = {
        /**
         * To run saved search to fetch the model
         * @param {Object} param
         * @param {Object} param.filterConfig
         * @param {Object} param.searchConfig
         * @returns {[]|Object[]}
         */
        runSearch({ filterConfig = {}, searchConfig = {} }) {
            try {
                log.debug("filterConfig",filterConfig)
                let filter=[]
                if(filterConfig?.salesPerson){
                    filter.push(["custrecord_jj_sales_person_ahap_39","anyof",filterConfig.salesPerson])
                }
                else{
                    let currentUser=runtime.getCurrentUser().id
                    log.debug("currentUser",currentUser)
                    filter.push(["custrecord_jj_sales_person_ahap_39","anyof",currentUser])
                }
                if(filterConfig?.location && filterConfig.location!=='- All -'){
                    if(filter.length>0){
                        filter.push("AND",["custrecord_jj_sales_location_ahap39","is",filterConfig.location])
                    }else{
                        filter.push(["custrecord_jj_sales_location_ahap39","is",filterConfig.location])
                    }

                }
                if(filterConfig?.startDate && filterConfig?.endDate){
                    if(filter.length>0){
                        filter.push("AND",["custrecord_jj_trandate_ahap39","within",filterConfig.startDate,filterConfig.endDate])
                    }else{
                        filter.push(["custrecord_jj_trandate_ahap39","within",filterConfig.startDate,filterConfig.endDate])
                    }
                }
                else{
                    let currentDate=new Date();
                    let date= (currentDate.getMonth()+1)+'/'+currentDate.getDate()+'/'+currentDate.getFullYear()
                    filter.push(["custrecord_jj_trandate_ahap39","within",date,date])
                }
                filter.push("AND",["custrecord_jj_parent_class_ahap60","isnot","Labor"])
                filter.push("AND",
                    ["custrecord_jj_transaction_number","noneof","@NONE@"])
                log.debug("Filter Array",filter)
                const searchResultArray = [];
                var customrecord_jj_trans_line_com_ahap_39SearchObj = search.create({
                    type: "customrecord_jj_trans_line_com_ahap_39",
                    filters: filter,
                    columns:
                        [
                            search.createColumn({
                                name: "name",
                                sort: search.Sort.ASC,
                                label: "Name"
                            }),
                            search.createColumn({name: "custrecord_jj_item_ahap_39", label: "Item "}),//1
                            search.createColumn({name: "custrecord_jj_item_class_ahap_39", label: "Item Class"}),//2
                            search.createColumn({name: "custrecord_jj_item_line_number_ahap_39", label: "Item Line Number"}),//3
                            search.createColumn({name: "custrecord_jj_transaction_number", label: "Invoice"}),//4
                            search.createColumn({name: "custrecord_jj_pre_cal_commission_ahap_39", label: "Pre-Loc Calculated Commission"}),//5
                            search.createColumn({name: "custrecord_jj_sales_person_ahap_39", label: "Sales Person"}),//6
                            search.createColumn({name: "custrecord_jj_sold_margin_amount_ahap_39", label: "Sold Margin Amount"}),//7
                            search.createColumn({name: "custrecord_jj_sold_margin_percent_ahap39", label: "Sold Margin Percentage"}),//8
                            search.createColumn({name: "custrecord_jj_total_margin_ahap39", label: "Total Margin "}),//9
                            search.createColumn({name: "custrecord_jj_margin_percentage_ahap39", label: "Margin Percentage"}),//10
                            search.createColumn({name: "custrecord_jj_trandate_ahap39", label: "Tran Date"}),//11
                            search.createColumn({name: "custrecord_jj_unit_price_ahap39", label: "Unit Price"}),//12
                            search.createColumn({name: "custrecord_jj_item_class_ahap_39", label: "Item Class"}),//13
                            search.createColumn({name: "custrecord_jj_item_brand_ahap39", label: "Item Brand"}),//14
                            search.createColumn({name: "custrecord_jj_sales_inv_cost_ahap60", label: "Sales Invoice Cost"}),//15
                            search.createColumn({name: "custrecord_jj_sales_location_ahap39", label: "Sales Location"}),//16
                            search.createColumn({name: "custrecord_jj_location_cal_ahap60", label: "Location Calculation"}),//17
                            search.createColumn({name: "custrecord_jj_parent_class_ahap60", label: "Parent Class"}),//18
                            search.createColumn({name: "custrecord_jj_item_status_ahap_60", label: "Item Status"}),//19
                            search.createColumn({name: "custrecord_jj_open_box_ahap60", label: "Open Box"}),//20
                            search.createColumn({name: "custrecord155", label: "Rebate Amount"}),//21
                            search.createColumn({name: "custrecord_jj_scheduled_date", label: "Scheduled Date"}),//22
                            search.createColumn({name: "custrecord_jj_contribution", label: "Contribution %"}),//23
                            search.createColumn({name: "custrecord_jj_created_from_ahap60", label: "Created From "}),//24
                            search.createColumn({name: "custrecord_jj_parent_tran_date_ahap60", label: "Parent Transaction Date"}),//25
                            search.createColumn({name: "custrecord_jj_commission_expect", label: "Commission Expected"}),//26
                            search.createColumn({name: "custrecord_jj_gp_amount_expect", label: "GP $ Expected"}),//27
                            search.createColumn({name: "custrecord_jj_gp_percen_expect", label: "GP% Expected"}),//28
                            search.createColumn({name: "custrecord_jj_invoice_type", label: "Invoice Type"}),
                            search.createColumn({name: "custrecord_jj_qunatity", label: "Quantity"})


                        ]
                });
                var searchResultCount = customrecord_jj_trans_line_com_ahap_39SearchObj.runPaged().count;
                log.debug("customrecord_jj_trans_line_com_ahap_39SearchObj result count",searchResultCount);
                const resultArray = handleLargeResults(customrecord_jj_trans_line_com_ahap_39SearchObj);
                resultArray.forEach((result) => {
                    let searchResult={}
                    let documentId=result.getValue(result.columns[4]);
                    let productId=result.getText(result.columns[1]);
                    let itemClass=result.getValue(result.columns[13]);
                    let itemLine=result.getValue(result.columns[3]);
                    let Invoice= result.getText(result.columns[4]);
                    let parent=result.getValue(result.columns[24]);
                    let parentName=result.getText(result.columns[24]);

                    let salesPerson= result.getText(result.columns[6]);

                    //let key=Invoice+productId+salesPerson+itemLine;
                    //searchResult[key]={}
                    let link=''
                    let parentLink=''
                    if(Invoice.includes("INV")) {
                        Invoice=Invoice.replace('Invoice #','')
                        parentName=parentName.replace('Sales Order #','')
                        link = `https://359045.app.netsuite.com/app/accounting/transactions/custinvc.nl?id=${documentId}`
                        parentLink=`https://359045.app.netsuite.com/app/accounting/transactions/salesord.nl?id=${parent}`
                        searchResult.UnitPrice=result.getValue({name: "custrecord_jj_unit_price_ahap39", label: "Unit Price"});
                        searchResult.SalesInvoiceCost=result.getValue({name: "custrecord_jj_sales_inv_cost_ahap60", label: "Sales Invoice Cost"});
                        searchResult.TotalMargin=result.getValue({name: "custrecord_jj_total_margin_ahap39", label: "Total Margin "});
                        searchResult.MarginPercentage=result.getValue({name: "custrecord_jj_margin_percentage_ahap39", label: "Margin Percentage "});
                    }else{
                        Invoice=Invoice.replace('Credit Memo #','')
                        parentName=parentName.replace('Return Authorization #','')
                       link=`https://359045.app.netsuite.com/app/accounting/transactions/custcred.nl?id=${documentId}`
                        let amnt=-Math.abs(result.getValue({name: "custrecord_jj_unit_price_ahap39", label: "Unit Price"}));
                       log.debug("amnt",amnt)
                        searchResult.UnitPrice=amnt
                        let salesCost=result.getValue({name: "custrecord_jj_sales_inv_cost_ahap60", label: "Sales Invoice Cost"});
                        searchResult.SalesInvoiceCost=-Math.abs(parseFloat(salesCost.replace(/\,/g,'')))
                        let totalMargin=-Math.abs(result.getValue({name: "custrecord_jj_total_margin_ahap39", label: "Total Margin "}));
                        searchResult.TotalMargin=totalMargin;
                        let marginPercentage=-Math.abs(searchResult.MarginPercentage=result.getValue({name: "custrecord_jj_margin_percentage_ahap39", label: "Margin Percentage "}));
                        searchResult.MarginPercentage=marginPercentage;
                    }
                    searchResult.ProductNumber=productId;
                    searchResult.Class=itemClass;
                    searchResult.itemLine=itemLine;
                    searchResult.InvoiceNumber=`<a href="${link}"  style="color: blue; text-decoration: none">${Invoice}</a>`;
                    searchResult.PreLocCalculation=result.getValue({name: "custrecord_jj_pre_cal_commission_ahap_39", label: "Pre-Loc Calculated Commission"});
                    searchResult.SalesPerson=salesPerson
                    searchResult.Brand=result.getValue({name: "custrecord_jj_item_brand_ahap39", label: "Item Brand"});
                   // searchResult.UnitPrice=result.getValue({name: "custrecord_jj_unit_price_ahap39", label: "Unit Price"});
                    searchResult.TotalCost=result.getValue({name: "custrecord_jj_sold_margin_amount_ahap_39", label: "Sold Margin Amount"});
                    searchResult.soldPercentage=result.getValue({name: "custrecord_jj_sold_margin_percent_ahap39", label: "Sold Margin Percentage"});
                    //searchResult.TotalMargin=result.getValue({name: "custrecord_jj_total_margin_ahap39", label: "Total Margin "});
                    //searchResult.MarginPercentage=result.getValue({name: "custrecord_jj_margin_percentage_ahap39", label: "Margin Percentage "});
                    searchResult.TranDate=result.getValue({name: "custrecord_jj_trandate_ahap39", label: "Tran Date"});
                    searchResult.SalesLocation=result.getValue({name: "custrecord_jj_sales_location_ahap39", label: "Sales Location"});
                    searchResult.LocationCalculation=result.getValue({name: "custrecord_jj_location_cal_ahap60", label: "Location Calculation"})||0.0;
                    if(searchResult.LocationCalculation=='NaN' || searchResult.LocationCalculation===' '){
                        searchResult.LocationCalculation=0.0
                    }

                    searchResult.Parent=result.getValue({name: "custrecord_jj_parent_class_ahap60", label: "Parent Class"});
                    searchResult.Status=result.getValue({name: "custrecord_jj_item_status_ahap_60", label: "Item Status"});
                    searchResult.OpenBox=result.getValue({name: "custrecord_jj_open_box_ahap60", label: "Open Box"});
                    searchResult.documnetId=documentId;
                    searchResult.documentNumber=Invoice;
                    searchResult.parentRec=parentName;
                    searchResult.ScheduledDate=result.getValue({name: "custrecord_jj_scheduled_date", label: "Scheduled Date"});
                    searchResult.Quantity=result.getValue({name: "custrecord_jj_qunatity", label: "Quantity"});
                    searchResult.InvoiceType=result.getValue({name: "custrecord_jj_invoice_type", label: "Invoice Type"})
                    // if(searchResult.ScheduledDate==''){
                    //     searchResult.ScheduledDate='--/--/----'
                    // }
                    searchResult.Rebate=result.getValue({name: "custrecord155", label: "Rebate Amount"});
                    searchResult.Contribution=result.getValue({name: "custrecord_jj_contribution", label: "Contribution %"})
                    searchResult.ParentRecord=`<a href="${parentLink}"  style="color: blue; text-decoration: none">${parentName}</a>`;
                    searchResult.ParentDate=result.getValue({name: "custrecord_jj_parent_tran_date_ahap60", label: "Parent Transaction Date"})
                    searchResult.GpPercentExpected=result.getValue({name: "custrecord_jj_gp_percen_expect", label: "GP% Expected"})
                    searchResult.GpAmountExpected=result.getValue({name: "custrecord_jj_gp_amount_expect", label: "GP $ Expected"})
                    searchResult.CommissionExpected=result.getValue({name: "custrecord_jj_commission_expect", label: "Commission Expected"})
                    searchResultArray.push(searchResult)

                });
                return searchResultArray;

            } catch (error) {
                log.error("Error @runSearch", error);
            }
        },

        fetchSalesPerson({ filterConfig = {}, searchConfig = {},role,user }) {
            let currentRole=role;
            let currentUser=user;
            log.debug("currentRole in search",currentRole)
            log.debug("Current User in Search",currentUser)
            let filterConf=[]
            if(currentRole==1088 || currentRole==1046 || currentRole==1055 || currentRole==1058){
                filterConf.push(["internalid","anyof",currentUser])
            }
            // if(currentRole!=='3' || currentRole!==3){
            //     log.debug("Inside if Condition")
            //
            // }
            var employeeSearchObj = search.create({
                type: "employee",
                filters: filterConf,
                columns:
                    [
                        search.createColumn({
                            name: "entityid",
                            sort: search.Sort.ASC,
                            label: "ID"
                        }),
                        search.createColumn({name: "altname", label: "Name"}),
                        search.createColumn({name: "internalid", label: "Internal ID"}),
                        search.createColumn({name: "location", label: "Location"})
                    ]
            });
            var searchResultCount = employeeSearchObj.runPaged().count;
            log.debug("employeeSearchObj result count",searchResultCount);
            return jjUtil.dataSets.iterateSavedSearch({
                searchObj: employeeSearchObj,
                columns: jjUtil.dataSets.fetchSavedSearchColumn(
                    employeeSearchObj,
                    "label"
                ),
                ...searchConfig,
            });
        },
        /**
         * List all period of years
         * @param filterConfig
         * @param searchConfig
         * @returns {[]|Object[]}
         */
        fetchLocation({ filterConfig = {}, searchConfig = {},role,user }) {
            let filterConf=[]
            if(!role=='3' || !role==3){

                log.debug("Inside if Condition",runtime.getCurrentUser().location)
                filterConf.push(["internalid","anyof",runtime.getCurrentUser().location])
            }
            var locationSearchObj = search.create({
                type: "location",
                filters: filterConf,
                columns:
                    [
                        search.createColumn({
                            name: "name",
                            label: "Name"
                        }),
                        search.createColumn({name: "phone", label: "Phone"}),
                        search.createColumn({name: "city", label: "City"}),
                        search.createColumn({name: "state", label: "State/Province"}),
                        search.createColumn({name: "country", label: "Country"}),
                        search.createColumn({name: "internalid", label: "Internal ID"})
                    ]
            });
            var searchResultCount = locationSearchObj.runPaged().count;
            log.debug("locationSearchObj result count",searchResultCount);
            return jjUtil.dataSets.iterateSavedSearch({
                searchObj: locationSearchObj,
                columns: jjUtil.dataSets.fetchSavedSearchColumn(
                    locationSearchObj,
                    "label"
                ),
                ...searchConfig,
            });
        },

    };
    return function () {
        this.models = models;
        return this;
    };
});

Leave a comment

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