Browse Source

面积增加费调整

zhangweicheng 5 years ago
parent
commit
248b434a9b

+ 8 - 1
modules/main/facade/project_facade.js

@@ -295,7 +295,14 @@ async function updateNodes(datas){
                                 if(pn.data['property.areaSetting']) areaSetting = pn.data['property.areaSetting'];
                             }
                         }
-                        let t = await glj_calculate_facade.calculateQuantity({rationID:node.data.ID},true,false,node.data.areaIncreaseFee,areaSetting);
+                        let t = await glj_calculate_facade.calculateQuantity({rationID:node.data.ID},null,false,node.data.areaIncreaseFee,areaSetting);
+                        if(t.glj_result && t.glj_result.length > 0){//这里要更新工料机的消耗量,修改数据库的操作已经在上一步中完成了,现在只需刷新前端即可
+                           for(let gr of t.glj_result){
+                               let tdata = gr.doc;
+                               tdata.ID = gr.query.ID;
+                               datas.push({type:projectConsts.RATION_GLJ,data:tdata});
+                           }
+                        }
                         node.data.adjustState = t.adjustState;
                     }
                     if(node.action == "delete") deleteRationIDs.push(node.data.ID);

+ 27 - 6
modules/ration_glj/facade/glj_calculate_facade.js

@@ -41,6 +41,11 @@ let coeTypeMap = {
     "设备":5
 };
 
