|
@@ -102,16 +102,16 @@ JpcCrossTabSrv.prototype.createNew = function(){
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
- function private_SortAndOptimize(rptTpl, dataObj, dataSeq, sortTab, rstFieldsIdx) {
|
|
|
+ function private_SortAndOptimize(rptTpl, dataObj, dataSeq, sortTab, rstFieldsIdx, $CURRENT_RPT) {
|
|
|
let result = [];
|
|
|
let tab = rptTpl[JV.NODE_CROSS_INFO][sortTab];
|
|
|
if (tab) {
|
|
|
let sIDX = 0;
|
|
|
//1. prepare and sort by tab-field
|
|
|
let fields = [];
|
|
|
- JpcFieldHelper.findAndPutDataFieldIdx(rptTpl, tab[JV.TAB_CROSS_FIELDS], fields, rstFieldsIdx);
|
|
|
+ JpcFieldHelper.findAndPutDataFieldIdx(rptTpl, tab[JV.PROP_CROSS_FIELDS], fields, rstFieldsIdx);
|
|
|
let data_details = dataObj[JV.DATA_DETAIL_DATA];
|
|
|
- JpcCrossTabHelper.sortTabFields(fields, rstFieldsIdx, data_details, dataSeq);
|
|
|
+ JpcCrossTabHelper.sortTabFields(fields, rstFieldsIdx, data_details, dataSeq, $CURRENT_RPT);
|
|
|
//2. distinguish sort tab fields value
|
|
|
let b1 = false;
|
|
|
for (let i = 0; i < dataSeq.length; i++) {
|
|
@@ -123,9 +123,17 @@ JpcCrossTabSrv.prototype.createNew = function(){
|
|
|
for (let j = 1; j < dataSeq[i].length; j++) {
|
|
|
b1 = false;
|
|
|
for (let k = 0; k < rstFieldsIdx.length; k++) {
|
|
|
- if (data_details[rstFieldsIdx[k]][dataSeq[i][j - 1]] !== data_details[rstFieldsIdx[k]][dataSeq[i][j]]) {
|
|
|
- b1 = true;
|
|
|
- break;
|
|
|
+ if (typeof(rstFieldsIdx[k]) === 'object') {
|
|
|
+ let map_data_field = JE.F(rstFieldsIdx[k][JV.PROP_ID], $CURRENT_RPT);
|
|
|
+ if (map_data_field[JV.PROP_AD_HOC_DATA][dataSeq[i][j - 1]] !== map_data_field[JV.PROP_AD_HOC_DATA][dataSeq[i][j]]) {
|
|
|
+ b1 = true;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ if (data_details[rstFieldsIdx[k]][dataSeq[i][j - 1]] !== data_details[rstFieldsIdx[k]][dataSeq[i][j]]) {
|
|
|
+ b1 = true;
|
|
|
+ break;
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
if (b1) {
|
|
@@ -148,7 +156,7 @@ JpcCrossTabSrv.prototype.createNew = function(){
|
|
|
let result = [];
|
|
|
let tab = rptTpl[JV.NODE_CROSS_INFO][JV.NODE_CROSS_CONTENT];
|
|
|
if (tab) {
|
|
|
- JpcFieldHelper.findAndPutDataFieldIdx(rptTpl, tab[JV.TAB_CROSS_FIELDS], null, rstFieldsIdx);
|
|
|
+ JpcFieldHelper.findAndPutDataFieldIdx(rptTpl, tab[JV.PROP_CROSS_FIELDS], null, rstFieldsIdx);
|
|
|
}
|
|
|
for (let i = 0; i < rowSeq.length; i++) {
|
|
|
let rl = rowSeq[i], cl = colSeq[i];
|
|
@@ -187,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 = [];
|
|
@@ -195,18 +204,27 @@ JpcCrossTabSrv.prototype.createNew = function(){
|
|
|
me.pageStatusLst = [];
|
|
|
me.paging_option = JV.PAGING_OPTION_NORMAL;
|
|
|
};
|
|
|
- JpcCrossTabResult.sorting = function(rptTpl, dataObj, dataSeq) {
|
|
|
+ JpcCrossTabResult.sorting = function(rptTpl, dataObj, dataSeq, $CURRENT_RPT) {
|
|
|
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);
|
|
|
- me.sortedColSequence = private_SortAndOptimize(rptTpl, dataObj, dataSeq, JV.NODE_CROSS_COL, me.col_fields_idx);
|
|
|
+ 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.TAB_CROSS_FIELDS], null, me.col_sum_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);
|
|
|
//pre-sum the data(for col sum display)
|
|
|
let data_details = dataObj[JV.DATA_DETAIL_DATA],
|
|
|
data_fields = [];
|
|
|
for (let i = 0; i < me.col_sum_fields_idx.length; i++) {
|
|
|
- let data_field = data_details[me.col_sum_fields_idx[i]];
|
|
|
+ let data_field = null;
|
|
|
+ if (typeof me.col_sum_fields_idx[i] === 'object') {
|
|
|
+ let exField = JE.F(me.col_sum_fields_idx[i][JV.PROP_ID], $CURRENT_RPT);
|
|
|
+ if (exField) {
|
|
|
+ data_field = exField[JV.PROP_AD_HOC_DATA];
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ data_field = data_details[me.col_sum_fields_idx[i]];
|
|
|
+ }
|
|
|
data_fields.push(data_field);
|
|
|
}
|
|
|
for (let i = 0; i < me.sortedRowSequence.length; i++) { //seg level
|
|
@@ -240,29 +258,29 @@ JpcCrossTabSrv.prototype.createNew = function(){
|
|
|
maxRowRec = JpcCrossTabHelper.getMaxRowsPerPage(bands, rptTpl);
|
|
|
maxColRec = JpcCrossTabHelper.getMaxColsPerPage(bands, rptTpl);
|
|
|
}
|
|
|
- JpcFieldHelper.findAndPutDataFieldIdx(rptTpl, rptTpl[JV.NODE_CROSS_INFO][JV.NODE_CROSS_ROW_EXT][JV.TAB_CROSS_FIELDS], null, me.row_extension_fields_idx);
|
|
|
- JpcFieldHelper.findAndPutDataFieldIdx(rptTpl, rptTpl[JV.NODE_CROSS_INFO][JV.NODE_CROSS_ROW_SUM_EXT][JV.TAB_CROSS_FIELDS], null, me.row_sum_extension_fields_idx);
|
|
|
+ JpcFieldHelper.findAndPutDataFieldIdx(rptTpl, rptTpl[JV.NODE_CROSS_INFO][JV.NODE_CROSS_ROW_EXT][JV.PROP_CROSS_FIELDS], null, me.row_extension_fields_idx);
|
|
|
+ JpcFieldHelper.findAndPutDataFieldIdx(rptTpl, rptTpl[JV.NODE_CROSS_INFO][JV.NODE_CROSS_ROW_SUM_EXT][JV.PROP_CROSS_FIELDS], null, me.row_sum_extension_fields_idx);
|
|
|
if (me.paging_option === JV.PAGING_OPTION_INFINITY) {
|
|
|
/*
|
|
|
- rst = segCnt;
|
|
|
- pageStatus[JV.STATUS_SEGMENT_START] = true;
|
|
|
- pageStatus[JV.STATUS_SEGMENT_END] = true;
|
|
|
- pageStatus[JV.STATUS_CROSS_ROW_END] = true;
|
|
|
- pageStatus[JV.STATUS_CROSS_COL_END] = true;
|
|
|
- for (let segIdx = 0; segIdx < segCnt; segIdx++) {
|
|
|
- if (segIdx === segCnt - 1) {
|
|
|
- pageStatus[JV.STATUS_REPORT_END] = true;
|
|
|
- }
|
|
|
- if (segIdx > 0) {
|
|
|
- pageStatus[JV.STATUS_REPORT_START] = false;
|
|
|
- }
|
|
|
- me.pageStatusLst.push(pageStatus.slice(0));
|
|
|
- pageIdx++;
|
|
|
- private_addTabValue(me.dispValueIdxLst_Row, me.sortedRowSequence, segIdx, 0, me.sortedRowSequence[segIdx].length, me.dispSerialIdxLst_Row, me.col_sum_fields_value_total, me.dispSumValueLst_Col);
|
|
|
- private_addTabValue(me.dispValueIdxLst_Col, me.sortedColSequence, segIdx, 0, me.sortedColSequence[segIdx].length, null, null, null);
|
|
|
- private_addContentValue(me.dispValueIdxLst_Content, me.sortedContentSequence, segIdx, 0, me.sortedRowSequence[segIdx].length, 0, me.sortedColSequence[segIdx].length, me.page_seg_map, pageIdx);
|
|
|
- }
|
|
|
- //*/
|
|
|
+ rst = segCnt;
|
|
|
+ pageStatus[JV.STATUS_SEGMENT_START] = true;
|
|
|
+ pageStatus[JV.STATUS_SEGMENT_END] = true;
|
|
|
+ pageStatus[JV.STATUS_CROSS_ROW_END] = true;
|
|
|
+ pageStatus[JV.STATUS_CROSS_COL_END] = true;
|
|
|
+ for (let segIdx = 0; segIdx < segCnt; segIdx++) {
|
|
|
+ if (segIdx === segCnt - 1) {
|
|
|
+ pageStatus[JV.STATUS_REPORT_END] = true;
|
|
|
+ }
|
|
|
+ if (segIdx > 0) {
|
|
|
+ pageStatus[JV.STATUS_REPORT_START] = false;
|
|
|
+ }
|
|
|
+ me.pageStatusLst.push(pageStatus.slice(0));
|
|
|
+ pageIdx++;
|
|
|
+ private_addTabValue(me.dispValueIdxLst_Row, me.sortedRowSequence, segIdx, 0, me.sortedRowSequence[segIdx].length, me.dispSerialIdxLst_Row, me.col_sum_fields_value_total, me.dispSumValueLst_Col);
|
|
|
+ private_addTabValue(me.dispValueIdxLst_Col, me.sortedColSequence, segIdx, 0, me.sortedColSequence[segIdx].length, null, null, null);
|
|
|
+ private_addContentValue(me.dispValueIdxLst_Content, me.sortedContentSequence, segIdx, 0, me.sortedRowSequence[segIdx].length, 0, me.sortedColSequence[segIdx].length, me.page_seg_map, pageIdx);
|
|
|
+ }
|
|
|
+ //*/
|
|
|
} else {
|
|
|
for (let segIdx = 0; segIdx < segCnt; segIdx++) {
|
|
|
//2.1. seg level initialize
|
|
@@ -321,9 +339,80 @@ JpcCrossTabSrv.prototype.createNew = function(){
|
|
|
bands = null;
|
|
|
return rst;
|
|
|
};
|
|
|
- JpcCrossTabResult.outputAsPreviewPage = function (rptTpl, bands, controls, $CURRENT_RPT) {
|
|
|
+ JpcCrossTabResult.outputAsPreviewPage = function (rptTpl, bands, controls, $CURRENT_RPT, customizeCfg) {
|
|
|
+ let me = this, rst = [];
|
|
|
+ let pageStatus = [true, true, true, true, true, true, true, true];
|
|
|
+ me.pageStatusLst.push(pageStatus);
|
|
|
+ // JpcFieldHelper.findAndPutDataFieldIdx(rptTpl, rptTpl[JV.NODE_FLOW_INFO][JV.NODE_FLOW_CONTENT][JV.PROP_FLOW_FIELDS], null, me.disp_fields_idx, false);
|
|
|
+ JpcBandHelper.setBandArea(bands, rptTpl, pageStatus, true, false);
|
|
|
+ let maxRowRec = JpcCrossTabHelper.getMaxRowsPerPage(bands, rptTpl);
|
|
|
+ let maxColRec = JpcCrossTabHelper.getMaxColsPerPage(bands, rptTpl);
|
|
|
+ let unitFactor = JpcCommonHelper.getUnitFactor(rptTpl);
|
|
|
+ //1. 交叉行
|
|
|
+ rst = rst.concat(me.outputPreviewRowTab(rptTpl, bands, controls, $CURRENT_RPT, customizeCfg, maxRowRec, unitFactor));
|
|
|
+ //2. 交叉列
|
|
|
+ rst = rst.concat(me.outputPreviewColTab(rptTpl, bands, controls, $CURRENT_RPT, customizeCfg, maxColRec, unitFactor));
|
|
|
+ //3. 交叉数据
|
|
|
+ rst = rst.concat(me.outputPreviewContent(rptTpl, bands, controls, $CURRENT_RPT, customizeCfg, maxRowRec, maxColRec, unitFactor));
|
|
|
+ //4. 交叉行拓展
|
|
|
+ rst = rst.concat(me.outputPreviewTabExt(rptTpl, bands, controls, $CURRENT_RPT, customizeCfg, maxColRec, unitFactor));
|
|
|
+ //5. 交叉行拓展合计
|
|
|
+ rst = rst.concat(me.outputPreviewSumTabExt(rptTpl, bands, controls, $CURRENT_RPT, customizeCfg, unitFactor));
|
|
|
+ //6. 交叉列合计
|
|
|
+ rst = rst.concat(me.outputPreviewTabSum(rptTpl, bands, controls, $CURRENT_RPT, customizeCfg, maxRowRec, JV.NODE_CROSS_COL_SUM, unitFactor));
|
|
|
+ //7. 离散
|
|
|
+ rst = rst.concat(JpcDiscreteHelper.outputPreviewDiscreteInfo(rptTpl[JV.NODE_CROSS_INFO][JV.NODE_DISCRETE_INFO], bands, unitFactor, pageStatus));
|
|
|
+ return rst;
|
|
|
+ };
|
|
|
+ JpcCrossTabResult.outputPreviewRowTab = function(rptTpl, bands, controls, $CURRENT_RPT, customizeCfg, maxRowRec, 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);
|
|
|
+ };
|
|
|
+ JpcCrossTabResult.outputPreviewContent = function(rptTpl, bands, controls, $CURRENT_RPT, customizeCfg, maxRowRec, maxColRec, unitFactor) {
|
|
|
+ return this.private_OutputPreviewCommon(rptTpl, bands, controls, $CURRENT_RPT, customizeCfg, maxRowRec, maxColRec, rptTpl[JV.NODE_CROSS_INFO][JV.NODE_CROSS_CONTENT], unitFactor);
|
|
|
+ };
|
|
|
+ JpcCrossTabResult.outputPreviewTabSum = function(rptTpl, bands, controls, $CURRENT_RPT, customizeCfg, maxRowRec, tabNodeName, unitFactor) {
|
|
|
+ return this.private_OutputPreviewCommon(rptTpl, bands, controls, $CURRENT_RPT, customizeCfg, maxRowRec, 1, rptTpl[JV.NODE_CROSS_INFO][tabNodeName], unitFactor);
|
|
|
+ };
|
|
|
+ JpcCrossTabResult.outputPreviewTabExt = 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_ROW_EXT], unitFactor);
|
|
|
+ };
|
|
|
+ JpcCrossTabResult.outputPreviewSumTabExt = function(rptTpl, bands, controls, $CURRENT_RPT, customizeCfg, unitFactor) {
|
|
|
+ //交叉行拓展合计
|
|
|
+ return this.private_OutputPreviewCommon(rptTpl, bands, controls, $CURRENT_RPT, customizeCfg, 1, 1, rptTpl[JV.NODE_CROSS_INFO][JV.NODE_CROSS_ROW_SUM_EXT], unitFactor);
|
|
|
+ };
|
|
|
+ JpcCrossTabResult.private_OutputPreviewCommon = function(rptTpl, bands, controls, $CURRENT_RPT, customizeCfg, maxRowRec, maxColRec, tab, unitFactor) {
|
|
|
let me = this, rst = [];
|
|
|
- //...
|
|
|
+ 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++) {
|
|
|
+ for (let i = 0; i < tab_fields.length; i++) {
|
|
|
+ let tab_field = tab_fields[i];
|
|
|
+ if (!(tab_field[JV.PROP_HIDDEN])) {
|
|
|
+ for (let colIdx = 0; colIdx < maxColRec; colIdx++) {
|
|
|
+ if (tab_field[JV.PROP_IS_SERIAL]) {
|
|
|
+ rst.push(me.outputTabField(band, tab_field, [rowIdx + 1], 0, -1, maxRowRec, rowIdx, maxColRec, colIdx, unitFactor, false, controls));
|
|
|
+ } else {
|
|
|
+ rst.push(me.outputTabField(band, tab_field, null, -1, -1, maxRowRec, rowIdx, maxColRec, colIdx, unitFactor, false, controls));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (tab[JV.PROP_TEXTS]) {
|
|
|
+ for (let j = 0; j < tab[JV.PROP_TEXTS].length; j++) {
|
|
|
+ for (let colIdx = 0; colIdx < maxColRec; colIdx++) {
|
|
|
+ rst.push(JpcTextHelper.outputText(tab[JV.PROP_TEXTS][j], band, unitFactor, maxRowRec, rowIdx, maxColRec, colIdx, 1, 0));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
return rst;
|
|
|
};
|
|
|
JpcCrossTabResult.outputAsSimpleJSONPage = function(rptTpl, dataObj, page, bands, controls, $CURRENT_RPT, customizeCfg) {
|
|
@@ -331,50 +420,52 @@ JpcCrossTabSrv.prototype.createNew = function(){
|
|
|
let unitFactor = JpcCommonHelper.getUnitFactor(rptTpl);
|
|
|
if (me.paging_option === JV.PAGING_OPTION_INFINITY) {
|
|
|
/*
|
|
|
- let segIdx = page - 1;
|
|
|
- //1 calculate the band position
|
|
|
- JpcBandHelper.setBandArea(bands, rptTpl, me.pageStatusLst[page - 1]);
|
|
|
- //2. then reset the band height
|
|
|
- let tab = rptTpl[JV.NODE_CROSS_INFO][JV.NODE_CROSS_CONTENT];
|
|
|
- let crossContentBand = bands[tab[JV.PROP_BAND_NAME]];
|
|
|
- let actH = JpcCrossTabHelper.getActualRowsHeight(bands, rptTpl, me.sortedRowSequence, page);
|
|
|
- let actW = JpcCrossTabHelper.getActualColsWidth(bands, rptTpl, me.sortedColSequence, page);
|
|
|
- let offsetY = actH - (crossContentBand.Bottom - crossContentBand.Top);
|
|
|
- let offsetX = actW - (crossContentBand.Right - crossContentBand.Left);
|
|
|
- JpcBandHelper.resetBandPos(rptTpl[JV.NODE_BAND_COLLECTION], bands, crossContentBand, offsetX, offsetY);
|
|
|
+ let segIdx = page - 1;
|
|
|
+ //1 calculate the band position
|
|
|
+ JpcBandHelper.setBandArea(bands, rptTpl, me.pageStatusLst[page - 1]);
|
|
|
+ //2. then reset the band height
|
|
|
+ let tab = rptTpl[JV.NODE_CROSS_INFO][JV.NODE_CROSS_CONTENT];
|
|
|
+ let crossContentBand = bands[tab[JV.PROP_BAND_NAME]];
|
|
|
+ let actH = JpcCrossTabHelper.getActualRowsHeight(bands, rptTpl, me.sortedRowSequence, page);
|
|
|
+ let actW = JpcCrossTabHelper.getActualColsWidth(bands, rptTpl, me.sortedColSequence, page);
|
|
|
+ let offsetY = actH - (crossContentBand.Bottom - crossContentBand.Top);
|
|
|
+ let offsetX = actW - (crossContentBand.Right - crossContentBand.Left);
|
|
|
+ JpcBandHelper.resetBandPos(rptTpl[JV.NODE_BAND_COLLECTION], bands, crossContentBand, offsetX, offsetY);
|
|
|
|
|
|
- //2.1 Row-Tab
|
|
|
- tabRstLst.push(me.outputRowTab(rptTpl, dataObj, page, bands, unitFactor, controls));
|
|
|
- //2.2 Col-Tab
|
|
|
- tabRstLst.push(me.outputColTab(rptTpl, dataObj, page, bands, unitFactor, controls));
|
|
|
- //2.3 Content-Tab
|
|
|
- tabRstLst.push(me.outputContent(rptTpl, dataObj, page, bands, unitFactor, controls));
|
|
|
- //2.4 Sum-Tab Row
|
|
|
- //2.4 Sum-tab Col
|
|
|
- tabRstLst.push(me.outputTabSum(rptTpl, dataObj, page, bands, unitFactor, JV.NODE_CROSS_COL_SUM, controls));
|
|
|
- //2.x row tab ext
|
|
|
- tabRstLst.push(me.outputTabExt(rptTpl, dataObj, page, bands, unitFactor, controls));
|
|
|
- tabRstLst.push(me.outputSumTabExt(rptTpl, dataObj, page, bands, unitFactor, segIdx, controls));
|
|
|
- //2.5 Discrete
|
|
|
- tabRstLst.push(JpcDiscreteHelper.outputDiscreteInfo(rptTpl[JV.NODE_CROSS_INFO][JV.NODE_DISCRETE_INFO], bands, dataObj, unitFactor, me.pageStatusLst[page - 1], segIdx, 1, 0, $CURRENT_RPT, customizeCfg));
|
|
|
- //*/
|
|
|
+ //2.1 Row-Tab
|
|
|
+ tabRstLst.push(me.outputRowTab(rptTpl, dataObj, page, bands, unitFactor, controls));
|
|
|
+ //2.2 Col-Tab
|
|
|
+ tabRstLst.push(me.outputColTab(rptTpl, dataObj, page, bands, unitFactor, controls));
|
|
|
+ //2.3 Content-Tab
|
|
|
+ tabRstLst.push(me.outputContent(rptTpl, dataObj, page, bands, unitFactor, controls));
|
|
|
+ //2.4 Sum-Tab Row
|
|
|
+ //2.4 Sum-tab Col
|
|
|
+ tabRstLst.push(me.outputTabSum(rptTpl, dataObj, page, bands, unitFactor, JV.NODE_CROSS_COL_SUM, controls));
|
|
|
+ //2.x row tab ext
|
|
|
+ tabRstLst.push(me.outputTabExt(rptTpl, dataObj, page, bands, unitFactor, controls));
|
|
|
+ tabRstLst.push(me.outputSumTabExt(rptTpl, dataObj, page, bands, unitFactor, segIdx, controls));
|
|
|
+ //2.5 Discrete
|
|
|
+ tabRstLst.push(JpcDiscreteHelper.outputDiscreteInfo(rptTpl[JV.NODE_CROSS_INFO][JV.NODE_DISCRETE_INFO], bands, dataObj, unitFactor, me.pageStatusLst[page - 1], segIdx, 1, 0, $CURRENT_RPT, customizeCfg));
|
|
|
+ //*/
|
|
|
} else {
|
|
|
let segIdx = JpcCommonHelper.getSegIdxByPageIdx(page, me.page_seg_map);
|
|
|
//1 calculate the band position
|
|
|
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
|
|
|
tabRstLst.push(me.outputContent(rptTpl, dataObj, page, bands, unitFactor, controls, $CURRENT_RPT, customizeCfg));
|
|
|
//2.4 Sum-Tab Row
|
|
|
//2.4 Sum-tab Col
|
|
|
- tabRstLst.push(me.outputTabSum(rptTpl, dataObj, page, bands, unitFactor, JV.NODE_CROSS_COL_SUM, controls));
|
|
|
+ tabRstLst.push(me.outputTabSum(rptTpl, dataObj, page, bands, unitFactor, JV.NODE_CROSS_COL_SUM, controls, $CURRENT_RPT, customizeCfg));
|
|
|
//2.x row tab ext
|
|
|
- tabRstLst.push(me.outputTabExt(rptTpl, dataObj, page, bands, unitFactor, controls));
|
|
|
- tabRstLst.push(me.outputSumTabExt(rptTpl, dataObj, page, bands, unitFactor, segIdx, controls));
|
|
|
+ tabRstLst.push(me.outputTabExt(rptTpl, dataObj, page, bands, unitFactor, controls, $CURRENT_RPT, customizeCfg));
|
|
|
+ tabRstLst.push(me.outputSumTabExt(rptTpl, dataObj, page, bands, unitFactor, segIdx, controls, $CURRENT_RPT, customizeCfg));
|
|
|
//2.5 Discrete
|
|
|
tabRstLst.push(JpcDiscreteHelper.outputDiscreteInfo(rptTpl[JV.NODE_CROSS_INFO][JV.NODE_DISCRETE_INFO], bands, dataObj, unitFactor, me.pageStatusLst[page - 1], segIdx, 1, 0, $CURRENT_RPT, customizeCfg));
|
|
|
}
|
|
@@ -384,23 +475,30 @@ 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) {
|
|
|
- let tab_fields = tab[JV.TAB_CROSS_FIELDS];
|
|
|
+ let tab_fields = tab[JV.PROP_CROSS_FIELDS];
|
|
|
let data_details = dataObj[JV.DATA_DETAIL_DATA];
|
|
|
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];
|
|
|
- let data_field = data_details[me.row_fields_idx[i]];
|
|
|
- let map_data_field = JE.F(tab_field[JV.PROP_FIELD_ID], $CURRENT_RPT);
|
|
|
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 rowFieldsIdxArr[i] !== 'object') {
|
|
|
+ data_field = data_details[rowFieldsIdxArr[i]];
|
|
|
+ } else {
|
|
|
+ if (map_data_field) {
|
|
|
+ data_field = map_data_field[JV.PROP_AD_HOC_DATA];
|
|
|
+ }
|
|
|
+ }
|
|
|
let rows = valuesIdx.length;
|
|
|
for (let rowIdx = 0; rowIdx < rows; rowIdx++) {
|
|
|
if (map_data_field && map_data_field[JV.PROP_PRECISION] && map_data_field.flexiblePrecisionRefObj) {
|
|
@@ -431,15 +529,22 @@ JpcCrossTabSrv.prototype.createNew = function(){
|
|
|
if (band) {
|
|
|
let pageStatus = me.pageStatusLst[page - 1];
|
|
|
if (pageStatus[band[JV.BAND_PROP_DISPLAY_TYPE]] === true) {
|
|
|
- let tab_fields = tab[JV.TAB_CROSS_FIELDS];
|
|
|
+ let tab_fields = tab[JV.PROP_CROSS_FIELDS];
|
|
|
let data_details = dataObj[JV.DATA_DETAIL_DATA];
|
|
|
let valuesIdx = me.dispValueIdxLst_Col[page - 1];
|
|
|
let flexiblePrecisionRefObj = null, flexibleRefField = null, precision_ref_data = null;
|
|
|
for (let i = 0; i < me.col_fields_idx.length; i++) {
|
|
|
let tab_field = tab_fields[i];
|
|
|
- let data_field = data_details[me.col_fields_idx[i]];
|
|
|
- let map_data_field = JE.F(tab_field[JV.PROP_FIELD_ID], $CURRENT_RPT);
|
|
|
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.col_fields_idx[i] !== 'object') {
|
|
|
+ data_field = data_details[me.col_fields_idx[i]];
|
|
|
+ } else {
|
|
|
+ if (map_data_field) {
|
|
|
+ data_field = map_data_field[JV.PROP_AD_HOC_DATA];
|
|
|
+ }
|
|
|
+ }
|
|
|
let cols = valuesIdx.length;
|
|
|
for (let colIdx = 0; colIdx < cols; colIdx++) {
|
|
|
if (map_data_field && map_data_field[JV.PROP_PRECISION] && map_data_field.flexiblePrecisionRefObj) {
|
|
@@ -482,14 +587,21 @@ JpcCrossTabSrv.prototype.createNew = function(){
|
|
|
if (band) {
|
|
|
let pageStatus = me.pageStatusLst[page - 1];
|
|
|
if (pageStatus[band[JV.BAND_PROP_DISPLAY_TYPE]] === true) {
|
|
|
- let tab_fields = tab[JV.TAB_CROSS_FIELDS];
|
|
|
+ let tab_fields = tab[JV.PROP_CROSS_FIELDS];
|
|
|
let data_details = dataObj[JV.DATA_DETAIL_DATA];
|
|
|
let contentValuesIdx = me.dispValueIdxLst_Content[page - 1];
|
|
|
let flexiblePrecisionRefObj = null, flexibleRefField = null, precision_ref_data = null;
|
|
|
for (let i = 0; i < tab_fields.length; i++) {
|
|
|
let tab_field = tab_fields[i];
|
|
|
- let data_field = data_details[me.content_fields_idx[i]];
|
|
|
+ let data_field = null;
|
|
|
let map_data_field = JE.F(tab_field[JV.PROP_FIELD_ID], $CURRENT_RPT);
|
|
|
+ if (typeof me.content_fields_idx[i] !== 'object') {
|
|
|
+ data_field = data_details[me.content_fields_idx[i]];
|
|
|
+ } else {
|
|
|
+ if (map_data_field) {
|
|
|
+ data_field = map_data_field[JV.PROP_AD_HOC_DATA];
|
|
|
+ }
|
|
|
+ }
|
|
|
if (!(tab_field[JV.PROP_HIDDEN])) {
|
|
|
let rows = contentValuesIdx.length;
|
|
|
for (let rowIdx = 0; rowIdx < rows; rowIdx++) {
|
|
@@ -517,15 +629,21 @@ JpcCrossTabSrv.prototype.createNew = function(){
|
|
|
}
|
|
|
return rst;
|
|
|
};
|
|
|
- JpcCrossTabResult.outputTabSum = function (rptTpl, dataObj, page, bands, unitFactor, tabNodeName, controls) {
|
|
|
+ JpcCrossTabResult.outputTabSum = function (rptTpl, dataObj, page, bands, unitFactor, tabNodeName, controls, $CURRENT_RPT, customizeCfg) {
|
|
|
let me = this, rst = [],
|
|
|
tab = rptTpl[JV.NODE_CROSS_INFO][tabNodeName],
|
|
|
band = bands[tab[JV.PROP_BAND_NAME]];
|
|
|
if (band) {
|
|
|
let pageStatus = me.pageStatusLst[page - 1];
|
|
|
if (pageStatus[band[JV.BAND_PROP_DISPLAY_TYPE]] === true) {
|
|
|
- let tab_fields = tab[JV.TAB_CROSS_FIELDS];
|
|
|
+ let tab_fields = tab[JV.PROP_CROSS_FIELDS];
|
|
|
for (let i = 0; i < me.dispSumValueLst_Col[page - 1].length; i++) {
|
|
|
+ if (i === 0) {
|
|
|
+ for (let tfIdx = 0; tfIdx < tab_fields.length; tfIdx++) {
|
|
|
+ let map_data_field = JE.F(tab_fields[tfIdx][JV.PROP_FIELD_ID], $CURRENT_RPT);
|
|
|
+ JpcFieldHelper.resetFormat(tab_fields[tfIdx], map_data_field, customizeCfg);
|
|
|
+ }
|
|
|
+ }
|
|
|
if (me.dispSumValueLst_Col[page - 1][i] !== null) {
|
|
|
for (let j = 0; j < me.dispSumValueLst_Col[page - 1][i].length; j++) {
|
|
|
let tab_field = tab_fields[j];
|
|
@@ -555,22 +673,32 @@ JpcCrossTabSrv.prototype.createNew = function(){
|
|
|
}
|
|
|
return rst;
|
|
|
};
|
|
|
- JpcCrossTabResult.outputTabExt = function (rptTpl, dataObj, page, bands, unitFactor, controls) {
|
|
|
+ JpcCrossTabResult.outputTabExt = function (rptTpl, dataObj, page, bands, unitFactor, controls, $CURRENT_RPT, customizeCfg) {
|
|
|
let me = this, rst = [], firstTextOutput = true,
|
|
|
tab = rptTpl[JV.NODE_CROSS_INFO][JV.NODE_CROSS_ROW_EXT];
|
|
|
let band = bands[tab[JV.PROP_BAND_NAME]];
|
|
|
if (band) {
|
|
|
let pageStatus = me.pageStatusLst[page - 1];
|
|
|
if (pageStatus[band[JV.BAND_PROP_DISPLAY_TYPE]] === true) {
|
|
|
- let tab_fields = tab[JV.TAB_CROSS_FIELDS],
|
|
|
+ let tab_fields = tab[JV.PROP_CROSS_FIELDS],
|
|
|
data_details = dataObj[JV.DATA_DETAIL_DATA],
|
|
|
valuesIdx = me.dispValueIdxLst_Col[page - 1];
|
|
|
for (let i = 0; i < me.row_extension_fields_idx.length; i++) {
|
|
|
let tab_field = tab_fields[i];
|
|
|
- let data_field = data_details[me.row_extension_fields_idx[i]];
|
|
|
+ let data_field = null;
|
|
|
+ let map_data_field = JE.F(tab_field[JV.PROP_FIELD_ID], $CURRENT_RPT);
|
|
|
+ if (typeof me.row_extension_fields_idx[i] !== 'object') {
|
|
|
+ data_field = data_details[me.row_extension_fields_idx[i]];
|
|
|
+ } else {
|
|
|
+ if (map_data_field) {
|
|
|
+ data_field = map_data_field[JV.PROP_AD_HOC_DATA];
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
if (!(tab_field[JV.PROP_HIDDEN])) {
|
|
|
let cols = valuesIdx.length;
|
|
|
for (let colIdx = 0; colIdx < cols; colIdx++) {
|
|
|
+ if (colIdx === 0) JpcFieldHelper.resetFormat(tab_field, map_data_field, customizeCfg);
|
|
|
rst.push(me.outputTabField(band, tab_field, data_field, valuesIdx[colIdx], -1, 1, 0, cols, colIdx, unitFactor, false, controls));
|
|
|
//2. output texts if has
|
|
|
if (firstTextOutput) {
|
|
@@ -591,18 +719,29 @@ JpcCrossTabSrv.prototype.createNew = function(){
|
|
|
}
|
|
|
return rst;
|
|
|
};
|
|
|
- JpcCrossTabResult.outputSumTabExt = function (rptTpl, dataObj, page, bands, unitFactor, segIdx, controls) {
|
|
|
+ JpcCrossTabResult.outputSumTabExt = function (rptTpl, dataObj, page, bands, unitFactor, segIdx, controls, $CURRENT_RPT, customizeCfg) {
|
|
|
let me = this, rst = [],
|
|
|
tab = rptTpl[JV.NODE_CROSS_INFO][JV.NODE_CROSS_ROW_SUM_EXT];
|
|
|
let band = bands[tab[JV.PROP_BAND_NAME]];
|
|
|
if (band) {
|
|
|
let pageStatus = me.pageStatusLst[page - 1];
|
|
|
if (pageStatus[band[JV.BAND_PROP_DISPLAY_TYPE]] === true && pageStatus[JV.STATUS_CROSS_ROW_END] === true) {
|
|
|
- let tab_fields = tab[JV.TAB_CROSS_FIELDS],
|
|
|
+ let tab_fields = tab[JV.PROP_CROSS_FIELDS],
|
|
|
data_details = dataObj[JV.DATA_DETAIL_DATA],
|
|
|
data_fields = [];
|
|
|
for (let i = 0; i < me.row_sum_extension_fields_idx.length; i++) {
|
|
|
- let data_field = data_details[me.row_sum_extension_fields_idx[i]];
|
|
|
+ // let data_field = data_details[me.row_sum_extension_fields_idx[i]];
|
|
|
+ let tab_field = tab_fields[i];
|
|
|
+ let data_field = null;
|
|
|
+ let map_data_field = JE.F(tab_field[JV.PROP_FIELD_ID], $CURRENT_RPT);
|
|
|
+ if (typeof me.row_sum_extension_fields_idx[i] !== 'object') {
|
|
|
+ data_field = data_details[me.row_sum_extension_fields_idx[i]];
|
|
|
+ } else {
|
|
|
+ if (map_data_field) {
|
|
|
+ data_field = map_data_field[JV.PROP_AD_HOC_DATA];
|
|
|
+ }
|
|
|
+ }
|
|
|
+ JpcFieldHelper.resetFormat(tab_field, map_data_field, customizeCfg);
|
|
|
data_fields.push(data_field);
|
|
|
}
|
|
|
//2. initialize grand total value
|