'use strict'; /** * * * @author Mai * @date * @version */ const ledger = require('../ledger'); class reportMemoryBudget { constructor(ctx) { this.ctx = ctx; this.budget = null; this.getBudget = false; } async budgetInfo(bid) { const subProject = await this.ctx.service.subProject.getDataByCondition({ budget_id: bid }); return await this.ctx.service.subProjInfo.getInfo4Report(subProject.id); } async budgetGai(bid, showLevel = false) { const gai = await this.ctx.service.budgetGai.getAllDataByCondition({ where: { bid } }); const tree = new ledger.billsTree(this.ctx, { id: 'tree_id', pid: 'tree_pid', order: 'order', level: 'level', rootId: -1, calcFields: ['total_price'] }); tree.loadDatas(gai); tree.calculateAll(); return showLevel ? tree.getDefaultDatasByLevel(this.ctx.tender.rpt_show_level) : tree.getDefaultDatas(); } async budgetYu(bid, showLevel = false) { const yu = await this.ctx.service.budgetYu.getAllDataByCondition({ where: { bid } }); const tree = new ledger.billsTree(this.ctx, { id: 'tree_id', pid: 'tree_pid', order: 'order', level: 'level', rootId: -1, calcFields: ['total_price'] }); tree.loadDatas(yu); tree.calculateAll(); return showLevel ? tree.getDefaultDatasByLevel(this.ctx.tender.rpt_show_level) : tree.getDefaultDatas(); } async budgetGu(bid, showLevel = false) { const gu = await this.ctx.service.budgetGu.getAllDataByCondition({ where: { bid } }); const tree = new ledger.billsTree(this.ctx, { id: 'tree_id', pid: 'tree_pid', order: 'order', level: 'level', rootId: -1, calcFields: ['total_price'] }); tree.loadDatas(gu); tree.calculateAll(); return showLevel ? tree.getDefaultDatasByLevel(this.ctx.tender.rpt_show_level) : tree.getDefaultDatas(); } async budgetZb(bid, showLevel = false) { const zb = await this.ctx.service.budgetZb.getAllDataByCondition({ where: { bid } }); const tree = new ledger.billsTree(this.ctx, { id: 'tree_id', pid: 'tree_pid', order: 'order', level: 'level', rootId: -1, calcFields: ['total_price'] }); tree.loadDatas(zb); tree.calculateAll(); return showLevel ? tree.getDefaultDatasByLevel(this.ctx.tender.rpt_show_level) : tree.getDefaultDatas(); } async budgetFinal(bid, showLevel = false) { const budget = this.ctx.budget && this.ctx.budget.id === bid ? this.ctx.budget : await this.ctx.service.budget.getDataById(bid); if (!budget.final_id) return []; const final = await this.ctx.service.budgetFinal.getAllDataByCondition({ where: { final_id: budget.final_id } }); const tree = new ledger.billsTree(this.ctx, { id: 'tree_id', pid: 'tree_pid', order: 'order', level: 'level', rootId: -1, calcFields: [] }); tree.loadDatas(final); return showLevel ? tree.getDefaultDatasByLevel(this.ctx.tender.rpt_show_level) : tree.getDefaultDatas(); } async _getTenderBudget(tid) { if (this.getBudget) return; const budgets = await this.ctx.service.budget.getBudget(true); this.budget = budgets.find(x => { const relaTender = x.rela_tender.split(','); return relaTender.indexOf(tid + '') >= 0; }); this.getBudget = true; } async tenderBudgetInfo(tid) { await this._getTenderBudget(tid); return this.budget ? await this.budgetInfo(this.budget.id) : []; } async tenderGai(tid, filter = false) { await this._getTenderBudget(tid); return this.budget ? await this.budgetGai(this.budget.id, filter) : []; } async tenderYu(tid, filter = false) { await this._getTenderBudget(tid); return this.budget ? await this.budgetYu(this.budget.id, filter) : []; } async tenderGu(tid, filter = false) { await this._getTenderBudget(tid); return this.budget ? await this.budgetGu(this.budget.id, filter) : []; } async tenderZb(tid, filter = false) { await this._getTenderBudget(tid); return this.budget ? await this.budgetZb(this.budget.id, filter) : []; } async tenderFinal(tid, filter = false) { await this._getTenderBudget(tid); return this.budget ? await this.budgetFinal(this.budget.id, filter) : []; } } module.exports = reportMemoryBudget;