spread_setting.js 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  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. const tender = { id: tid };
  14. tender.data = await ctx.service.tender.getDataById(tid);
  15. tender.info = await ctx.service.tenderInfo.getTenderInfo(tid);
  16. return tender;
  17. };
  18. function removeFieldCols(setting, cols) {
  19. _.remove(setting.cols, function(c) {
  20. return cols.indexOf(c.field) > -1;
  21. });
  22. };
  23. function refreshSpreadShow(sjsRela, sjsSetting) {
  24. const sjsSettings = sjsSetting instanceof Array ? sjsSetting : [sjsSetting];
  25. for (const field of sjsRela) {
  26. if (field.show) {
  27. for (const ss of sjsSettings) {
  28. const lCol = ss.cols.find(x => {
  29. return x.field === field.field;
  30. });
  31. if (lCol) lCol.title = field.alias || field.name;
  32. }
  33. } else {
  34. for (const ss of sjsSetting) {
  35. removeFieldCols(ss, [field.field]);
  36. }
  37. }
  38. }
  39. }
  40. const getLedgerSpreadSetting = async function(ctx, tid, readOnly) {
  41. let tender = tid ? await getCtxTender(ctx, tid) : ctx.tender;
  42. const setting = tender.data.measure_type === measureType.tz.value
  43. ? (tender.info.display.ledger.clQty ? spreadConst.withCl : spreadConst.withoutCl)
  44. : (tender.info.display.ledger.clQty ? spreadConst.withClGcl : spreadConst.withoutClGcl);
  45. const ledger = JSON.parse(JSON.stringify(setting.ledger));
  46. const pos = setting.pos ? JSON.parse(JSON.stringify(setting.pos)) : spreadConst.blank;
  47. ledger.readOnly = readOnly;
  48. pos.readOnly = readOnly;
  49. if (tender.data.measure_type === measureType.tz.value) removeFieldCols(ledger, spreadConst.filterCols.tzWithoutCols);
  50. if (!tender.info.display.ledger.dgnQty) removeFieldCols(ledger, spreadConst.filterCols.dgnCols);
  51. const sjsRela = await ctx.service.project.getSjsRela(ctx.session.sessionProject.id);
  52. refreshSpreadShow(sjsRela.ledgerCol, [ledger, pos]);
  53. return [ledger, pos];
  54. };
  55. const getStageSpreadSetting = async function (ctx, tid, readOnly) {
  56. const tender = tid ? await getCtxTender(ctx, tid) : ctx.tender;
  57. const stageSetting = tender.data.measure_type === measureType.tz.value
  58. ? spreadConst.stageTz
  59. : (tender.info.display.ledger.clQty ? spreadConst.stageCl : spreadConst.stageNoCl);
  60. const ledger = JSON.parse(JSON.stringify(stageSetting.ledger));
  61. if (!tender.info.display.ledger.dgnQty) {
  62. removeFieldCols(ledger, spreadConst.filterCols.stageDgnCols);
  63. }
  64. const pos = JSON.parse(JSON.stringify(stageSetting.pos));
  65. if (!tender.info.display.stage.realComplete) {
  66. removeFieldCols(pos, spreadConst.filterCols.realCompleteCols);
  67. }
  68. if (!ctx.session.sessionProject.gxby) {
  69. removeFieldCols(ledger, spreadConst.filterCols.thirdPartyCols.gxby);
  70. removeFieldCols(pos, spreadConst.filterCols.thirdPartyCols.gxby);
  71. }
  72. if (!ctx.session.sessionProject.dagl) {
  73. removeFieldCols(ledger, spreadConst.filterCols.thirdPartyCols.dagl);
  74. removeFieldCols(pos, spreadConst.filterCols.thirdPartyCols.dagl);
  75. }
  76. ledger.readOnly = readOnly;
  77. pos.readOnly = readOnly;
  78. const sjsRela = await ctx.service.project.getSjsRela(ctx.session.sessionProject.id);
  79. refreshSpreadShow(sjsRela.ledgerCol, [ledger, pos]);
  80. return [ledger, pos];
  81. };
  82. module.exports = {
  83. getLedgerSpreadSetting,
  84. getStageSpreadSetting,
  85. };