فهرست منبع

汇总增加建安费

vian 5 سال پیش
والد
کامیت
e944326ead
2فایلهای تغییر یافته به همراه49 افزوده شده و 16 حذف شده
  1. 48 16
      modules/pm/facade/pm_facade.js
  2. 1 0
      modules/pm/models/project_model.js

+ 48 - 16
modules/pm/facade/pm_facade.js

@@ -806,6 +806,21 @@ function isDef(v){
     return typeof v !== 'undefined' && v !== null;
 }
 
+function getTotalFee(bills, feeName) {
+    if(!isDef(bills)){
+        return 0;
+    }
+    if(!isDef(bills.fees) || bills.fees.length <= 0){
+        return 0;
+    }
+    for(let fee of bills.fees){
+        if(isDef(fee.fieldName) && fee.fieldName === feeName){
+            return isDef(fee.totalFee) ? fee.totalFee : 0;
+        }
+    }
+    return 0;
+}
+
 function getCommonTotalFee(bills) {
     if(!isDef(bills)){
         return 0;
@@ -821,9 +836,15 @@ function getCommonTotalFee(bills) {
     return 0;
 }
 
-function summarizeToParent(parent, child) {
+function summarizeToParent(parent, child, flagFieldMapping) {
     const decimal = -2;
-    let costFields = ['totalCost'];
+    let costFields = [];
+    for (let flag in flagFieldMapping) {
+        let costItems = flagFieldMapping[flag];
+        for (let costItem of costItems) {
+            costFields.push(costItem.name);
+        }
+    }
     for (let field of costFields) {
         parent[field] = scMathUtil.roundTo(parseFloat(parent[field]) + parseFloat(child[field]), decimal);
     }
@@ -882,7 +903,11 @@ async function getSummaryInfoByTender(tenderID, summaryType) {
     if(!project){
         return null;
     }
-    let summaryInfo = await getSummaryInfo([project.ID]);
+    let flagFieldMapping = {
+        [billsFlags.TOTAL_COST]: [{name: 'totalCost', feeField: 'common'}], // 总造价
+        [billsFlags.CONSTRUCTION_INSTALL_FEE]: [{name: 'constructionInstallFee', feeField: 'rationCommon'},], // 建安费
+    };
+    let summaryInfo = await getSummaryInfo([project.ID], flagFieldMapping);
     // 汇总到建设项目层(没有单项工程层了)
     if (summaryType === projectType.project) {
         parentName = project.name ? project.name : '';
@@ -902,8 +927,9 @@ async function getSummaryInfoByTender(tenderID, summaryType) {
 async function getTendersFeeInfo(tenders) {
     let IDMapping = {};
     //固定清单类别与汇总金额字段映射
-    let flagFieldMapping = {};
-    flagFieldMapping[billsFlags.TOTAL_COST] = 'totalCost';
+    let flagFieldMapping = {
+        [billsFlags.TOTAL_COST]: [{name: 'totalCost', feeField: 'common'}]
+    };
     let tenderIDs = [];
     if(tenders.length > 0){
         for(let tender of tenders){
@@ -911,28 +937,32 @@ async function getTendersFeeInfo(tenders) {
             IDMapping[tender.ID] = {totalCost: 0};
         }
         //需要获取的清单固定类别综合合价:总造价
-        let needFlags = [billsFlags.TOTAL_COST];
+        let needFlags = Object.getOwnPropertyNames(flagFieldMapping);
         //获取单位工程汇总金额需要用到的所有清单
         let allBills = await billsModel.find({projectID: {$in: tenderIDs}, 'flags.flag': {$in: needFlags}, $or: notDeleted},
             '-_id projectID fees flags');
         //进行单位工程级别的汇总
         for(let bills of allBills){
             let billsFlag = bills.flags[0]['flag'];
-            let costField = flagFieldMapping[billsFlag];
-            IDMapping[bills.projectID][costField] = getCommonTotalFee(bills);
+            let costItems = flagFieldMapping[billsFlag];
+            for (let costItem of costItems) {
+                IDMapping[bills.projectID][costItem.name] = getTotalFee(bills, costItem.feeField);
+            }
         }
     }
     return IDMapping;
 }
 //@param {Array}projectIDs(建设项目ID) @return {Object}
-async function getSummaryInfo(projectIDs){
+async function getSummaryInfo(projectIDs, flagFieldMapping = null){
     //ID与汇总信息映射
     let IDMapping = {};
     //固定清单类别与汇总金额字段映射
-    let flagFieldMapping = {};
-    flagFieldMapping[billsFlags.TOTAL_COST] = 'totalCost';
+    if (!flagFieldMapping) {
+        flagFieldMapping = {
+            [billsFlags.TOTAL_COST]: [{name: 'totalCost', feeField: 'common'}], // 总造价
+        };
+    }
     let projects = await projectModel.find({ID: {$in : projectIDs}, projType: projectType.project, $or: [{deleteInfo: null}, {'deleteInfo.deleted': false}]});
-    //设置建设项目的总建筑面积
     for(let project of projects){
         IDMapping[project.ID] = {totalCost: 0};
     }
@@ -948,19 +978,21 @@ async function getSummaryInfo(projectIDs){
             IDMapping[tender.ID] = {totalCost: 0, changeMark:tender.changeMark,property:tender.property};//property:tender.property
         }
         //需要获取的清单固定类别综合合价:总造价
-        let needFlags = [billsFlags.TOTAL_COST];
+        let needFlags = Object.getOwnPropertyNames(flagFieldMapping);
         //获取单位工程汇总金额需要用到的所有清单
         let allBills = await billsModel.find({projectID: {$in: tenderIDs}, 'flags.flag': {$in: needFlags}, $or: [{deleteInfo: null}, {'deleteInfo.deleted': false}]},
                                             '-_id projectID fees flags');
         //进行单位工程级别的汇总
         for(let bills of allBills){
             let billsFlag = bills.flags[0]['flag'];
-            let costField = flagFieldMapping[billsFlag];
-            IDMapping[bills.projectID][costField] = getCommonTotalFee(bills);
+            let costItems = flagFieldMapping[billsFlag];
+            for (let costItem of costItems) {
+                IDMapping[bills.projectID][costItem.name] = getTotalFee(bills, costItem.feeField);
+            }
         }
         //进行建设项目级别的汇总
         for(let tender of tenders){
-            summarizeToParent(IDMapping[tender.ParentID], IDMapping[tender.ID]);
+            summarizeToParent(IDMapping[tender.ParentID], IDMapping[tender.ID], flagFieldMapping);
         }
     }
     return IDMapping;

+ 1 - 0
modules/pm/models/project_model.js

@@ -92,6 +92,7 @@ ProjectsDAO.prototype.getUserProjects = async function (userId, compilation, cal
         callback(0, '', projects);
     }
     catch (err) {
+        console.log(err);
         callback(1, 'Error', null);
     }
 };