|
@@ -51,6 +51,15 @@ let calcTools = {
|
|
|
isNullBill: function (treeNode) {
|
|
|
return this.isLeafBill(treeNode) && (treeNode.children.length === 0) && (!treeNode.data.calcBase);
|
|
|
},
|
|
|
+ // 无效的、影响正常计算的行(无意义的空行、没有金额的行等)
|
|
|
+ isInvalidNode: function (treeNode) {
|
|
|
+ return !(
|
|
|
+ treeNode.data &&
|
|
|
+ treeNode.data.feesIndex &&
|
|
|
+ treeNode.data.feesIndex.common &&
|
|
|
+ treeNode.data.feesIndex.common.totalFee
|
|
|
+ );
|
|
|
+ },
|
|
|
isCalcBaseBill: function(treeNode){
|
|
|
return this.isLeafBill(treeNode) && (treeNode.children.length === 0) && (treeNode.data.calcBase);
|
|
|
},
|
|
@@ -1823,7 +1832,7 @@ class CalcProgram {
|
|
|
me.innerCalcBillCustom(treeNode)
|
|
|
// 定额:计算程序
|
|
|
else
|
|
|
- me.innerCalcRation2(treeNode, tenderType);
|
|
|
+ me.innerCalcRation(treeNode, tenderType);
|
|
|
|
|
|
if (!calcTools.isTotalCostBill(treeNode)) // 已在上面的分支中计算过
|
|
|
calcTools.estimateFee(treeNode);
|
|
@@ -2072,10 +2081,22 @@ class CalcProgram {
|
|
|
if (calcTools.isVP_or_GLJR(treeNode)){
|
|
|
let u = treeNode.data.marketUnitFee ? treeNode.data.marketUnitFee : 0;
|
|
|
let t = (u * nQ).toDecimal(decimalObj.ration.totalPrice);
|
|
|
- if (treeNode.data.marketTotalFee != t){
|
|
|
+ if ((treeNode.data.marketTotalFee != t) ||
|
|
|
+ (!treeNode.data.feesIndex || !treeNode.data.feesIndex.common || (treeNode.data.feesIndex.common.totalFee != t))
|
|
|
+ ){
|
|
|
+
|
|
|
treeNode.data.marketTotalFee = t;
|
|
|
+ let obj = {};
|
|
|
+ obj.fieldName = 'common';
|
|
|
+ obj.unitFee = u;
|
|
|
+ obj.totalFee = t;
|
|
|
+ obj.tenderUnitFee = obj.unitFee;
|
|
|
+ obj.tenderTotalFee = obj.totalFee;
|
|
|
+ calcTools.checkFeeField(treeNode, obj);
|
|
|
+ me.deleteUselessFees(treeNode, budgetFields);
|
|
|
treeNode.changed = true;
|
|
|
} ;
|
|
|
+ return;
|
|
|
};
|
|
|
};
|
|
|
|
|
@@ -2089,6 +2110,33 @@ class CalcProgram {
|
|
|
|
|
|
calcTools.initFees(treeNode);
|
|
|
|
|
|
+ // 只有人、材、机、主、设。
|
|
|
+ let sum = 0;
|
|
|
+ for (let i = 0; i < 5; i++) {
|
|
|
+ if (!rationCalcBases[budgetBaseNames[i]]){
|
|
|
+ hintBox.infoBox('错误提示', `定额基数${hintBox.font('[' +funcNames[i] + ']')}未定义!`, 1);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ let obj = {};
|
|
|
+ obj.fieldName = budgetFields[i];
|
|
|
+ obj.unitFee = (rationCalcBases[budgetBaseNames[i]](treeNode)).toDecimal(decimalObj.decimal('unitPrice', treeNode));
|
|
|
+ obj.totalFee = (obj.unitFee * nQ).toDecimal(decimalObj.decimal('totalPrice', treeNode));
|
|
|
+ obj.tenderUnitFee = obj.unitFee;
|
|
|
+ obj.tenderTotalFee = obj.totalFee;
|
|
|
+ sum = sum + obj.unitFee;
|
|
|
+ calcTools.checkFeeField(treeNode, obj);
|
|
|
+ };
|
|
|
+
|
|
|
+ let obj = {};
|
|
|
+ obj.fieldName = 'common';
|
|
|
+ obj.unitFee = obj.unitFee = sum.toDecimal(decimalObj.decimal('unitPrice', treeNode));
|
|
|
+ obj.totalFee = (obj.unitFee * nQ).toDecimal(decimalObj.decimal('totalPrice', treeNode));
|
|
|
+ obj.tenderUnitFee = obj.unitFee;
|
|
|
+ obj.tenderTotalFee = obj.totalFee;
|
|
|
+ calcTools.checkFeeField(treeNode, obj);
|
|
|
+
|
|
|
+ me.deleteUselessFees(treeNode, budgetFields);
|
|
|
+
|
|
|
for (let idx of template.compiledSeq) {
|
|
|
let calcItem = template.calcItems[idx];
|
|
|
$CE.tempCalcItem = calcItem;
|
|
@@ -2102,17 +2150,7 @@ class CalcProgram {
|
|
|
let tExpr = analyzer.getCompiledTenderExpr(calcItem.compiledExpr);
|
|
|
calcItem.tenderUnitFee = (eval(tExpr) * feeRate * 0.01).toDecimal(decimalObj.decimal('unitPrice', treeNode));
|
|
|
calcItem.tenderTotalFee = (calcItem.tenderUnitFee * nTQ).toDecimal(decimalObj.decimal('totalPrice', treeNode));
|
|
|
-
|
|
|
- if (calcItem.fieldName) {
|
|
|
- fnArr.push(calcItem.fieldName);
|
|
|
- calcTools.checkFeeField(treeNode, calcItem);
|
|
|
- };
|
|
|
};
|
|
|
-
|
|
|
- if (tenderType == tenderTypes.ttReverseRation || tenderType == tenderTypes.ttReverseGLJ)
|
|
|
- this.reverseTenderCalc(treeNode, tenderType);
|
|
|
-
|
|
|
- me.deleteUselessFees(treeNode, fnArr);
|
|
|
};
|
|
|
};
|
|
|
|
|
@@ -2613,6 +2651,7 @@ class CalcProgram {
|
|
|
let arr = [];
|
|
|
for (let i = 0; i < tender_obj.tenderTree.items.length; i++) {
|
|
|
let node = tender_obj.tenderTree.items[i];
|
|
|
+ if (calcTools.isInvalidNode(node)) continue;
|
|
|
// 量价还是要参与,因为它贡献了金额,如果它的金额比重很大,它退出了,会导致其它结点过调。
|
|
|
// if (calcTools.isRationCategory(node) && (!calcTools.isVP_or_GLJR(node))){
|
|
|
if (calcTools.isRationCategory(node)){
|