|
@@ -166,7 +166,7 @@ let cpFeeTypes = [
|
|
|
{type: 'machineDiff', name: '机械价差'},
|
|
|
{type: 'adjustLabour', name: '调整人工费'},
|
|
|
{type: 'adjustMachineLabour', name: '调整机上人工费'},
|
|
|
- {type: 'zangu', name: '暂估'},
|
|
|
+ {type: 'estimate', name: '暂估'},
|
|
|
{type: 'fee1', name: '甲供材料费'},
|
|
|
// 模拟用户新增
|
|
|
{type: 'common', name: '工程造价'}
|
|
@@ -751,8 +751,8 @@ class CalcProgram {
|
|
|
for (let node of treeNodes){delete node.changed};
|
|
|
projectObj.mainController.refreshTreeNode(treeNodes);
|
|
|
|
|
|
- if (activeSubSheetIs(subSheetIndex.ssiCalcProgram)) {
|
|
|
- calcProgramObj.showData(me.project.mainTree.selected, false);
|
|
|
+ if (activeSubSheetIs(subSheetIndex.ssiCalcProgram)) { // 批量树结点计算后,计算程序早已今非昔比,所以这里要重新计算一下。
|
|
|
+ calcProgramObj.showData(me.project.mainTree.selected, true);
|
|
|
};
|
|
|
};
|
|
|
|
|
@@ -774,6 +774,7 @@ class CalcProgram {
|
|
|
};
|
|
|
|
|
|
function checkFee(treeNode, feeObj){
|
|
|
+ if (!feeObj) return;
|
|
|
if (feeObj.fieldName == '') return;
|
|
|
|
|
|
if (!treeNode.data.feesIndex[feeObj.fieldName]){
|
|
@@ -805,6 +806,66 @@ class CalcProgram {
|
|
|
return ['labour', 'material', 'machine', 'mainMaterial', 'equipment'].indexOf(type) > -1;
|
|
|
};
|
|
|
|
|
|
+ function estimateFee(treeNode){
|
|
|
+ if (!treeNode.data.gljList) return undefined;
|
|
|
+
|
|
|
+ let eTypes = [
|
|
|
+ gljType.GENERAL_MATERIAL, gljType.MAIN_MATERIAL, gljType.EQUIPMENT,
|
|
|
+ gljType.CONCRETE, gljType.MORTAR, gljType.MIX_RATIO,
|
|
|
+ gljType.COMMERCIAL_CONCRETE, gljType.COMMERCIAL_MORTAR];
|
|
|
+ let eDetailTypes = [gljType.MAIN_MATERIAL, gljType.CONCRETE, gljType.MORTAR, gljType.MIX_RATIO];
|
|
|
+
|
|
|
+ let GLJObjs = [];
|
|
|
+ for (let glj of treeNode.data.gljList) {
|
|
|
+ if (eTypes.indexOf(glj.type) >= 0) {
|
|
|
+ if (glj.isEstimate){
|
|
|
+ GLJObjs.push({code: glj.code, quantity: glj.quantity, marketPrice: glj.marketPrice});
|
|
|
+ }
|
|
|
+ else{ // 组成物
|
|
|
+ if (eDetailTypes.indexOf(glj.type) >= 0){
|
|
|
+ let mds = projectObj.project.composition.getCompositionByGLJ(glj);
|
|
|
+ if (!mds) mds = [];
|
|
|
+ for (let md of mds){
|
|
|
+ if (md.isEstimate){
|
|
|
+ let isExist = false;
|
|
|
+ let mdQ = (parseFloatPlus(glj.quantity) * parseFloatPlus(md.consumption)).toDecimal(decimalObj.process);
|
|
|
+
|
|
|
+ for (let obj of GLJObjs){
|
|
|
+ if (md.code == obj.code){
|
|
|
+ isExist = true;
|
|
|
+ obj.quantity = (parseFloatPlus(obj.quantity) + mdQ).toDecimal(decimalObj.process);
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ };
|
|
|
+ if (!isExist)
|
|
|
+ GLJObjs.push({code: md.code, quantity: mdQ, marketPrice: md.marketPrice});
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ };
|
|
|
+ };
|
|
|
+
|
|
|
+ let sumU = 0, sumT = 0, unitFee = 0, totalFee = 0;
|
|
|
+ for (let obj of GLJObjs){
|
|
|
+ sumU = sumU + (parseFloatPlus(obj.quantity) * parseFloatPlus(obj.marketPrice)).toDecimal(decimalObj.process);
|
|
|
+ sumU = sumU.toDecimal(decimalObj.process);
|
|
|
+
|
|
|
+ let q = (parseFloatPlus(obj.quantity) * parseFloatPlus(treeNode.data.quantity)).toDecimal(decimalObj.process);
|
|
|
+ sumT = sumT + (q * parseFloatPlus(obj.marketPrice)).toDecimal(decimalObj.process);
|
|
|
+ sumT = sumT.toDecimal(decimalObj.process);
|
|
|
+ };
|
|
|
+ unitFee = sumU.toDecimal(decimalObj.bills.unitPrice);
|
|
|
+ if (projectObj.project.property.zanguCalcMode == zanguCalcType.common){
|
|
|
+ totalFee = (parseFloatPlus(treeNode.data.quantity) * unitFee).toDecimal(decimalObj.bills.totalPrice);
|
|
|
+ }
|
|
|
+ else if (projectObj.project.property.zanguCalcMode == zanguCalcType.gatherMaterial){
|
|
|
+ totalFee = sumT.toDecimal(decimalObj.bills.totalPrice);
|
|
|
+ };
|
|
|
+
|
|
|
+ return {'fieldName': 'estimate', 'unitFee': unitFee, 'totalFee': totalFee};
|
|
|
+ };
|
|
|
+
|
|
|
// 父清单汇总子项(定额或子清单)的费用类别
|
|
|
if (treeNode.calcType == treeNodeCalcType.ctGatherRationsFees ||
|
|
|
treeNode.calcType == treeNodeCalcType.ctGatherBillsFees){
|
|
@@ -1003,7 +1064,10 @@ class CalcProgram {
|
|
|
|
|
|
checkFee(treeNode, calcItem);
|
|
|
};
|
|
|
- }
|
|
|
+ };
|
|
|
+
|
|
|
+ checkFee(treeNode, estimateFee(treeNode));
|
|
|
+
|
|
|
};
|
|
|
|
|
|
if (treeNode.changed && !changedArr.includes(treeNode)) changedArr.push(treeNode);
|
|
@@ -1035,11 +1099,11 @@ class CalcProgram {
|
|
|
return changedNodes;
|
|
|
};
|
|
|
|
|
|
- /* 计算所有树结点(分3种情况),并返回发生变动的零散的多个树结点。
|
|
|
- 参数取值如下:
|
|
|
- calcAllType.catAll 计算所有树结点 (不指定参数时的默认值)
|
|
|
- calcAllType.catBills 计算所有清单 (改变项目属性中清单取费算法时会用到)
|
|
|
- calcAllType.catRations 计算所有定额、工料机形式的定额、量价,因为它们都走自己的计算程序 (改变人工系数、费率值、工料机单价时会用到) */
|
|
|
+ /* 计算所有树结点(分3种情况),并返回发生变动的零散的多个树结点。参数取值如下:
|
|
|
+ calcAllType.catAll 计算所有树结点 (不指定参数时的默认值)
|
|
|
+ calcAllType.catBills 计算所有清单 (改变项目属性中清单取费算法时会用到)
|
|
|
+ calcAllType.catRations 计算所有定额、工料机形式的定额、量价,因为它们都走自己的计算程序 (改变人工系数、费率值、工料机单价时会用到)
|
|
|
+ */
|
|
|
calcAllNodes(calcType = calcAllType.catAll){
|
|
|
let me = this;
|
|
|
let changedNodes = [];
|