+let areaIncreaseMap = {
+    1:"labour",
+    2:"material",
+    3:"machine"
+};
 
 async function calculateQuantity(query,noNeedCal,refreshRationName = false,areaIncreaseFee,areaSetting){
     try {
@@ -58,6 +63,10 @@ async function calculateQuantity(query,noNeedCal,refreshRationName = false,areaI
              return null;
          }
         if(areaIncreaseFee !== null && areaIncreaseFee !== undefined) impactRation.areaIncreaseFee = areaIncreaseFee;
+        if(impactRation.areaIncreaseFee == true && !areaSetting){
+            let project =  await project_model.findOne({ID:impactRation.projectID},'property.areaSetting');
+            areaSetting = project.property.areaSetting;
+        }
          if(impactRation._doc.hasOwnProperty("rationAssList")&&impactRation.rationAssList.length>0){
              let temTimes = [];
              let thirdRationCodes=[];
@@ -85,7 +94,7 @@ async function calculateQuantity(query,noNeedCal,refreshRationName = false,areaI
          }
          gljList = sortRationGLJ(gljList);
          for(let i =0;i<gljList.length;i++ ){
-             let r = await calculateQuantityPerGLJ(gljList[i],gljList,coeList,assList,adjustState,noNeedCal);
+             let r = await calculateQuantityPerGLJ(gljList[i],gljList,coeList,assList,adjustState,noNeedCal,impactRation.areaIncreaseFee,areaSetting);
              if(quantityUpdateCheck(gljList[i],r) == true) result.glj_result.push(r);
          }
 
@@ -114,10 +123,6 @@ async function calculateQuantity(query,noNeedCal,refreshRationName = false,areaI
 }
 
 async function setAreaAdjustState(projectID,adjustState,areaSetting){
-    if(!areaSetting){
-        let project =  await project_model.findOne({ID:projectID},'property.areaSetting');
-        areaSetting = project.property.areaSetting;
-    }
     if(areaSetting){
         let stringArr = [];
         let labour = getStr(areaSetting.labour);
@@ -207,7 +212,7 @@ function sortRationGLJ(list) {
     return list;
 }
 
-async function calculateQuantityPerGLJ(glj,gljList,coeList,assList,adjustState,noNeedCal) {
+async function calculateQuantityPerGLJ(glj,gljList,coeList,assList,adjustState,noNeedCal,areaIncreaseFee,areaSetting) {
     let decimalObject =await decimal_facade.getProjectDecimal(glj.projectID);
     let decimal = (decimalObject&&decimalObject.glj&&decimalObject.glj.quantity)?decimalObject.glj.quantity:3;
     let quantity =  scMathUtil.roundTo(parseFloat(glj.quantity),-decimal);
@@ -235,6 +240,9 @@ async function calculateQuantityPerGLJ(glj,gljList,coeList,assList,adjustState,n
                 quantity = scMathUtil.roundToString(quantity,decimal);
                 quantity = calculateQuantityByCustomerCoes(quantity,customerCoe,glj,decimal);
             }
+            //计算面积增加费
+            if(areaIncreaseFee == true) quantity = calclateAreaIncrease(quantity,glj,areaSetting,decimal);
+
             result.doc.quantity =scMathUtil.roundToString(quantity,decimal);
             //2019-01-03 需求修改中间过程的价格不参与计算
             //glj.quantity = quantity;//这里保存中间过程计算出来的消耗量,后面处理“+*”操作符时要用到
@@ -246,6 +254,19 @@ async function calculateQuantityPerGLJ(glj,gljList,coeList,assList,adjustState,n
     }
 }
 
+function calclateAreaIncrease(quantity,glj,areaSetting,decimal){
+    if(areaSetting){
+        let atype = areaIncreaseMap[getRootGLJType(glj.type).ID];
+        if(atype && areaSetting[atype]){
+            quantity =  scMathUtil.roundForObj(quantity,decimal);
+            quantity = scMathUtil.roundToString(quantity * (1 + areaSetting[atype]/100 ),decimal)
+        }
+    }
+    return quantity
+}
+
+
+
 async function calculateAss(quantity,assList,glj) {
     for(let i=0;i<assList.length;i++){
         if(assList[i].assRation){

+ 12 - 8
web/building_saas/main/js/views/area_increase_fee_view.js

@@ -22,12 +22,7 @@ let areaIncreaseFeeObj = {
         setData(data.data,newval,fieldName);
         datas.push(data);
         setChildren(node,newval,datas);//同步设置所有子项
-        let nodes = await projectObj.project.syncUpdateNodesAndRefresh(datas);
-        projectObj.project.calcProgram.calcNodesAndSave(nodes,async function () {
-            await OVER_HEIGHT.reCalcOverHeightFee();
-            await itemIncreaseFeeObj.calcItemIncreaseFeeByNodes(nodes);
-        });
-
+        this.updateAndRefresh(datas);
 
         function setChildren(pnode,newValue,datas) {//同步设置所有子项
             if(pnode.children.length > 0 && (pnode.children[0].sourceType == ModuleNames.bills || pnode.children[0].sourceType == ModuleNames.ration)){//设置子项
@@ -47,6 +42,16 @@ let areaIncreaseFeeObj = {
             if(fieldName == "outPutMaxPrice") data.maxPrice = null;
         }
     },
+    updateAndRefresh:async function(datas){
+        let nodes = await projectObj.project.syncUpdateNodesAndRefresh(datas);
+        projectObj.project.calcProgram.calcNodesAndSave(nodes,async function () {
+            await OVER_HEIGHT.reCalcOverHeightFee();
+            await itemIncreaseFeeObj.calcItemIncreaseFeeByNodes(nodes);
+        });
+        projectObj.project.projectGLJ.calcQuantity();
+        gljOprObj.refreshView();
+    },
+
     confirmAreaIncreaseFeeSetting:async function () {
         let labour = $("#areaIncreaseFee_labour").val();
         let material = $("#areaIncreaseFee_material").val();
@@ -75,8 +80,7 @@ let areaIncreaseFeeObj = {
         if(needUpdate){
             let datas = this.getAreaIncreaseDatas();
             datas.push(tem);
-            let nodes = await projectObj.project.syncUpdateNodesAndRefresh(datas);
-            projectObj.project.calcProgram.calcNodesAndSave(nodes);
+           this.updateAndRefresh(datas);
         }
 
         function settingNumCheck(value,type) {