jpc_bill_tab.js 9.2 KB

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