瀏覽代碼

部分报表,提供filter报表

MaiXinRong 2 年之前
父節點
當前提交
3364908d07

+ 1 - 1
app/controller/ledger_controller.js

@@ -68,7 +68,7 @@ module.exports = app => {
                 : false;
             return ((tender.ledger_status === auditConst.status.uncheck || tender.ledger_status === auditConst.status.checkNo) && isUser) ||
                 (tender.ledger_status === auditConst.status.checking && isAuditor) ||
-                (tender.ledger_status === auditConst.status.checked && isAuditor && upPermission);
+                (tender.ledger_status === auditConst.status.checked && upPermission);
         }
 
         _getLedgerColumn(sjsRela) {

+ 17 - 0
app/lib/ledger.js

@@ -257,6 +257,23 @@ class baseTree {
     getDefaultDatas(filter) {
         return this.getDatasWithout(['expanded', 'visible', 'children', 'index'], filter);
     }
+    /**
+     * 获取默认数据 剔除一些树结构需要的缓存数据
+     * @returns {Array}
+     */
+    getDefaultDatasByLevel(level) {
+        return this.getDatasWithout(['expanded', 'visible', 'children', 'index'], function(node) {
+            switch(level) {
+                case "2":
+                case "3":
+                case "4":
+                case "5":
+                    return node.level < parseInt(level);
+                case "last":
+                    return true;
+            }
+        });
+    }
 
     _mapTreeNode () {
         let map = {}, maxLevel = 0;

+ 20 - 16
app/lib/rm/budget.js

@@ -17,28 +17,32 @@ class reportMemoryBudget {
         this.getBudget = false;
     }
 
-    async budgetGai(bid) {
+    async budgetGai(bid, showLevel = false) {
+        await this.ctx.service.tender.checkTender(tid);
         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 tree.getDefaultDatas();
+        return showLevel ? tree.getDefaultDatasByLevel(this.ctx.tender.rpt_show_level) : tree.getDefaultDatas();
     }
-    async budgetYu(bid) {
+    async budgetYu(bid, showLevel = false) {
+        await this.ctx.service.tender.checkTender(tid);
         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 tree.getDefaultDatas();
+        return showLevel ? tree.getDefaultDatasByLevel(this.ctx.tender.rpt_show_level) : tree.getDefaultDatas();
     }
-    async budgetGu(bid) {
+    async budgetGu(bid, showLevel = false) {
+        await this.ctx.service.tender.checkTender(tid);
         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 tree.getDefaultDatas();
+        return showLevel ? tree.getDefaultDatasByLevel(this.ctx.tender.rpt_show_level) : tree.getDefaultDatas();
     }
-    async budgetFinal(bid) {
+    async budgetFinal(bid, showLevel = false) {
+        await this.ctx.service.tender.checkTender(tid);
         const budget = this.ctx.budget && this.ctx.budget.id === bid
             ? this.ctx.budget
             : await this.ctx.service.budget.getDataById(bid);
@@ -46,7 +50,7 @@ class reportMemoryBudget {
         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 tree.getDefaultDatas();
+        return showLevel ? tree.getDefaultDatasByLevel(this.ctx.tender.rpt_show_level) : tree.getDefaultDatas();
     }
 
     async _getTenderBudget(tid) {
@@ -60,24 +64,24 @@ class reportMemoryBudget {
         this.getBudget = true;
     }
 
-    async tenderGai(tid) {
+    async tenderGai(tid, filter = false) {
         await this._getTenderBudget(tid);
-        return this.budget ? await this.budgetGai(this.budget.id) : [];
+        return this.budget ? await this.budgetGai(this.budget.id, filter) : [];
     }
 
-    async tenderYu(tid) {
+    async tenderYu(tid, filter = false) {
         await this._getTenderBudget(tid);
-        return this.budget ? await this.budgetYu(this.budget.id) : [];
+        return this.budget ? await this.budgetYu(this.budget.id, filter) : [];
     }
 
-    async tenderGu(tid) {
+    async tenderGu(tid, filter = false) {
         await this._getTenderBudget(tid);
-        return this.budget ? await this.budgetGu(this.budget.id) : [];
+        return this.budget ? await this.budgetGu(this.budget.id, filter) : [];
     }
 
-    async tenderFinal(tid) {
+    async tenderFinal(tid, filter = false) {
         await this._getTenderBudget(tid);
-        return this.budget ? await this.budgetFinal(this.budget.id) : [];
+        return this.budget ? await this.budgetFinal(this.budget.id, filter) : [];
     }
 }
 

+ 3 - 11
app/lib/rm/material.js

@@ -229,7 +229,8 @@ class ReportMemoryMaterial {
         return material ? await this.ctx.service.materialList.getMaterialData(tender_id, material.id) : [];
     }
 
-    async getMaterialBills(tender_id, material_order, fields) {
+    async getMaterialBills(tender_id, material_order, fields, showLevel) {
+        await this.ctx.service.tender.checkTender(tid);
         const material = await this.ctx.service.material.getDataByCondition({tid: tender_id, order: material_order});
         if (!material) return [];
 
@@ -246,16 +247,7 @@ class ReportMemoryMaterial {
             billsTree.loadDatas(billsData);
             billsTree.calculateAll();
 
-            return billsTree.getDatas([
-                'id', 'tender_id', 'ledger_id', 'ledger_pid', 'level', 'order', 'full_path', 'is_leaf',
-                'code', 'b_code', 'name', 'unit', 'unit_price',
-                'deal_qty', 'deal_tp',
-                'sgfh_qty', 'sgfh_tp', 'sjcl_qty', 'sjcl_tp', 'qtcl_qty', 'qtcl_tp', 'quantity', 'total_price',
-                'dgn_qty1', 'dgn_qty2',
-                'drawing_code', 'memo', 'node_type', 'is_tp',
-                'contract_qty', 'contract_tp', 'qc_qty', 'qc_tp', 'gather_qty', 'gather_tp', 'postil',
-                'sgfh_expr', 'sjcl_expr', 'qtcl_expr', 'contract_expr',
-            ]);
+            return showLevel ? billsTree.getDefaultDatasByLevel(this.ctx.tender.rpt_show_level) : billsTree.getDefaultDatas();
         } catch(err) {
             this.ctx.helper.log(err);
             return [];

+ 37 - 0
app/service/report.js

@@ -130,6 +130,10 @@ module.exports = app => {
                             runnableRst.push(service.reportMemory.getStageBillsData(params.tender_id, params.stage_id, memFieldKeys[filter]));
                             runnableKey.push(filter);
                             break;
+                        case 'mem_stage_bills_filter':
+                            runnableRst.push(service.reportMemory.getStageBillsData(params.tender_id, params.stage_id, memFieldKeys[filter], true));
+                            runnableKey.push(filter);
+                            break;
                         case 'mem_stage_pos':
                             runnableRst.push(service.reportMemory.getStagePosData(params.tender_id, params.stage_id, memFieldKeys[filter]));
                             runnableKey.push(filter);
@@ -142,6 +146,10 @@ module.exports = app => {
                             runnableRst.push(service.reportMemory.getStageBillsCompareData(params.tender_id, params.stage_id, memFieldKeys[filter]));
                             runnableKey.push(filter);
                             break;
+                        case 'mem_stage_bills_compare_filter':
+                            runnableRst.push(service.reportMemory.getStageBillsCompareData(params.tender_id, params.stage_id, memFieldKeys[filter], true));
+                            runnableKey.push(filter);
+                            break;
                         case 'mem_stage_pay':
                             runnableRst.push(service.reportMemory.getStagePayData(params.tender_id, params.stage_id, memFieldKeys[filter]));
                             runnableKey.push(filter);
@@ -213,6 +221,10 @@ module.exports = app => {
                             runnableRst.push(materialSource.getMaterialBills(params.tender_id, params.material_order, memFieldKeys[filter]));
                             runnableKey.push(filter);
                             break;
+                        case 'mem_material_bills_filter':
+                            runnableRst.push(materialSource.getMaterialBills(params.tender_id, params.material_order, memFieldKeys[filter], true));
+                            runnableKey.push(filter);
+                            break;
                         case 'mem_material_pos':
                             runnableRst.push(materialSource.getMaterialPos(params.tender_id, params.material_order, memFieldKeys[filter]));
                             runnableKey.push(filter);
@@ -226,6 +238,11 @@ module.exports = app => {
                                 customDefine.stage_select, customSelect ? customSelect.stage_select : null));
                             runnableKey.push(filter);
                             break;
+                        case 'mem_stage_sum_bills_filter':
+                            runnableRst.push(service.rptStageSumMemory.getStageSumBills(params.tender_id, memFieldKeys[filter],
+                                customDefine.stage_select, customSelect ? customSelect.stage_select : null, true));
+                            runnableKey.push(filter);
+                            break;
                         case 'mem_stage_sum_pay':
                             runnableRst.push(service.rptStageSumMemory.getStageSumPay(params.tender_id, memFieldKeys[filter],
                                 customDefine.stage_select, customSelect ? customSelect.stage_select : null));
@@ -296,6 +313,22 @@ module.exports = app => {
                             runnableRst.push(params.budget_id ? budgetSource.budgetFinal(params.budget_id) : budgetSource.tenderFinal(params.tender_id));
                             runnableKey.push(filter);
                             break;
+                        case 'mem_budget_gu_filter':
+                            runnableRst.push(params.budget_id ? budgetSource.budgetGu(params.budget_id, true) : budgetSource.tenderGu(params.tender_id, true));
+                            runnableKey.push(filter);
+                            break;
+                        case 'mem_budget_gai_filter':
+                            runnableRst.push(params.budget_id ? budgetSource.budgetGai(params.budget_id, true) : budgetSource.tenderGai(params.tender_id, true));
+                            runnableKey.push(filter);
+                            break;
+                        case 'mem_budget_yu_filter':
+                            runnableRst.push(params.budget_id ? budgetSource.budgetYu(params.budget_id, true) : budgetSource.tenderYu(params.tender_id, true));
+                            runnableKey.push(filter);
+                            break;
+                        case 'mem_budget_final_filter':
+                            runnableRst.push(params.budget_id ? budgetSource.budgetFinal(params.budget_id, true) : budgetSource.tenderFinal(params.tender_id, true));
+                            runnableKey.push(filter);
+                            break;
                         case 'mem_pm_deal_pay':
                             runnableRst.push(service.reportMemory.getPmDeal());
                             runnableKey.push(filter);
@@ -378,6 +411,10 @@ module.exports = app => {
                         rst[filter] = await service.rptGatherMemory.getGatherStageBills(memFieldKeys[filter],
                             customDefine.gather_select, customSelect ? customSelect.gather_select : null);
                         break;
+                    case 'mem_gather_stage_bills_filter':
+                        rst[filter] = await service.rptGatherMemory.getGatherStageBills(memFieldKeys[filter],
+                            customDefine.gather_select, customSelect ? customSelect.gather_select : null, true);
+                        break;
                     case 'mem_gather_stage_pos':
                         rst[filter] = await service.rptGatherMemory.getGatherStagePos(memFieldKeys[filter],
                             customDefine.gather_select, customSelect ? customSelect.gather_select : null);

+ 4 - 4
app/service/report_memory.js

@@ -468,7 +468,7 @@ module.exports = app => {
             return await this._loadStageBillsZone(tender, `${year}-01 - ${year}-12`);
         }
 
-        async getStageBillsData(tid, sid, fields) {
+        async getStageBillsData(tid, sid, fields, showLevel) {
             try {
                 await this.ctx.service.tender.checkTender(tid);
                 if (sid) {
@@ -531,7 +531,7 @@ module.exports = app => {
                     this._calcLeafXmjRela(billsTree);
                 }
 
-                return billsTree.getDefaultDatas();
+                return showLevel ? billsTree.getDefaultDatasByLevel(this.ctx.tender.rpt_show_level) : billsTree.getDefaultDatas();
             } catch(err) {
                 this.ctx.log(err);
                 return [];
@@ -623,7 +623,7 @@ module.exports = app => {
             this.stageValidRole = result;
         };
 
-        async getStageBillsCompareData(tid, sid, fields) {
+        async getStageBillsCompareData(tid, sid, fields, showLevel) {
             try {
                 await this.ctx.service.tender.checkTender(tid);
                 await this.ctx.service.stage.checkStage(sid);
@@ -708,7 +708,7 @@ module.exports = app => {
                     this._calcLeafXmjRela(billsTree);
                 }
 
-                return billsTree.getDefaultDatas();
+                return showLevel ? billsTree.getDefaultDatasByLevel(this.ctx.tender.rpt_show_level) : billsTree.getDefaultDatas();
             } catch (err) {
                 return [];
             }

+ 5 - 2
app/service/rpt_gather_memory.js

@@ -714,9 +714,12 @@ module.exports = app => {
             gatherUtils.completeGatherData(this.resultPos.datas, completeDatas);
         }
 
-        async getGatherStageBills(memFieldKeys, gsDefine, gsCustom) {
+        async getGatherStageBills(memFieldKeys, gsDefine, gsCustom, showLevel) {
+            await this.ctx.service.tender.checkTender(tid);
             await this._doGatherStageData(memFieldKeys, gsDefine, gsCustom);
-            return this.resultTree ? this.resultTree.getDefaultDatas() : [];
+            return this.resultTree
+                ? (showLevel ? this.resultTree.getDefaultDatasByLevel(showLevel) : this.resultTree.getDefaultDatas())
+                : [];
         }
         async getGatherStagePos(memFieldKeys, gsDefine, gsCustom) {
             await this._doGatherStageData(memFieldKeys, gsDefine, gsCustom);

+ 2 - 2
app/service/rpt_stage_sum_memory.js

@@ -154,7 +154,7 @@ module.exports = app => {
             super(ctx);
         }
 
-        async getStageSumBills(tid, memFieldKeys, gsDefine, gsCustom) {
+        async getStageSumBills(tid, memFieldKeys, gsDefine, gsCustom, showLevel) {
             const self = this;
             if (!gsDefine || !gsDefine.enable) return [];
             if (!gsCustom || !gsCustom.stages || gsCustom.stages.length === 0) return [];
@@ -205,7 +205,7 @@ module.exports = app => {
             });
             billsTree.loadDatas(billsData);
             billsTree.calculateAll();
-            return billsTree.getDefaultDatas();
+            return showLevel ? billsTree.getDefaultDatasByLevel(this.ctx.tender.rpt_show_level) : billsTree.getDefaultDatas();
         }
 
         /**