| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202 | var JV = require('./Jpc_ValueDefine');var JpcBand = require('./Jpc_Band');var JpcFlowTab = require('./Jpc_FlowTab');var JpcBillTab = require('./Jpc_BillTab');var JpcCrossTab = require('./Jpc_CrossTab');var JpcField = require('./Jpc_Field');var JpcParam = require('./Jpc_Param');var JpcFunc = require('./Jpc_Function');var JpcData = require('./Jpc_Data');var JpcCommonHelper = require('./helper/Jpc_Helper_Common');var JE = require('./Jpc_RTE'); //Important: for self-define function execution purposevar JpcExSrv = function(){};JpcExSrv.prototype.createNew = function(){    function private_buildDftItems(rptTpl, dftCollection, propArray, nodeName) {        var rst = {};        if (dftCollection) {            for (var i = 0; i < dftCollection.length; i++) {                var item = {};                for (var j = 0; j < propArray.length; j++) {                    item[propArray[j]] = dftCollection[i][propArray[j]];                }                rst[dftCollection[i][JV.PROP_ID]] = item;            }            if (rptTpl && rptTpl[nodeName] && rptTpl[nodeName].length > 0) {                for (var i = 0; i < rptTpl[nodeName].length; i++) {                    var rptDftItem = rptTpl[nodeName][i];                    if (rst[rptDftItem[JV.PROP_ID]] == undefined) {                        var item = {};                        for (var j = 0; j < propArray.length; j++) {                            item[propArray[j]] = rptDftItem[propArray[j]];                        }                        rst[rptDftItem[JV.PROP_ID]] = item;                    }                }            }        }        return rst;    }    function private_buildDftControls(rptTpl, dftControlCollection) {        var rst = private_buildDftItems(rptTpl,dftControlCollection, JV.CONTROL_PROPS, JV.NODE_CONTROL_COLLECTION);        return rst;    }    function private_buildDftFonts(rptTpl, dftFontCollection) {        var rst = private_buildDftItems(rptTpl,dftFontCollection, JV.FONT_PROPS, JV.NODE_FONT_COLLECTION);        return rst;    }    function private_buildDftStyles(rptTpl, dftStyleCollection) {        var rst = {};        if (dftStyleCollection) {            for (var i = 0; i < dftStyleCollection.length; i++) {                var item = {};                if (dftStyleCollection[i][JV.PROP_BORDER_STYLE] && dftStyleCollection[i][JV.PROP_BORDER_STYLE].length > 0) {                    for (var j = 0; j < dftStyleCollection[i][JV.PROP_BORDER_STYLE].length; j++) {                        var borderItem = {};                        for (var k = 0; k < JV.BORDER_STYLE_PROPS.length; k++) {                            borderItem[JV.BORDER_STYLE_PROPS[k]] = dftStyleCollection[i][JV.PROP_BORDER_STYLE][j][JV.BORDER_STYLE_PROPS[k]];                        }                        item[dftStyleCollection[i][JV.PROP_BORDER_STYLE][j][JV.PROP_POSITION]] = borderItem;                    }                }                rst[dftStyleCollection[i][JV.PROP_ID]] = item;            }            if (rptTpl && rptTpl[JV.NODE_STYLE_COLLECTION] && rptTpl[JV.NODE_STYLE_COLLECTION].length > 0) {                for (var i = 0; i < rptTpl[JV.NODE_STYLE_COLLECTION].length; i++) {                    var rptDftItem = rptTpl[JV.NODE_STYLE_COLLECTION][i];                    if (rst[rptDftItem[JV.PROP_ID]] == undefined) {                        var item = {};                        for (var j = 0; j < rptDftItem[JV.PROP_BORDER_STYLE].length; j++) {                            var borderItem = {};                            for (var k = 0; k < JV.BORDER_STYLE_PROPS.length; k++) {                                borderItem[JV.BORDER_STYLE_PROPS[k]] = rptDftItem[JV.PROP_BORDER_STYLE][j][JV.BORDER_STYLE_PROPS[k]];                            }                            item[rptDftItem[JV.PROP_BORDER_STYLE][j][JV.PROP_POSITION]] = borderItem;                        }                        rst[rptDftItem[JV.PROP_ID]] = item;                    }                }            }        }        return rst;    }    var JpcResult = {};    //JpcResult.report_title    JpcResult.initialize = function(rptTpl) {        var me = this;        if (rptTpl[JV.NODE_FLOW_INFO]) {            me.flowTab = JpcFlowTab.createNew();            me.flowTab.initialize();        }        if (rptTpl[JV.NODE_BILL_INFO]) {            me.billTab = JpcBillTab.createNew();            me.billTab.initialize();        }        //var dt1 = new Date();        if (rptTpl[JV.NODE_CROSS_INFO]) {            me.crossTab = JpcCrossTab.createNew();            me.crossTab.initialize();        }        me.totalPages = 0;        me.runTimePageData = {};        me.fields = JpcField.createNew(rptTpl);        me.params = JpcParam.createNew(rptTpl);        me.formulas = JpcFunc.createNew(rptTpl);    };    JpcResult.analyzeData = function(rptTpl, dataObj, defProperties) {        var me = this;        //1. data object        var dataHelper = JpcData.createNew();        dataHelper.analyzeData(rptTpl, dataObj);        //2. tab object        //pre-condition: the data should be sorted in SQL/NoSQL level!        //var dt1 = new Date();        if (me.flowTab) {            me.flowTab.sorting(rptTpl, dataObj, dataHelper.dataSeq.slice(0));        }        if (me.crossTab) {            me.crossTab.sorting(rptTpl, dataObj, dataHelper.dataSeq.slice(0));        }        //var dt2 = new Date();        //alert(dt2 - dt1);        //3. formulas        me.executeFormulas(JV.RUN_TYPE_BEFORE_PAGING, rptTpl, dataObj, me);        //4. paging        me.paging(rptTpl, dataObj, defProperties);        //alert('analyzeData was completed!');        //for garbage collection:        dataHelper = null;    };    JpcResult.paging = function(rptTpl, dataObj, defProperties) {        var me = this;        if (me.flowTab) {            me.totalPages = me.flowTab.preSetupPages(rptTpl, dataObj, defProperties);        } else if (me.crossTab) {            me.totalPages = me.crossTab.preSetupPages(rptTpl, defProperties);        } else if (me.billTab) {            //me.totalPages = billTab.paging();        }    };    JpcResult.executeFormulas = function(runType, $CURRENT_TEMPLATE, $CURRENT_DATA, $CURRENT_RPT) {        var me = this;        for (var i = 0; i < me.formulas.length; i++) {            if (me.formulas[i][JV.PROP_RUN_TYPE] === runType) {                var expression = me.formulas[i][JV.PROP_EXPRESSION];                if (expression) {                    eval(expression);                }            }        }    };    JpcResult.outputAsSimpleJSONPageArray = function(rptTpl, dataObj, startPage, endPage, defProperties) {        var me = this, rst = {};        if ((startPage > 0) && (startPage <= endPage) && (endPage <= me.totalPages)) {            rst[JV.NODE_CONTROL_COLLECTION] = private_buildDftControls(rptTpl, (defProperties == null)?null:defProperties.ctrls);            rst[JV.NODE_STYLE_COLLECTION] = private_buildDftStyles(rptTpl, (defProperties == null)?null:defProperties.styles);            rst[JV.NODE_FONT_COLLECTION] = private_buildDftFonts(rptTpl, (defProperties == null)?null:defProperties.fonts);            rst[JV.NODE_PAGE_INFO] = JpcCommonHelper.getPageSize(rptTpl);            rst.items = [];            var bands = JpcBand.createNew(rptTpl, defProperties);            try {                for (var page = startPage; page <= endPage; page++) {                    me.runTimePageData.currentPage = page;                    me.executeFormulas(JV.RUN_TYPE_BEFORE_OUTPUT, rptTpl, dataObj, me);                    rst.items.push(me.outputAsSimpleJSONPage(rptTpl, dataObj, bands, page, rst[JV.NODE_CONTROL_COLLECTION]));                }                if (bands[JV.BAND_PROP_MERGE_BAND]) {                    var mergedBand = {}, band = bands[JV.BAND_PROP_MERGE_BAND];                    mergedBand[JV.PROP_LEFT] = band[JV.PROP_LEFT].toFixed(0);                    mergedBand[JV.PROP_RIGHT] = band[JV.PROP_RIGHT].toFixed(0);                    mergedBand[JV.PROP_TOP] = band[JV.PROP_TOP].toFixed(0);                    mergedBand[JV.PROP_BOTTOM] = band[JV.PROP_BOTTOM].toFixed(0);                    mergedBand[JV.BAND_PROP_STYLE] = band[JV.BAND_PROP_STYLE];                    rst[JV.BAND_PROP_MERGE_BAND] = mergedBand;                }            } finally {                bands = null;            }        }        return rst;    };    JpcResult.outputAsSimpleJSONPage = function(rptTpl, dataObj, bands, page, controls) {        var me = this, rst = null;        if (me.totalPages >= page) {            rst = {};            rst[JV.PROP_PAGE_SEQ] = page;            //rst.cells = [];            if (me.flowTab) {                rst.cells = me.flowTab.outputAsSimpleJSONPage(rptTpl, dataObj, page, bands, controls, me);            } else if (me.crossTab) {                rst.cells = me.crossTab.outputAsSimpleJSONPage(rptTpl, dataObj, page, bands, controls, me);            } else if (me.billTab) {                //            }        }        return rst;    };    //JpcEx.rte.currentRptObj = JpcResult;    return JpcResult;}module.exports = new JpcExSrv();
 |