jpc_bill_tab.js 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264
  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. me.signatureAuditRst = [];
  20. me.figureRst = [];
  21. me.totalPages = 0;
  22. };
  23. JpcBillTabResult.sorting = function(rptTpl) {
  24. const me = this;
  25. JpcFieldHelper.findAndPutDataFieldIdx(rptTpl, rptTpl[JV.NODE_BILL_INFO][JV.NODE_BILL_CONTENT][JV.PROP_BILL_FIELDS], null, me.disp_fields_idx);
  26. };
  27. JpcBillTabResult.paging = function(rptTpl, dataObj) {
  28. let rst = 0;
  29. const me = this;
  30. function getDataLength(fields_str) {
  31. const dataFields = dataObj[fields_str];
  32. if (dataFields && dataFields.length > 0) {
  33. rst = dataFields[0].length;
  34. }
  35. }
  36. if (rptTpl[JV.NODE_FIELD_MAP]) {
  37. if (rptTpl[JV.NODE_FIELD_MAP][JV.NODE_DETAIL_FIELDS]) {
  38. getDataLength(JV.DATA_DETAIL_DATA);
  39. } else if (rptTpl[JV.NODE_FIELD_MAP][JV.NODE_MASTER_FIELDS]) {
  40. getDataLength(JV.DATA_MASTER_DATA);
  41. } else if (rptTpl[JV.NODE_FIELD_MAP][JV.NODE_DISCRETE_FIELDS]) {
  42. getDataLength(JV.DATA_DISCRETE_DATA);
  43. } else if (rptTpl[JV.NODE_FIELD_MAP][JV.NODE_DISCRETE_PARAMS]) {
  44. rst = 1;
  45. }
  46. }
  47. me.totalPages = rst;
  48. if (dataObj.splitArcVals && dataObj.splitField) {
  49. // 账单式表 分割
  50. let preVal = dataObj.splitArcVals[0];
  51. let pgIdx = 1;
  52. const pagesForPreSplit = [];
  53. const splitFieldInfo = { Name: dataObj.splitField.Name, ID: dataObj.splitField.ID, splitPageValues: [] };
  54. pagesForPreSplit.push(pgIdx);
  55. splitFieldInfo.splitPageValues.push(preVal);
  56. for (let idx = 1; idx < dataObj.splitArcVals.length; idx++) {
  57. pgIdx++;
  58. if (preVal !== dataObj.splitArcVals[idx]) {
  59. preVal = dataObj.splitArcVals[idx];
  60. pagesForPreSplit.push(pgIdx);
  61. splitFieldInfo.splitPageValues.push(preVal);
  62. }
  63. }
  64. dataObj.splitArcPages = pagesForPreSplit;
  65. dataObj.splitArcPagesInfo = splitFieldInfo;
  66. }
  67. return rst;
  68. };
  69. JpcBillTabResult.outputAsPreviewPage = function(rptTpl, bands, controls, $CURRENT_RPT) {
  70. const me = this;
  71. let rst = [];
  72. // const vIdx = [];
  73. // 只预览第一页的数据
  74. const pageStatus = [true, true, true, true, true, true, true, true];
  75. JpcBandHelper.setBandArea(bands, rptTpl, pageStatus, true, false);
  76. const unitFactor = JpcCommonHelper.getUnitFactor(rptTpl);
  77. me.signatureRst = [];
  78. me.signatureDateRst = [];
  79. me.signatureAuditRst = [];
  80. me.interactRst = [];
  81. rst = rst.concat(me.outputPreviewContent(rptTpl, bands, unitFactor, controls, pageStatus, $CURRENT_RPT));
  82. rst = rst.concat(JpcDiscreteHelper.outputPreviewDiscreteInfo(rptTpl[JV.NODE_BILL_INFO][JV.NODE_DISCRETE_INFO], bands, unitFactor, pageStatus, $CURRENT_RPT, me.interactRst, me.signatureRst, me.signatureDateRst, me.signatureAuditRst));
  83. return rst;
  84. };
  85. JpcBillTabResult.outputAsSimpleJSONPage = function(rptTpl, dataObj, page, bands, controls, fonts, $CURRENT_RPT, customizeCfg) {
  86. const me = this;
  87. let rst = [];
  88. me.signatureRst = [];
  89. me.signatureDateRst = [];
  90. me.signatureAuditRst = [];
  91. me.interactRst = [];
  92. const tabRstLst = [];
  93. // 1. calculate the band position
  94. const pageStatus = [true, false, false, false, false, false, false, false];
  95. if (page === 1) {
  96. pageStatus[JV.STATUS_REPORT_START] = true;
  97. pageStatus[JV.STATUS_SEGMENT_START] = true;
  98. }
  99. if (page === me.totalPages) {
  100. pageStatus[JV.STATUS_REPORT_END] = true;
  101. pageStatus[JV.STATUS_SEGMENT_END] = true;
  102. }
  103. JpcBandHelper.setBandArea(bands, rptTpl, pageStatus);
  104. // 2. start to output detail-part
  105. const unitFactor = JpcCommonHelper.getUnitFactor(rptTpl);
  106. // 2.1 output content
  107. tabRstLst.push(me.outputContent(rptTpl, dataObj, page, bands, unitFactor, controls, pageStatus, $CURRENT_RPT, customizeCfg));
  108. // 2.2 output discrete
  109. tabRstLst.push(JpcDiscreteHelper.outputDiscreteInfo(rptTpl[JV.NODE_BILL_INFO][JV.NODE_DISCRETE_INFO], bands, dataObj, unitFactor, pageStatus, page - 1, 0, 1, 0, $CURRENT_RPT, customizeCfg, me.signatureRst, me.signatureDateRst, me.signatureAuditRst, me.interactRst));
  110. for (let i = 0; i < tabRstLst.length; i++) {
  111. rst = rst.concat(tabRstLst[i]);
  112. tabRstLst[i] = null;
  113. }
  114. return rst;
  115. };
  116. JpcBillTabResult.setPageFlow = function(rptTpl, dataObj, page, thisPageRst, $CURRENT_RPT) {
  117. // const me = this;
  118. const segPageIdx = page - 1;
  119. // 专门的'流程'签字处理
  120. if (rptTpl[JV.NODE_CUSTOM_DEFINE] && rptTpl[JV.NODE_CUSTOM_DEFINE][JV.NODE_CUS_OPTION]) {
  121. const flowStr = rptTpl[JV.NODE_CUSTOM_DEFINE][JV.NODE_CUS_OPTION] || '';
  122. if (flowStr.includes('"ledgerFieldId"')) {
  123. // 得先判断是否有这个台账ID(判断是含双引号的),毕竟这个选项是通用的
  124. const flowObj = JSON.parse(flowStr);
  125. if (flowObj.ledgerFieldId) {
  126. const flowField = JE.F(flowObj.ledgerFieldId, $CURRENT_RPT);
  127. const flowDataField = dataObj[flowField.DataNodeName][flowField.DataSeq];
  128. thisPageRst[JV.PROP_EXT_FLOW_OPTIONS] = flowDataField[segPageIdx] || '';
  129. }
  130. }
  131. }
  132. //
  133. };
  134. JpcBillTabResult.outputPreviewContent = function(rptTpl, bands, unitFactor, controls, pageStatus, $CURRENT_RPT) {
  135. const me = this;
  136. let rst = [];
  137. const tab = rptTpl[JV.NODE_BILL_INFO][JV.NODE_BILL_CONTENT];
  138. const band = bands[tab[JV.PROP_BAND_NAME]];
  139. if (band) {
  140. if (pageStatus[band[JV.BAND_PROP_DISPLAY_TYPE]]) {
  141. const tab_fields = tab[JV.PROP_BILL_FIELDS];
  142. for (let i = 0; i < tab_fields.length; i++) {
  143. const tab_field = tab_fields[i];
  144. if (!(tab_field[JV.PROP_HIDDEN])) {
  145. if (!JpcDiscreteHelper.setupSignatureFieldParam(me.signatureRst, me.signatureDateRst, me.signatureAuditRst, me.interactRst, $CURRENT_RPT, band, unitFactor, tab_field)) {
  146. const cellItem = JpcCommonOutputHelper.createCommonOutput(tab_field, '', controls);
  147. cellItem[JV.PROP_AREA] = JpcAreaHelper.outputArea(tab_field[JV.PROP_AREA], band, unitFactor, 1, 0, 1, 0, 1, 0, false, false);
  148. if (JE.isInterActionParam(tab_field[JV.PROP_PARAM_ID], $CURRENT_RPT)) {
  149. const iParam = JE.P(tab_field[JV.PROP_PARAM_ID], $CURRENT_RPT);
  150. cellItem[JV.PROP_BAND_NAME] = band.Name;
  151. cellItem[JV.PROP_DATA_TYPE] = iParam[JV.PROP_DATA_TYPE];
  152. cellItem[JV.PROP_LABEL] = iParam[JV.PROP_NAME];
  153. cellItem[JV.PROP_PREFIX] = tab_field[JV.PROP_PREFIX];
  154. this.interactRst.push(cellItem);
  155. } else {
  156. rst.push(cellItem);
  157. }
  158. }
  159. }
  160. }
  161. if (tab[JV.PROP_TEXT]) {
  162. rst.push(JpcTextHelper.outputText(tab[JV.PROP_TEXT], band, unitFactor, 1, 0, 1, 0, 1, 0));
  163. }
  164. if (tab[JV.PROP_TEXTS]) {
  165. for (let j = 0; j < tab[JV.PROP_TEXTS].length; j++) {
  166. rst.push(JpcTextHelper.outputText(tab[JV.PROP_TEXTS][j], band, unitFactor, 1, 0, 1, 0, 1, 0));
  167. }
  168. }
  169. if (tab[JV.NODE_DISCRETE_INFO]) {
  170. rst = rst.concat(JpcDiscreteHelper.outputPreviewDiscreteInfo(tab[JV.NODE_DISCRETE_INFO], bands, unitFactor, pageStatus, $CURRENT_RPT, this.interactRst, me.signatureRst, me.signatureDateRst, me.signatureAuditRst));
  171. }
  172. }
  173. }
  174. return rst;
  175. };
  176. JpcBillTabResult.outputContent = function(rptTpl, dataObj, page, bands, unitFactor, controls, pageStatus, $CURRENT_RPT, customizeCfg) {
  177. const me = this;
  178. let rst = [];
  179. const tab = rptTpl[JV.NODE_BILL_INFO][JV.NODE_BILL_CONTENT];
  180. const band = bands[tab[JV.PROP_BAND_NAME]];
  181. if (band) {
  182. if (pageStatus[band[JV.BAND_PROP_DISPLAY_TYPE]]) {
  183. const tab_fields = tab[JV.PROP_BILL_FIELDS];
  184. let data_details = null;
  185. if (rptTpl[JV.NODE_FIELD_MAP][JV.NODE_DETAIL_FIELDS]) {
  186. data_details = dataObj[JV.DATA_DETAIL_DATA];
  187. } else if (rptTpl[JV.NODE_FIELD_MAP][JV.NODE_MASTER_FIELDS]) {
  188. data_details = dataObj[JV.DATA_MASTER_DATA];
  189. }
  190. let flexiblePrecisionRefObj = null;
  191. let flexibleRefField;
  192. let precision_ref_data;
  193. let isPic = false;
  194. for (let i = 0; i < tab_fields.length; i++) {
  195. const tab_field = tab_fields[i];
  196. if (!JpcDiscreteHelper.setupSignatureFieldParam(me.signatureRst, me.signatureDateRst, me.signatureAuditRst, me.interactRst, $CURRENT_RPT, band, unitFactor, tab_field)) {
  197. let data_field = null;
  198. const map_data_field = JE.F(tab_field[JV.PROP_FIELD_ID], $CURRENT_RPT);
  199. isPic = (map_data_field.isPic !== undefined && map_data_field.isPic);
  200. if (me.disp_fields_idx.length > i && me.disp_fields_idx[i] !== JV.BLANK_FIELD_INDEX && (typeof me.disp_fields_idx[i] !== 'object')) {
  201. data_field = data_details[me.disp_fields_idx[i]];
  202. } else {
  203. if (map_data_field) {
  204. data_field = map_data_field[JV.PROP_AD_HOC_DATA];
  205. }
  206. }
  207. if (map_data_field && map_data_field[JV.PROP_PRECISION] && map_data_field.flexiblePrecisionRefObj) {
  208. if (flexiblePrecisionRefObj === null) {
  209. flexiblePrecisionRefObj = {};
  210. flexibleRefField = JE.F(map_data_field[JV.PROP_PRECISION][JV.PROP_FLEXIBLE_REF_FILED_ID], $CURRENT_RPT);
  211. precision_ref_data = dataObj[map_data_field.DataNodeName][flexibleRefField.DataSeq];
  212. for (const decimalObj of map_data_field.flexiblePrecisionRefObj) {
  213. flexiblePrecisionRefObj['refUnit_' + decimalObj.unit] = decimalObj.decimal;
  214. }
  215. }
  216. JpcFieldHelper.resetFlexibleFormat(tab_field, precision_ref_data, flexiblePrecisionRefObj, page - 1, customizeCfg);
  217. } else {
  218. if (page === 1) JpcFieldHelper.resetFormat(tab_field, map_data_field, customizeCfg);
  219. }
  220. if (!(tab_field[JV.PROP_HIDDEN])) {
  221. const val = JpcFieldHelper.getValue(data_field, page - 1);
  222. const cellItem = JpcCommonOutputHelper.createCommonOutput(tab_field, val, controls);
  223. cellItem[JV.PROP_AREA] = JpcAreaHelper.outputArea(tab_field[JV.PROP_AREA], band, unitFactor, 1, 0, 1, 0, 1, 0, false, false);
  224. if (isPic && cellItem[JV.PROP_VALUE] !== undefined && cellItem[JV.PROP_VALUE] !== null && cellItem[JV.PROP_VALUE] !== '') {
  225. if (Array.isArray(me.signatureRst)) {
  226. if (cellItem[JV.PROP_VALUE][0] !== '/') {
  227. cellItem[JV.PROP_VALUE] = '/' + cellItem[JV.PROP_VALUE];
  228. }
  229. const signatureItem = { signature_name: JV.SIGNATURE_NAME_DUMMY, path: cellItem[JV.PROP_VALUE], pic: null }; // 这里的pic数据在指标中里已经处理过了
  230. signatureItem[JV.PROP_CONTROL] = cellItem[[JV.PROP_CONTROL]];
  231. signatureItem[JV.PROP_STYLE] = cellItem[[JV.PROP_STYLE]];
  232. signatureItem[JV.PROP_AREA] = cellItem[JV.PROP_AREA];
  233. me.signatureRst.push(signatureItem);
  234. cellItem[JV.PROP_VALUE] = '';
  235. }
  236. }
  237. rst.push(cellItem); // 不管是不是Pic,都得保留一个壳子
  238. }
  239. }
  240. }
  241. if (tab[JV.PROP_TEXT]) {
  242. rst.push(JpcTextHelper.outputText(tab[JV.PROP_TEXT], band, unitFactor, 1, 0, 1, 0, 1, 0));
  243. }
  244. if (tab[JV.PROP_TEXTS]) {
  245. for (let j = 0; j < tab[JV.PROP_TEXTS].length; j++) {
  246. rst.push(JpcTextHelper.outputText(tab[JV.PROP_TEXTS][j], band, unitFactor, 1, 0, 1, 0, 1, 0));
  247. }
  248. }
  249. if (tab[JV.NODE_DISCRETE_INFO]) {
  250. rst = rst.concat(JpcDiscreteHelper.outputDiscreteInfo(tab[JV.NODE_DISCRETE_INFO], bands, dataObj, unitFactor, pageStatus, page - 1, 0, 1, 0, customizeCfg, me.signatureRst, me.signatureDateRst, me.signatureAuditRst, me.interactRst));
  251. }
  252. }
  253. }
  254. return rst;
  255. };
  256. return JpcBillTabResult;
  257. };
  258. module.exports = new JpcBillTabSrv();