| 
					
				 | 
			
			
				@@ -299,6 +299,37 @@ function summaryData(sourceData, handleCfg, prjData){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             tempRstArr.push(item); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    let private_cal_before_sum = function () { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        for (let calcAheadObj of handleCfg[JV.PROP_SUM_CALC_AHEAD]) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (!curParentPrjData[calcAheadObj["seeking_parent"]]) curParentPrjData[calcAheadObj["seeking_parent"]] = getModuleDataByKey(prjData, calcAheadObj["seeking_parent"]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            for (let pDataItem of curParentPrjData[calcAheadObj["seeking_parent"]].data) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                let data = (pDataItem._doc)?pDataItem._doc:pDataItem; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                for (let item of tempRstArr) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    if (item[calcAheadObj["seeking_key"]] === data[calcAheadObj["parent_key"]]) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        for (let sumKey of handleCfg[JV.PROP_SUM_SUM_KEYS]) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            switch (calcAheadObj[JV.PROP_SUM_CACL_TYPE]) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                case "+": 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                    item[sumKey] = parseFloat(item[sumKey]) + parseFloat(data[calcAheadObj["calc_property"]]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                    break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                case "-": 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                    item[sumKey] = parseFloat(item[sumKey]) - parseFloat(data[calcAheadObj["calc_property"]]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                    break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                case "*": 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                    item[sumKey] = item[sumKey] * parseFloat(data[calcAheadObj["calc_property"]]).toFixed(4); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                    break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                case "/": 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                    item[sumKey] = item[sumKey] / parseFloat(data[calcAheadObj["calc_property"]]).toFixed(4); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                    break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                default: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                    break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     let private_get_grp_key = function (item) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         let keys = []; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         for (let cfg of handleCfg[JV.PROP_SUM_GROUP_KEYS]) { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -318,6 +349,9 @@ function summaryData(sourceData, handleCfg, prjData){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         return ( "grp_key_" + keys.join('_')); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     let sumObj = {}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    if (handleCfg[JV.PROP_SUM_CALC_AHEAD] && handleCfg[JV.PROP_SUM_CALC_AHEAD].length > 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        private_cal_before_sum(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     for (let dtl of tempRstArr) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         let grpKey = private_get_grp_key(dtl); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         if (sumObj[grpKey] === null || sumObj[grpKey] === undefined) { 
			 |