zhangweicheng vor 5 Jahren
Ursprung
Commit
989e79ed9f

+ 1 - 0
web/building_saas/main/js/models/calc_program.js

@@ -1809,6 +1809,7 @@ class CalcProgram {
 
     // 清单部分抽取出来,供分摊清单公用。commonCalcType:1 叶子清单汇总定额的费用类别; 2 父清单汇总子清单的费用类别。3: 分摊:叶子清单汇总定额的费用类别。
     innerCalcBill(treeNode, commonCalcType, tender = tenderTypes.ttCalc){
+        let me = this;
         treeNode.data.programID = null;
         calcTools.initFees(treeNode);
         let nodes = [];

+ 76 - 30
web/building_saas/main/js/views/divide_view.js

@@ -85,14 +85,11 @@ let divideObj = {
       if(parentMap[-1]&&parentMap[-1].length>0){
         for(let r of parentMap[-1]){
           r.collapsed = false;
+          setItemsPrice(r);
           datas.push(r)
           if(parentMap[r.ID] && parentMap[r.ID].length > 0){
             for(let c of parentMap[r.ID]){
-              if(c.fees){
-                let commonFee = _.find(c.fees,{"fieldName":"common"})
-                if (commonFee)
-                    c.marketPrice = commonFee.unitFee;
-              }
+              setItemsPrice(c);
               datas.push(c);
             }
           }
@@ -100,6 +97,25 @@ let divideObj = {
       }
       return datas;
     }
+
+    function setItemsPrice(item){
+      if(item.fees){
+        let commonFee = _.find(item.fees,{"fieldName":"common"})
+        if (commonFee){
+          item.marketPrice = commonFee.unitFee;
+          item.marketTotalFee = commonFee.totalFee;
+        }
+          
+      }
+    }
+
+  },
+
+
+  showCalcProgramDatas:function(){
+    if(!$('#divede_calc_nav').hasClass('active')) return;
+    this.divideSubSpread.setActiveSheetIndex(1);
+    //this.rationGLJDatas = getTreeRationGLJDatas();
   },
 
   showRationGLJDatas:function(){
@@ -243,9 +259,9 @@ let divideObj = {
     if(data){
       if(data.itemType == "分摊项"){
         //金额,预算价,取费类别不可编辑
-        if(dataCode =="marketTotalFee" || dataCode =="marketPrice" || dataCode =="programID" ) return false;
+        if(dataCode =="marketTotalFee" || dataCode =="marketUnitFee" || dataCode =="programID" ) return false;
         //有子项时,单价不可编辑
-        if(dataCode =="marketUnitFee"&& _.find(me.divideDatas,{ParentID:data.ID})) return false;
+        if(dataCode =="marketPrice"&& _.find(me.divideDatas,{ParentID:data.ID})) return false;
       }
       if( data.itemType == "量价" && dataCode =="marketTotalFee") return false//量价:“金额”不可编辑。
       if(data.itemType == "定额"){ //定额:“单位”、“单价”、“金额”、“预算价”
@@ -284,6 +300,7 @@ let divideObj = {
     let selected = this.getSelectedItem();
     if(itemType!="分摊项"){//当插入定额或者量价时:
       newItem.ParentID = selected.itemType == "分摊项"?selected.ID:selected.ParentID;
+      newItem.fees = [{fieldName:"common",tenderTotalFee:0,unitFee:0,totalFee:0,tenderUnitFee:0}];
     }
     if(itemType == "定额") newItem.type = rationType.ration;
     if(itemType == "量价"){
@@ -296,19 +313,20 @@ let divideObj = {
     datas.push({type:"add",doc:newItem});
     await this.updateItem(datas);
   },
-  calcBills:function(bills){
+  calcBills:function(bills,deleteMap){
     let divideSetting =  projectObj.project.divide_setting.datas;
     let subNodes = [];
     let item=null;
     for(let c of divideSetting.divideList){
       if(c.ParentID == bills.ID){
+        if(deleteMap && deleteMap[c.ID]) continue;
         this.initFeeIndexs(c);
         subNodes.push({data:c, sourceType:"ration", calcType: 1, updateData:[]});
       } 
       if(c.ID == bills.ID) item = c;
     }
     projectObj.project.calcProgram.innerCalcBill({data:item, sourceType:"bills", calcType: 3, updateData:[],children:subNodes},3);
-    console.log(item)
+    return item;
   },
   initFeeIndexs:function(item){
     item.feesIndex = {};
@@ -327,9 +345,15 @@ let divideObj = {
       for(let s of this.divideDatas){
         if(s.ParentID == selected.ID) subItems.push({type:"delete",ID:s.ID});
       }
+    }else{
+      let deleteMap = {};
+      deleteMap[selected.ID] = true;
+      let item = this.calcBills({ID:selected.ParentID},deleteMap);
+      subItems.push({ID:item.ID,type:'update',doc:{fees:item.fees}});  
     }
     subItems.push({type:"delete",ID:selected.ID,itemType:selected.itemType});
     await this.updateItem(subItems);
+
   },
   getNewSeqs:function(selected,newItem){
     let seq = 1,datas=[],refreshSeq = false;
@@ -394,23 +418,25 @@ let divideObj = {
     if(pEngineer) data.programID = pEngineer;
     data.divideDatas = datas;
     let sel = this.divideSheet.getSelections()[0];
-    this.divideSheet.setSelection(sel.row+1,sel.col,sel.rowCount,sel.colCount);
     await this.updateDivideRation(data);
+    this.divideSheet.setSelection(sel.row+1,sel.col,sel.rowCount,sel.colCount);
 
   },
   updateDivideRation:async function(data){
-    let divideSetting =  projectObj.project.divide_setting.datas
+    let divideSetting =  projectObj.project.divide_setting.datas;
+    let newRation = data;
     try {
       $.bootstrapLoading.start();
       let result = await ajaxPost("/ration/updateDivideRation",data)
       if(data.type=="add"){
         data.divideDatas.push({type:"add",doc:result.ration});
         this.refreshDivideCaches(data.divideDatas);
+        newRation = result.ration;
         if(result.projectGLJList) projectObj.project.projectGLJ.loadNewProjectGLJToCaches(result.projectGLJList,true);   
         if(result.ration_gljs) divideSetting.ration_gljs = divideSetting.ration_gljs.concat(result.ration_gljs);
         if(result.ration_coes) divideSetting.ration_coes = divideSetting.ration_coes.concat(result.ration_coes);
       } 
-      await this.calcDivideItem(data);
+      await this.calcDivideItem(newRation);
     } catch (error) {
       console.log(error)
     }
@@ -419,30 +445,33 @@ let divideObj = {
   },
   calcDivideItem:async function(divide){
     let updateDatas = [];
+    let children =[];
     let divideSetting =  projectObj.project.divide_setting.datas
     if(divide.itemType != "分摊项"){//不是分摊项,调用计算程序
       let parentSum = 0;
       let parent = null;
       projectObj.project.calcProgram.innerCalcRation({data:divide, sourceType:"ration", calcType: 1, updateData:[]});
       if(divide.itemType == "定额"){
-        let comnonFee = _.find(divide.fees,{"fieldName":"common"})
-        if(comnonFee)updateDatas.push({ID:divide.ID,type:'update',doc:{fees:divide.fees,marketUnitFee:comnonFee.unitFee,marketTotalFee:comnonFee.totalFee}});
-       
+        updateDatas.push({ID:divide.ID,type:'update',doc:{fees:divide.fees}});  
       }else{
-        updateDatas.push({ID:divide.ID,type:'update',doc:{fees:divide.fees,marketUnitFee:divide.marketUnitFee,marketTotalFee:divide.marketTotalFee}});
+        updateDatas.push({ID:divide.ID,type:'update',doc:{fees:divide.fees,marketUnitFee:divide.marketUnitFee}});
       } 
-      parentSum = this.getTotolFee(divide);
       for(let c of divideSetting.divideList){
         if(c.ID == divide.ParentID) parent = c;
-        if(c.ParentID == divide.ParentID && c.ID != divide.ID){
-          parentSum = scMathUtil.roundForObj(parentSum+this.getTotolFee(c),getDecimal("process"))
+        if(c.ParentID == divide.ParentID){
+          let t = c.ID != divide.ID?c:divide;
+          this.initFeeIndexs(t);
+          children.push({data:t, sourceType:"ration", calcType: 1, updateData:[]});
         }
       }
-      parentSum = scMathUtil.roundForObj(parentSum,getDecimal("bills.totalPrice"));
-      if(parent && parent.marketTotalFee != parentSum) updateDatas.push({ID:parent.ID,type:'update',doc:{marketTotalFee:parentSum}});; 
+      if(children.length > 0){
+        projectObj.project.calcProgram.innerCalcBill({data:parent, sourceType:"bills", calcType: 3, updateData:[],children:children},3);
+        updateDatas.push({ID:parent.ID,type:'update',doc:{fees:parent.fees}});  
+      } 
+    }else{
+      divide = this.calcBills(divide);
+      updateDatas.push({ID:divide.ID,type:'update',doc:{fees:divide.fees}});  
     }
-
-
     updateDatas.length > 0?await this.updateItem(updateDatas):this.showDatas();
   },
 
@@ -511,14 +540,24 @@ let divideObj = {
     if(recode.itemType == "分摊项"){
       if(dataCode == "quantity"){
         value = scMathUtil.roundForObj(value,3);
-        let tu = scMathUtil.roundForObj(recode.marketUnitFee&&recode.marketUnitFee!=""?recode.marketUnitFee:0,getDecimal("bills.unitPrice"))
-        doc["marketTotalFee"] = scMathUtil.roundForObj(value * tu,getDecimal("bills.totalPrice"))
+        let commonFee = _.find(recode.fees,{"fieldName":"common"})
+        if (commonFee){
+          let tu = scMathUtil.roundForObj(commonFee.unitFee&&commonFee.unitFee!=""?commonFee.unitFee:0,getDecimal("bills.unitPrice"))
+          commonFee.totalFee = scMathUtil.roundForObj(value * tu,getDecimal("bills.totalPrice"));
+          doc["fees"] = recode.fees;
+        }
       }
-      if(dataCode == "marketUnitFee"){
+      if(dataCode == "marketPrice"){
         value = scMathUtil.roundForObj(value,getDecimal("bills.unitPrice"));
-        let tq = scMathUtil.roundForObj(recode.quantity && recode.quantity!=""?recode.quantity:0,3)
-        doc["marketTotalFee"] = scMathUtil.roundForObj(value * tq,getDecimal("bills.totalPrice"))
+        let commonFee = _.find(recode.fees,{"fieldName":"common"})
+        if (commonFee){
+          //let tu = scMathUtil.roundForObj(commonFee.unitFee&&commonFee.unitFee!=""?commonFee.unitFee:0,getDecimal("bills.unitPrice"))
+          commonFee.unitFee = scMathUtil.roundForObj(value,getDecimal("bills.unitPrice"));
+          doc["fees"] = recode.fees;
+        }
+        return {ID:recode.ID,type:'update',doc:doc};
       }
+      
     }
     if(recode.itemType =="定额"&& dataCode == 'quantity'){
       if(value){
@@ -528,7 +567,7 @@ let divideObj = {
       }
     }
 
-    if(recode.itemType =="量价" && dataCode=="marketPrice") dataCode=="marketUnitFee"
+    if(recode.itemType =="量价" && dataCode=="marketPrice") dataCode="marketUnitFee"
     doc[dataCode]=value;
     return {ID:recode.ID,type:'update',doc:doc}
   },
@@ -547,6 +586,8 @@ let divideObj = {
     this.divideSubSheet = this.divideSubSpread.getSheet(0);
     sheetCommonObj.initSheet(this.divideSubSheet, gljCol.ration_glj_setting, 0);
     SheetDataHelper.protectdSheet(this.divideSubSheet);
+    this.calcProgramSheet = this.divideSubSpread.getSheet(1);
+    calcProgramObj.initSheet(this.calcProgramSheet);
   },
   initNavItem(){
     let selected = this.getSelectedItem();
@@ -701,7 +742,7 @@ let divideObj = {
                 },
                 callback: function (key, opt) {  
                   let selected = me.getSelectedItem();
-                  me.calcBills(selected);
+                  console.log(me.calcBills(selected));
                 }
             },
             "removeItem": {
@@ -889,4 +930,9 @@ $('#divide_zmhs_toogle').bind('click',function (){
       $("#divide_hs-nav").click();
   }
    $("#divide_zmhs_toogle").hide();
+});
+
+$('.divideBottom ul li a').bind('click',function () {
+  divideObj.showRationGLJDatas();
+  divideObj.showCalcProgramDatas();
 });