| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128 | 'use strict';/** * * * @author Mai * @date * @version */const RptMemBase = require('./base');const bindData = {};const Ledger = require('../ledger');class rptMemPaymentSafe extends RptMemBase {    constructor(ctx) {        super(ctx, bindData);    }    async doCheckTender(tenderId) {        if (this.ctx.paymentTender) return;        this.ctx.paymentTender = await this.ctx.service.paymentTender.doCheckTender(tenderId);    }    async doCheckDetail(detailId) {        if (this.ctx.detail) return;        this.ctx.detail = await this.ctx.service.paymentDetail.doCheckDetail(detailId);    }    async doBeforeLoadReport(params) {        await this.doCheckTender(params.tender_id);        await this.doCheckDetail(params.detail_id);    }    async getSafeBills() {        const bills = this.ctx.detail.readOnly            ? await this.ctx.service.paymentSafeBills.getReadData(this.ctx.detail)            : await this.ctx.service.paymentSafeBills.getEditData(this.ctx.detail);        const setting = {            id: 'tree_id',            pid: 'tree_pid',            order: 'tree_order',            level: 'tree_level',            isLeaf: 'tree_is_leaf',            fullPath: 'tree_full_path',            rootId: -1,            calcFields: ['pre_tp', 'cur_tp', 'end_tp'],        };        const billsTree = new Ledger.billsTree(this.ctx, setting);        billsTree.loadDatas(bills);        billsTree.calculateAll();        return billsTree.getDefaultDatas();    }    _analysisCompareData(datas, roles){        const findHis = function (role, history) {            let his = null;            for (const h of history) {                if (h.times < role.times || (h.times === role.times && h.order <= role.order)) {                    his = h;                } else {                    break;                }            }            return his;        };        for (const d of datas) {            if (!d.tree_is_leaf) continue;            d.his_qty = [];            d.his_tp = [];            d.cur_his.sort((x, y) => { return x.times === y.times ? x.order - y.order : x.times - y.times; });            for (const r of roles) {                if (r.latest) {                    d[`r_qty_${r.order}`] = d.cur_qty;                    d[`r_tp_${r.order}`] = d.cur_tp;                    d.his_qty.push(d.cur_qty);                    d.his_tp.push(d.cur_tp);                } else {                    const rHis = findHis(r, d.cur_his);                    if (rHis) {                        d[`r_qty_${r.order}`] = rHis.qty;                        d[`r_tp_${r.order}`] = rHis.tp;                    }                    d.his_qty.push(rHis ? rHis.qty : 0);                    d.his_tp.push(rHis ? rHis.tp : 0);                }            }        }    }    async getSafeBillsCompare() {        const bills = await this.ctx.service.paymentSafeBills.getCompareData(this.ctx.detail);        const roles = await this.ctx.service.paymentDetailAudit.getViewFlow(this.ctx.detail);        this._analysisCompareData(bills, roles);        const setting = {            id: 'tree_id',            pid: 'tree_pid',            order: 'tree_order',            level: 'tree_level',            isLeaf: 'tree_is_leaf',            fullPath: 'tree_full_path',            rootId: -1,        };        setting.calcFields = roles.map(x => { return `r_tp_${x.order}`});        setting.calcFields.push('pre_tp');        const compareTree = new Ledger.billsTree(this.ctx, setting);        compareTree.loadDatas(bills);        compareTree.calculateAll();        return compareTree.getDefaultDatas();    }    getCommonData(params, tableName, fields, customDefine, customSelect) {        switch (tableName) {            case 'mem_payment_tender':                return [this.ctx.paymentTender];            case 'mem_payment_tender_info':                return this.ctx.service.paymentTenderInfo.getTenderInfo(params.tender_id);            case 'mem_payment_detail':                return [this.ctx.detail];            case 'mem_payment_safe_bills':                return this.getSafeBills();            case 'mem_payment_safe_bills_compare':                return this.getSafeBillsCompare();            default:                return [];        }    }}module.exports = rptMemPaymentSafe;
 |