spread_setting.js 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166
  1. 'use strict';
  2. /**
  3. *
  4. *
  5. * @author Mai
  6. * @date
  7. * @version
  8. */
  9. const spreadConst = require('../const/spread');
  10. const _ = require('lodash');
  11. const measureType = require('../const/tender').measureType;
  12. const getCtxTender = async function (ctx, tid) {
  13. if (tid === ctx.tender.id) return ctx.tender;
  14. const tender = { id: tid };
  15. tender.data = await ctx.service.tender.getDataById(tid);
  16. tender.info = await ctx.service.tenderInfo.getTenderInfo(tid);
  17. return tender;
  18. };
  19. function removeFieldCols(setting, cols) {
  20. _.remove(setting.cols, function(c) {
  21. return cols.indexOf(c.field) > -1;
  22. });
  23. };
  24. function hiddenFieldCols(setting, cols) {
  25. setting.cols.forEach(x => {
  26. if (cols.indexOf(x.field) >= 0) {
  27. x.defaultVisible = false;
  28. x.visible = false;
  29. }
  30. });
  31. };
  32. function refreshSpreadShow(sjsRela, sjsSetting) {
  33. const sjsSettings = sjsSetting instanceof Array ? sjsSetting : [sjsSetting];
  34. for (const field of sjsRela) {
  35. if (field.show) {
  36. for (const ss of sjsSettings) {
  37. const lColIndex = ss.cols.findIndex(x => {
  38. return x.field === field.field;
  39. });
  40. const lCol = ss.cols[lColIndex];
  41. if (lCol) {
  42. lCol.title = field.alias || field.name;
  43. if (field.pos) {
  44. const preColIndex = ss.cols.findIndex(x => {
  45. return x.field === field.pos;
  46. });
  47. const preCol = ss.cols[preColIndex];
  48. if (preCol && preColIndex !== lColIndex - 1) {
  49. ss.cols.splice(lColIndex, 1);
  50. ss.cols.splice(preColIndex + 1, 0, lCol);
  51. }
  52. }
  53. }
  54. }
  55. } else {
  56. for (const ss of sjsSetting) {
  57. removeFieldCols(ss, [field.field]);
  58. }
  59. }
  60. }
  61. }
  62. const getLedgerSpreadSetting = async function(ctx, tid, readOnly) {
  63. let tender = tid ? await getCtxTender(ctx, tid) : ctx.tender;
  64. const projectSpread = await ctx.service.projectSpread.getProjectSpread(ctx.session.sessionProject.id, tender.info.s_type);
  65. const prefix = tender.data.measure_type === measureType.tz.value ? 'tz' : 'gcl';
  66. const ledger = projectSpread[`${prefix}_ledger_bills_spread`];
  67. const pos = projectSpread[`${prefix}_ledger_pos_spread`];
  68. if (!tender.info.display.ledger.clQty) {
  69. const billsColIndex = ledger.cols.findIndex(x => { return x.field === spreadConst.withoutClReplace.indexField; });
  70. if (billsColIndex >= 0) {
  71. removeFieldCols(ledger, spreadConst.withoutClReplace.remove);
  72. ledger.cols.splice(billsColIndex, 0, ...spreadConst.withoutClReplace.billsCols);
  73. }
  74. const posColIndex = pos.cols.findIndex(x => { return x.field === spreadConst.withoutClReplace.indexField; });
  75. if (posColIndex >= 0) {
  76. removeFieldCols(pos, spreadConst.withoutClReplace.remove);
  77. pos.cols.splice(posColIndex, 0, ...spreadConst.withoutClReplace.posCols);
  78. }
  79. }
  80. // const setting = tender.data.measure_type === measureType.tz.value
  81. // ? (tender.info.display.ledger.clQty ? spreadConst.withCl : spreadConst.withoutCl)
  82. // : (tender.info.display.ledger.clQty ? spreadConst.withClGcl : spreadConst.withoutClGcl);
  83. // const ledger = JSON.parse(JSON.stringify(setting.ledger));
  84. // const pos = setting.pos ? JSON.parse(JSON.stringify(setting.pos)) : spreadConst.blank;
  85. ledger.readOnly = readOnly;
  86. pos.readOnly = readOnly;
  87. if (!tender.info.display.ledger.deal) removeFieldCols(ledger, spreadConst.filterCols.dealCols);
  88. if (!tender.info.display.ledger.dgnQty) removeFieldCols(ledger, spreadConst.filterCols.dgnCols);
  89. // const sjsRela = await ctx.service.project.getTenderSjsRela(ctx.session.sessionProject.id, ctx.tender.info.display.exMemo);
  90. // refreshSpreadShow(sjsRela.ledgerCol, [ledger, pos]);
  91. return [ledger, pos];
  92. };
  93. const getStageSpreadSetting = async function (ctx, tid, readOnly, funInfo) {
  94. const tender = tid ? await getCtxTender(ctx, tid) : ctx.tender;
  95. const projectSpread = await ctx.service.projectSpread.getProjectSpread(ctx.session.sessionProject.id, tender.info.s_type);
  96. const prefix = tender.data.measure_type === measureType.tz.value ? 'tz' : 'gcl';
  97. const ledger = projectSpread[`${prefix}_stage_bills_spread`];
  98. const pos = projectSpread[`${prefix}_stage_pos_spread`];
  99. if (!tender.info.display.ledger.dgnQty) {
  100. removeFieldCols(ledger, spreadConst.filterCols.stageDgnCols);
  101. }
  102. if (!tender.info.display.stage.realComplete) {
  103. removeFieldCols(pos, spreadConst.filterCols.realCompleteCols);
  104. }
  105. if (!ctx.session.sessionProject.gxby) {
  106. removeFieldCols(ledger, spreadConst.filterCols.thirdPartyCols.gxby);
  107. removeFieldCols(pos, spreadConst.filterCols.thirdPartyCols.gxby);
  108. }
  109. if (!ctx.session.sessionProject.dagl) {
  110. removeFieldCols(ledger, spreadConst.filterCols.thirdPartyCols.dagl);
  111. removeFieldCols(pos, spreadConst.filterCols.thirdPartyCols.dagl);
  112. }
  113. if (!funInfo.minusNoValue || !tender.info.fun_rela.stage_change.minusNoValue) {
  114. hiddenFieldCols(ledger, spreadConst.filterCols.minusNoValueCols);
  115. hiddenFieldCols(pos, spreadConst.filterCols.minusNoValueCols);
  116. }
  117. if (!tender.info.display.stage.priceDiff) hiddenFieldCols(ledger, spreadConst.filterCols.priceDiffCols);
  118. ledger.readOnly = readOnly;
  119. pos.readOnly = readOnly;
  120. // const sjsRela = await ctx.service.project.getTenderSjsRela(ctx.session.sessionProject.id, ctx.tender.info.display.exMemo);
  121. // refreshSpreadShow(sjsRela.ledgerCol, [ledger, pos]);
  122. return [ledger, pos];
  123. };
  124. const getStageGatherSpreadSetting = async function (ctx, tid) {
  125. const tender = tid ? await getCtxTender(ctx, tid) : ctx.tender;
  126. const gcl = JSON.parse(JSON.stringify(spreadConst.stageGather.gcl));
  127. const leafXmj = JSON.parse(JSON.stringify(spreadConst.stageGather.leafXmj));
  128. const gatherLeafXmj = JSON.parse(JSON.stringify(spreadConst.stageGather.gatherLeafXmj));
  129. // if (tender.data.measure_type === measureType.tz.value && !tender.info.display.ledger.deal)
  130. // removeFieldCols(gcl, spreadConst.filterCols.dealCols);
  131. if (!tender.info.display.stage.priceDiff) {
  132. removeFieldCols(gcl, spreadConst.filterCols.priceDiffCols);
  133. hiddenFieldCols(leafXmj, spreadConst.filterCols.priceDiffCols);
  134. hiddenFieldCols(gatherLeafXmj, spreadConst.filterCols.priceDiffCols);
  135. }
  136. if (tender.data.measure_type === measureType.gcl.value) {
  137. removeFieldCols(leafXmj, ['quantity']);
  138. removeFieldCols(gatherLeafXmj, ['quantity']);
  139. }
  140. return [gcl, leafXmj, gatherLeafXmj];
  141. };
  142. module.exports = {
  143. getLedgerSpreadSetting,
  144. getStageSpreadSetting,
  145. getStageGatherSpreadSetting,
  146. };