budget.js 2.9 KB

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