瀏覽代碼

多选添加材料计算,默认主要材料bug

zhangweicheng 5 年之前
父節點
當前提交
9117e56ee9

+ 17 - 14
modules/glj/models/unit_price_model.js

@@ -287,20 +287,23 @@ class UnitPriceModel extends BaseModel {
         return rList;
     }
 
-    async updateCalcMaterial(data){
-        let doc = data.ext?data.ext:{};
-        doc[data.updateField] = data.value;
-        let unitPrice = await this.db.findAndModify({id:data.id,unit_price_file_id:data.unit_price_file_id},doc);
-        if(data.updateField == 'calcMaterial' && doc['calcMaterial'] == 0){//标记为0即删除材料计算标记,要删除其下挂的原价计算,运费计算,定额计算
-            let connect_key = gljUtil.getIndex(unitPrice);
-            await original_calc_model.deleteMany({unit_price_file_id:data.unit_price_file_id,connect_key:connect_key});
-            await freight_calc_model.deleteMany({unit_price_file_id:data.unit_price_file_id,connect_key:connect_key});
-            //to do 删除定额计算
-        }
-        if(!unitPrice){
-            throw "没有找到对应的单价";
-        }
-        return unitPrice;
+    async updateCalcMaterial(datas){
+        for(let data of datas){
+          let doc = data.ext?data.ext:{};
+          doc[data.updateField] = data.value;
+          let unitPrice = await this.db.findAndModify({id:data.id,unit_price_file_id:data.unit_price_file_id},doc);
+          if(data.updateField == 'calcMaterial' && doc['calcMaterial'] == 0){//标记为0即删除材料计算标记,要删除其下挂的原价计算,运费计算,定额计算
+              let connect_key = gljUtil.getIndex(unitPrice);
+              await original_calc_model.deleteMany({unit_price_file_id:data.unit_price_file_id,connect_key:connect_key});
+              await freight_calc_model.deleteMany({unit_price_file_id:data.unit_price_file_id,connect_key:connect_key});
+              //to do 删除定额计算
+          }
+          if(!unitPrice){
+              throw "没有找到对应的单价";
+          }
+        }
+        
+        return datas;
     }
     needUpdateParent(connect_key){
         let noNeedUpdateType = ["202","203","204"];//父类型为混凝土、砂浆,配合比,类型的,不用更新价格

+ 1 - 0
modules/main/facade/ration_facade.js

@@ -1037,6 +1037,7 @@ function getProjectGLJNewData(tmp,projectId,ext){
       materialCoe: tmp.materialCoe,
       base_price: tmp.basePrice,
       market_price: tmp.basePrice,
+      is_main_material:tmp.is_main_material?tmp.is_main_material:1,
       from:tmp.from?tmp.from:"std"
   };
   if(gljData.from == 'std' && ext && ext.priceField &&(tmp.priceProperty && tmp.priceProperty[ext.priceField]!= undefined && tmp.priceProperty[ext.priceField]!=null)){

+ 1 - 0
modules/ration_glj/facade/ration_glj_facade.js

@@ -667,6 +667,7 @@ function getGLJSearchInfo(ration_glj) {
         repositoryId: ration_glj.repositoryId,
         adjCoe: ration_glj.adjCoe,
         materialType:ration_glj.materialType,
+        is_main_material:ration_glj.is_main_material?ration_glj.is_main_material:1,
         materialCoe:ration_glj.materialCoe,
         grossWeightCoe:ration_glj.grossWeightCoe,
         purchaseStorageRate:ration_glj.purchaseStorageRate,

+ 69 - 48
web/building_saas/main/js/models/project_glj.js

@@ -283,57 +283,78 @@ ProjectGLJ.prototype.getPriceDecimal = function (glj) {//价格的小数位数
     }
 
 };
-ProjectGLJ.prototype.updateCalcMaterial =async function (projectGLJ,updateField,value,ext) {//只有添加、删除走这个方法
-    let glj = _.find(this.datas.gljList,{'id':projectGLJ.id});
-    if (glj) {
-        if(glj.unit_price[updateField] == value){
-            return;
-        }
-        if(updateField == 'calcMaterial'){
-            ext=ext?ext:{};
-            if(value == 1){//添加材料计算操作,把单位毛重/采购保管费率等数据复制一份
-                ext['grossWeightCoe_n'] = glj.unit_price.grossWeightCoe;
-                ext['purchaseStorageRate_n'] = glj.unit_price.purchaseStorageRate;
-                ext['offSiteTransportLossRate_n'] = glj.unit_price.offSiteTransportLossRate;
-                ext['handlingLossRate_n'] = glj.unit_price.handlingLossRate;
-                ext['totalLoadingTimes'] = '1';
-            }else if(value == 0){//删除操作,恢复单位毛重/采购保管费率等数据
-                ext['supplyLocation'] = '';
-                ext['originalPrice'] = '0';
-                ext['unitFreight']='0';
-                ext['totalLoadingTimes']='0';
-                ext['offSiteTransportLoss']='0';
-                ext['purchaseStorage']='0';
-                ext['packageRecoverValue']='0';
-            }
-        }
-        let data = {id: glj.unit_price.id,updateField:updateField ,value: value,unit_price_file_id:glj.unit_price.unit_price_file_id,ext:ext};
-        $.bootstrapLoading.start();
-        try {
-            let result = await ajaxPost('/glj/updateCalcMaterial',data);
-            glj.unit_price[updateField] = value;
-            if(ext){
-                for(let key in ext){
-                    glj.unit_price[key] = ext[key];
-                }
-            }
-            if(updateField == 'calcMaterial' && value ==0){///标记为0即删除材料计算标记,要删除其下挂的原价计算,运费计算,定额计算,消耗量重新计算
-                let connect_key = gljUtil.getIndex(glj);
-                _.remove(this.datas.originalList,{'connect_key':connect_key});
-                _.remove(this.datas.freightList,{'connect_key':connect_key});
-                this.calcQuantity();
-                // to do 删除定额计算
 
-            }
-            projectGljObject.refreshDataSheet();
-            materialCalcObj.showDatas();
-        }catch (e){
-            console.log(e)
-        }finally {
-            $.bootstrapLoading.end();
-        }
+ProjectGLJ.prototype.getCalcMaterialUpdateData = function(projectGLJ,updateField,value,ext){//只有添加、删除走这个方法
+  let glj = _.find(this.datas.gljList,{'id':projectGLJ.id});
+  if(!glj) return null;
+  
+  if(glj.unit_price[updateField] == value){
+      return null;
+  }
+  if(updateField == 'calcMaterial'){
+      ext=ext?ext:{};
+      if(value == 1){//添加材料计算操作,把单位毛重/采购保管费率等数据复制一份
+          ext['grossWeightCoe_n'] = glj.unit_price.grossWeightCoe;
+          ext['purchaseStorageRate_n'] = glj.unit_price.purchaseStorageRate;
+          ext['offSiteTransportLossRate_n'] = glj.unit_price.offSiteTransportLossRate;
+          ext['handlingLossRate_n'] = glj.unit_price.handlingLossRate;
+          ext['totalLoadingTimes'] = '1';
+      }else if(value == 0){//删除操作,恢复单位毛重/采购保管费率等数据
+          ext['supplyLocation'] = '';
+          ext['originalPrice'] = '0';
+          ext['unitFreight']='0';
+          ext['totalLoadingTimes']='0';
+          ext['offSiteTransportLoss']='0';
+          ext['purchaseStorage']='0';
+          ext['packageRecoverValue']='0';
+      }
+  }
+  let data = {id: glj.unit_price.id,updateField:updateField ,value: value,unit_price_file_id:glj.unit_price.unit_price_file_id,ext:ext}; 
+  return {data:data,glj:glj}
+}
 
+ProjectGLJ.prototype.updateCalcMaterials = async function(projectGLJs,value) {//只有添加、删除走这个方法
+  let updateField = 'calcMaterial';
+  let datas = [];
+  let dataMaps = [];
+  for(let p of projectGLJs){
+    let map = this.getCalcMaterialUpdateData(p,updateField,value);
+    if(map){
+      datas.push(map.data);
+      dataMaps.push(map);
+    } 
+  }
+  if(datas.length == 0) return;
+  $.bootstrapLoading.start();
+  try {
+    let result = await ajaxPost('/glj/updateCalcMaterial',datas);
+    let calcQ = false;
+    for(let dm of dataMaps){
+      let glj = dm.glj;
+      glj.unit_price[updateField] = value;
+      if(dm.data.ext) gljUtil.setProperty(glj.unit_price,);
+      if(updateField == 'calcMaterial' && value ==0){///标记为0即删除材料计算标记,要删除其下挂的原价计算,运费计算,定额计算,消耗量重新计算
+        calcQ = true;
+        let connect_key = gljUtil.getIndex(glj);
+        _.remove(this.datas.originalList,{'connect_key':connect_key});
+        _.remove(this.datas.freightList,{'connect_key':connect_key});
+      }
     }
+    if(calcQ) this.calcQuantity();
+    projectGljObject.refreshDataSheet();
+    materialCalcObj.showDatas();
+
+  } catch (e){
+    console.log(e)
+  }finally {
+      $.bootstrapLoading.end();
+  }
+
+};
+
+
+ProjectGLJ.prototype.updateCalcMaterial =async function (projectGLJ,value) {//只有添加、删除走这个方法
+  this.updateCalcMaterials([projectGLJ],value);
 };
 
 ProjectGLJ.prototype.calcAllMaterial = function (unitPriecs,needReCalc) {//当材料发生改变时重算所有计算材料的价格

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

@@ -772,7 +772,7 @@ materialCalcObj = {
     deleteMaterialCal:function (row) {
         let record = this.materialDatas[row];//修改材料计算标记的同时还要删除原价计算,运费计算等
         if(record){
-            projectObj.project.projectGLJ.updateCalcMaterial(record,'calcMaterial',0);
+            projectObj.project.projectGLJ.updateCalcMaterial(record,0);
         }
     },
     deletePriceCalc:function (row) {

+ 20 - 2
web/building_saas/main/js/views/project_glj_view.js

@@ -406,7 +406,7 @@ projectGljObject={
         let me = projectGljObject;
         let recode = me.projectGljSheetData[args.row];
         let dataCode = me.projectGljSetting.header[args.col].dataCode;
-        if(dataCode=='name'&& recode && gljUtil.isMaterialType(recode.type)) projectObj.project.projectGLJ.updateCalcMaterial(recode,'calcMaterial',1);
+        if(dataCode=='name'&& recode && gljUtil.isMaterialType(recode.type)) projectObj.project.projectGLJ.updateCalcMaterial(recode,1);
     },
     onRelatedRationDoubleClick:function (sender,args) {
       let me = projectGljObject;
@@ -1108,13 +1108,29 @@ projectGljObject={
       }
       return data;
   },
+  mutiAddCalcMaterial:function(){
+    let sel = this.projectGljSheet.getSelections()[0];
+    let projectGLJs = [];
+    for(let i=0;i<sel.rowCount;i++ ){
+      let row = sel.row + i;
+      if(this.projectGljSheetData.length>row){
+        let projectGLJ = this.projectGljSheetData[row];
+        if(gljUtil.isMaterialType(projectGLJ.type)) projectGLJs.push(projectGLJ); 
+      }
+    }
+    projectObj.project.projectGLJ.updateCalcMaterials(projectGLJs,1);
+  },
+
     initProjectGljRightClick:function(){
         //如果当前行是无组成物的“普通材料”、“绿化苗木”、“外购砼构件”、“商品混凝土”、“商品砂浆”,则右键“添加计算材料”按钮有效。
         let me = this;
         $.contextMenu({
             selector: '#project_glj_sheet',
             build: function ($trigger, e) {
+                let os =  me.projectGljSheet.getSelections();
                 me.rightClickTarget = SheetDataHelper.safeRightClickSelection($trigger, e, me.projectGljSpread);
+                let ns = me.projectGljSheet.getSelections();
+                me.onProjectGljSelectionChange({},{newSelections:ns,oldSelections:os},true);
                 return me.rightClickTarget.hitTestType === GC.Spread.Sheets.SheetArea.viewport ||
                     me.rightClickTarget.hitTestType === GC.Spread.Sheets.SheetArea.rowHeader;
             },
@@ -1127,8 +1143,10 @@ projectGljObject={
                         return  !projectGLJ || !gljUtil.isMaterialType(projectGLJ.type);
                     },
                     callback: function (key, opt) {
+                      projectGljObject.mutiAddCalcMaterial();
+                       /*  console.log(me.projectGljSheet.getSelections())
                         let projectGLJ = projectGljObject.getProjectGLJSelected();
-                        projectObj.project.projectGLJ.updateCalcMaterial(projectGLJ,'calcMaterial',1);
+                        projectObj.project.projectGLJ.updateCalcMaterial(projectGLJ,1); */
                     }
                 },
                 "calcElectrovalence": {