Report of Sales orders and Revenue Arrangements

OS RRPs Orders-Invoices recons Report

Jira code:  NMS-196

Created a report of Sales orders and its Revenue Arrangement in a suitelet. The report having various filters such as date from, date to, customer. The user can view the report by adding filters. The report contains the data from the Sales Orders, related invoice and the corresponding Revenue Arrangements. Its also allows the user to download the report as excel file.

Suitelet

/**
 * @NApiVersion 2.x
 * @NScriptType Suitelet
 * @NModuleScope SameAccount
 */
/**
 * Script Description
 *  This script will show a sublist with Sales orders and its Revenue Arrangement. 
 */
/*******************************************************************************
 * ESW
 * **************************************************************************
 * Date: 23/06/2018
 * 
 * Author: Jobin & Jismi IT Services LLP
 * 
 * 
 * REVISION HISTORY :
 * 
 * Amounts in Base currency 
 * Display the SO with several Items.
 * Download Limit - 24/08/2018
 * Pagination - 24/08/2018
 * 
 ******************************************************************************/
var CONTEXT;
define(['N/ui/serverWidget', 'N/record', 'N/search', 'N/file', 'N/encode', 'N/xml', 'N/render', 'N/format', 'N/runtime'],
    function(serverWidget, record, search, file, encode, xml, render, format, runtime) {
        //To check whether a value exists in parameter
        function checkForParameter(parameter, parameterName) {
            if (parameter != "" && parameter != null && parameter != undefined && parameter != "null" && parameter != "undefined" && parameter != " ") {
                return true;
            } else {
                if (parameterName)
                    log.debug('Empty Value found', 'Empty Value for parameter ' + parameterName);
                return false;
            }
        }

        //To assign a default value if the it is empty
        function assignDefaultValue(value, defaultValue) {
            if (checkForParameter(value))
                return value;
            else
                return defaultValue;
        }

        //main or root object for this entire suitelet scritpt
        var main = {
            getSalesOrderRows: function(subsidiary, datefrom, dateto, datefromInvc, datetoInvc, pageIndexField, pageIndex, MODE) {
                /***********************************************************
                 * Searching all the sales orders
                 **********************************************************/
                var searchFilter = [];
                searchFilter.push(["type", "anyof", "SalesOrd"]);
                searchFilter.push("AND");
                searchFilter.push(["generatedrevenueelement.internalid", "noneof", "@NONE@"]);
                /*searchFilter.push("AND");
                searchFilter.push(["generatedrevenueelement.internalidnumber", "isnotempty", ""]);*/
                if (checkForParameter(subsidiary)) {
                    searchFilter.push("AND");
                    searchFilter.push(["subsidiary.internalidnumber", "equalto", subsidiary]);
                }
                if (checkForParameter(datefrom)) {
                    searchFilter.push("AND");
                    searchFilter.push(["trandate", "onorafter", datefrom]);
                }
                if (checkForParameter(dateto)) {
                    searchFilter.push("AND");
                    searchFilter.push(["trandate", "onorbefore", dateto]);
                }
                if (checkForParameter(datefromInvc)) {
                    searchFilter.push("AND");
                    searchFilter.push(["fulfillingTransaction.trandate", "onorafter", datefromInvc]);
                }
                if (checkForParameter(datetoInvc)) {
                    searchFilter.push("AND");
                    searchFilter.push(["fulfillingTransaction.trandate", "onorbefore", datetoInvc]);
                }
                
                
                var salesorderSearchObj = search.create({
                    type: "salesorder",
                    filters: searchFilter,
                    columns: [
                        search.createColumn({
                            name: "subsidiarynohierarchy",
                            label: "Subsidiary (w/o hierarchy)"
                        }),
                        search.createColumn({
                        	name: "statusref", 
                        	label: "Status"
                        }),
                        search.createColumn({
                            name: "tranid",
                            label: "Order number"
                        }),
                        search.createColumn({
                            name: "trandate",
                            sort: search.Sort.ASC,
                            label: "Order date"
                        }),
                        search.createColumn({
                            name: "startdate",
                            label: "Order start date"
                        }),
                        search.createColumn({
                            name: "enddate",
                            label: "Order end date"
                        }),
                        search.createColumn({
                            name: "fxamount",
                            label: "Amount (Foreign Currency)"
                        }),
                        search.createColumn({
                            name: "amount",
                            label: "Amount"
                        }),
                        search.createColumn({
                            name: "fxamountunbilled",
                            label: "Amount Unbilled (Foreign Currency)"
                        }),
                        search.createColumn({
                            name: "amountunbilled",
                            label: "Amount Unbilled"
                        }),
                        search.createColumn({
                            name: "item",
                            label: "Item"
                        }),
                        search.createColumn({
                            name: "custcol_swe_contract_start_date",
                            label: "Contract Item Start Date"
                        }),
                        search.createColumn({
                            name: "custcol_swe_contract_end_date",
                            label: "Contract Item End Date"
                        }),
                        search.createColumn({
                            name: "rate",
                            label: "Item Rate"
                        }),
                        search.createColumn({name: "billingtransaction", label: "Billing Transaction"}),
                        
                        search.createColumn({
               	         name: "trandate",
               	         join: "billingTransaction",
               	         label: "Date"
                        }),
                        search.createColumn({
                        	name: "startdate",
                        	join: "billingTransaction",
                        	label: "Start Date"
                        }),
               	      	search.createColumn({
               	      		name: "enddate",
               	    	  	join: "billingTransaction",
               	    	  	label: "End Date"
               	      	}),
               	      	search.createColumn({
               	      		name: "fxamount",
               	      		join: "billingTransaction",
               	      		label: "Amount (Foreign Currency)"
               	      	}),
               	      	search.createColumn({
               	      		name: "amount",
               	      		join: "billingTransaction",
               	      		label: "Amount"
               	      	}),
               	      	search.createColumn({
               	      		name: "item",
               	      		join: "billingTransaction",
               	      		label: "Item"
               	      	}),
               	      	search.createColumn({
               	      		name: "custcol_swe_contract_start_date",
               	      		join: "billingTransaction",
               	      		label: "Contract Item Start Date"
               	      	}),
               	      	search.createColumn({
               	      		name: "custcol_swe_contract_end_date",
               	      		join: "billingTransaction",
               	      		label: "Contract Item End Date"
               	      	}),
               	      	search.createColumn({
                            name: "internalid",
                            join: "generatedRevenueElement",
                            label: "Revenue Arrangement"
                        }),
                        search.createColumn({
                            name: "recordnumber",
                            join: "generatedRevenueElement",
                            label: "Revenue Arrangement"
                        }),
                        search.createColumn({
                            name: "internalid",
                            label: "Internal ID"
                        }),
                        search.createColumn({
                            name: "itemid",
                            join: "item",
                            label: "Name"
                        })

                    ]
                });

                if (MODE != 'DOWNLOAD') {
                    var searchPageRanges;
                    try {
                        searchPageRanges = salesorderSearchObj.runPaged({
                            pageSize: 100
                        });
                    } catch (err) {
                        return {
                            orderArray: [],
                            revenueElementArray: []
                        };
                    }
                    log.debug(" searchPageRanges.pageRanges.length", searchPageRanges.pageRanges.length);
                    if (searchPageRanges.pageRanges.length < 1)
                        return {
                            orderArray: [],
                            revenueElementArray: []
                        };

                    for (var i = 0, j = searchPageRanges.pageRanges.length; i < j; i++) {
                        pageIndexField.addSelectOption({
                            value: i,
                            text: i + 1 + ' of ' + j
                        });
                    }
                    var responseArray = [],
                        revenueElementID = [];

                    searchPageRanges.fetch({
                        index: pageIndex
                    }).data.forEach(function(result) {
                        revenueElementID.push(result.getValue({
                            name: "internalid",
                            join: "generatedRevenueElement"
                        }));
                        responseArray.push(result);
                        return true;
                    });
                    return {
                        orderArray: responseArray,
                        revenueElementArray: revenueElementID
                    };
                } else {
                    var searchResultCount = salesorderSearchObj.runPaged().count;
                    log.debug("salesorderSearchObj result count", searchResultCount);
                    if (searchResultCount < 1)
                        return {
                            orderArray: [],
                            revenueElementArray: []
                        };

                    var start = 0;
                    var end = 1000;

                    /* var soresultarray1 = [];
                     var singleresult;*/

                    var result = [];

                    var responseArray = [],
                        revenueElementID = [];

                    for (var i = 0; i < Math.ceil(searchResultCount / 1000); i++) {
                        result = [];
                        result = salesorderSearchObj.run().getRange({
                            start: start,
                            end: end
                        });

                        for (var j = 0; j < result.length; j++) {
                            /* singleresult = result[j];
                             soresultarray1.push(singleresult);*/
                            revenueElementID.push(result[j].getValue({
                                name: "internalid",
                                join: "generatedRevenueElement"
                            }));
                            responseArray.push(result[j]);
                        }
                        start = end;
                        end = end + 1000;
                    }
                    return {
                        orderArray: responseArray,
                        revenueElementArray: revenueElementID
                    };
                }

            },
            getRevenueElementRows: function(revenueElementArray, MODE) {
                /***********************************************************
                 * Searching all the revenue element field values related 
                 * to the sales order found on the previous search
                 **********************************************************/
                var responseArray = [];
                //log.debug('revenueElementArray', revenueElementArray)
                
                
                var revenueElementSearchObj = search.create({
                    type: "revenueelement",
                    filters: [
                        ["internalid", "anyof", revenueElementArray],
                        "AND", 
                        ["sourcetransaction.type", "anyof", "SalesOrd"], 
              	      	"AND", 
              	      	["formulanumeric: CASE WHEN ({sourcetransaction.billingtransaction} != ' ' ) THEN (CASE WHEN {revenueplan.revenueplantype} = 'Actual' THEN 1 ELSE 0 END) ELSE 1END","equalto","1"]
                    ],
                    columns: [
                        search.createColumn({
                            name: "recordnumber",
                            summary: "GROUP",
                            sort: search.Sort.ASC,
                            label: "Number"
                        }),
                        search.createColumn({
                            name: "subsidiarynohierarchy",
                            join: "sourceTransaction",
                            summary: "MAX",
                            label: "Subsidiary (no hierarchy)"
                        }),
                        search.createColumn({
                            name: "internalid",
                            join: "sourceTransaction",
                            summary: "MAX",
                            label: "Internal ID"
                        }),
                        search.createColumn({
                            name: "item",
                            join: "sourceTransaction",
                            summary: "MAX",
                            label: "Item"
                        }),
                        search.createColumn({
                            name: "recordnumber",
                            join: "revenuePlan",
                            summary: "MAX",
                            label: "Number"
                        }),
                        search.createColumn({
                            name: "revrecstartdate",
                            join: "revenuePlan",
                            summary: "MAX",
                            label: "Rev Rec Start Date"
                        }),
                        search.createColumn({
                            name: "revrecenddate",
                            join: "revenuePlan",
                            summary: "MAX",
                            label: "Rev Rec End Date"
                        }),
                        search.createColumn({
                            name: "amount",
                            join: "revenuePlan",
                            summary: "MAX",
                            label: "Amount"
                        }),
                        search.createColumn({
                            name: "postingperiod",
                            join: "revenuePlan",
                            summary: "MAX",
                            label: "Posting Period"
                        }),
                        search.createColumn({
                            name: "catchupperiod",
                            join: "revenuePlan",
                            summary: "MAX",
                            label: "Catch Up Period"
                        }),
                        search.createColumn({
                            name: "forecaststartdate",
                            summary: "MAX",
                            label: "Forecast Start Date"
                        }),
                        search.createColumn({
                            name: "forecastenddate",
                            summary: "MAX",
                            label: "Forecast End Date"
                        }),
                        search.createColumn({
                            name: "revrecforecastrule",
                            summary: "MAX",
                            label: "Rev Rec Forecast Rule"
                        }),
                        search.createColumn({
                            name: "revenuerecognitionrule",
                            summary: "MAX",
                            label: "Revenue Recognition Rule"
                        })

                    ]
                });

                if (MODE != 'DOWNLOAD') {
                    revenueElementSearchObj.run().each(function(result) {
                        responseArray.push(result);
                        return true;
                    });
                    return responseArray;
                } else {
                    var REsearchResultCount = revenueElementSearchObj.runPaged().count;
                    log.debug("REsearchResultCount", REsearchResultCount);
                    if (REsearchResultCount < 1)
                        return responseArray;

                    var start = 0;
                    var end = 1000;

                    /*var raresultarray1 = [];
                    var singleresult;*/
                    var result = [];


                    for (var i = 0; i < Math.ceil(REsearchResultCount / 1000); i++) {
                        result = [];
                        result = revenueElementSearchObj.run().getRange({
                            start: start,
                            end: end
                        });

                        for (var j = 0; j < result.length; j++) {
                            /* singleresult = result[j];
                             raresultarray1.push(singleresult);*/
                            responseArray.push(result[j]);
                        }
                        start = end;
                        end = end + 1000;
                    }
                    return responseArray;
                }
            },
            getRows: function(subsidiary, datefrom, dateto, datefromInvc, datetoInvc, pageIndexField, pageIndex, MODE) {
                log.debug('getRows', 'getRows');
                var fetchOrderObj = main.getSalesOrderRows(subsidiary, datefrom, dateto, datefromInvc, datetoInvc, pageIndexField, pageIndex, MODE);
                if (!checkForParameter(fetchOrderObj.orderArray))
                    return null;
                var fetchRevenueElementObj = main.getRevenueElementRows(fetchOrderObj.revenueElementArray, MODE);
                return getReportContent(fetchOrderObj.orderArray, fetchRevenueElementObj);
            },
            concatObjects: function(obj1, obj2) {
                for (var key in obj2) {
                    obj1[key] = obj2[key];
                }
                return obj1;
            },
            removeDuplicatesOnArray: function(inputArray) {
                var unique = {},
                    outputArray = [];
                inputArray.forEach(function(i) {
                    if (!unique[i]) {
                        unique[i] = true;
                        outputArray.push(i);
                    }
                });
                //return Object.keys(unique);
                return outputArray;
            },
            generateForm: function(context) {
                log.debug('generateForm', 'generateForm');
                //Getting the filter values;
                var pageIndex = assignDefaultValue(context.request.parameters.pageindex, 0);
                var MODE = assignDefaultValue(context.request.parameters.MODE, 'TRUE');
                var subsidiary = assignDefaultValue(context.request.parameters.subsidiary, null);
                var datefrom = assignDefaultValue(context.request.parameters.datefrom, null);
                var dateto = assignDefaultValue(context.request.parameters.dateto, null);
                var datefromInvc = assignDefaultValue(context.request.parameters.datefromInvc, null);
                var datetoInvc = assignDefaultValue(context.request.parameters.datetoInvc, null);

                //initialize form
                var form = serverWidget.createForm({
                    title: 'OS RRPs Orders-Invoices recons'
                });
                form.clientScriptFileId = 30513;

                //Creating Form Sublist
                var subsidiaryfd = form.addField({
                    id: 'custpage_subsidiary',
                    type: serverWidget.FieldType.SELECT,
                    label: 'Subsidiary',
                    source: 'subsidiary'
                });
                // subsidiaryfd.isMandatory = true;
                if (checkForParameter(subsidiary))
                    subsidiaryfd.defaultValue = subsidiary;

                var datefromfd = form.addField({
                    id: 'custpage_datefrom',
                    type: serverWidget.FieldType.DATE,
                    label: 'Order Date From'
                    // source: 'department'
                });
                // datefromfd.isMandatory = true;
                if (checkForParameter(datefrom))
                    datefromfd.defaultValue = datefrom;

                var datetofd = form.addField({
                    id: 'custpage_dateto',
                    type: serverWidget.FieldType.DATE,
                    label: 'Order Date To'
                    // source: 'department'
                });
                // datetofd.isMandatory = true;
                if (checkForParameter(dateto))
                    datetofd.defaultValue = dateto;


                /***********************************************************
                 * To add Invoice DATE Fields
                 **********************************************************/
                var dateInvcfromfd = form.addField({
                    id: 'custpage_datefrom_invc',
                    type: serverWidget.FieldType.DATE,
                    label: 'Invoice Date From'

                });
                // datefromfd.isMandatory = true;
                if (checkForParameter(datefromInvc))
                    dateInvcfromfd.defaultValue = datefromInvc;

                var dateInvcTofd = form.addField({
                    id: 'custpage_dateto_invc',
                    type: serverWidget.FieldType.DATE,
                    label: 'Invoice Date To'

                });
                if (checkForParameter(datetoInvc))
                    dateInvcTofd.defaultValue = datetoInvc;


                /***********************************************************
                 * To add Pagination Fields
                 **********************************************************/
                var pageIndexField = form.addField({
                    id: 'pageindexfield',
                    type: serverWidget.FieldType.SELECT,
                    label: 'Page Index'
                });
                pageIndexField.defaultValue = pageIndex;


                /***********************************************************
                 * To add Invoice DATE Fields - Ends
                 **********************************************************/

                form.addButton({
                    id: 'display',
                    label: 'Display',
                    functionName: 'display'
                });
                form.addButton({
                    id: 'download',
                    label: 'Download',
                    functionName: 'download'
                });
                

                form.addButton({
                    id: 'download',
                    label: 'Back',
                    functionName: 'back'
                });

                var Sublist = form.addSublist({
                    id: 'sublist',
                    type: serverWidget.SublistType.LIST,
                    label: 'Search Result'
                });

                //Sales Order and Invoice Fields
                var orderFields = [{
                    id: 'custpage_subsidiary',
                    type: serverWidget.FieldType.TEXT,
                    label: 'Subsidiary'
                    // source: 'currency'
                }, {
                    id: 'custpage_internalid',
                    type: serverWidget.FieldType.TEXT,
                    label: 'internalid'
                    // source: 'currency'
                }, {
                    id: 'custpage_ordernumber',
                    type: serverWidget.FieldType.TEXT,
                    label: 'Order Number'
                }, {
                    id: 'custpage_orderstatus',
                    type: serverWidget.FieldType.TEXT,
                    label: 'Order Status'
                }, {
                    id: 'custpage_orderdate',
                    type: serverWidget.FieldType.TEXT,
                    label: 'Order Date'
                }, {
                    id: 'custpage_orderstartdate',
                    type: serverWidget.FieldType.TEXT,
                    label: 'Order Start Date'
                }, {
                    id: 'custpage_orderenddate',
                    type: serverWidget.FieldType.TEXT,
                    label: 'Order End Date'
                }, {
                    id: 'custpage_orderamount',
                    type: serverWidget.FieldType.TEXT,
                    label: 'Order Amount'
                }, {
                    id: 'custpage_unbilledamount',
                    type: serverWidget.FieldType.TEXT,
                    label: 'Unbilled Amount'
                }, {
                    id: 'custpage_itemname',
                    type: serverWidget.FieldType.TEXT,
                    label: 'Item Name'
                }, {
                    id: 'custpage_itemstartdate',
                    type: serverWidget.FieldType.TEXT,
                    label: 'Item Start Date'
                }, {
                    id: 'custpage_itemenddate',
                    type: serverWidget.FieldType.TEXT,
                    label: 'Item End Date'
                }, {
                    id: 'custpage_itemamount',
                    type: serverWidget.FieldType.TEXT,
                    label: 'Item Amount'
                }, {
                    id: 'custpage_invnumber',
                    type: serverWidget.FieldType.TEXT,
                    label: 'Invoice Number'
                }, {
                    id: 'custpage_invoicedate',
                    type: serverWidget.FieldType.TEXT,
                    label: 'Invoice Date'
                }, {
                    id: 'custpage_invstartdate',
                    type: serverWidget.FieldType.TEXT,
                    label: 'Invoice Start Date'
                }, {
                    id: 'custpage_invenddate',
                    type: serverWidget.FieldType.TEXT,
                    label: 'Invoice End Date'
                }, {
                    id: 'custpage_invendamount',
                    type: serverWidget.FieldType.TEXT,
                    label: 'Invoice Amount'
                }, {
                    id: 'custpage_invoiceitemname',
                    type: serverWidget.FieldType.TEXT,
                    label: 'Item Name(from invoice)'
                }, {
                    id: 'custpage_iteminvoicestartdate',
                    type: serverWidget.FieldType.TEXT,
                    label: 'Item Start Date(from invoice)'
                }, {
                    id: 'custpage_iteminvoiceenddate',
                    type: serverWidget.FieldType.TEXT,
                    label: 'Item End Date(from invoice)'
                }, {
                    id: 'custpage_iteminvoiceamount',
                    type: serverWidget.FieldType.TEXT,
                    label: 'Item Amount(from invoice)'
                }];

                for (var index = 0, len = orderFields.length; index < len; index++)
                    Sublist.addField(orderFields[index]);

                // Revenue Element Fields
                var revenueElementFields = [{
                    id: 'custpage_rrstartdate',
                    type: serverWidget.FieldType.TEXT,
                    label: 'Actual Rev Rec Start Date'
                }, {
                    id: 'custpage_rrenddate',
                    type: serverWidget.FieldType.TEXT,
                    label: 'Actual Rev Rec End Date'
                }, {
                    id: 'custpage_fcstartdate',
                    type: serverWidget.FieldType.TEXT,
                    label: 'Forecast Rev Rec Start Date'
                }, {
                    id: 'custpage_fcenddate',
                    type: serverWidget.FieldType.TEXT,
                    label: 'Forecast Rev Rec End Date'
                }, {
                    id: 'custpage_amtfromplan',
                    type: serverWidget.FieldType.TEXT,
                    label: 'Amount from the Rev Rec Plan'
                }, {
                    id: 'custpage_postperiod',
                    type: serverWidget.FieldType.TEXT,
                    label: 'Posting Period'
                }, {
                    id: 'custpage_catchupperiod',
                    type: serverWidget.FieldType.TEXT,
                    label: 'Catch Up Period'
                }, {
                    id: 'custpage_actualrule',
                    type: serverWidget.FieldType.TEXT,
                    label: 'Actual Rev Rec Rule'
                }, {
                    id: 'custpage_fcrule',
                    type: serverWidget.FieldType.TEXT,
                    label: 'Forecast Rev Rec Rule'
                }];
                for (var index = 0, len = revenueElementFields.length; index < len; index++)
                    Sublist.addField(revenueElementFields[index]);


                var sublistData = main.getRows(subsidiary, datefrom, dateto, datefromInvc, datetoInvc, pageIndexField, pageIndex, MODE);
                if (checkForParameter(sublistData))
                    if (checkForParameter(sublistData.mappedobj) && checkForParameter(sublistData.soarray))
                        setvalues(sublistData.mappedobj, Sublist, sublistData.soarray);
                return form;
            },
            onRequest: function(context) {
                /**
                 * 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.2
                 */
                log.debug('onRequest ', 'onRequest');
                CONTEXT = context;
                log.debug('context.request.method', context.request.method);
                var MODE = assignDefaultValue(context.request.parameters.MODE, 'TRUE');
                if (context.request.method == "GET" && MODE != "DOWNLOAD") {
                    var form = main.generateForm(context);
                    context.response.writePage(form);
                } else if (context.request.method == "GET" && MODE == "DOWNLOAD") {
                    var pdfFileResponse = main.initializeDowwnloadAction(context);
                    if (checkForParameter(pdfFileResponse)) {
                        if (checkForParameter(pdfFileResponse.status))
                            context.response.writeFile(pdfFileResponse.file, true);
                        else
                            context.response.write(pdfFileResponse.message);
                    } else
                        context.response.write("Something went wrong. Please try again later");
                }
            },
            initializeDowwnloadAction: function(context) {
                log.debug('initializeDowwnloadAction', 'initializeDowwnloadAction');
                var MODE = assignDefaultValue(context.request.parameters.MODE, 'DOWNLOAD');
                var subsidiary = assignDefaultValue(context.request.parameters.subsidiary, null);
                var datefrom = assignDefaultValue(context.request.parameters.datefrom, null);
                var dateto = assignDefaultValue(context.request.parameters.dateto, null);
                var datefromInvc = assignDefaultValue(context.request.parameters.datefromInvc, null);
                var datetoInvc = assignDefaultValue(context.request.parameters.datetoInvc, null);
                var XML_TO_PRINT = main.generateDownloadableFile(subsidiary, datefrom, dateto, datefromInvc, datetoInvc, null, null, MODE);
                var strXmlEncoded = encode.convert({
                    string: XML_TO_PRINT,
                    inputEncoding: encode.Encoding.UTF_8,
                    outputEncoding: encode.Encoding.BASE_64
                });
                if (checkForParameter(XML_TO_PRINT)) {
                    try {
                        var pdfFile = file.create({
                            name: 'report.xls',
                            fileType: file.Type.EXCEL,
                            contents: strXmlEncoded
                        });
                        return {
                            status: true,
                            file: pdfFile
                        };
                    } catch (err) {
                        return {
                            status: null,
                            message: "File Size Exceed 10MB. Please Filter down results"
                        };
                    }
                } else
                    return {
                        status: null,
                        message: "No Result Found. Please change the filters"
                    };
            },
            generateDownloadableFile: function(subsidiary, datefrom, dateto, datefromInvc, datetoInvc, pageIndexField, pageIndex, MODE) {
                log.debug('generateDownloadableFile', 'generateDownloadableFile');
                var sublistData = main.getRows(subsidiary, datefrom, dateto, datefromInvc, datetoInvc, pageIndexField, pageIndex, MODE);
                if (checkForParameter(sublistData))
                    if (checkForParameter(sublistData.mappedobj) && checkForParameter(sublistData.soarray))
                        return getXMLDataExcel(sublistData.mappedobj, file, sublistData.soarray);
            },
            remainingUsage: function() {
                var remainingTime = runtime.getCurrentScript().getRemainingUsage();
                return remainingTime;
            }
        };

        for (var key in main) {
            if (typeof main[key] === 'function') {
                main[key] = trycatch(main[key], key);
            }
        }

        function trycatch(myfunction, key) {
            function logDetails(error) {
                log.debug("Error in function " + key, JSON.stringify(error));
                log.debug('Error on function ' + key, JSON.stringify(getError(error)));
                // log.error("Error in function " + key, JSON.stringify(error));
                // log.error('Error on function ' + key, JSON.stringify(getError(error)));
                return false;
            }
            return function() {
                try {
                    return myfunction.apply(this, arguments);
                } catch (error) {
                    return logDetails(error);
                }
            };
        }

        return main;


    });

