瀏覽代碼

清单计算

zhangweicheng 5 年之前
父節點
當前提交
b31981e7e9
共有 2 個文件被更改,包括 85 次插入8 次删除
  1. 1 1
      web/building_saas/main/js/models/calc_program.js
  2. 84 7
      web/building_saas/main/js/views/divide_view.js

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

@@ -2183,7 +2183,7 @@ class CalcProgram {
     };
     getGljArrByRation(ration){
         if(ration.itemType=="定额"){//分摊定额
-            return divideObj.getRationGLJDatas();
+            return divideObj.getRationGLJDatas(ration);
         }
         if (ration.type == rationType.gljRation){
             let glj = JSON.parse(JSON.stringify(ration));

+ 84 - 7
web/building_saas/main/js/views/divide_view.js

@@ -7,9 +7,9 @@ let divideObj = {
       {headerName: "单位", headerWidth: 100, dataCode: "unit", dataType: "String",cellType:'comboBox',editable:true,options:['m', 'm2', 'm3', 'km', 't', 'kg', '台班', '工日', '昼夜', '元', '项', '处', '个', '件',
       '根', '组', '系统', '台', '套', '株', '丛', '缸', '支', '只', '块', '座', '对', '份', '樘', '攒', '榀']},
       {headerName: "工程量", headerWidth: 80, dataCode: "quantity", dataType: "Number",validator:"number",getText:"notZero"},
-      {headerName: "单价", headerWidth: 100, dataCode: "marketUnitFee", dataType: "Number",validator:"number",getText:"notZero"},
+      {headerName: "单价", headerWidth: 100, dataCode: "marketPrice", dataType: "Number",validator:"number",getText:"notZero"},
       {headerName: "金额", headerWidth: 100, dataCode: "marketTotalFee", dataType: "Number",validator:"number",getText:"notZero"},
-      {headerName: "预算价", headerWidth: 100, dataCode: "marketPrice", dataType: "Number",validator:"number",getText:"notZero"},
+      {headerName: "预算价", headerWidth: 100, dataCode: "marketUnitFee", dataType: "Number",validator:"number",getText:"notZero"},
       {headerName: "取费类别", headerWidth: 60, dataCode: "programID", hAlign:'center', dataType: "String",cellType:'comboBox',editorValueType:true}
     ],
     view:{ 
@@ -88,6 +88,10 @@ let divideObj = {
           datas.push(r)
           if(parentMap[r.ID] && parentMap[r.ID].length > 0){
             for(let c of parentMap[r.ID]){
+              if(c.fees){
+                let comnonFee = _.find(c.fees,{"fieldName":"common"})
+                c.marketPrice = comnonFee.unitFee;
+              }
               datas.push(c);
             }
           }
@@ -172,9 +176,9 @@ let divideObj = {
       return datas;
     }
   },
-  getRationGLJDatas : function (){//这里是给计算程序统一调用的方法,树结构不用这个方法了
+  getRationGLJDatas : function (ration){//这里是给计算程序统一调用的方法,树结构不用这个方法了
     let datas = [];
-    let selected = divideObj.getSelectedItem();
+    let selected = ration;
     let divideSetting =  projectObj.project.divide_setting.datas;
     if(selected && selected.itemType=="定额"){
       for(r of divideSetting.ration_gljs){
@@ -184,7 +188,7 @@ let divideObj = {
             datas.push(newr);
           }         
       }
-      gljOprObj.combineWithProjectGlj(datas);
+      gljOprObj.combineWithProjectGlj(datas,false,selected);
     }
     return datas;
   },
@@ -291,6 +295,21 @@ let divideObj = {
     datas.push({type:"add",doc:newItem});
     await this.updateItem(datas);
   },
+  calcBills:function(bills){
+    let divideSetting =  projectObj.project.divide_setting.datas;
+    let subNodes = [];
+    let item=null;
+    for(let c of divideSetting.divideList){
+      if(c.ParentID == bills.ID){
+        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(selected)
+  },
   deleteItem:async function(){
     let selected = this.getSelectedItem();
     let subItems = [];
@@ -383,11 +402,49 @@ let divideObj = {
         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);
     } catch (error) {
       console.log(error)
     }
     $.bootstrapLoading.end();
-    this.showDatas();
+    //this.showDatas();
+  },
+  calcDivideItem:async function(divide){
+    let updateDatas = [];
+    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}});
+       
+      }else{
+        updateDatas.push({ID:divide.ID,type:'update',doc:{fees:divide.fees,marketUnitFee:divide.marketUnitFee,marketTotalFee:divide.marketTotalFee}});
+      } 
+      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"))
+        }
+      }
+      parentSum = scMathUtil.roundForObj(parentSum,getDecimal("bills.totalPrice"));
+      if(parent && parent.marketTotalFee != parentSum) updateDatas.push({ID:parent.ID,type:'update',doc:{marketTotalFee:parentSum}});; 
+    }
+
+
+    updateDatas.length > 0?await this.updateItem(updateDatas):this.showDatas();
+  },
+
+  getTotolFee:function name(divide) {
+    if(divide.itemType == "定额"){
+      let comnonFee = _.find(divide.fees,{"fieldName":"common"})
+      return comnonFee && comnonFee.totalFee ? comnonFee.totalFee:0;
+    }else if(divide.itemType == "量价"){
+      return divide.marketTotalFee;
+    }
   },
 
   updateCustomerCoe:function(result){
@@ -428,8 +485,8 @@ let divideObj = {
         alert('输入的数据类型不对,请重新输入!');
         return me.showDatas();
     }
-
     await me.updateItem([me.getDivideUpdateData(recode,dataCode,value)]);
+    await me.calcDivideItem(recode);
   },
   onDivideSelectionChange:function(sender,args){
     let me = divideObj;
@@ -455,6 +512,15 @@ let divideObj = {
         doc["marketTotalFee"] = scMathUtil.roundForObj(value * tq,getDecimal("bills.totalPrice"))
       }
     }
+    if(recode.itemType =="定额"&& dataCode == 'quantity'){
+      if(value){
+          value = scMathUtil.roundForObj(parseFloat(value) / FilterNumberFromUnit(recode.unit),getDecimal("ration.quantity"));
+      }else {
+          value = 0;
+      }
+    }
+
+    if(recode.itemType =="量价" && dataCode=="marketPrice") dataCode=="marketUnitFee"
     doc[dataCode]=value;
     return {ID:recode.ID,type:'update',doc:doc}
   },
@@ -619,6 +685,17 @@ let divideObj = {
                   console.log(selected)
                 }
             },
+            "calcBills": {
+                name: "计算分摊项",
+                icon: 'fa-sign-in',
+                disabled: function () {
+                  return me.rightClickTarget.row === undefined
+                },
+                callback: function (key, opt) {  
+                  let selected = me.getSelectedItem();
+                  me.calcBills(selected);
+                }
+            },
             "removeItem": {
                 name: "删除",
                 icon: 'fa-trash-o',