ソースを参照

报表数据源,预付款

MaiXinRong 1 年間 前
コミット
8f15f2c0c6
2 ファイル変更69 行追加0 行削除
  1. 61 0
      app/lib/rm/advance.js
  2. 8 0
      app/service/report.js

+ 61 - 0
app/lib/rm/advance.js

@@ -0,0 +1,61 @@
+'use strict';
+
+/**
+ *
+ *
+ * @author Mai
+ * @date
+ * @version
+ */
+
+const RptMemBase = require('./base');
+const bindData = {};
+
+class rptMemChange extends RptMemBase {
+    constructor(ctx) {
+        super(ctx, bindData);
+    }
+
+    async doCheckAdvance(advanceId) {
+        if (this.ctx.advance) return;
+        this.ctx.advance = await this.ctx.service.advance.getDataByCondition({ cid: advanceId });
+    }
+
+    async doCheckTender(tenderId) {
+        if (this.ctx.tender) return;
+        this.ctx.tender = { id: tenderId };
+        this.ctx.tender.data = await this.ctx.service.tender.getTender(tenderId);
+        this.ctx.tender.info = await this.ctx.service.tenderInfo.getTenderInfo(tenderId);
+    }
+
+    async doBeforeLoadReport(params) {
+        await this.doCheckAdvance(params.advance_id);
+        await this.doCheckTender(this.ctx.change.tid);
+    }
+
+    async _getAdvanceAudit() {
+        const advanceAudit = await this.ctx.service.advanceAudit.getAllDataByCondition({ where: { vid: this.ctx.advance.id, times: this.ctx.advance.times }});
+        return this.ctx.helper.filterLastestData(advanceAudit, ['audit_id']);
+    }
+
+    getCommonData(params, tableName, fields, customDefine, customSelect) {
+        switch (tableName) {
+            case 'mem_advance':
+                return [this.ctx.advance];
+            case 'mem_advance_audit':
+                return this._getAdvanceAudit();
+            case 'mem_advance_file':
+                return this.ctx.service.advanceFile.getAllDataByCondition({ where: { vid: this.ctx.advance.id }});
+            case 'mem_project':
+                return this.ctx.service.project.getDataByCondition({ id: this.ctx.session.sessionProject.id });
+            case 'mem_tender':
+                return [this.ctx.tender.data];
+            case 'mem_tender_info':
+                return [this.ctx.tender.info];
+            default:
+                return [];
+        }
+    }
+}
+
+module.exports = rptMemChange;

+ 8 - 0
app/service/report.js

@@ -598,6 +598,14 @@ module.exports = app => {
             return rptMaterial.getReportData(params, sourceFilters, memFieldKeys, customDefine, customSelect);
         }
 
+        // params = { advance_id: int }
+        async material(params, sourceFilters, memFieldKeys, customDefine, customSelect) {
+            const RptAdvance = require('../lib/rm/advance');
+            const rptAdvance = new RptAdvance(this.ctx);
+
+            return rptAdvance.getReportData(params, sourceFilters, memFieldKeys, customDefine, customSelect);
+        }
+
         async getReportData(source_type, params, sourceFilters, memFieldKeys, customDefine, customSelect) {
             const sourceType = sourceTypeConst.sourceTypeData.find(x => { return x.id === source_type; });
             if (!sourceType && !this[sourceType.key]) return {};