TonyKang 6 lat temu
rodzic
commit
2cc641e201

+ 15 - 9
modules/reports/rpt_component/jpc_cross_tab.js

@@ -195,6 +195,7 @@ JpcCrossTabSrv.prototype.createNew = function(){
         me.dispSumValueLst_Col = [];
         me.page_seg_map = [];
         me.row_fields_idx = [];
+        me.row_fields_adhoc_idx = [];
         me.col_fields_idx = [];
         me.content_fields_idx = [];
         me.row_extension_fields_idx = [];
@@ -207,6 +208,7 @@ JpcCrossTabSrv.prototype.createNew = function(){
         let me = this;
         //IMPORTANT: the data should be sorted in SQL/NoSQL level!
         me.sortedRowSequence = private_SortAndOptimize(rptTpl, dataObj, dataSeq, JV.NODE_CROSS_ROW, me.row_fields_idx, $CURRENT_RPT);
+        private_SortAndOptimize(rptTpl, dataObj, dataSeq, JV.NODE_CROSS_ROW_AD_HOC, me.row_fields_adhoc_idx, $CURRENT_RPT);
         me.sortedColSequence = private_SortAndOptimize(rptTpl, dataObj, dataSeq, JV.NODE_CROSS_COL, me.col_fields_idx, $CURRENT_RPT);
         me.sortedContentSequence = private_SortForDisplayContent(rptTpl, me.sortedRowSequence, me.sortedColSequence, me.content_fields_idx);
         JpcFieldHelper.findAndPutDataFieldIdx(rptTpl, rptTpl[JV.NODE_CROSS_INFO][JV.NODE_CROSS_COL_SUM][JV.PROP_CROSS_FIELDS], null, me.col_sum_fields_idx);
@@ -363,7 +365,9 @@ JpcCrossTabSrv.prototype.createNew = function(){
         return rst;
     };
     JpcCrossTabResult.outputPreviewRowTab = function(rptTpl, bands, controls, $CURRENT_RPT, customizeCfg, maxRowRec, unitFactor) {
-        return this.private_OutputPreviewCommon(rptTpl, bands, controls, $CURRENT_RPT, customizeCfg, maxRowRec, 1, rptTpl[JV.NODE_CROSS_INFO][JV.NODE_CROSS_ROW], unitFactor);
+        let rst = this.private_OutputPreviewCommon(rptTpl, bands, controls, $CURRENT_RPT, customizeCfg, maxRowRec, 1, rptTpl[JV.NODE_CROSS_INFO][JV.NODE_CROSS_ROW], unitFactor);
+        rst = rst.concat(this.private_OutputPreviewCommon(rptTpl, bands, controls, $CURRENT_RPT, customizeCfg, maxRowRec, 1, rptTpl[JV.NODE_CROSS_INFO][JV.NODE_CROSS_ROW_AD_HOC], unitFactor));
+        return rst;
     };
     JpcCrossTabResult.outputPreviewColTab = function(rptTpl, bands, controls, $CURRENT_RPT, customizeCfg, maxColRec, unitFactor) {
         return this.private_OutputPreviewCommon(rptTpl, bands, controls, $CURRENT_RPT, customizeCfg, 1, maxColRec, rptTpl[JV.NODE_CROSS_INFO][JV.NODE_CROSS_COL], unitFactor);
@@ -384,7 +388,7 @@ JpcCrossTabSrv.prototype.createNew = function(){
     };
     JpcCrossTabResult.private_OutputPreviewCommon = function(rptTpl, bands, controls, $CURRENT_RPT, customizeCfg, maxRowRec, maxColRec, tab, unitFactor) {
         let me = this, rst = [];
-        let band = bands[tab[JV.PROP_BAND_NAME]];
+        let band = (tab)?bands[tab[JV.PROP_BAND_NAME]]:null;
         if (band) {
             let tab_fields = tab[JV.PROP_CROSS_FIELDS];
             for (let rowIdx = 0; rowIdx < maxRowRec; rowIdx++) {
@@ -449,7 +453,9 @@ JpcCrossTabSrv.prototype.createNew = function(){
             JpcBandHelper.setBandArea(bands, rptTpl, me.pageStatusLst[page - 1]);
             //2. start to output detail-part
             //2.1 Row-Tab
-            tabRstLst.push(me.outputRowTab(rptTpl, dataObj, page, bands, unitFactor, controls, $CURRENT_RPT, customizeCfg));
+            //tabRstLst.push(me.outputRowTab(rptTpl, dataObj, page, bands, unitFactor, controls, $CURRENT_RPT, customizeCfg));
+            tabRstLst.push(me.outputRowTabCommon(rptTpl, dataObj, page, bands, JV.NODE_CROSS_ROW, me.row_fields_idx, unitFactor, controls, $CURRENT_RPT, customizeCfg));
+            tabRstLst.push(me.outputRowTabCommon(rptTpl, dataObj, page, bands, JV.NODE_CROSS_ROW_AD_HOC, me.row_fields_adhoc_idx, unitFactor, controls, $CURRENT_RPT, customizeCfg));
             //2.2 Col-Tab
             tabRstLst.push(me.outputColTab(rptTpl, dataObj, page, bands, unitFactor, controls, $CURRENT_RPT, customizeCfg));
             //2.3 Content-Tab
@@ -469,10 +475,10 @@ JpcCrossTabSrv.prototype.createNew = function(){
         }
         return rst;
     };
-    JpcCrossTabResult.outputRowTab = function(rptTpl, dataObj, page, bands, unitFactor, controls, $CURRENT_RPT, customizeCfg) {
+    JpcCrossTabResult.outputRowTabCommon = function(rptTpl, dataObj, page, bands, tabStr, rowFieldsIdxArr, unitFactor, controls, $CURRENT_RPT, customizeCfg) {
         let me = this, rst = [];
-        let tab = rptTpl[JV.NODE_CROSS_INFO][JV.NODE_CROSS_ROW];
-        let band = bands[tab[JV.PROP_BAND_NAME]];
+        let tab = rptTpl[JV.NODE_CROSS_INFO][tabStr];
+        let band = (tab)?bands[tab[JV.PROP_BAND_NAME]]:null;
         if (band) {
             let pageStatus = me.pageStatusLst[page - 1];
             if (pageStatus[band[JV.BAND_PROP_DISPLAY_TYPE]] === true) {
@@ -481,13 +487,13 @@ JpcCrossTabSrv.prototype.createNew = function(){
                 let valuesIdx = me.dispValueIdxLst_Row[page - 1];
                 let serialsIdx = me.dispSerialIdxLst_Row[page - 1];
                 let flexiblePrecisionRefObj = null, flexibleRefField = null, precision_ref_data = null;
-                for (let i = 0; i < me.row_fields_idx.length; i++) {
+                for (let i = 0; i < rowFieldsIdxArr.length; i++) {
                     let tab_field = tab_fields[i];
                     if (!(tab_field[JV.PROP_HIDDEN])) {
                         let data_field = null;
                         let map_data_field = JE.F(tab_field[JV.PROP_FIELD_ID], $CURRENT_RPT);
-                        if (typeof me.row_fields_idx[i] !== 'object') {
-                            data_field = data_details[me.row_fields_idx[i]];
+                        if (typeof rowFieldsIdxArr[i] !== 'object') {
+                            data_field = data_details[rowFieldsIdxArr[i]];
                         } else {
                             if (map_data_field) {
                                 data_field = map_data_field[JV.PROP_AD_HOC_DATA];

+ 23 - 7
modules/reports/rpt_component/jpc_ex.js

@@ -249,6 +249,18 @@ JpcExSrv.prototype.createNew = function(){
         rst.items = [];
         let bands = JpcBand.createNew(rptTpl, defProperties);
         try {
+            function getPageMergeBorder() {
+                let mergeRst = null;
+                if (bands[JV.BAND_PROP_MERGE_BAND]) {
+                    let mergedBand = bands[JV.BAND_PROP_MERGE_BAND];
+                    mergeRst = {};
+                    mergeRst[JV.PROP_LEFT] = parseInt(mergedBand[JV.PROP_LEFT].toFixed(0));
+                    mergeRst[JV.PROP_RIGHT] = parseInt(mergedBand[JV.PROP_RIGHT].toFixed(0));
+                    mergeRst[JV.PROP_TOP] = parseInt(mergedBand[JV.PROP_TOP].toFixed(0));
+                    mergeRst[JV.PROP_BOTTOM] = parseInt(mergedBand[JV.PROP_BOTTOM].toFixed(0));
+                }
+                return mergeRst;
+            }
             //1.
             let rstPage = {};
             rstPage[JV.PROP_PAGE_SEQ] = 1;
@@ -259,6 +271,10 @@ JpcExSrv.prototype.createNew = function(){
             } else if (me.billTab) {
                 rstPage[JV.PROP_CELLS] = me.billTab.outputAsPreviewPage(rptTpl, bands, rst[JV.NODE_CONTROL_COLLECTION], me);
             }
+            let pageMergeBorder = getPageMergeBorder();
+            if (pageMergeBorder) {
+                rstPage[JV.PROP_PAGE_MERGE_BORDER] = pageMergeBorder;
+            }
             rst.items.push(rstPage);
             //2.
             if (bands[JV.BAND_PROP_MERGE_BAND]) {
@@ -315,16 +331,16 @@ JpcExSrv.prototype.createNew = function(){
     JpcResult.outputAsSimpleJSONPage = function(rptTpl, dataObj, bands, page, controls, customizeCfg) {
         let me = this, rst = null;
         function getPageMergeBorder() {
-            let rst = null;
+            let mergeRst = null;
             if (bands[JV.BAND_PROP_MERGE_BAND]) {
                 let mergedBand = bands[JV.BAND_PROP_MERGE_BAND];
-                rst = {};
-                rst[JV.PROP_LEFT] = parseInt(mergedBand[JV.PROP_LEFT].toFixed(0));
-                rst[JV.PROP_RIGHT] = parseInt(mergedBand[JV.PROP_RIGHT].toFixed(0));
-                rst[JV.PROP_TOP] = parseInt(mergedBand[JV.PROP_TOP].toFixed(0));
-                rst[JV.PROP_BOTTOM] = parseInt(mergedBand[JV.PROP_BOTTOM].toFixed(0));
+                mergeRst = {};
+                mergeRst[JV.PROP_LEFT] = parseInt(mergedBand[JV.PROP_LEFT].toFixed(0));
+                mergeRst[JV.PROP_RIGHT] = parseInt(mergedBand[JV.PROP_RIGHT].toFixed(0));
+                mergeRst[JV.PROP_TOP] = parseInt(mergedBand[JV.PROP_TOP].toFixed(0));
+                mergeRst[JV.PROP_BOTTOM] = parseInt(mergedBand[JV.PROP_BOTTOM].toFixed(0));
             }
-            return rst;
+            return mergeRst;
         }
         if (me.totalPages >= page) {
             rst = {};

+ 5 - 2
test/unit/reports/test_rpt_test_template.js

@@ -46,8 +46,11 @@ let demoPrjId = - 1;
 // let demoRptId = 2260; //测试基本信息
 // let demoRptId = 613; //09-4 2018
 // let demoRptId = 726; //定制:清单子目表
-let demoRptId = 756; //江西 封1
+// let demoRptId = 756; //江西 封1
+// let demoRptId = 475; //计日工
+let demoRptId = 551; //表05
 let pagesize = "A4";
+
 //288: 11-2表(新)
 //279: 04
 
@@ -59,7 +62,7 @@ let userId_me = "5b6a60b1c4ba33000dd417c0"; //我的
 //demoPrjId = 1626; //QA:
 // demoPrjId = 2260; //QA:
 // demoPrjId = 5029; //
-demoPrjId = 5113; //
+demoPrjId = 4552; //
 // demoPrjId = 4107; //UAT:
 //*/
 let userId_Dft = userId_me;

+ 3 - 2
test/unit/reports/test_summary.js

@@ -35,7 +35,8 @@ let demoPrjId = - 1;
 // let demoRptId = 279; //表04
 // let demoRptId = 261; //封3
 // let demoRptId = 232; //09
-let demoRptId = 280; //11-1 暂列金
+// let demoRptId = 280; //11-1 暂列金
+let demoRptId = 551; //表05
 // let demoRptId = 2260; //测试基本信息
 let pagesize = "A4";
 //288: 11-2表(新)
@@ -46,7 +47,7 @@ let userId_Leng = "5acac1e885bf55000bd055ba"; //小冷User Id2
 // demoPrjId = 720; //QA: DW3
 //demoPrjId = 1626; //QA:
 // demoPrjId = 2260; //QA:
-demoPrjId = 3417; //QA:
+demoPrjId = 4552; //QA:
 //*/
 let userId_Dft = userId_Leng;
 // let userId_Dft = "5a025c4c15074d134c2b9689";

+ 1 - 1
test/unit/reports/test_tpl_05.js

@@ -32,7 +32,7 @@ let pagesize = "A4";
 
 // demoPrjId = 720; //QA: DW3
 // demoPrjId = 4563; //QA:
-demoPrjId = 4529; //UAT:
+demoPrjId = 4552; //UAT:
 //*/
 // let userId_Leng = "59cdf14a0034a1000ba52b97"; //小冷User Id 换成_id了
 let userId_Leng = "5b5a66c4a3c23e000dccdd77"; //海珠的 _id