瀏覽代碼

切换取费类别,旧费要清掉。

chenshilong 7 年之前
父節點
當前提交
f70aa9903d
共有 1 個文件被更改,包括 28 次插入9 次删除
  1. 28 9
      web/building_saas/main/js/models/calc_program.js

+ 28 - 9
web/building_saas/main/js/models/calc_program.js

@@ -877,17 +877,29 @@ class CalcProgram {
         };
 
         // 删掉多余的费用。例如:从其它计算方式切换到公式计算方式,会多出其它的费(不光是common)
-        function deleteUselessFees(treeNode){
-            let reserveArr = treeNodeTools.isTotalCostBill(treeNode)? ['common', 'estimate']:['common'];
-            if (treeNode.data.fees && treeNode.data.fees.length > 0){
-                let feesArr = treeNode.data.fees;
-                for (let i = 0; i < feesArr.length; i++) {
-                    if (!reserveArr.includes(feesArr[i].fieldName)) {
-                        delete treeNode.data.feesIndex[feesArr[i].fieldName];
-                        feesArr.splice(i, 1);
+        function deleteUselessFees(treeNode, fieldNameArr){
+            if (fieldNameArr){   // 用于计算程序没有绑定的费用类别,不要同步到清单,而清单因为以前计算过该类别又有值,需删除。如切换取费类别,旧费要清掉。
+                for (var i = 0; i < treeNode.data.fees.length; i++) {
+                    let fee = treeNode.data.fees[i];
+                    if (!fieldNameArr.includes(fee.fieldName)){
+                        treeNode.data.fees.splice(i, 1);
+                        delete treeNode.data.feesIndex[fee.fieldName];
                         treeNode.changed = true;
                     }
                 }
+            }
+            else{   // 总造价清单只留common, estimate两个费用类别。其它公式清单只留common。
+                let reserveArr = treeNodeTools.isTotalCostBill(treeNode)? ['common', 'estimate']:['common'];
+                if (treeNode.data.fees && treeNode.data.fees.length > 0){
+                    let feesArr = treeNode.data.fees;
+                    for (let i = 0; i < feesArr.length; i++) {
+                        if (!reserveArr.includes(feesArr[i].fieldName)) {
+                            delete treeNode.data.feesIndex[feesArr[i].fieldName];
+                            feesArr.splice(i, 1);
+                            treeNode.changed = true;
+                        }
+                    }
+                };
             };
         };
 
@@ -1015,6 +1027,7 @@ class CalcProgram {
         }
         // 定额或叶子清单自己的计算程序计算
         else{
+            let fnArr = [];
             if (treeNode.calcType == treeNodeCalcType.ctRationCalcProgram) {
                 if (treeNode.data.type == rationType.volumePrice){
                     delete treeNode.data.gljList;
@@ -1029,6 +1042,7 @@ class CalcProgram {
                     treeNode.data.gljList = me.project.ration_glj.getGljArrByRation(treeNode.data.ID);
                     // 计算程序里没有暂估费的计算规则,会漏掉,所以这里要专门算。
                     calcEstimateFee(treeNode);
+                    fnArr.push('estimate');
                 };
 
                 if (treeNode.data.programID == undefined){
@@ -1045,6 +1059,7 @@ class CalcProgram {
 
                 // 叶子清单自己的计算程序计算,其暂估费也要汇总算。
                 calcEstimateFee(treeNode);
+                fnArr.push('estimate');
             };
 
             let template = me.compiledTemplates[treeNode.data.programID];
@@ -1071,8 +1086,12 @@ class CalcProgram {
                     else quantity = parseFloat(quantity).toDecimal(decimalObj.decimal('quantity', treeNode));
                     calcItem.totalFee = (calcItem.unitFee * quantity).toDecimal(decimalObj.decimal('totalPrice', treeNode));
 
-                    treeNodeTools.checkFeeField(treeNode, calcItem);
+                    if (calcItem.fieldName) {
+                        fnArr.push(calcItem.fieldName);
+                        treeNodeTools.checkFeeField(treeNode, calcItem);
+                    };
                 };
+                deleteUselessFees(treeNode, fnArr);
             };
         };