tender_budget.js 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. 'use strict';
  2. /**
  3. *
  4. *
  5. * @author Mai
  6. * @date
  7. * @version
  8. */
  9. const ledger = require('../ledger');
  10. class reportMemoryBudget {
  11. constructor(ctx) {
  12. this.ctx = ctx;
  13. this.budget = null;
  14. this.getBudget = false;
  15. }
  16. async budgetInfo(bid) {
  17. const subProject = await this.ctx.service.subProject.getDataByCondition({ budget_id: bid });
  18. return await this.ctx.service.subProjInfo.getInfo4Report(subProject.id);
  19. }
  20. async budgetGai(bid, showLevel = false) {
  21. const gai = await this.ctx.service.budgetGai.getAllDataByCondition({ where: { bid } });
  22. const tree = new ledger.billsTree(this.ctx, { id: 'tree_id', pid: 'tree_pid', order: 'order', level: 'level', rootId: -1, calcFields: ['total_price'] });
  23. tree.loadDatas(gai);
  24. tree.calculateAll();
  25. return showLevel ? tree.getDefaultDatasByLevel(this.ctx.tender.rpt_show_level) : tree.getDefaultDatas();
  26. }
  27. async budgetYu(bid, showLevel = false) {
  28. const yu = await this.ctx.service.budgetYu.getAllDataByCondition({ where: { bid } });
  29. const tree = new ledger.billsTree(this.ctx, { id: 'tree_id', pid: 'tree_pid', order: 'order', level: 'level', rootId: -1, calcFields: ['total_price'] });
  30. tree.loadDatas(yu);
  31. tree.calculateAll();
  32. return showLevel ? tree.getDefaultDatasByLevel(this.ctx.tender.rpt_show_level) : tree.getDefaultDatas();
  33. }
  34. async budgetGu(bid, showLevel = false) {
  35. const gu = await this.ctx.service.budgetGu.getAllDataByCondition({ where: { bid } });
  36. const tree = new ledger.billsTree(this.ctx, { id: 'tree_id', pid: 'tree_pid', order: 'order', level: 'level', rootId: -1, calcFields: ['total_price'] });
  37. tree.loadDatas(gu);
  38. tree.calculateAll();
  39. return showLevel ? tree.getDefaultDatasByLevel(this.ctx.tender.rpt_show_level) : tree.getDefaultDatas();
  40. }
  41. async budgetZb(bid, showLevel = false) {
  42. const zb = await this.ctx.service.budgetZb.getAllDataByCondition({ where: { bid } });
  43. const tree = new ledger.billsTree(this.ctx, { id: 'tree_id', pid: 'tree_pid', order: 'order', level: 'level', rootId: -1, calcFields: ['total_price'] });
  44. tree.loadDatas(zb);
  45. tree.calculateAll();
  46. return showLevel ? tree.getDefaultDatasByLevel(this.ctx.tender.rpt_show_level) : tree.getDefaultDatas();
  47. }
  48. async budgetCtrl(bid, showLevel = false) {
  49. const ctrl = await this.ctx.service.budgetCtrl.getAllDataByCondition({ where: { bid } });
  50. const tree = new ledger.billsTree(this.ctx, { id: 'tree_id', pid: 'tree_pid', order: 'order', level: 'level', rootId: -1, calcFields: ['total_price'] });
  51. tree.loadDatas(ctrl);
  52. tree.calculateAll();
  53. return showLevel ? tree.getDefaultDatasByLevel(this.ctx.tender.rpt_show_level) : tree.getDefaultDatas();
  54. }
  55. async budgetReal(bid, showLevel = false) {
  56. const real = await this.ctx.service.budgetReal.getAllDataByCondition({ where: { bid } });
  57. const tree = new ledger.billsTree(this.ctx, { id: 'tree_id', pid: 'tree_pid', order: 'order', level: 'level', rootId: -1, calcFields: ['total_price'] });
  58. tree.loadDatas(real);
  59. tree.calculateAll();
  60. return showLevel ? tree.getDefaultDatasByLevel(this.ctx.tender.rpt_show_level) : tree.getDefaultDatas();
  61. }
  62. async budgetFinal(bid, showLevel = false) {
  63. const budget = this.ctx.budget && this.ctx.budget.id === bid
  64. ? this.ctx.budget
  65. : await this.ctx.service.budget.getDataById(bid);
  66. if (!budget.final_id) return [];
  67. const final = await this.ctx.service.budgetFinal.getAllDataByCondition({ where: { final_id: budget.final_id } });
  68. const tree = new ledger.billsTree(this.ctx, { id: 'tree_id', pid: 'tree_pid', order: 'order', level: 'level', rootId: -1, calcFields: [] });
  69. tree.loadDatas(final);
  70. return showLevel ? tree.getDefaultDatasByLevel(this.ctx.tender.rpt_show_level) : tree.getDefaultDatas();
  71. }
  72. async _getTenderBudget(tid) {
  73. if (this.getBudget) return;
  74. if (this.ctx.subProject) this.budget = await this.ctx.service.budget.getDataById(this.ctx.subProject.budget_id);
  75. if (!this.budget) {
  76. const budgets = await this.ctx.service.budget.getBudget(true);
  77. this.budget = budgets.find(x => {
  78. const relaTender = x.rela_tender.split(',');
  79. return relaTender.indexOf(tid + '') >= 0;
  80. });
  81. }
  82. this.getBudget = true;
  83. }
  84. async tenderBudgetInfo(tid) {
  85. await this._getTenderBudget(tid);
  86. return this.budget ? await this.budgetInfo(this.budget.id) : [];
  87. }
  88. async tenderGai(tid, filter = false) {
  89. await this._getTenderBudget(tid);
  90. return this.budget ? await this.budgetGai(this.budget.id, filter) : [];
  91. }
  92. async tenderYu(tid, filter = false) {
  93. await this._getTenderBudget(tid);
  94. return this.budget ? await this.budgetYu(this.budget.id, filter) : [];
  95. }
  96. async tenderGu(tid, filter = false) {
  97. await this._getTenderBudget(tid);
  98. return this.budget ? await this.budgetGu(this.budget.id, filter) : [];
  99. }
  100. async tenderZb(tid, filter = false) {
  101. await this._getTenderBudget(tid);
  102. return this.budget ? await this.budgetZb(this.budget.id, filter) : [];
  103. }
  104. async tenderCtrl(tid, filter = false) {
  105. await this._getTenderBudget(tid);
  106. return this.budget ? await this.budgetCtrl(this.budget.id, filter) : [];
  107. }
  108. async tenderReal(tid, filter = false) {
  109. await this._getTenderBudget(tid);
  110. return this.budget ? await this.budgetReal(this.budget.id, filter) : [];
  111. }
  112. async tenderFinal(tid, filter = false) {
  113. await this._getTenderBudget(tid);
  114. console.log(this.budget);
  115. return this.budget ? await this.budgetFinal(this.budget.id, filter) : [];
  116. }
  117. }
  118. module.exports = reportMemoryBudget;