| 
					
				 | 
			
			
				@@ -102,8 +102,13 @@ let calcTools = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     isBill: function(treeNode){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         return treeNode.sourceType === ModuleNames.bills; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    isParentBill: function (treeNode) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return this.isBill(treeNode) && 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            treeNode.source.children && 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            treeNode.source.children.length > 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     isLeafBill: function(treeNode){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        return treeNode.sourceType === ModuleNames.bills && 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return this.isBill(treeNode) && 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             treeNode.source.children && 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             treeNode.source.children.length === 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     }, 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -126,6 +131,21 @@ let calcTools = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     isGljRation: function (treeNode) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         return this.isRationCategory(treeNode) && treeNode.data.type === rationType.gljRation; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    getGLJList: function (treeNode) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        delete treeNode.data.gljList; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (this.isRationCategory(treeNode)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (treeNode.data.type != rationType.volumePrice) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                treeNode.data.gljList = projectObj.project.ration_glj.getGljArrByRation(treeNode.data); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        else if (this.isBill(treeNode)){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            let nodeQ = this.uiNodeQty(treeNode); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            let q = nodeQ ? nodeQ : 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            let rNodes = projectObj.project.Ration.getRationNodes(treeNode); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            let rations = rNodes.map(function (node) {return node.data}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            treeNode.data.gljList = projectObj.project.ration_glj.getGatherGljArrByRations(rations, q); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     initFees: function (treeNode){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         if (!treeNode.data.fees) { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -261,12 +281,15 @@ let calcTools = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         return result; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    // 父清单暂估费是汇总子清单的暂估费,走计算程序逻辑,不在这里。 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // 总造价清单、叶子清单、定额的暂估费。父清单是汇总子清单的暂估费,走计算程序逻辑,不在这里。 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     estimateFee: function (treeNode, isBase = false){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         let me = this, sumU = 0, sumT = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         let nodeQ = me.uiNodeQty(treeNode); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        let isGather = (projectObj.project.property.zanguCalcMode == zanguCalcType.gatherMaterial); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         // 先汇总数量,再乘市场价 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        function estimateTotalFee(){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        function eTFee(){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (!treeNode.data.gljList) return 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             let GLJObjs = []; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             for (let glj of treeNode.data.gljList) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 if (!allMaterialTypes.includes(glj.type)) continue; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -307,8 +330,20 @@ let calcTools = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             return rst; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // 汇总子结点的暂估合价 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        function eTFeeByChildren(){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            let rst = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            for (let node of treeNode.children){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if (node.data.feesIndex && node.data.feesIndex['estimate']) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    rst = (rst + parseFloatPlus(node.data.feesIndex['estimate'].totalFee)).toDecimal(decimalObj.process); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            rst = (rst).toDecimal(decimalObj.bills.totalPrice); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            return rst; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         // 先数量乘市场价,再汇总 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        function estimateUnitFee(){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        function eUFee(){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (!treeNode.data.gljList) return 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             let rst = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             for (let glj of treeNode.data.gljList) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 if (!allMaterialTypes.includes(glj.type)) continue; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -351,29 +386,27 @@ let calcTools = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             sumU = (sumU).toDecimal(decimalObj.bills.unitPrice); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             sumT = (sumT).toDecimal(decimalObj.bills.totalPrice); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        // 叶子清单、定额的暂估费 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        else{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            if (!treeNode.data.gljList) return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            let isGather = (projectObj.project.property.zanguCalcMode == zanguCalcType.gatherMaterial); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            if (calcTools.isRationCategory(treeNode)){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                sumU = estimateUnitFee(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                if (isBase) return sumU; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        else if (me.isParentBill(treeNode)){  // 父清单不要汇总单价。 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            sumT = eTFeeByChildren(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            sumU = undefined; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        else if (me.isLeafBill(treeNode)){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (isGather) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                sumT = eTFee() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            else 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                sumT = eTFeeByChildren(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                if (isGather) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    sumT = estimateTotalFee() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                else 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    sumT = (nodeQ * sumU).toDecimal(decimalObj.ration.totalPrice); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            else if (calcTools.isBill(treeNode)){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                if (isGather) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    sumT = estimateTotalFee() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                else 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    sumT = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            let q = nodeQ ? nodeQ : 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            sumU = (sumT / q).toDecimal(decimalObj.bills.totalPrice); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        else if (me.isRationCategory(treeNode)){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            sumU = eUFee(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (isBase) return sumU; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                let q = nodeQ ? nodeQ : 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                sumU = (sumT / q).toDecimal(decimalObj.bills.totalPrice); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (isGather) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                sumT = eTFee() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            else 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                sumT = (nodeQ * sumU).toDecimal(decimalObj.ration.totalPrice); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         me.checkFeeField(treeNode, {'fieldName': 'estimate', 'unitFee': sumU, 'totalFee': sumT}); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -1367,10 +1400,16 @@ class CalcProgram { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         if (treeNode.calcType == treeNodeCalcType.ctGatherBillsFees || treeNode.calcType == treeNodeCalcType.ctGatherRationsFees){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             treeNode.data.programID = null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             calcTools.initFees(treeNode); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            let nodes = (treeNode.calcType == treeNodeCalcType.ctGatherBillsFees) ? treeNode.children : me.project.Ration.getRationNodes(treeNode); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            let nodes = []; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (treeNode.calcType == treeNodeCalcType.ctGatherRationsFees){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                calcTools.getGLJList(treeNode); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                nodes = me.project.Ration.getRationNodes(treeNode); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            else nodes = treeNode.children; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             let rst = []; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             for (let ft of cpFeeTypes) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                let isEstimate = ft.type == 'estimate'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 let ftObj = {}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 ftObj.fieldName = ft.type; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 ftObj.name = ft.name; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -1379,11 +1418,8 @@ class CalcProgram { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 if (treeNode.calcType == treeNodeCalcType.ctGatherBillsFees){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     for (let node of nodes) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        if (node.data.feesIndex && node.data.feesIndex[ft.type]) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            // 父清单不要汇总综合单价。 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            // buf = (buf + parseFloatPlus(node.data.feesIndex[ft.type].unitFee)).toDecimal(decimalObj.process); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        if (node.data.feesIndex && node.data.feesIndex[ft.type]) { // 父清单不要汇总综合单价。 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                             btf = (btf + parseFloatPlus(node.data.feesIndex[ft.type].totalFee)).toDecimal(decimalObj.process); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            // btuf = (btuf + parseFloatPlus(node.data.feesIndex[ft.type].tenderUnitFee)).toDecimal(decimalObj.process); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                             bttf = (bttf + parseFloatPlus(node.data.feesIndex[ft.type].tenderTotalFee)).toDecimal(decimalObj.process); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     }; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -1391,7 +1427,6 @@ class CalcProgram { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 else if (treeNode.calcType == treeNodeCalcType.ctGatherRationsFees){     // 这里的算法要配合冷姐姐的神图才能看懂^_^ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     let sum_rtf = 0, sum_rttf = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     for (let node of nodes) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        let rq = calcTools.uiNodeQty(node) ? calcTools.uiNodeQty(node) : 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         let ruf = 0, rtuf = 0, rtf = 0, rttf = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         if (node.data.feesIndex && node.data.feesIndex[ft.type]) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                             ruf = parseFloatPlus(node.data.feesIndex[ft.type].unitFee).toDecimal(decimalObj.bills.unitPrice); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -1406,39 +1441,27 @@ class CalcProgram { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         sum_rtf = (sum_rtf + rtf).toDecimal(decimalObj.process); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         sum_rttf = (sum_rttf + rttf).toDecimal(decimalObj.process); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    if (isEstimate){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    if (me.project.property.billsCalcMode == leafBillGetFeeType.rationPriceConverse || 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        me.project.property.billsCalcMode == leafBillGetFeeType.rationPrice) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        buf = (sum_rtf / bq).toDecimal(decimalObj.process); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        btuf = (sum_rttf / bq).toDecimal(decimalObj.process); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    if (isBaseFeeType(ft.type) || 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        (me.project.property.billsCalcMode === leafBillGetFeeType.rationPrice && ft.type == "common")){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         btf = sum_rtf; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         bttf = sum_rttf; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    }else{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        if (me.project.property.billsCalcMode == leafBillGetFeeType.rationPriceConverse || 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            me.project.property.billsCalcMode == leafBillGetFeeType.rationPrice) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            buf = (sum_rtf / bq).toDecimal(decimalObj.process); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            btuf = (sum_rttf / bq).toDecimal(decimalObj.process); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        if (isBaseFeeType(ft.type) || 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            (me.project.property.billsCalcMode === leafBillGetFeeType.rationPrice && ft.type == "common")){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            btf = sum_rtf; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            bttf = sum_rttf; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        else{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            btf = (buf.toDecimal(decimalObj.bills.unitPrice) * bq).toDecimal(decimalObj.process); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            bttf = (btuf.toDecimal(decimalObj.bills.unitPrice) * bq).toDecimal(decimalObj.process); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    else{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        btf = (buf.toDecimal(decimalObj.bills.unitPrice) * bq).toDecimal(decimalObj.process); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        bttf = (btuf.toDecimal(decimalObj.bills.unitPrice) * bq).toDecimal(decimalObj.process); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 ftObj.totalFee = btf.toDecimal(decimalObj.bills.totalPrice); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 ftObj.tenderTotalFee = bttf.toDecimal(decimalObj.bills.totalPrice); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                if (isEstimate){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    if (treeNode.calcType == treeNodeCalcType.ctGatherRationsFees){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        ftObj.unitFee = (ftObj.totalFee / bq).toDecimal(decimalObj.bills.unitPrice); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        ftObj.tenderUnitFee = (ftObj.tenderTotalFee / bq).toDecimal(decimalObj.bills.unitPrice); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                else{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    ftObj.unitFee = buf.toDecimal(decimalObj.bills.unitPrice); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    ftObj.tenderUnitFee = btuf.toDecimal(decimalObj.bills.unitPrice); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                ftObj.unitFee = buf.toDecimal(decimalObj.bills.unitPrice); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                ftObj.tenderUnitFee = btuf.toDecimal(decimalObj.bills.unitPrice); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 calcTools.checkFeeField(treeNode, ftObj); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -1509,10 +1532,11 @@ class CalcProgram { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         // 定额或叶子清单自己的计算程序计算 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         else{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             let fnArr = []; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            calcTools.getGLJList(treeNode); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             if (treeNode.calcType == treeNodeCalcType.ctRationCalcProgram) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 // 量价、工料机类型的定额要求市场合价 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 if (treeNode.data.type == rationType.volumePrice || treeNode.data.type == rationType.gljRation){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    delete treeNode.data.gljList; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     let muf = treeNode.data.marketUnitFee ? treeNode.data.marketUnitFee : 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     let q = calcTools.uiNodeQty(treeNode) ? calcTools.uiNodeQty(treeNode) : 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     let mtf = (muf * q).toDecimal(decimalObj.ration.totalPrice); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -1521,33 +1545,9 @@ class CalcProgram { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         treeNode.changed = true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     } ; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                // 工料机类型的定额、定额要算暂估费 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                if (treeNode.data.type != rationType.volumePrice){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                     treeNode.data.gljList = me.project.ration_glj.getGljArrByRation(treeNode.data); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    // 计算程序里没有暂估费的计算规则,会漏掉,所以这里要专门算。 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    calcTools.estimateFee(treeNode); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    fnArr.push('estimate'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                if (treeNode.data.programID == undefined){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    treeNode.data.programID = projectInfoObj.projectInfo.property.engineering; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            else if (treeNode.calcType == treeNodeCalcType.ctBillCalcProgram) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                let rations = me.project.Ration.getBillsSortRation(treeNode.source.getID()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                let q = calcTools.uiNodeQty(treeNode) ? calcTools.uiNodeQty(treeNode) : 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                treeNode.data.gljList = me.project.ration_glj.getGatherGljArrByRations(rations, q); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                if (treeNode.data.programID == undefined){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    treeNode.data.programID = projectInfoObj.projectInfo.property.engineering; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                // 叶子清单自己的计算程序计算,其暂估费也要汇总算。 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                calcTools.estimateFee(treeNode); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                fnArr.push('estimate'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (treeNode.data.programID == undefined) treeNode.data.programID = projectInfoObj.projectInfo.property.engineering; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             let template = me.compiledTemplates[treeNode.data.programID]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             treeNode.data.calcTemplate = template; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -1579,6 +1579,8 @@ class CalcProgram { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (!calcTools.isTotalCostBill(treeNode))  // 已在上面的分支中计算过 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            calcTools.estimateFee(treeNode); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         if (treeNode.changed && !changedArr.includes(treeNode)) changedArr.push(treeNode); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 |