| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 | 'use strict';/** * * * @author Mai * @date * @version */const ledger = require('../ledger');class reportMemoryBudget {    constructor(ctx) {        this.ctx = ctx;        this.budget = null;        this.getBudget = false;    }    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 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 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 tenderFinal(tid, filter = false) {        await this._getTenderBudget(tid);        return this.budget ? await this.budgetFinal(this.budget.id, filter) : [];    }}module.exports = reportMemoryBudget;
 |