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