jpc_bill_tab.js 8.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162
  1. let JV = require('./jpc_value_define');
  2. let JE = require('./jpc_rte');
  3. let JpcFieldHelper = require('./helper/jpc_helper_field');
  4. let JpcBandHelper = require('./helper/jpc_helper_band');
  5. let JpcCommonHelper = require('./helper/jpc_helper_common');
  6. let JpcDiscreteHelper = require('./helper/jpc_helper_discrete');
  7. let JpcTextHelper = require('./helper/jpc_helper_text');
  8. let JpcCommonOutputHelper = require('./helper/jpc_helper_common_output');
  9. let JpcAreaHelper = require('./helper/jpc_helper_area');
  10. let JpcBillTabSrv = function(){};
  11. JpcBillTabSrv.prototype.createNew = function(){
  12. let JpcBillTabResult = {};
  13. JpcBillTabResult.initialize = function() {
  14. let me = this;
  15. me.disp_fields_idx = [];
  16. };
  17. JpcBillTabResult.sorting = function(rptTpl) {
  18. let me = this;
  19. JpcFieldHelper.findAndPutDataFieldIdx(rptTpl, rptTpl[JV.NODE_BILL_INFO][JV.NODE_BILL_CONTENT][JV.PROP_BILL_FIELDS], null, me.disp_fields_idx);
  20. };
  21. JpcBillTabResult.paging = function(rptTpl, dataObj) {
  22. let rst = 0;
  23. function getDataLength(fields_str) {
  24. let dataFields = dataObj[fields_str];
  25. if (dataFields && dataFields.length > 0) {
  26. rst = dataFields[0].length;
  27. }
  28. }
  29. if (rptTpl[JV.NODE_FIELD_MAP]) {
  30. if (rptTpl[JV.NODE_FIELD_MAP][JV.NODE_DETAIL_FIELDS]) {
  31. getDataLength(JV.DATA_DETAIL_DATA);
  32. } else if (rptTpl[JV.NODE_FIELD_MAP][JV.NODE_MASTER_FIELDS]) {
  33. getDataLength(JV.DATA_MASTER_DATA);
  34. } else if (rptTpl[JV.NODE_FIELD_MAP][JV.NODE_DISCRETE_FIELDS]) {
  35. getDataLength(JV.DATA_DISCRETE_DATA);
  36. } else if (rptTpl[JV.NODE_FIELD_MAP][JV.NODE_DISCRETE_PARAMS]) {
  37. rst = 1;
  38. }
  39. }
  40. return rst;
  41. };
  42. JpcBillTabResult.outputAsPreviewPage = function (rptTpl, bands, controls, $CURRENT_RPT) {
  43. let me = this, rst = [], vIdx = [];
  44. //只预览第一页的数据
  45. let pageStatus = [true, true, false, true, false, false, false, false];
  46. JpcBandHelper.setBandArea(bands, rptTpl, pageStatus, true, false);
  47. let unitFactor = JpcCommonHelper.getUnitFactor(rptTpl);
  48. rst = rst.concat(me.outputPreviewContent(rptTpl, bands, unitFactor, controls, pageStatus));
  49. rst = rst.concat(JpcDiscreteHelper.outputPreviewDiscreteInfo(rptTpl[JV.NODE_BILL_INFO][JV.NODE_DISCRETE_INFO], bands, unitFactor, pageStatus));
  50. return rst;
  51. };
  52. JpcBillTabResult.outputAsSimpleJSONPage = function (rptTpl, dataObj, page, bands, controls, $CURRENT_RPT, customizeCfg) {
  53. let me = this, rst = [], tabRstLst = [];
  54. //1 calculate the band position
  55. let pageStatus = [true, false, false, false, false, false, false, false];
  56. JpcBandHelper.setBandArea(bands, rptTpl, pageStatus);
  57. //2. start to output detail-part
  58. let unitFactor = JpcCommonHelper.getUnitFactor(rptTpl);
  59. //2.1 output content
  60. tabRstLst.push(me.outputContent(rptTpl, dataObj, page, bands, unitFactor, controls, pageStatus, $CURRENT_RPT, customizeCfg));
  61. //2.2 output discrete
  62. tabRstLst.push(JpcDiscreteHelper.outputDiscreteInfo(rptTpl[JV.NODE_BILL_INFO][JV.NODE_DISCRETE_INFO], bands, dataObj, unitFactor, pageStatus, page - 1, 1, 0, $CURRENT_RPT, customizeCfg));
  63. for (let i = 0; i < tabRstLst.length; i++) {
  64. rst = rst.concat(tabRstLst[i]);
  65. tabRstLst[i] = null;
  66. }
  67. return rst;
  68. };
  69. JpcBillTabResult.outputPreviewContent = function(rptTpl, bands, unitFactor, controls, pageStatus) {
  70. let rst = [];
  71. let tab = rptTpl[JV.NODE_BILL_INFO][JV.NODE_BILL_CONTENT];
  72. let band = bands[tab[JV.PROP_BAND_NAME]];
  73. if (band) {
  74. if (pageStatus[band[JV.BAND_PROP_DISPLAY_TYPE]]) {
  75. let tab_fields = tab[JV.PROP_BILL_FIELDS];
  76. for (let i = 0; i < tab_fields.length; i++) {
  77. let tab_field = tab_fields[i];
  78. if (!(tab_field[JV.PROP_HIDDEN])) {
  79. let cellItem = JpcCommonOutputHelper.createCommonOutput(tab_field, "", controls);
  80. cellItem[JV.PROP_AREA] = JpcAreaHelper.outputArea(tab_field[JV.PROP_AREA], band, unitFactor, 1, 0, 1, 0, 1, 0, false, false);
  81. rst.push(cellItem);
  82. }
  83. }
  84. if (tab[JV.PROP_TEXT]) {
  85. rst.push(JpcTextHelper.outputText(tab[JV.PROP_TEXT], band, unitFactor, 1, 0, 1, 0, 1, 0));
  86. }
  87. if (tab[JV.PROP_TEXTS]) {
  88. for (let j = 0; j < tab[JV.PROP_TEXTS].length; j++) {
  89. rst.push(JpcTextHelper.outputText(tab[JV.PROP_TEXTS][j], band, unitFactor, 1, 0, 1, 0, 1, 0));
  90. }
  91. }
  92. if (tab[JV.NODE_DISCRETE_INFO]) {
  93. rst = rst.concat(JpcDiscreteHelper.outputPreviewDiscreteInfo(tab[JV.NODE_DISCRETE_INFO], bands, unitFactor, pageStatus));
  94. }
  95. }
  96. }
  97. return rst;
  98. };
  99. JpcBillTabResult.outputContent = function(rptTpl, dataObj, page, bands, unitFactor, controls, pageStatus, $CURRENT_RPT, customizeCfg) {
  100. let me = this, rst = [];
  101. let tab = rptTpl[JV.NODE_BILL_INFO][JV.NODE_BILL_CONTENT];
  102. let band = bands[tab[JV.PROP_BAND_NAME]];
  103. if (band) {
  104. if (pageStatus[band[JV.BAND_PROP_DISPLAY_TYPE]]) {
  105. let tab_fields = tab[JV.PROP_BILL_FIELDS];
  106. let data_details = null;
  107. if (rptTpl[JV.NODE_FIELD_MAP][JV.NODE_DETAIL_FIELDS]) {
  108. data_details = dataObj[JV.DATA_DETAIL_DATA];
  109. } else if (rptTpl[JV.NODE_FIELD_MAP][JV.NODE_MASTER_FIELDS]) {
  110. data_details = dataObj[JV.DATA_MASTER_DATA];
  111. }
  112. let flexiblePrecisionRefObj = null, flexibleRefField = null, precision_ref_data = null;
  113. for (let i = 0; i < tab_fields.length; i++) {
  114. let tab_field = tab_fields[i];
  115. let data_field = null, map_data_field = JE.F(tab_field[JV.PROP_FIELD_ID], $CURRENT_RPT);
  116. if (me.disp_fields_idx.length > i && me.disp_fields_idx[i] !== JV.BLANK_FIELD_INDEX && (typeof me.disp_fields_idx[i] !== 'object')) {
  117. data_field = data_details[me.disp_fields_idx[i]];
  118. } else {
  119. if (map_data_field) {
  120. data_field = map_data_field[JV.PROP_AD_HOC_DATA];
  121. }
  122. }
  123. if (map_data_field && map_data_field[JV.PROP_PRECISION] && map_data_field.flexiblePrecisionRefObj) {
  124. if (flexiblePrecisionRefObj === null) {
  125. flexiblePrecisionRefObj = {};
  126. flexibleRefField = JE.F(map_data_field[JV.PROP_PRECISION][JV.PROP_FLEXIBLE_REF_FILED_ID], $CURRENT_RPT);
  127. precision_ref_data = dataObj[map_data_field.DataNodeName][flexibleRefField.DataSeq];
  128. for (let decimalObj of map_data_field.flexiblePrecisionRefObj) {
  129. flexiblePrecisionRefObj["refUnit_" + decimalObj.unit] = decimalObj.decimal;
  130. }
  131. }
  132. JpcFieldHelper.resetFlexibleFormat(tab_field, precision_ref_data, flexiblePrecisionRefObj, page - 1, customizeCfg);
  133. } else {
  134. if (page === 1) JpcFieldHelper.resetFormat(tab_field, map_data_field, customizeCfg);
  135. }
  136. if (!(tab_field[JV.PROP_HIDDEN])) {
  137. let val = JpcFieldHelper.getValue(data_field, page - 1);
  138. let cellItem = JpcCommonOutputHelper.createCommonOutput(tab_field, val, controls);
  139. cellItem[JV.PROP_AREA] = JpcAreaHelper.outputArea(tab_field[JV.PROP_AREA], band, unitFactor, 1, 0, 1, 0, 1, 0, false, false);
  140. rst.push(cellItem);
  141. }
  142. }
  143. if (tab[JV.PROP_TEXT]) {
  144. rst.push(JpcTextHelper.outputText(tab[JV.PROP_TEXT], band, unitFactor, 1, 0, 1, 0, 1, 0));
  145. }
  146. if (tab[JV.PROP_TEXTS]) {
  147. for (let j = 0; j < tab[JV.PROP_TEXTS].length; j++) {
  148. rst.push(JpcTextHelper.outputText(tab[JV.PROP_TEXTS][j], band, unitFactor, 1, 0, 1, 0, 1, 0));
  149. }
  150. }
  151. if (tab[JV.NODE_DISCRETE_INFO]) {
  152. rst = rst.concat(JpcDiscreteHelper.outputDiscreteInfo(tab[JV.NODE_DISCRETE_INFO], bands, dataObj, unitFactor, pageStatus, page - 1, 1, 0, customizeCfg));
  153. }
  154. }
  155. }
  156. return rst;
  157. };
  158. return JpcBillTabResult;
  159. };
  160. module.exports = new JpcBillTabSrv();