| 
					
				 | 
			
			
				@@ -6,26 +6,34 @@ let mbzm_obj={ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     spread:null, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     nodeChanged:false, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     datas:[], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    locateMap:{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      INMEASURE:1, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      INFBFX:2, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      AFTERRATION:3 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     setting:{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         header: [ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             {headerName: "编码", headerWidth: 130, dataCode: "code", dataType: "String", formatter: "@"}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             {headerName: "模板类别", headerWidth: 260, dataCode: "name", dataType: "String", hAlign: "left"}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             {headerName: "系数", headerWidth: 65, dataCode: "coe", dataType: "Number",validator:"number"}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            {headerName: "单位", headerWidth: 45, dataCode: "unit", dataType: "String", hAlign: "center"}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            {headerName: "单位", headerWidth: 45, dataCode: "unit", dataType: "String", hAlign: "center",getText:'forUnit'}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             {headerName: "工程量", headerWidth: 65, dataCode: "quantity", dataType: "Number",validator:"number"}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             {headerName: "关联类别", headerWidth: 100, dataCode: "type", dataType: "String"}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             {headerName: "清单位置", headerWidth: 200, dataCode: "position", hAlign: "left", dataType: "String",cellType:'selectButton',getText:'forPosition'}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         ], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         view: { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            lockColumns:["code","name","unit","type","fxID"], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            lockColumns:["code","name","unit","type"], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             rowHeaderWidth:25 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         getText:{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             forPosition:function (item) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 let createL =  $('#createLocation').val(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                if(createL == 1) return  mbzm_obj.getDisplayText(item.billID,item.billsLocation); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                if(createL == 2) return  mbzm_obj.getDisplayText(item.fxID,""); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if(createL == mbzm_obj.locateMap.INMEASURE) return  mbzm_obj.getDisplayText(item.billID,item.billsLocation); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if(createL == mbzm_obj.locateMap.INFBFX) return  mbzm_obj.getDisplayText(item.fxID,""); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 return "" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            forUnit:function (item) {//这里显示的单位是去掉定额单位前面的数字的结果 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+               return item.unit &&_.isString(item.unit)?item.unit.replace(/^\d+/,""):"" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     }, 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -63,8 +71,8 @@ let mbzm_obj={ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         let selected = node?node:projectObj.project.mainTree.selected; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         if(this.nodeChanged == true){//选中的行改变了才做初始化,刷新当前缓存, 在project_view 中treeSelectedChanged方法里设置 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             let datas = []; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            $("#createLocation").val(1);//初始化 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            if(selected&&selected.sourceType == "ration"){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            $("#createLocation").val(this.locateMap.INMEASURE);//初始化 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if(selected&&selected.sourceType == ModuleNames.ration){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 let ration = selected.data; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 let  template = projectObj.project.ration_template.getTemplateByRationID(ration.ID); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 if(template) { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -106,13 +114,351 @@ let mbzm_obj={ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         recode[dataCode] = value; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         me.refreshSheetData(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    updatePosition:function (recode) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        let selection = this.sheet.getSelections()[0]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        let selectedItem  =(this.datas[selection.row]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        let updateField = $("#createLocation").val()==this.locateMap.INMEASURE?"billID":"fxID"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if(selectedItem[updateField] == recode.ID) return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        selectedItem[updateField] = recode.ID; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if($("#createLocation").val()==this.locateMap.INMEASURE)selectedItem.billsLocation = recode.code; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        this.refreshSheetData(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    applyTemplate:function () {//应用清单模板 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        let selected = projectObj.project.mainTree.selected; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        let template = projectObj.project.ration_template.getTemplateByRationID(selected.data.ID); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        let createLocation = $("#createLocation").val(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        let rations = {update:[],create:[]},bills={update:[],create:[]}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if(this.datas.length <= 0) return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        for(let d of this.datas){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if(gljUtil.isDef(d.quantity)&& parseFloat(d.quantity)>0){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if(this.positionChecking(createLocation,d) == false){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    alert(`请选择${d.code}生成的清单位置`); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                this.getNodeUpdateData(d,selected.data.ID,createLocation,rations,bills); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        let ration_template={type:ModuleNames.ration_template,data:{ID:template.ID, createLocation:createLocation, templateList:this.datas}}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        let data = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            ration_template:ration_template, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            rations:rations, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            bills:bills 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        console.log(data); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        $.bootstrapLoading.start(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        CommonAjax.post('/ration/applyTemplate',data,function (result) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            $.bootstrapLoading.end(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            let refreshNodes = projectObj.project.updateNodesCache(result.updateDatas);//更新要update的前端缓存,并返回要刷新的树节点 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //对于新插入的清单: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if(result.billsResult.length > 0){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //对于新插入的定额 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            console.log(result); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    positionChecking(type,data){//这个要之后再测试一下 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        let validate = true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if(type == mbzm_obj.locateMap.INMEASURE){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if(!_.isEmpty(data.billID)){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                let node = projectObj.project.mainTree.getNodeByID(data.billID); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if(!node) validate = false;//ID有值,但是找不到,说明清单已经被删除 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            }else if(_.isEmpty(data.billsLocation)){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                validate = false 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        }else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if(_.isEmpty(data.fxID)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                validate = false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            }else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                let node = projectObj.project.mainTree.getNodeByID(data.fxID); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if(!node) validate = false;//ID有值,但是找不到,说明分项已经被删除 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return validate 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    getNodeUpdateData:function(data,referenceRationID,type,rations,bills){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        let quantity = this.getQuantity(data);//工程量要经过转换 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        let mainRation = projectObj.project.mainTree.getNodeByID(referenceRationID); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        let billsID=""; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //先检查要更新的定额是否已经存在 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        let ration = this.getExistRation(data,referenceRationID,type); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if(ration) {//如果存在,则比较清耗量、工程量表达式是否一致 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            let tem =  this.getRationData(ration,data,quantity);//取更新信息 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if(tem){//如果不一致,则需要更新 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                rations.update.push(tem); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //在定额存在的情况下,不用往下执行了 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //定额不存在的情况下 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if(type == mbzm_obj.locateMap.AFTERRATION) {//如果是生成在主定额后面的位置 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            this.createNewRationAfterMain(data,mainRation,quantity,rations); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if(type == mbzm_obj.locateMap.INMEASURE){//生成在措施项目下 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            this.createNewRationInMeasure(data,mainRation,quantity,rations,bills); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        }else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            this.createNewRationInFBFX(data,mainRation,quantity,rations,bills); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        /*[ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                type:'ration', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                data:{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    projectID:1605, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ID:"7b962fb0-1131-11e8-b3da-af725dadd7ae", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    name:'testRation' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                type:'bills', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                data:{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    projectID:1605, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ID:"af9f0081-1127-11e8-99a8-2fc02230b6e7", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    name:'安全文明施工专项费用123' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        ]*/ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    getRationData:function (ration,data,quantity) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        let tem = {}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (ration.quantity + "" != quantity) tem.quantity = quantity; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (gljUtil.isDef(data.coe) && data.coe != "0") tem.quantityEXP = "MBGCL"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if(!_.isEmpty(tem)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            tem.projectID = ration.projectID; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            tem.ID = ration.ID; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            return tem; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    createNewRationAfterMain:function (data,mainRation,quantity,rations) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //生成新的定额 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        let newID =  uuid.v1(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        let serialNo = mainRation.data.serialNo+1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //如果已经有正要生成的定额,则取这个序号再加1 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if(rations.create.length > 0){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            serialNo = rations.create[rations.create.length -1].newData.serialNo + 1 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        let n_ration = this.createNewRationData(data,newID,mainRation.data.referenceRationID,mainRation.data.billsItemID,serialNo,quantity,mainRation.data.libID); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        rations.create.push(n_ration); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //处理其它兄弟节点的序号 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        let br = projectObj.project.Ration.getBillsSortRation(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        for(let i = mainRation.data.serialNo;i<br.length;i++){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if(rations.update.length > 0){//如果update列表中有数据,要更新那里的序列号 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+               let u =  _.find(rations.update,{'ID':br[i].ID}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+               if(u){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                   u.serialNo += 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                   continue; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+               } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            rations.update.push({ID:br[i].ID,projectID:br[i].projectID,serialNo:br[i].serialNo+1}) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    createNewRationInMeasure:function (data,mainRation,quantity,rations,bills) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        let controller = projectObj.mainController; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        let billsID=""; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if(!_.isEmpty(data.billID)&&projectObj.project.mainTree.getNodeByID(data.billID)){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            billsID = data.billID; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        }else {//剩下的就是没找到的 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            let rootNode = projectObj.project.Bills.getMeasureNode(controller); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            let leaveNodes = projectObj.mainController.tree.getLeavesNodes(rootNode.source); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            for(let n of leaveNodes){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if (!(n.data.calcBase&&n.data.calcBase!="")&& n.data.code&&(n.data.code ==data.billsLocation||n.data.code.indexOf(data.billsLocation) != -1)){//没有使用基数计算的清单 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    billsID = n.data.ID; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if(billsID == ""){//还是没有找到的情况下,先查找是不是已经生成过了 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if(bills.create.length > 0){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    let t_b = _.find(bills.create,{"billsLocation":data.billsLocation}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    if(t_b) billsID = t_b.ID; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if(billsID == ""){//也没有生成过的情况下,要自动生成清单 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                let parentNode = projectObj.project.Bills.getAutoParentNode("措施费用"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                billsID = uuid.v1(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                let newBill = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ID:billsID, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    projectID: parseInt(projectObj.project.ID()), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ParentID:parentNode.data.ID, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    NextSiblingID:-1, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    code:projectObj.project.Bills.newFormatCode(data.billsLocation), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    billsLibId:projectInfoObj.projectInfo.engineeringInfo.bill_lib[0].id,//projectInfoObj.projectInfo.engineeringInfo.billsGuidance_lib 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    billsLocation : data.billsLocation//这个是用来在后端查找清单信息 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                let existB = projectObj.project.Bills.sameStdCodeBillsData(data.billsLocation);//对于多单位的清单 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if (existB) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    newBill.unit = existB.unit; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                //将这个节点的上一节点的NextSiblingID设置为这个新清单 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                //先看有没有刚生成的清单,有的话直接修改最后一个清单的NextSiblingID即可 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                let lastIndex = this.getLastIndex(bills.create,"ParentID",parentNode.data.ID); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if(bills.create.length > 0 && lastIndex!=-1){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    bills.create[lastIndex].NextSiblingID = newBill.ID; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                }else if(parentNode.children.length > 0){//如果新生的没有找到的话,查看父节点下是否有子节点 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    let pre = parentNode.children[parentNode.children.length-1]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    bills.update.push({ projectID:newBill.projectID,ID:pre.data.ID, NextSiblingID:newBill.ID}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                bills.create.push(newBill); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //生成定额 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        let newID =  uuid.v1(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        let serialNo = 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        serialNo =  this.checkAndGetSerialNo(serialNo,billsID,rations); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //先查看刚生成的定额中有没有相同父清单,有的话取最后的一个序列号加1 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        let n_ration = this.createNewRationData(data,newID,mainRation.data.ID,billsID,serialNo,quantity,mainRation.data.libID); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        rations.create.push(n_ration); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    createNewRationInFBFX:function (data,mainRation,quantity,rations,bills) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        let billsID = ""; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        let parentNode = projectObj.project.mainTree.getNodeByID(data.fxID); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //分部分项这里,如果没选择位置,或者选择后又删除了,是无法到这一步的,所以不用像生成在清单那里做很多检查 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if(!_.isEmpty(data.fxID)&&parentNode){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            billsID = data.fxID; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if(billsID !=""){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //生成定额 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            let newID =  uuid.v1(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            let serialNo = 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+             serialNo =  this.checkAndGetSerialNo(serialNo,billsID,rations); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            let n_ration = this.createNewRationData(data,newID,mainRation.data.ID,billsID,serialNo,quantity,mainRation.data.libID,true); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            rations.create.push(n_ration); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    getLastIndex:function (arrays,key,value) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        let index = -1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        for (let i = 0;i<arrays.length;i++) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if(arrays[i][key] == value){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                index = i; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return index; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    checkAndGetSerialNo:function (sNo,billsID,rations) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        let serialNo = sNo; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //先查看刚生成的定额中有没有相同父清单,有的话取最后的一个序列号加1 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        let last_ration = this.getLastBrotherNewRation(billsID,rations.create); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if(last_ration){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            serialNo = last_ration.serialNo +1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        }else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            let parentBillsNode = projectObj.project.mainTree.getNodeByID(billsID); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if(parentBillsNode && parentBillsNode.children.length > 0){//如果能找到则说明已经存在的清单 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                serialNo = parentBillsNode.children[parentBillsNode.children.length - 1].data.serialNo + 1 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return serialNo 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    getLastBrotherNewRation:function(billsItemID,rations){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        let newData = null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        for(let tem of rations){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if(tem.newData.billsItemID == billsItemID)  newData = tem.newData; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return newData; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    createNewRationData:function (data,newID,referenceRationID,billsID,serialNo,quantity,libID,isFBFX) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        let newData = projectObj.project.Ration.getTempRationData(newID,billsID,serialNo,rationType.ration); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        newData.referenceRationID = referenceRationID; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        newData.quantity = quantity; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        newData.quantityEXP = gljUtil.isDef(data.coe) && data.coe != "0"?"MBGCL":quantity+""; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        let temRation = this.getDefaultRationCreateData(newData,data.code,libID,isFBFX); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return temRation; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    getDefaultRationCreateData:function(newData,code,libID,isFBFX){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        let itemQuery = {userID: userID, rationRepId: libID, code: code}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        let needInstall = false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if(projectObj.project.isInstall()) {//如果是安装工程,要看需不需要生成安装增加费 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            needInstall = isFBFX;//在分部分项插入的定额才需要定额安装增加费 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return{itemQuery:itemQuery,newData:newData,defaultLibID: rationLibObj.getDefaultStdRationLibID(),calQuantity:false,brUpdate:[],needInstall:needInstall} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    getQuantity:function (data) {//取最新的消耗量,需经过转换 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if(data.unit){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            let times = parseInt(data.unit); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if(!isNaN(times)){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                return scMathUtil.roundForObj(parseFloat(data.quantity)/times,getDecimal("ration.quantity"))+"" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return data.quantity 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    getExistRation:function (data,referenceRationID,type) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        let temRation = null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //先检查要更新的定额是否已经存在 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        let rations =_.filter(projectObj.project.Ration.datas,{'referenceRationID':referenceRationID,'code':data.code}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        for(let r of rations){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if(type == mbzm_obj.locateMap.AFTERRATION){//如果是生成在主定额后面的位置 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                let mainRationNode = projectObj.project.mainTree.getNodeByID(referenceRationID); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if(r.billsItemID == mainRationNode.data.billsItemID){//如果清单ID相同, 说明是兄弟节点,位置相同 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    temRation = r; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            let billsNode = projectObj.project.mainTree.getNodeByID(r.billsItemID); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if(billsNode){//将父清单与要生成的清单比较,看是否一致 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if(type == mbzm_obj.locateMap.INMEASURE && billsNode.data.type ==billType.BILL){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    if(!_.isEmpty(data.billID)){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        //说明生成位置已经有定额了,只需更新消耗量就好 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        if(data.billID == r.billsItemID){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            temRation = r; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    }else if(!_.isEmpty(data.billsLocation)){//按清单编号到找对应的位置 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        if(billsNode.data.code && billsNode.data.code.indexOf(data.billsLocation)!=-1) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            temRation = r; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                }else if(type == mbzm_obj.locateMap.INFBFX && (billsNode.data.type ==billType.FX||billsNode.data.type ==billType.BX)){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    if(!_.isEmpty(data.fxID) && data.fxID == r.billsItemID){//分项、补项下有对应的定额 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        temRation = r; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return temRation; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 $('#createLocation').change(function(){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     let me = mbzm_obj; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     let pcol = _.findIndex(me.setting.header,{dataCode:"position"}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    me.setting.header[pcol].visible =  $(this).val() == 3?false:true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    me.setting.header[pcol].visible =  $(this).val() == mbzm_obj.locateMap.AFTERRATION?false:true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     me.refreshSheetData(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+$('#next_mbzm').click(function () { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    let mainSheet = projectObj.mainSpread.getActiveSheet(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    let selection = mainSheet.getSelections()[0]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    let node =  projectObj.project.mainTree.selected; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    let index = node.serialNo(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    let next = null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    for(let i = index+1;i< projectObj.project.mainTree.items.length;i++){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        let temNode =  projectObj.project.mainTree.items[i]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if(temNode && temNode.sourceType == ModuleNames.ration){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            let  template = projectObj.project.ration_template.getTemplateByRationID(temNode.data.ID); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if(template) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                next = temNode; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    if(next){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        let row = next.serialNo(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        let col = selection.col?selection.col:0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        mainSheet.setSelection(row, col, selection.rowCount, selection.colCount); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        projectObj.mainController.setTreeSelected(next); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        mainSheet.showRow(row, GC.Spread.Sheets.VerticalPosition.center); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+$('#apply_mbzm').click(function () { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    mbzm_obj.applyTemplate(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 }); 
			 |