function getReportContent(soresultarray1, raresultarray1) {
    /****************************************************************************************
     * Function to getting the values from saved searches and creating it as a single object 
     * Return that Data object
     */

    var temparray = [];

    var temObject = {};

    var soLen = soresultarray1.length;
    //Getting data from Sales Order Search
    for (var i = 0; i < soLen; i++) {

        var SOsearchResult = soresultarray1[i];

        var subsidiary = SOsearchResult.getText({
            name: "subsidiarynohierarchy"
        });

        var Ordernumber = SOsearchResult.getValue({
            name: "tranid"
        });
        
        var Orderstatus = SOsearchResult.getValue({
            name: "statusref"
        });
       
        var Orderdate = SOsearchResult.getValue({
            name: "trandate"
        });

        var Orderstdate = SOsearchResult.getValue({
            name: "startdate"
        });

        var Orderenddate = SOsearchResult.getValue({
            name: "enddate"
        });

        var Orderamt = SOsearchResult.getValue({
            name: "fxamount"
        });

        var unbilledamt = SOsearchResult.getValue({
            name: "fxamountunbilled"
        });

        var itemnamefromorder = SOsearchResult.getText({
            name: "item"
        });

        var itemstdtfromorder = SOsearchResult.getValue({
            name: "custcol_swe_contract_start_date"
        });

        var itemenddtfromorder = SOsearchResult.getValue({
            name: "custcol_swe_contract_end_date"
        });

        var itemamountfromorder = SOsearchResult.getValue({
            name: "rate"
        });

        var invnumber = SOsearchResult.getText({
            name: "billingTransaction"
        });

        var invdate = SOsearchResult.getValue({
            name: "trandate",
            join: "billingTransaction"
        });

        var invstdate = SOsearchResult.getValue({
            name: "startdate",
            join: "billingTransaction"
        });

        var invenddate = SOsearchResult.getValue({
            name: "enddate",
            join: "billingTransaction"
        });

        var invamount = SOsearchResult.getValue({
            name: "fxamount",
            join: "billingTransaction"
        });

        var itemnamefrominv = SOsearchResult.getText({
            name: "item",
            join: "billingTransaction"
        });

        var itemstdtfrominv = SOsearchResult.getValue({
            name: "custcol_swe_contract_start_date",
            join: "billingTransaction"
        });

        var itemenddtfrominv = SOsearchResult.getValue({
            name: "custcol_swe_contract_end_date",
            join: "billingTransaction"
        });

        var itemmountfrominv = SOsearchResult.getValue({
            name: "fxamount",
            join: "billingTransaction"
        });
        var internalid = SOsearchResult.getValue({
            name: "internalid",
            label: "Internal ID"
        });
        var recEleinternalid = SOsearchResult.getValue({
            name: "recordnumber",
            join: "generatedRevenueElement",
        });

        // temparray[i]=internalid;
        //log.debug("recEleinternalid", recEleinternalid);
        var str = internalid + "_" + recEleinternalid + "_" + itemnamefromorder;
        //log.debug("temObject[str]", temObject[str]);


        //Push all the row details into a object
        try {
            temObject[str].push([subsidiary, internalid, Ordernumber, Orderstatus, Orderdate, Orderstdate, Orderenddate, Orderamt, unbilledamt, itemnamefromorder,
                itemstdtfromorder, itemenddtfromorder, itemamountfromorder, invnumber, invdate, invstdate, invenddate, invamount,
                itemnamefrominv, itemstdtfrominv, itemenddtfrominv, itemmountfrominv
            ]);
        } catch (e) {
            temObject[str] = [];
            temObject[str].push([subsidiary, internalid, Ordernumber, Orderstatus, Orderdate, Orderstdate, Orderenddate, Orderamt, unbilledamt, itemnamefromorder,
                itemstdtfromorder, itemenddtfromorder, itemamountfromorder, invnumber, invdate, invstdate, invenddate, invamount,
                itemnamefrominv, itemstdtfrominv, itemenddtfrominv, itemmountfrominv
            ]);
        }
        //log.debug("temObject[str]", temObject[str]);


    }
    //log.debug("temObject", temObject);
    //revenue element details

    //log.debug("temObject[str].Ordernumber", temObject[str][2]);
    //log.debug("raresultarray1.length", raresultarray1.length);

    //log.debug("raresultarray1", raresultarray1);


    //Getting data from Revenue Element Search
    var revEleLen = raresultarray1.length;
    for (var j = 0; j < revEleLen; j++) {

        var REsearchResult = raresultarray1[j];

        var rrstdt = REsearchResult.getValue({
            name: "revrecstartdate",
            join: "revenuePlan",
            summary: "MAX"
        });

        var rrenddt = REsearchResult.getValue({
            name: "revrecenddate",
            join: "revenuePlan",
            summary: "MAX"
        });

        var rramount = REsearchResult.getValue({
            name: "amount",
            join: "revenuePlan",
            summary: "MAX"
        });

        var fcstdt = REsearchResult.getValue({
            name: "forecaststartdate",
            summary: "MAX"
        });

        var fcenddt = REsearchResult.getValue({
            name: "forecastenddate",
            summary: "MAX"
        });

        var itemName = REsearchResult.getValue({
            name: "item",
            join: "sourceTransaction",
            summary: "MAX"
        });

        var postingperiod = REsearchResult.getValue({
            name: "postingperiod",
            join: "revenuePlan",
            summary: "MAX"
        });

        var catchupperiod = REsearchResult.getValue({
            name: "catchupperiod",
            join: "revenuePlan",
            summary: "MAX"
        });

        var actualrrrule = REsearchResult.getValue({
            name: "revenuerecognitionrule",
            summary: "MAX"
        });

        var forecastrrrule = REsearchResult.getValue({
            name: "revrecforecastrule",
            summary: "MAX"
        });

        var reveneueSOid = REsearchResult.getValue({
            name: "internalid",
            join: "sourceTransaction",
            summary: "MAX"
        });

        var revEleInternalID = REsearchResult.getValue({
            name: "recordnumber",
            summary: "GROUP"
        });


        // var arrayA=temObject[reveneueSOid];

        //Append related revenue element details into corresponding Sales order object
        var arrayB = [rrstdt, rrenddt, rramount, fcstdt, fcenddt, postingperiod, catchupperiod, actualrrrule, forecastrrrule];

        var str = reveneueSOid + "_" + revEleInternalID + "_" + itemName;
        //log.debug("str", str);
        var arrayA = temObject[str];
        //log.debug("arrayB", arrayB);
        var arrayLen = arrayA.length;

        for (var k = 0; k < arrayLen; k++) {
            var arrayIndex = temObject[str][k];
            temObject[str][k] = arrayIndex.concat(arrayB);
        }

        //log.debug("temObject[str]", temObject[str]);
        //temObject[str] = arrayA.concat(arrayB);
    }

    //log.debug("temObject", temObject);
    // return temObject;
    return {
        mappedobj: temObject,
        soarray: soresultarray1
    };
}

