Explorar o código

feat: 分摊问题,选中定额项执行分推,自动按父项分摊项执行。

zhangweicheng %!s(int64=4) %!d(string=hai) anos
pai
achega
52c0087eb1

+ 5 - 4
modules/main/facade/ration_facade.js

@@ -206,7 +206,7 @@ async function getNewMaterialRationDatas(data,compilation,withCoe = false){
     let stdRation = await searchDao.getRationItem(data.userID, compilation._id, data.rationRepIds,data.code);
     if(!stdRation) throw  "找不到指定的定额!";//new Error("找不到指定的定额!");
 
-    let newRation = await createNewMaterialRation(stdRation,data.quantityDecimal,data.projectID);
+    let newRation = await createNewMaterialRation(stdRation,data.quantityDecimal,data.projectID,data.programArray);
     let [ration_gljs,projectGLJList] = await addRationGLJ(stdRation,newRation,compilation,true,data.connect_key);
     let result = [newRation,ration_gljs,projectGLJList]
     if(withCoe == true){
@@ -217,7 +217,7 @@ async function getNewMaterialRationDatas(data,compilation,withCoe = false){
 }
 
 
-async function createNewMaterialRation(std,quantityDecimal,projectID){
+async function createNewMaterialRation(std,quantityDecimal,projectID,programArray){
     let newData = {};
     newData.ID = uuidV1();
     newData.projectID = projectID;
@@ -230,11 +230,12 @@ async function createNewMaterialRation(std,quantityDecimal,projectID){
     newData.quantity=scMathUtil.roundForObj(1 / FilterNumberFromUnit(std.unit),quantityDecimal);
     newData.from = std.type === 'complementary' ? 'cpt' : 'std';
     newData.rationAssList =await  createRationAss(std,true);
-    if(std.feeType == undefined || std.feeType == null || std.feeType ==''){//定额取费专业为空的情况下,取项目属性中的定额取费专业ID
+    newData.programID = getProgramID(programArray,std.feeType);
+  /*   if(std.feeType == undefined || std.feeType == null || std.feeType ==''){//定额取费专业为空的情况下,取项目属性中的定额取费专业ID
       newData.programID = await getProgramForProject(projectID);
     }else {
       newData.programID = std.feeType;
-    }
+    } */
     return newData;
 }
 

+ 57 - 34
web/building_saas/main/js/views/divide_view.js

@@ -183,12 +183,15 @@ let divideObj = {
     if(!$('#divede_calc_nav').hasClass('active')) return;
     this.divideSubSpread.setActiveSheetIndex(1);
     let selected = divideObj.getSelectedItem();
-    if(selected.itemType == "分摊项"){
-      selected = this.calcBills(selected);
-    }else{
-      projectObj.project.calcProgram.innerCalcRation({data:selected, sourceType:"ration", calcType: 1, updateData:[]});
+    if(selected){
+      if( selected.itemType == "分摊项"){
+        selected = this.calcBills(selected);
+      }else{
+        projectObj.project.calcProgram.innerCalcRation({data:selected, sourceType:"ration", calcType: 1, updateData:[]});
+      }
     }
-    let datas = selected.calcTemplate ? selected.calcTemplate.calcItems : [];
+   
+    let datas = selected && selected.calcTemplate ? selected.calcTemplate.calcItems : [];
     sheetCommonObj.initSheet(this.calcProgramSheet, calcProgramObj.setting, datas.length);
     sheetCommonObj.showData(this.calcProgramSheet, calcProgramObj.setting, datas);
     customRowHeader(this.calcProgramSheet, datas.length);
@@ -231,11 +234,14 @@ let divideObj = {
       if(init == true){//如果是初始化打开页面,要读取已经保存的分摊比例
          //使用已保存的分摊信息
          let item = divideObj.getSelectedItem();
-         let IDMap = {};
-         if(item.bills) IDMap = _.indexBy(item.bills,"ID");
-         if(IDMap[e.ID]){
-          e.divideRate = scMathUtil.roundForObj(parseFloat(IDMap[e.ID].divideRate) * 100,3);
-         } 
+         if(item){
+          let IDMap = {};
+          if(item.bills) IDMap = _.indexBy(item.bills,"ID");
+          if(IDMap[e.ID]){
+           e.divideRate = scMathUtil.roundForObj(parseFloat(IDMap[e.ID].divideRate) * 100,3);
+          } 
+         }
+         
       }else if(divideType == 0){//按清单金额比例
         if(e.totalFee != "" && total!=0) {
           totalFee = scMathUtil.roundForObj(e.totalFee,getDecimal("bills.totalPrice"));
@@ -311,7 +317,7 @@ let divideObj = {
       let datas = [];
       let item = divideObj.getSelectedItem();
       let IDMap = {};
-      if(item.bills) IDMap = _.indexBy(item.bills,"ID");
+      if(item && item.bills) IDMap = _.indexBy(item.bills,"ID");
       for(let n of projectObj.project.mainTree.roots){
         getDatas(n)
       }
@@ -606,8 +612,8 @@ let divideObj = {
 
     function getBillsDatas(){
       let datas = [];
-      let item = divideObj.getSelectedItem();
-      if(item.bills){
+      let item = divideObj.getDivideItem();
+      if(item && item.bills){
         for(let b of item.bills){
           if(b.divideRate > 0) datas.push(b);
         }
@@ -624,6 +630,18 @@ let divideObj = {
     }
     return data;
   },
+  getDivideItem:function(){
+   const selected = this.getSelectedItem();
+   if(selected){
+    if(selected.itemType ==="分摊项") return selected;
+    if(selected.ParentID){
+     return _.find(this.divideDatas,{ID:selected.ParentID})
+    }
+   } 
+   return null
+  },
+
+
   addNewItems:async function(itemType,type){
     let newItem = {
       ID:uuid.v1(),
@@ -772,6 +790,7 @@ let divideObj = {
     let newRation = null;
     try {
       $.bootstrapLoading.start();
+      data.programArray= calcTools.getProgramArray();
       let result = await ajaxPost("/ration/updateDivideRation",data)
       if(data.type=="add"){
         data.divideDatas.push({type:"add",doc:result.ration});
@@ -1102,20 +1121,23 @@ let divideObj = {
   },
   initNavItem(){
     let selected = this.getSelectedItem();
-    if(selected.itemType == "分摊项"){
-      $("#divide_itemTextDiv").hide();
-      $(`#divide_subSpread`).css('width', "100%");
-    }else{
-      $("#divide_itemTextDiv").show();
-      if(this.showDivideGljSubTab == true){
-        $("#divide_gljSubDiv").show();
-        $("#divide_rgResize").show();
-      } else {
-          $("#divide_gljSubDiv").hide();
-          $("#divide_rgResize").hide();
+    if(selected){
+      if( selected.itemType == "分摊项"){
+        $("#divide_itemTextDiv").hide();
+        $(`#divide_subSpread`).css('width', "100%");
+      }else{
+        $("#divide_itemTextDiv").show();
+        if(this.showDivideGljSubTab == true){
+          $("#divide_gljSubDiv").show();
+          $("#divide_rgResize").show();
+        } else {
+            $("#divide_gljSubDiv").hide();
+            $("#divide_rgResize").hide();
+        }
+        this.initItemWidth();
       }
-      this.initItemWidth();
-    }  
+    }
+      
     this.divideSubSpread.refresh();
   },
   initItemWidth:function (){
@@ -1586,16 +1608,17 @@ $('#divide_zmhs_toogle').bind('click',function (){
 
 $('#exec_divide_btn').bind('click',function (){
    if(projectReadOnly) return;
-   let selected = divideObj.getSelectedItem();
-   if(selected.itemType !="分摊项") return;
-   $("#exec_divide_label").html(`${selected.name}<br>分摊到:`)
+   let divideItem = divideObj.getDivideItem();
+   
+   if(!divideItem || divideItem.itemType !="分摊项") return;
+   $("#exec_divide_label").html(`${divideItem.name}<br>分摊到:`)
    $("#exec_divide_div").modal('show');
 });
 
 $('#cancel_divide_btn').bind('click',function (){
   if(projectReadOnly) return;
-  let selected = divideObj.getSelectedItem();
-  if(selected.itemType !="分摊项") return;
+  let selected = divideObj.getDivideItem();
+  if(!selected || selected.itemType !="分摊项") return;
   divideObj.cancelDivide(selected.ID);
 });
 
@@ -1612,8 +1635,8 @@ $('#divideBottom ul li a').on('shown.bs.tab',function () {
 $('#exec_divide_div').on('shown.bs.modal',function () {
   divideObj.initExecSpread();
   divideObj.showExecDatas(true);
-  let selected = divideObj.getSelectedItem();
-  let divideType = selected.divideType?selected.divideType:0;
+  let divideItem = divideObj.getDivideItem();
+  let divideType = divideItem.divideType?divideItem.divideType:0;
   for(let radio of $(".divide_type")){
     $(radio).prop('checked', divideType == $(radio).val());
   }
@@ -1622,7 +1645,7 @@ $('#exec_divide_div').on('shown.bs.modal',function () {
 
 $("#divide_confirm").bind('click',async function (){
   let divideType = parseInt($("input[name='divide_type']:checked").val());
-  let item = divideObj.getSelectedItem();
+  let item = divideObj.getDivideItem();
   divideObj.calcExecBillsData();
   await divideObj.calcDivideNodes(item,divideObj.execBillsDatas,async function(){
     let updateData = {ID:item.ID,type:'update',doc:{bills:divideObj.execBillsDatas,divideType:divideType}}

+ 1 - 1
web/building_saas/main/js/views/std_ration_lib.js

@@ -250,7 +250,7 @@ var rationLibObj = {
             }
         }
         if (sectionID) {
-            const [, owner] = $('#stdRationLibSelect').val().split('*');
+            const [, owner] = $(`#${from}stdRationLibSelect`).val().split('*');
             CommonAjax.post('/complementaryRation/api/getRationGljItemsBySection', {user_Id: userID, sectionId: sectionID, type: me.curLibType, owner}, function (datas) {
                 let chapterSheet = me[from+'rationChapterSpread'].getActiveSheet();
                 let sectionName = chapterSheet.getText(chapterSheet.getActiveRowIndex(), chapterSheet.getActiveColumnIndex());