|
@@ -260,7 +260,7 @@ module.exports={
|
|
|
const totalFeeItem = totalItem.fees && totalItem.fees.find(f => f.fieldName === 'common');
|
|
|
totalFee = totalFeeItem ? +totalFeeItem.totalFee : 0;
|
|
|
}
|
|
|
- // 方便报表取数据,规范数据
|
|
|
+ // 方便报表取数据,规范数据
|
|
|
rst.forEach(item => {
|
|
|
item.code = item.code || '';
|
|
|
item.name = item.name || '';
|
|
@@ -271,21 +271,24 @@ module.exports={
|
|
|
const equipmentFeeItem = item.fees && item.fees.find(f => f.fieldName === 'equipment');
|
|
|
const otherFeeItem = item.fees && item.fees.find(f => f.fieldName === 'other');
|
|
|
const totalFeeItem = item.fees && item.fees.find(f => f.fieldName === 'common');
|
|
|
+ const estimateFeeItem = item.fees && item.fees.find(f => f.fieldName === 'estimation');
|
|
|
item.buildingFee = buildingFeeItem ? buildingFeeItem.totalFee : 0;
|
|
|
item.installationFee = installFeeItem ? installFeeItem.totalFee : 0;
|
|
|
item.equipmentFee = equipmentFeeItem ? equipmentFeeItem.totalFee : 0;
|
|
|
item.otherFee = otherFeeItem ? otherFeeItem.totalFee : 0;
|
|
|
item.totalFee = totalFeeItem ? totalFeeItem.totalFee : 0;
|
|
|
+ item.estimateFee = estimateFeeItem ? estimateFeeItem.totalFee : 0;
|
|
|
item.unitFee = totalFeeItem ? totalFeeItem.unitFee : 0;
|
|
|
+ item.diffFee = item.estimateFee - item.totalFee; // 增减金额 估算合价-概算合价
|
|
|
+ item.diffRate = item.estimateFee ? scMathUtil.roundForObj((item.diffFee / item.estimateFee) * 100, 4) : 0; // 增减金额/估算合价*100
|
|
|
// 计算占总投资比例
|
|
|
- const rate = totalFee ? scMathUtil.roundForObj(item.totalFee / totalFee, 4) : 0;
|
|
|
- item.rate = rate * 100; // 转换为百分比
|
|
|
+ item.rate = totalFee ? scMathUtil.roundForObj((item.totalFee / totalFee) * 100, 4) : 0;
|
|
|
});
|
|
|
return rst;
|
|
|
},
|
|
|
// 获取工程费用数据,作为概算汇总数据的拼接树数据
|
|
|
getConstructionFeeData: async function (constructionID, nextID) {
|
|
|
- const projects = await pmFacade.getPosterityProjects([constructionID], true, { _id: 0, ID: 1, ParentID: 1, NextSiblingID: 1, name: 1, projType: 1, chapterCode: 1, sectionCode: 1, quantity: 1, unit: 1, 'property.engineeringName': 1});
|
|
|
+ const projects = await pmFacade.getPosterityProjects([constructionID], true, { _id: 0, ID: 1, ParentID: 1, NextSiblingID: 1, name: 1, projType: 1, chapterCode: 1, sectionCode: 1, quantity: 1, unit: 1, fees: 1, 'property.engineeringName': 1});
|
|
|
const construction = projects.find(p => p.ID === constructionID);
|
|
|
const items = getSortedTreeData(construction.ParentID, projects);
|
|
|
// 转换为uuid
|
|
@@ -386,16 +389,16 @@ module.exports={
|
|
|
unitFeeObj[feeType] = unitFee;
|
|
|
singleFeeObj[feeType] = scMathUtil.roundForObj(singleFeeObj[feeType] + unitFee, processDecimal);
|
|
|
}
|
|
|
- unit.fees = feeObj2Fees(unitFeeObj, unit.quantity);
|
|
|
+ unit.fees = feeObj2Fees(unitFeeObj, unit.fees, unit.quantity);
|
|
|
}
|
|
|
- single.fees = feeObj2Fees(singleFeeObj, single.quantity);
|
|
|
+ single.fees = feeObj2Fees(singleFeeObj, single.fees, single.quantity);
|
|
|
// 汇算到建设项目
|
|
|
constructionFeeObj.total = scMathUtil.roundForObj(constructionFeeObj.total + singleFeeObj.total, processDecimal);
|
|
|
constructionFeeObj.building = scMathUtil.roundForObj(constructionFeeObj.building + singleFeeObj.building, processDecimal);
|
|
|
constructionFeeObj.installation = scMathUtil.roundForObj(constructionFeeObj.installation + singleFeeObj.installation, processDecimal);
|
|
|
constructionFeeObj.equipment = scMathUtil.roundForObj(constructionFeeObj.equipment + singleFeeObj.equipment, processDecimal);
|
|
|
}
|
|
|
- construction.fees = feeObj2Fees(constructionFeeObj, construction.quantity);
|
|
|
+ construction.fees = feeObj2Fees(constructionFeeObj, construction.fees, construction.quantity);
|
|
|
// 更新fees字段
|
|
|
const bulks = [];
|
|
|
items.forEach(item => {
|
|
@@ -420,17 +423,20 @@ module.exports={
|
|
|
}
|
|
|
construction.fees.push(equipmentFeeObj); */
|
|
|
|
|
|
- function feeObj2Fees(feeObj, quantity) {
|
|
|
+ function feeObj2Fees(feeObj, orgFees, quantity) {
|
|
|
const totalFee = scMathUtil.roundForObj(feeObj.total, decimal)
|
|
|
let unitFee = 0;
|
|
|
if (+quantity && totalFee) {
|
|
|
unitFee = scMathUtil.roundForObj(totalFee / (+quantity), 2);
|
|
|
}
|
|
|
+ const estimateItem = orgFees && orgFees.find(item => item.fieldName === 'estimation') || null;
|
|
|
+ const estimateFee = estimateItem ? estimateItem.totalFee : 0;
|
|
|
return [
|
|
|
{ fieldName: 'common', totalFee: scMathUtil.roundForObj(feeObj.total, decimal), unitFee },
|
|
|
{ fieldName: 'building', totalFee: scMathUtil.roundForObj(feeObj.building, decimal) },
|
|
|
{ fieldName: 'installation', totalFee: scMathUtil.roundForObj(feeObj.installation, decimal) },
|
|
|
{ fieldName: 'equipment', totalFee: scMathUtil.roundForObj(feeObj.equipment, decimal) },
|
|
|
+ { fieldName: 'estimation', totalFee: estimateFee },
|
|
|
];
|
|
|
}
|
|
|
},
|