function setvalues(temObject, Sublist, soresultarray1) {
    /*******************************************************************************
     * Setting the details in a Sublist in the Suitelet form
     */

    var soArraylen = soresultarray1.length;

    // set values to sublist
    for (var i = 0; i < soArraylen; i++) {

        var SOsearchResult = soresultarray1[i];

        var internalid = SOsearchResult.getValue({
            name: "internalid",
            label: "Internal ID"
        });
        var itemnamefromorder = SOsearchResult.getText({
            name: "item"
        });
        var recEleinternalid = SOsearchResult.getValue({
            name: "recordnumber",
            join: "generatedRevenueElement",
        });

        var str = internalid + "_" + recEleinternalid + "_" + itemnamefromorder;

        var subsidiary = temObject[str][0][0];
        Sublist.setSublistValue({
            id: "custpage_subsidiary",
            line: i,
            value: checkif(subsidiary)
        });

        var internalid = temObject[str][0][1];
        Sublist.setSublistValue({
            id: "custpage_internalid",
            line: i,
            value: checkif(internalid)
        });

        var Ordernumber = temObject[str][0][2];
        Sublist.setSublistValue({
            id: "custpage_ordernumber",
            line: i,
            value: checkif(Ordernumber)
        });
        
        var Orderstatus = temObject[str][0][3];
        Sublist.setSublistValue({
            id: "custpage_orderstatus",
            line: i,
            value: checkif(Orderstatus)
        });

        var Orderdate = temObject[str][0][4];
        Sublist.setSublistValue({
            id: "custpage_orderdate",
            line: i,
            value: checkif(Orderdate)
        });

        var Orderstdate = temObject[str][0][5];
        Sublist.setSublistValue({
            id: "custpage_orderstartdate",
            line: i,
            value: checkif(Orderstdate)
        });

        var Orderenddate = temObject[str][0][6];
        Sublist.setSublistValue({
            id: "custpage_orderenddate",
            line: i,
            value: checkif(Orderenddate)
        });

        var Orderamt = temObject[str][0][7];
        Sublist.setSublistValue({
            id: "custpage_orderamount",
            line: i,
            value: checkif(Orderamt)
        });

        var unbilledamt = temObject[str][0][8];
        Sublist.setSublistValue({
            id: "custpage_unbilledamount",
            line: i,
            value: checkif(unbilledamt)
        });

        var itemnamefromorder = temObject[str][0][9];
        Sublist.setSublistValue({
            id: "custpage_itemname",
            line: i,
            value: checkif(itemnamefromorder)
        });

        var itemstdtfromorder = temObject[str][0][10];
        Sublist.setSublistValue({
            id: "custpage_itemstartdate",
            line: i,
            value: checkif(itemstdtfromorder)
        });

        var itemenddtfromorder = temObject[str][0][11];
        Sublist.setSublistValue({
            id: "custpage_itemenddate",
            line: i,
            value: checkif(itemenddtfromorder)
        });

        var itemamountfromorder = temObject[str][0][12];
        Sublist.setSublistValue({
            id: "custpage_itemamount",
            line: i,
            value: checkif(itemamountfromorder)
        });

        var invnumber = temObject[str][0][13];
        //log.debug("invnumber=",invnumber);
        //log.debug("TypeOf=",typeof(invnumber));
        /*try{
            var isInvoice = invnumber.indexOf("Invoice");
            log.debug("isInvoice=",isInvoice);

        }catch(e){
            log.debug("Err@ Startswith log",e.message);
        }*/

        //AJ 
        var isInvoice = invnumber.indexOf("Invoice");
        if ((invnumber != null || invnumber != undefined || invnumber != "" || invnumber != " ") && (isInvoice != -1)) {


            Sublist.setSublistValue({
                id: "custpage_invnumber",
                line: i,
                value: checkif(invnumber)
            });

            var invdate = temObject[str][0][14];
            Sublist.setSublistValue({
                id: "custpage_invoicedate",
                line: i,
                value: checkif(invdate)
            });

            var invstdate = temObject[str][0][15];
            Sublist.setSublistValue({
                id: "custpage_invstartdate",
                line: i,
                value: checkif(invstdate)
            });

            var invenddate = temObject[str][0][16];
            Sublist.setSublistValue({
                id: "custpage_invenddate",
                line: i,
                value: checkif(invenddate)
            });

            var invamount = temObject[str][0][17];
            Sublist.setSublistValue({
                id: "custpage_invendamount",
                line: i,
                value: checkif(invamount)
            });

            var itemnamefrominv = temObject[str][0][18];
            Sublist.setSublistValue({
                id: "custpage_invoiceitemname",
                line: i,
                value: checkif(itemnamefrominv)
            });

            var itemstdtfrominv = temObject[str][0][19];
            Sublist.setSublistValue({
                id: "custpage_iteminvoicestartdate",
                line: i,
                value: checkif(itemstdtfrominv)
            });

            var itemenddtfrominv = temObject[str][0][20];
            Sublist.setSublistValue({
                id: "custpage_iteminvoiceenddate",
                line: i,
                value: checkif(itemenddtfrominv)
            });

            var itemmountfrominv = temObject[str][0][21];
            Sublist.setSublistValue({
                id: "custpage_iteminvoiceamount",
                line: i,
                value: checkif(itemmountfrominv)
            });


            // revenue element details
            var rrstdt = temObject[str][0][22];
            Sublist.setSublistValue({
                id: "custpage_rrstartdate",
                line: i,
                value: checkif(rrstdt)
            });

            var rrenddt = temObject[str][0][23];
            Sublist.setSublistValue({
                id: "custpage_rrenddate",
                line: i,
                value: checkif(rrenddt)
            });

            var rramount = temObject[str][0][24];
            Sublist.setSublistValue({
                id: "custpage_amtfromplan",
                line: i,
                value: checkif(rramount)
            });

            var fcstdt = temObject[str][0][25];
            Sublist.setSublistValue({
                id: "custpage_fcstartdate",
                line: i,
                value: checkif(fcstdt)
            });

            var fcenddt = temObject[str][0][26];
            Sublist.setSublistValue({
                id: "custpage_fcenddate",
                line: i,
                value: checkif(fcenddt)
            });

            var postingperiod = temObject[str][0][27];
            Sublist.setSublistValue({
                id: "custpage_postperiod",
                line: i,
                value: checkif(postingperiod)
            });

            var catchupperiod = temObject[str][0][28];
            Sublist.setSublistValue({
                id: "custpage_catchupperiod",
                line: i,
                value: checkif(catchupperiod)
            });

            var actualrrrule = temObject[str][0][29];
            Sublist.setSublistValue({
                id: "custpage_actualrule",
                line: i,
                value: checkif(actualrrrule)
            });

            var forecastrrrule = temObject[str][0][30];
            Sublist.setSublistValue({
                id: "custpage_fcrule",
                line: i,
                value: checkif(forecastrrrule)
            });





        } else {
            Sublist.setSublistValue({
                id: "custpage_invnumber",
                line: i,
                value: "-"
            });

            //var invdate = temObject[str][0][14];
            Sublist.setSublistValue({
                id: "custpage_invoicedate",
                line: i,
                value: "-"
            });

            //var invstdate = temObject[str][0][15];
            Sublist.setSublistValue({
                id: "custpage_invstartdate",
                line: i,
                value: "-"
            });

            //var invenddate = temObject[str][0][16];
            Sublist.setSublistValue({
                id: "custpage_invenddate",
                line: i,
                value: "-"
            });

            //var invamount = temObject[str][0][17];
            Sublist.setSublistValue({
                id: "custpage_invendamount",
                line: i,
                value: "-"
            });

            //var itemnamefrominv = temObject[str][0][18];
            Sublist.setSublistValue({
                id: "custpage_invoiceitemname",
                line: i,
                value: "-"
            });

            //var itemstdtfrominv = temObject[str][0][19];
            Sublist.setSublistValue({
                id: "custpage_iteminvoicestartdate",
                line: i,
                value: "-"
            });

            //var itemenddtfrominv = temObject[str][0][20];
            Sublist.setSublistValue({
                id: "custpage_iteminvoiceenddate",
                line: i,
                value: "-"
            });

            //var itemmountfrominv = temObject[str][0][21];
            Sublist.setSublistValue({
                id: "custpage_iteminvoiceamount",
                line: i,
                value: "-"
            });


            // revenue element details
            //var rrstdt = temObject[str][0][22];
            Sublist.setSublistValue({
                id: "custpage_rrstartdate",
                line: i,
                value: "-"
            });

            //var rrenddt = temObject[str][0][23];
            Sublist.setSublistValue({
                id: "custpage_rrenddate",
                line: i,
                value: "-"
            });

            //var rramount = temObject[str][0][24];
            Sublist.setSublistValue({
                id: "custpage_amtfromplan",
                line: i,
                value: "-"
            });

            var fcstdt = temObject[str][0][25];
            Sublist.setSublistValue({
                id: "custpage_fcstartdate",
                line: i,
                value: checkif(fcstdt)
            });

            var fcenddt = temObject[str][0][26];
            Sublist.setSublistValue({
                id: "custpage_fcenddate",
                line: i,
                value: checkif(fcenddt)
            });

            //var postingperiod = temObject[str][0][27];
            Sublist.setSublistValue({
                id: "custpage_postperiod",
                line: i,
                value: "-"
            });

            //var catchupperiod = temObject[str][0][28];
            Sublist.setSublistValue({
                id: "custpage_catchupperiod",
                line: i,
                value: "-"
            });

            //var actualrrrule = temObject[str][0][29];
            Sublist.setSublistValue({
                id: "custpage_actualrule",
                line: i,
                value: "-"
            });

            var forecastrrrule = temObject[str][0][30];
            Sublist.setSublistValue({
                id: "custpage_fcrule",
                line: i,
                value: checkif(forecastrrrule)
            });
        }


        var arrayA = temObject[str];
        var arrayLen = arrayA.length;

        if (arrayLen != 1) {

            for (var j = 1; j < arrayLen; j++) {
                temObject[str][j - 1] = temObject[str][j];
            }

        }

    }
}


