budget.js 3.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  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 budgetGai(bid, showLevel = false) {
  17. await this.ctx.service.tender.checkTender(tid);
  18. const gai = await this.ctx.service.budgetGai.getAllDataByCondition({ where: { bid } });
  19. const tree = new ledger.billsTree(this.ctx, { id: 'tree_id', pid: 'tree_pid', order: 'order', level: 'level', rootId: -1, calcFields: ['total_price'] });
  20. tree.loadDatas(gai);
  21. tree.calculateAll();
  22. return showLevel ? tree.getDefaultDatasByLevel(this.ctx.tender.rpt_show_level) : tree.getDefaultDatas();
  23. }
  24. async budgetYu(bid, showLevel = false) {
  25. await this.ctx.service.tender.checkTender(tid);
  26. const yu = await this.ctx.service.budgetYu.getAllDataByCondition({ where: { bid } });
  27. const tree = new ledger.billsTree(this.ctx, { id: 'tree_id', pid: 'tree_pid', order: 'order', level: 'level', rootId: -1, calcFields: ['total_price'] });
  28. tree.loadDatas(yu);
  29. tree.calculateAll();
  30. return showLevel ? tree.getDefaultDatasByLevel(this.ctx.tender.rpt_show_level) : tree.getDefaultDatas();
  31. }
  32. async budgetGu(bid, showLevel = false) {
  33. await this.ctx.service.tender.checkTender(tid);
  34. const gu = await this.ctx.service.budgetGu.getAllDataByCondition({ where: { bid } });
  35. const tree = new ledger.billsTree(this.ctx, { id: 'tree_id', pid: 'tree_pid', order: 'order', level: 'level', rootId: -1, calcFields: ['total_price'] });
  36. tree.loadDatas(gu);
  37. tree.calculateAll();
  38. return showLevel ? tree.getDefaultDatasByLevel(this.ctx.tender.rpt_show_level) : tree.getDefaultDatas();
  39. }
  40. async budgetFinal(bid, showLevel = false) {
  41. await this.ctx.service.tender.checkTender(tid);
  42. const budget = this.ctx.budget && this.ctx.budget.id === bid
  43. ? this.ctx.budget
  44. : await this.ctx.service.budget.getDataById(bid);
  45. if (!budget.final_id) return [];
  46. const final = await this.ctx.service.budgetFinal.getAllDataByCondition({ where: { final_id: budget.final_id } });
  47. const tree = new ledger.billsTree(this.ctx, { id: 'tree_id', pid: 'tree_pid', order: 'order', level: 'level', rootId: -1, calcFields: [] });
  48. tree.loadDatas(final);
  49. return showLevel ? tree.getDefaultDatasByLevel(this.ctx.tender.rpt_show_level) : tree.getDefaultDatas();
  50. }
  51. async _getTenderBudget(tid) {
  52. if (this.getBudget) return;
  53. const budgets = await this.ctx.service.budget.getBudget(true);
  54. this.budget = budgets.find(x => {
  55. const relaTender = x.rela_tender.split(',');
  56. return relaTender.indexOf(tid + '') >= 0;
  57. });
  58. this.getBudget = true;
  59. }
  60. async tenderGai(tid, filter = false) {
  61. await this._getTenderBudget(tid);
  62. return this.budget ? await this.budgetGai(this.budget.id, filter) : [];
  63. }
  64. async tenderYu(tid, filter = false) {
  65. await this._getTenderBudget(tid);
  66. return this.budget ? await this.budgetYu(this.budget.id, filter) : [];
  67. }
  68. async tenderGu(tid, filter = false) {
  69. await this._getTenderBudget(tid);
  70. return this.budget ? await this.budgetGu(this.budget.id, filter) : [];
  71. }
  72. async tenderFinal(tid, filter = false) {
  73. await this._getTenderBudget(tid);
  74. return this.budget ? await this.budgetFinal(this.budget.id, filter) : [];
  75. }
  76. }
  77. module.exports = reportMemoryBudget;