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;
|