function getXMLDataExcel(temObject, file, soresultarray1) {
    /*******************************************************************************
     *  Function to create xml file with the details from the data object 
     *  Return that file
     */
    //var XML = "";
    try {


        var XML = "";
        var TABLE = "";

        //Loading common file contents from the file stored in the file cabinet
        var myXMLFile = file.load({
            id: '30514'
        });
        var myXMLFile_value = myXMLFile.getContents();

        var len = soresultarray1.length;

        //Creating the xml rows
        for (var i = 0; i < len; i++) {

            var strVar = "";
            strVar += "   <Row ss:AutoFitHeight=\"0\">";

            var SOsearchResult = soresultarray1[i];

            var internalid = SOsearchResult.getValue({
                name: "internalid",
                label: "Internal ID"
            });
            var itemnamefromorder = SOsearchResult.getText({
                name: "item",
            });
            var recEleinternalid = SOsearchResult.getValue({
                name: "recordnumber",
                join: "generatedRevenueElement",
            });

            var str = internalid + "_" + recEleinternalid + "_" + itemnamefromorder;
            // log.debug("str",str);


            var subsidiary = temObject[str][0][0];
            strVar += "<Cell><Data ss:Type=\"String\">" + checkif(subsidiary) + "<\/Data><\/Cell>";


            var internalid = temObject[str][0][1];
            strVar += "<Cell><Data ss:Type=\"Number\">" + internalid + "<\/Data><\/Cell>";

            var Ordernumber = temObject[str][0][2];
            strVar += "<Cell><Data ss:Type=\"Number\">" + Ordernumber + "<\/Data><\/Cell>";
            
            var Orderstatus = temObject[str][0][3];
            //log.debug("Orderstatus",Orderstatus);
            strVar += "<Cell><Data ss:Type=\"String\">" + Orderstatus + "<\/Data><\/Cell>";

            var Orderdate = temObject[str][0][4];
            if ((Orderdate != null) && (Orderdate != "") && (Orderdate != undefined)) {
                var Orderdate0 = new Date(Orderdate);
                var Orderdate1 = Orderdate0.toISOString();
                strVar += "<Cell ss:StyleID='s__DATE'><Data ss:Type=\"DateTime\">" + Orderdate1 + "<\/Data><\/Cell>";
            } else {
                strVar += "<Cell><Data ss:Type=\"String\">" + ' ' + "<\/Data><\/Cell>";
            }

            var Orderstdate = temObject[str][0][5];
            if ((Orderstdate != null) && (Orderstdate != "") && (Orderstdate != undefined)) {
                var Orderstdate0 = new Date(Orderstdate);
                var Orderstdate1 = Orderstdate0.toISOString();
                strVar += "<Cell ss:StyleID='s__DATE'><Data ss:Type=\"DateTime\">" + Orderstdate1 + "<\/Data><\/Cell>";
            } else {
                strVar += "<Cell><Data ss:Type=\"String\">" + ' ' + "<\/Data><\/Cell>";
            }

            var Orderenddate = temObject[str][0][6];
            if ((Orderenddate != null) && (Orderenddate != "") && (Orderenddate != undefined)) {
                var Orderenddate0 = new Date(Orderenddate);
                var Orderenddate1 = Orderenddate0.toISOString();
                strVar += "<Cell ss:StyleID='s__DATE'><Data ss:Type=\"DateTime\">" + Orderenddate1 + "<\/Data><\/Cell>";
            } else {
                strVar += "<Cell><Data ss:Type=\"String\">" + ' ' + "<\/Data><\/Cell>";
            }

            var Orderamt = temObject[str][0][7];
            strVar += "<Cell><Data ss:Type=\"Number\">" + Orderamt + "<\/Data><\/Cell>";

            var unbilledamt = temObject[str][0][8];
            strVar += "<Cell><Data ss:Type=\"Number\">" + unbilledamt + "<\/Data><\/Cell>";

            var itemnamefromorder = temObject[str][0][9];
            strVar += "<Cell><Data ss:Type=\"String\">" + checkif(itemnamefromorder) + "<\/Data><\/Cell>";

            var itemstdtfromorder = temObject[str][0][10];
            if ((itemstdtfromorder != null) && (itemstdtfromorder != "") && (itemstdtfromorder != undefined)) {
                var itemstdtfromorder0 = new Date(itemstdtfromorder);
                var itemstdtfromorder1 = itemstdtfromorder0.toISOString();
                strVar += "<Cell ss:StyleID='s__DATE'><Data ss:Type=\"DateTime\">" + itemstdtfromorder1 + "<\/Data><\/Cell>";
            } else {
                strVar += "<Cell><Data ss:Type=\"String\">" + ' ' + "<\/Data><\/Cell>";
            }

            var itemenddtfromorder = temObject[str][0][11];
            if ((itemenddtfromorder != null) && (itemenddtfromorder != "") && (itemenddtfromorder != undefined)) {
                var itemenddtfromorder0 = new Date(itemenddtfromorder);
                var itemenddtfromorder1 = itemenddtfromorder0.toISOString();
                strVar += "<Cell ss:StyleID='s__DATE'><Data ss:Type=\"DateTime\">" + itemenddtfromorder1 + "<\/Data><\/Cell>";
            } else {
                strVar += "<Cell><Data ss:Type=\"String\">" + ' ' + "<\/Data><\/Cell>";
            }

            var itemamountfromorder = temObject[str][0][12];
            strVar += "<Cell><Data ss:Type=\"Number\">" + itemamountfromorder + "<\/Data><\/Cell>";

            var invnumber = temObject[str][0][13];
            // AJ STARTS
            var isInvoice = invnumber.indexOf("Invoice");
            //log.debug("isInvoice in the xl file",isInvoice);
            if ((isInvoice != -1) && (invnumber != "" || invnumber != undefined || invnumber != null || invnumber != " ")) {



                strVar += "<Cell><Data ss:Type=\"String\">" + checkif(invnumber) + "<\/Data><\/Cell>";

                var invdate = temObject[str][0][14];
                if ((invdate != null) && (invdate != "") && (invdate != undefined)) {
                    var invdate0 = new Date(invdate);
                    var invdate1 = invdate0.toISOString();
                    strVar += "<Cell ss:StyleID='s__DATE'><Data ss:Type=\"DateTime\">" + invdate1 + "<\/Data><\/Cell>";
                } else {
                    strVar += "<Cell><Data ss:Type=\"String\">" + ' ' + "<\/Data><\/Cell>";
                }

                var invstdate = temObject[str][0][15];
                if ((invstdate != null) && (invstdate != "") && (invstdate != undefined)) {
                    var invstdate0 = new Date(invstdate);
                    var invstdate1 = invstdate0.toISOString();
                    strVar += "<Cell ss:StyleID='s__DATE'><Data ss:Type=\"DateTime\">" + invstdate1 + "<\/Data><\/Cell>";
                } else {
                    strVar += "<Cell><Data ss:Type=\"String\">" + ' ' + "<\/Data><\/Cell>";
                }

                var invenddate = temObject[str][0][16];

                if ((invenddate != null) && (invenddate != "") && (invenddate != undefined)) {
                    var invenddate0 = new Date(invenddate);
                    var invenddate1 = invenddate0.toISOString();
                    strVar += "<Cell ss:StyleID='s__DATE'><Data ss:Type=\"DateTime\">" + invenddate1 + "<\/Data><\/Cell>";
                } else {
                    strVar += "<Cell><Data ss:Type=\"String\">" + ' ' + "<\/Data><\/Cell>";
                }

                var invamount = temObject[str][0][17];
                strVar += "<Cell><Data ss:Type=\"Number\">" + invamount + "<\/Data><\/Cell>";

                var itemnamefrominv = temObject[str][0][18];
                strVar += "<Cell><Data ss:Type=\"String\">" + checkif(itemnamefrominv) + "<\/Data><\/Cell>";

                var itemstdtfrominv = temObject[str][0][19];
                if ((itemstdtfrominv != null) && (itemstdtfrominv != "") && (itemstdtfrominv != undefined)) {
                    var itemstdtfrominv0 = new Date(itemstdtfrominv);
                    var itemstdtfrominv1 = itemstdtfrominv0.toISOString();
                    strVar += "<Cell ss:StyleID='s__DATE'><Data ss:Type=\"DateTime\">" + itemstdtfrominv1 + "<\/Data><\/Cell>";
                } else {
                    strVar += "<Cell><Data ss:Type=\"String\">" + ' ' + "<\/Data><\/Cell>";
                }

                var itemenddtfrominv = temObject[str][0][20];
                if ((itemenddtfrominv != null) && (itemenddtfrominv != "") && (itemenddtfrominv != undefined)) {
                    var itemenddtfrominv0 = new Date(itemenddtfrominv);
                    var itemenddtfrominv1 = itemenddtfrominv0.toISOString();
                    strVar += "<Cell ss:StyleID='s__DATE'><Data ss:Type=\"DateTime\">" + itemenddtfrominv1 + "<\/Data><\/Cell>";
                } else {
                    strVar += "<Cell><Data ss:Type=\"String\">" + ' ' + "<\/Data><\/Cell>";
                }

                var itemmountfrominv = temObject[str][0][21];
                strVar += "<Cell><Data ss:Type=\"Number\">" + itemmountfrominv + "<\/Data><\/Cell>";


                var rrstdt = temObject[str][0][22];
                if ((rrstdt != null) && (rrstdt != "") && (rrstdt != undefined)) {
                    var rrstdt0 = new Date(rrstdt);
                    var rrstdt1 = rrstdt0.toISOString();
                    strVar += "<Cell ss:StyleID='s__DATE'><Data ss:Type=\"DateTime\">" + rrstdt1 + "<\/Data><\/Cell>";
                } else {
                    strVar += "<Cell><Data ss:Type=\"String\">" + ' ' + "<\/Data><\/Cell>";
                }

                var rrenddt = temObject[str][0][23];
                if ((rrenddt != null) && (rrenddt != "") && (rrenddt != undefined)) {
                    var rrenddt0 = new Date(rrenddt);
                    var rrenddt1 = rrenddt0.toISOString();
                    strVar += "<Cell ss:StyleID='s__DATE'><Data ss:Type=\"DateTime\">" + rrenddt1 + "<\/Data><\/Cell>";
                } else {
                    strVar += "<Cell><Data ss:Type=\"String\">" + ' ' + "<\/Data><\/Cell>";
                }

                var fcstdt = temObject[str][0][25];
                if ((fcstdt != null) && (fcstdt != "") && (fcstdt != undefined)) {
                    var fcstdt0 = new Date(fcstdt);
                    var fcstdt1 = fcstdt0.toISOString();
                    strVar += "<Cell ss:StyleID='s__DATE'><Data ss:Type=\"DateTime\">" + fcstdt1 + "<\/Data><\/Cell>";
                } else {
                    strVar += "<Cell><Data ss:Type=\"String\">" + ' ' + "<\/Data><\/Cell>";
                }

                var fcenddt = temObject[str][0][26];
                if ((fcenddt != null) && (fcenddt != "") && (fcenddt != undefined)) {
                    var fcenddt0 = new Date(fcenddt);
                    var fcenddt1 = fcenddt0.toISOString();
                    strVar += "<Cell ss:StyleID='s__DATE'><Data ss:Type=\"DateTime\">" + fcenddt1 + "<\/Data><\/Cell>";
                } else {
                    strVar += "<Cell><Data ss:Type=\"String\">" + ' ' + "<\/Data><\/Cell>";
                }

                var rramount = temObject[str][0][24];
                if ((rramount != null) && (rramount != "") && (rramount != undefined)) {
                    strVar += "<Cell><Data ss:Type=\"Number\">" + rramount + "<\/Data><\/Cell>";
                } else {
                    strVar += "<Cell><Data ss:Type=\"String\">" + ' ' + "<\/Data><\/Cell>";
                }

                var postingperiod = temObject[str][0][27];
                if ((rramount != null) && (rramount != "") && (rramount != undefined)) {
                    strVar += "<Cell><Data ss:Type=\"String\">" + postingperiod + "<\/Data><\/Cell>";
                } else {
                    strVar += "<Cell><Data ss:Type=\"String\">" + ' ' + "<\/Data><\/Cell>";
                }

                var catchupperiod = temObject[str][0][28];
                if ((rramount != null) && (rramount != "") && (rramount != undefined)) {
                    strVar += "<Cell><Data ss:Type=\"String\">" + catchupperiod + "<\/Data><\/Cell>";
                } else {
                    strVar += " <Cell><Data ss:Type=\"String\">" + ' ' + "<\/Data><\/Cell>";
                }

                var actualrrrule = temObject[str][0][29];
                strVar += "<Cell><Data ss:Type=\"String\">" + checkif(actualrrrule) + "<\/Data><\/Cell>";

                var forecastrrrule = temObject[str][0][30];
                strVar += "<Cell><Data ss:Type=\"String\">" + checkif(forecastrrrule) + "<\/Data><\/Cell>";




            } else {


                strVar += "<Cell><Data ss:Type=\"String\">" + '-' + "<\/Data><\/Cell>";

                strVar += "<Cell><Data ss:Type=\"String\">" + '-' + "<\/Data><\/Cell>";

                strVar += "<Cell><Data ss:Type=\"String\">" + ' ' + "<\/Data><\/Cell>";

                strVar += "<Cell><Data ss:Type=\"String\">" + ' ' + "<\/Data><\/Cell>";

                strVar += "<Cell><Data ss:Type=\"String\">" + '-' + "<\/Data><\/Cell>";

                strVar += "<Cell><Data ss:Type=\"String\">" + '-' + "<\/Data><\/Cell>";

                strVar += "<Cell><Data ss:Type=\"String\">" + ' ' + "<\/Data><\/Cell>";

                strVar += "<Cell><Data ss:Type=\"String\">" + ' ' + "<\/Data><\/Cell>";

                strVar += "<Cell><Data ss:Type=\"String\">" + ' ' + "<\/Data><\/Cell>";

                strVar += "<Cell><Data ss:Type=\"String\">" + ' ' + "<\/Data><\/Cell>";

                strVar += "<Cell><Data ss:Type=\"String\">" + ' ' + "<\/Data><\/Cell>";

                var fcstdt = temObject[str][0][25];
                if ((fcstdt != null) && (fcstdt != "") && (fcstdt != undefined)) {
                    var fcstdt0 = new Date(fcstdt);
                    var fcstdt1 = fcstdt0.toISOString();
                    strVar += "<Cell ss:StyleID='s__DATE'><Data ss:Type=\"DateTime\">" + fcstdt1 + "<\/Data><\/Cell>";
                } else {
                    strVar += "<Cell><Data ss:Type=\"String\">" + ' ' + "<\/Data><\/Cell>";
                }

                var fcenddt = temObject[str][0][26];
                if ((fcenddt != null) && (fcenddt != "") && (fcenddt != undefined)) {
                    var fcenddt0 = new Date(fcenddt);
                    var fcenddt1 = fcenddt0.toISOString();
                    strVar += "<Cell ss:StyleID='s__DATE'><Data ss:Type=\"DateTime\">" + fcenddt1 + "<\/Data><\/Cell>";
                } else {
                    strVar += "<Cell><Data ss:Type=\"String\">" + ' ' + "<\/Data><\/Cell>";
                }

                strVar += "<Cell><Data ss:Type=\"String\">" + ' ' + "<\/Data><\/Cell>";

                strVar += "<Cell><Data ss:Type=\"String\">" + ' ' + "<\/Data><\/Cell>";

                strVar += " <Cell><Data ss:Type=\"String\">" + ' ' + "<\/Data><\/Cell>";

                strVar += "<Cell><Data ss:Type=\"String\">" + '-' + "<\/Data><\/Cell>";

                var forecastrrrule = temObject[str][0][30];
                strVar += "<Cell><Data ss:Type=\"String\">" + checkif(forecastrrrule) + "<\/Data><\/Cell>";
            }




            strVar += "<\/Row>";

            if (i < (soresultarray1.length - 1)) {
                strVar = strVar + '\n';
            }
            TABLE = TABLE + strVar;



            var arrayA = temObject[str];
            var arrayLen = arrayA.length;

            if (arrayLen != 1) {

                for (var j = 1; j < arrayLen; j++) {
                    temObject[str][j - 1] = temObject[str][j];
                }

            }


        }
        XML = myXMLFile_value.replace('<!-- REPLACEWITHTABLEBODY -->', TABLE);

    } catch (e) {

        logme("TRY4", getError(e));
    }

    return XML;

}

/*******************************************************************************
 * to check null
 */
function checkif(singleitem) {

    if (singleitem == "" || singleitem == null || singleitem == undefined) {

        return "-";
    } else {

        return singleitem;
    }
}


/*******************************************************************************
 * return error
 * 
 * @param e
 * @returns {String}
 */
function getError(e) {
    var stErrMsg = '';
    if (e.getDetails != undefined) {
        stErrMsg = '_' + e.getCode() + '<br>' + e.getDetails() + '<br>' +
            e.getStackTrace();
    } else {
        stErrMsg = '_' + e.toString();
    }
    return stErrMsg;
}


/*******************************************************************************
 * Log these data
 */
function logme(title, details) {
    log.debug({
        title: title,
        details: details
    });
}

Client script

/**
 * @NApiVersion 2.x
 * @NScriptType ClientScript
 * @NModuleScope SameAccount
 */
/**
 * Script Description
 *  This script supports Display action
 */
/*******************************************************************************
 * NMS 196
 * **************************************************************************
 * Date: 27-06-2018
 * 
 * Author: Jobin & Jismi IT Services LLP
 * 
 * 
 * REVISION HISTORY :
 * 
 * Created : chinju
 * 
 ******************************************************************************/
define(['N/currentRecord', 'N/url'],

    function(currentRecord, url) {

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

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

        }

		//Actions on Display button click
        function display() {
            try {
                var get_url;
                if ((window.location.href).indexOf('forms') > -1)
                    get_url = url.resolveScript({
                        scriptId: "customscript_jj_nms196_sl_revenue_search",
                        deploymentId: "customdeploy_jj_nms196_sl_revenue_search",
                        returnExternalUrl: true
                    });
                else
                    get_url = url.resolveScript({
                        scriptId: "customscript_jj_nms196_sl_revenue_search",
                        deploymentId: "customdeploy_jj_nms196_sl_revenue_search",
                        returnExternalUrl: false
                    });
                var record = currentRecord.get();
                var subsidiary = record.getValue({
                    fieldId: 'custpage_subsidiary'
                });
                var datefrom = record.getText({
                    fieldId: 'custpage_datefrom'
                });

                var dateto = record.getText({
                    fieldId: 'custpage_dateto'
                });
                var datefromInvc = record.getText({
                    fieldId: 'custpage_datefrom_invc'
                });

                var datetoInvc = record.getText({
                    fieldId: 'custpage_dateto_invc'
                });

                get_url += '&MODE=TRUE' + '&subsidiary=' + subsidiary + '&datefrom=' + datefrom + '&dateto=' + dateto + '&datefromInvc=' + datefromInvc + '&datetoInvc=' + datetoInvc + '&pageindex=0';

                window.location.href = get_url;
            } catch (err) {
                console.log(err);
            }
        }

		//Actions on Download button click
        function download() {
            try {
                var get_url;
                if ((window.location.href).indexOf('forms') > -1)
                    get_url = url.resolveScript({
                        scriptId: "customscript_jj_nms196_sl_revenue_search",
                        deploymentId: "customdeploy_jj_nms196_sl_revenue_search",
                        returnExternalUrl: true
                    });
                else
                    get_url = url.resolveScript({
                        scriptId: "customscript_jj_nms196_sl_revenue_search",
                        deploymentId: "customdeploy_jj_nms196_sl_revenue_search",
                        returnExternalUrl: false
                    });
                var record = currentRecord.get();
                var subsidiary = record.getValue({
                    fieldId: 'custpage_subsidiary'
                });
                var datefrom = record.getText({
                    fieldId: 'custpage_datefrom'
                });

                var dateto = record.getText({
                    fieldId: 'custpage_dateto'
                });
                var datefromInvc = record.getText({
                    fieldId: 'custpage_datefrom_invc'
                });

                var datetoInvc = record.getText({
                    fieldId: 'custpage_dateto_invc'
                });
                get_url += '&MODE=DOWNLOAD' + '&subsidiary=' + subsidiary + '&datefrom=' + datefrom + '&dateto=' + dateto + '&datefromInvc=' + datefromInvc + '&datetoInvc=' + datetoInvc + '&pageindex=0';;
                window.open(get_url);

            } catch (err) {
                console.log(err)
            }
        }


        //Actions on Back button click
        function back() {
            window.history.back();
        }


        //Changing the Pge based on the Index
        function fieldChanged(scriptContext) {
            if (scriptContext.fieldId == 'pageindexfield') {
                try {
                    var get_url;
                    if ((window.location.href).indexOf('forms') > -1)
                        get_url = url.resolveScript({
                            scriptId: "customscript_jj_nms196_sl_revenue_search",
                            deploymentId: "customdeploy_jj_nms196_sl_revenue_search",
                            returnExternalUrl: true
                        });
                    else
                        get_url = url.resolveScript({
                            scriptId: "customscript_jj_nms196_sl_revenue_search",
                            deploymentId: "customdeploy_jj_nms196_sl_revenue_search",
                            returnExternalUrl: false
                        });
                    var record = currentRecord.get();
                    var subsidiary = record.getValue({
                        fieldId: 'custpage_subsidiary'
                    });
                    var datefrom = record.getText({
                        fieldId: 'custpage_datefrom'
                    });
                    var dateto = record.getText({
                        fieldId: 'custpage_dateto'
                    });
                    var datefromInvc = record.getText({
                        fieldId: 'custpage_datefrom_invc'
                    });
                    var datetoInvc = record.getText({
                        fieldId: 'custpage_dateto_invc'
                    });
                    var pageIndex = record.getValue({ fieldId: 'pageindexfield' });
                    get_url += '&MODE=TRUE' + '&subsidiary=' + subsidiary + '&datefrom=' + datefrom + '&dateto=' + dateto + '&datefromInvc=' + datefromInvc + '&datetoInvc=' + datetoInvc + '&pageindex=' + pageIndex;
                    window.location.href = get_url;
                } catch (err) {
                    console.log(err);
                }
            }
        }

        // for getting parameter by name .................
        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, " "));
        }



        return {
            pageInit: pageInit,
            display: display,
            download: download,
            back: back,
            fieldChanged: fieldChanged
        };

    });

Leave a comment

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