|
|
@@ -0,0 +1,688 @@
|
|
|
+/**
|
|
|
+ * Created by zhang on 2019/9/10.
|
|
|
+ */
|
|
|
+let configMaterialObj = {
|
|
|
+ GLJIDMap:{},
|
|
|
+ relateFilterAgain:false,
|
|
|
+ configSpread:null,
|
|
|
+ relatedSpread:null,
|
|
|
+ evaluateMaterialDatas:[],
|
|
|
+ evaluateMaterialSetting:{
|
|
|
+ header: [
|
|
|
+ {headerName: "关联", headerWidth: 80, dataCode: "is_related", dataType: "String",cellType:'checkBox'},
|
|
|
+ {headerName: "编号", headerWidth: 80, dataCode: "code", dataType: "String"},
|
|
|
+ {headerName: "序号", headerWidth: 80, dataCode: "seq", dataType: "String"},
|
|
|
+ {headerName: "材料名称", headerWidth: 160, dataCode: "name", dataType: "String",cellType:'tipsCell'},
|
|
|
+ {headerName: "规格型号", headerWidth: 120, dataCode: "specs", hAlign: "left", dataType: "String",cellType:'tipsCell'},
|
|
|
+ {headerName: "单位", headerWidth: 45, dataCode: "unit", hAlign: "center", dataType: "String"},
|
|
|
+ {headerName: "数量", headerWidth: 90, dataCode: "quantity", hAlign: "right", dataType: "Number",validator:"number"},//decimalField:'glj.quantity'
|
|
|
+ {headerName: "暂定价", headerWidth: 70, dataCode: "marketPrice", hAlign: "right", dataType: "Number",validator:"number"},
|
|
|
+ {headerName: "合价", headerWidth: 90, dataCode: "totalPrice", hAlign: "right", dataType: "Number",validator:"number",decimalField:'bills.totalPrice'},
|
|
|
+ {headerName: "锁定", headerWidth: 80, dataCode: "locked", hAlign: "left", dataType: "String",cellType:'checkBox'},
|
|
|
+ {headerName: "产地", headerWidth: 80, dataCode: "originPlace", hAlign: "left", dataType: "String",visible:false},
|
|
|
+ {headerName: "厂家", headerWidth: 80, dataCode: "vender", hAlign: "left", dataType: "String",visible:false},
|
|
|
+ {headerName: "备注", headerWidth: 100, dataCode: "remark", hAlign: "left", dataType: "String"}
|
|
|
+ ],
|
|
|
+ view:{ lockColumns: ["is_related","unit","totalPrice","originPlace","vender"]}
|
|
|
+ },
|
|
|
+ evaluateRelateSetting:{
|
|
|
+ header: [
|
|
|
+ {headerName: "关联", headerWidth: 80, dataCode: "is_related", dataType: "String",cellType:'checkBox'},
|
|
|
+ {headerName: "编码", headerWidth: 80, dataCode: "code", dataType: "String"},
|
|
|
+ {headerName: "类别", headerWidth: 45, dataCode: "short_name" ,hAlign: "center",dataType: "String"},
|
|
|
+ {headerName: "名称", headerWidth: 160, dataCode: "name", dataType: "String",cellType:'tipsCell'},
|
|
|
+ {headerName: "规格型号", headerWidth: 120, dataCode: "specs", hAlign: "left", dataType: "String",cellType:'tipsCell'},
|
|
|
+ {headerName: "单位", headerWidth: 45, dataCode: "unit", hAlign: "center", dataType: "String"},
|
|
|
+ {headerName: "数量", headerWidth: 90, dataCode: "quantity", hAlign: "right", dataType: "Number",decimalField:'glj.quantity'},
|
|
|
+ {headerName: "定额价", headerWidth: 70, dataCode: "basePrice", hAlign: "right", dataType: "Number",validator:"number"},
|
|
|
+ {headerName: "市场价", headerWidth: 70, dataCode: "marketPrice", hAlign: "right", dataType: "Number",validator:"number"},
|
|
|
+ {headerName: "合价", headerWidth: 90, dataCode: "totalPrice", hAlign: "right", dataType: "Number",validator:"number",decimalField:'bills.totalPrice'},
|
|
|
+ {headerName: "供货方式", headerWidth: 70, dataCode: "supply", hAlign: "center", dataType: "String",cellType:'comboBox',editorValueType:true,options:supplyComboMap},
|
|
|
+ {headerName: "产地", headerWidth: 80, dataCode: "originPlace", hAlign: "left", dataType: "String"},
|
|
|
+ {headerName: "厂家", headerWidth: 80, dataCode: "vender", hAlign: "left", dataType: "String"},
|
|
|
+ {headerName: "备注", headerWidth: 100, dataCode: "remark", hAlign: "left", dataType: "String"}
|
|
|
+ ],
|
|
|
+ view:{ lockColumns: ["code","type","name","specs","unit","quantity","marketPrice","basePrice","supply","originPlace","vender","remark"]}
|
|
|
+ },
|
|
|
+ initSpread:function(){
|
|
|
+ if(!this.configSpread){
|
|
|
+ this.configSpread = SheetDataHelper.createNewSpread($("#config_material_sheet")[0],2);
|
|
|
+ sheetCommonObj.spreadDefaultStyle(this.configSpread);
|
|
|
+ this.relatedSpread = SheetDataHelper.createNewSpread($("#related_sheet")[0],2);
|
|
|
+ sheetCommonObj.spreadDefaultStyle(this.relatedSpread);
|
|
|
+ }
|
|
|
+ this.initEvaluateMaterialSheet();
|
|
|
+ this.initEvaluateRelateSheet();
|
|
|
+ //打开别人分享的项目,只读
|
|
|
+ if(projectReadOnly){
|
|
|
+ disableSpread(this.configSpread);
|
|
|
+ disableSpread(this.relatedSpread);
|
|
|
+ }else {
|
|
|
+ this.initRightClick();
|
|
|
+ }
|
|
|
+ },
|
|
|
+ initEvaluateMaterialSheet:function(){
|
|
|
+ this.evaluateMaterialSheet = this.configSpread.getSheet(0);
|
|
|
+ sheetCommonObj.initSheet(this.evaluateMaterialSheet,this.evaluateMaterialSetting,30);
|
|
|
+ this.evaluateMaterialSheet.bind(GC.Spread.Sheets.Events.ValueChanged, this.onEvaluateMaterialValueChange);
|
|
|
+ this.evaluateMaterialSheet.bind(GC.Spread.Sheets.Events.SelectionChanged,this.onEvaluateMaterialSelectionChange);
|
|
|
+ this.evaluateMaterialSheet.bind(GC.Spread.Sheets.Events.EditStarting,this.onEvaluateMaterialEditStarting);
|
|
|
+ //this.evaluateMaterialSheet.bind(GC.Spread.Sheets.Events.RangeChanged, this.onSheetRangeChange);
|
|
|
+ this.evaluateMaterialSheet.name('evaluateMaterialSheet');
|
|
|
+ this.evaluateMaterialSheet.setRowHeight(0, 36, 1);
|
|
|
+ },
|
|
|
+ initEvaluateRelateSheet:function () {
|
|
|
+ this.evaluateRelateSheet = this.relatedSpread.getSheet(0);
|
|
|
+ sheetCommonObj.initSheet(this.evaluateRelateSheet,this.evaluateRelateSetting,30);
|
|
|
+ this.evaluateRelateSheet.bind(GC.Spread.Sheets.Events.ValueChanged, this.onEvaluateRelateValueChange);
|
|
|
+ this.evaluateRelateSheet.bind(GC.Spread.Sheets.Events.EditStarting,this.onEvaluateRelateEditStarting);
|
|
|
+ //this.evaluateRelateSheet.bind(GC.Spread.Sheets.Events.RangeChanged, this.onSheetRangeChange);
|
|
|
+ this.evaluateRelateSheet.name('evaluateRelateSheet');
|
|
|
+ this.evaluateRelateSheet.setRowHeight(0, 36, 1);
|
|
|
+ },
|
|
|
+
|
|
|
+ showEvaluateMaterialDatas:function () {
|
|
|
+ this.configSpread.setActiveSheetIndex(0);
|
|
|
+ this.evaluateMaterialDatas = this.getEvaluateMaterialDatas();
|
|
|
+ sheetCommonObj.showData(this.evaluateMaterialSheet, this.evaluateMaterialSetting,this.evaluateMaterialDatas);
|
|
|
+ this.evaluateMaterialSheet.setRowCount(this.evaluateMaterialDatas.length);
|
|
|
+ },
|
|
|
+ showEvaluateRelateDatas:function () {
|
|
|
+ this.relatedSpread.setActiveSheetIndex(0);
|
|
|
+ this.evaluateRelateDatas = this.getEvaluateRelateDatas();
|
|
|
+ sheetCommonObj.showData(this.evaluateRelateSheet, this.evaluateRelateSetting,this.evaluateRelateDatas);
|
|
|
+ this.evaluateRelateSheet.setRowCount(this.evaluateRelateDatas.length);
|
|
|
+ },
|
|
|
+
|
|
|
+ refreshSheetDatas:function () {
|
|
|
+ this.showEvaluateMaterialDatas();
|
|
|
+ this.showEvaluateRelateDatas();
|
|
|
+ },
|
|
|
+ getEvaluateRelateDatas:function () {
|
|
|
+ //$('filterGljName')
|
|
|
+ let name = '';
|
|
|
+ let datas = [];
|
|
|
+ let sel = this.evaluateMaterialSheet.getSelections()[0];
|
|
|
+ let srow = sel.row == -1||sel.row == ""?0:sel.row;
|
|
|
+ if(this.evaluateMaterialDatas.length>srow){
|
|
|
+ name = this.relateFilterAgain== true? $('#filterGljName').val(): this.evaluateMaterialDatas[srow].name;
|
|
|
+ datas = this.filterEvaluateRelate(name,this.evaluateMaterialDatas[srow].projectGLJID);
|
|
|
+ }
|
|
|
+ if(this.relateFilterAgain== false) $('#filterGljName').val(name);
|
|
|
+ return datas;
|
|
|
+ },
|
|
|
+ filterEvaluateRelate:function (name,projectGLJID) {
|
|
|
+ let datas = [];
|
|
|
+ let projectGLJ = projectObj.project.projectGLJ;
|
|
|
+ let materialIdList = projectGLJ.datas.constData.materialIdList;
|
|
|
+ for(let d of projectGLJ.datas.gljList){
|
|
|
+ if (materialIdList.indexOf(d.type) >= 0){//材料类型
|
|
|
+ if(name != ''){//name为''时不做过滤
|
|
|
+ if(d.name.indexOf(name)==-1){
|
|
|
+ if(!(d.is_evaluate == 1 && d.id == projectGLJID)) continue;//虽然不匹配,但是是关联的暂估材料,这时应该显示
|
|
|
+ }
|
|
|
+ if(d.is_evaluate == 1 && d.id != projectGLJID) continue;
|
|
|
+ }
|
|
|
+ let t = {
|
|
|
+ id:d.id,
|
|
|
+ code : d.code,
|
|
|
+ type : d.type,
|
|
|
+ short_name :projectGLJ.getShortNameByID(d.type),
|
|
|
+ name : d.name,
|
|
|
+ specs : d.specs,
|
|
|
+ unit : d.unit,
|
|
|
+ quantity : d.quantity,
|
|
|
+ supply:d.supply,
|
|
|
+ originPlace:d.originPlace,
|
|
|
+ vender:d.vender,
|
|
|
+ remark:d.remark,
|
|
|
+ from:d
|
|
|
+ };
|
|
|
+ t.is_related = d.is_evaluate;
|
|
|
+ gljOprObj.setGLJPrice(t,d);
|
|
|
+ t.totalPrice = scMathUtil.roundForObj(t.quantity * t.marketPrice,getDecimal('bills.totalPrice'));
|
|
|
+ datas.push(t);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return _.sortByAll(datas,'code');
|
|
|
+ },
|
|
|
+ getEvaluateMaterialDatas:function () {
|
|
|
+ let datas = [];
|
|
|
+ let gljMap = _.indexBy(projectObj.project.projectGLJ.datas.gljList,'id');
|
|
|
+ for(let e of projectObj.project.evaluate_list.datas){
|
|
|
+ let t = {
|
|
|
+ ID:e.ID,
|
|
|
+ projectID: e.projectID,
|
|
|
+ is_related:e.is_related,//关联,1关,0不关
|
|
|
+ projectGLJID:e.projectGLJID,//关联工料机ID
|
|
|
+ seq:e.seq,//序号
|
|
|
+ code:e.code,
|
|
|
+ name:e.name,
|
|
|
+ specs:e.specs,
|
|
|
+ unit:e.unit,
|
|
|
+ type:e.type,
|
|
|
+ marketPrice:e.market_price,
|
|
|
+ quantity:e.quantity,
|
|
|
+ locked:e.locked,//锁定,1锁,0不锁
|
|
|
+ remark:e.remark,
|
|
|
+ originPlace:e.originPlace,//产地
|
|
|
+ vender:e.vender //厂家
|
|
|
+ };
|
|
|
+ let pglj = gljMap[e.projectGLJID];
|
|
|
+ if(e.is_related && pglj){
|
|
|
+ gljOprObj.setGLJPrice(t,pglj);
|
|
|
+ t.originPlace = pglj.originPlace;
|
|
|
+ t.vender = pglj.vender;
|
|
|
+ t.remark = pglj.remark;
|
|
|
+ t.quantity = pglj.quantity;
|
|
|
+ }
|
|
|
+ t.totalPrice = scMathUtil.roundForObj(parseFloat(t.quantity) * parseFloat(t.marketPrice) ,getDecimal('bills.totalPrice'));
|
|
|
+ datas.push(t);
|
|
|
+ }
|
|
|
+ return _.sortByAll(datas,'code');
|
|
|
+ },
|
|
|
+
|
|
|
+ updateConfigMaterial:function (dataCode,value,recode) {
|
|
|
+ let task = [];
|
|
|
+ for(let t of projectObj.project.projectGLJ.datas.gljList){
|
|
|
+ this.GLJIDMap[t.id] = t;
|
|
|
+ }
|
|
|
+ let glj = this.GLJIDMap[recode.id];
|
|
|
+ if(!glj) return;
|
|
|
+ let pdata = {doc:{},action:'update'};
|
|
|
+ pdata['type'] = 'glj_list';
|
|
|
+ pdata.doc[dataCode] = value;
|
|
|
+ pdata['id'] = glj.id;
|
|
|
+ task.push(pdata);
|
|
|
+ if(dataCode == "is_evaluate"){
|
|
|
+ this.getEvaluateUpdateTasks(value,glj,task);
|
|
|
+ this.updateEvaluateMaterial(task);
|
|
|
+ }
|
|
|
+
|
|
|
+ },
|
|
|
+
|
|
|
+ updateEvaluateMaterial :async function(data,refreshEvaluate=true){
|
|
|
+ try {
|
|
|
+ $.bootstrapLoading.start();
|
|
|
+ let result = await ajaxPost('/glj/updateEvaluateMaterial',{tasks:data});
|
|
|
+ //先刷新缓存
|
|
|
+ let [gljs,sendPriceChange] = this.refreshCache(data);
|
|
|
+ if(refreshEvaluate == true){
|
|
|
+ let [rationNodes,impactGLJs] = projectObj.project.projectGLJ.batchChangeIsEvaluate(gljs);
|
|
|
+ projectObj.project.calcProgram.calcNodesAndSave(rationNodes, function () {
|
|
|
+ projectObj.mainController.refreshTreeNode(projectObj.project.mainTree.roots);
|
|
|
+ });
|
|
|
+ }
|
|
|
+ projectGljObject.refreshViewsData();
|
|
|
+ gljOprObj.refreshView();
|
|
|
+ if(sendPriceChange == true) projectGljObject.onUnitFileChange();
|
|
|
+
|
|
|
+
|
|
|
+ }catch (e){
|
|
|
+ console.log(e)
|
|
|
+ }finally {
|
|
|
+ $.bootstrapLoading.end();
|
|
|
+ }
|
|
|
+ },
|
|
|
+
|
|
|
+ refreshCache:function (tasks) {
|
|
|
+ let gljs = [];
|
|
|
+ let sendPriceChange = false;
|
|
|
+ for(let t of tasks){
|
|
|
+ if(t.type == "evaluate_list"){
|
|
|
+ if(t.action == "update"){
|
|
|
+ let e = _.find(projectObj.project.evaluate_list.datas,{'ID':t.ID});
|
|
|
+ if(e) updateProperty(e,t.doc);
|
|
|
+ }
|
|
|
+ if(t.action == "add") projectObj.project.evaluate_list.datas.push(t.doc);
|
|
|
+ if(t.action == "delete") _.remove(projectObj.project.evaluate_list.datas,{'ID':t.ID});
|
|
|
+ }else {
|
|
|
+ if(_.isEmpty(this.GLJIDMap)) this.GLJIDMap = _.indexBy(projectObj.project.projectGLJ.datas.gljList,'id');
|
|
|
+ //剩下两个类型只有更新操作
|
|
|
+ if(t.type == "unit_price"){
|
|
|
+ let g = this.GLJIDMap[t.projectGLJID];
|
|
|
+ if(g) {
|
|
|
+ let f = updateProperty(g.unit_price,t.doc);
|
|
|
+ if(f == true) sendPriceChange = true;
|
|
|
+ gljs.push(g);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if(t.type == "glj_list"){
|
|
|
+ let g = this.GLJIDMap[t.id];
|
|
|
+ if(g){
|
|
|
+ let f = updateProperty(g,t.doc);
|
|
|
+ if(f == true) sendPriceChange = true;
|
|
|
+ gljs.push(g);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ this.GLJIDMap = {};
|
|
|
+ return [gljs,sendPriceChange];
|
|
|
+ function updateProperty(obj,doc) {
|
|
|
+ let updatePrice = false;
|
|
|
+ for(let k in doc){
|
|
|
+ obj[k] = doc[k];
|
|
|
+ if(k == 'base_price' || k == 'market_price') updatePrice = true;
|
|
|
+ }
|
|
|
+ return updatePrice;
|
|
|
+ }
|
|
|
+ },
|
|
|
+ getEvaluateUpdateTasks:function (value,glj,task) {
|
|
|
+ if(value == 1){ //勾选暂估选项,查看已有的暂估材料列表中是否有名称,编号等完全相同的记录,有则直接关联,无则添加
|
|
|
+ let evaluate = null;
|
|
|
+ let pindex = gljUtil.getIndex(glj);
|
|
|
+ for(let e of projectObj.project.evaluate_list.datas){
|
|
|
+ let eIndex = gljUtil.getIndex(e);
|
|
|
+ if(pindex == eIndex){
|
|
|
+ evaluate = e;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if(evaluate){//有找到则更新,没有则添加
|
|
|
+ let edata = {type:'evaluate_list',doc:{},action:"update",ID:evaluate.ID};
|
|
|
+ edata.doc = {projectGLJID:glj.id,is_related:1};
|
|
|
+ task.push(edata);
|
|
|
+ let udata = {type:'unit_price',doc:{},action:"update",projectGLJID:glj.id,id : glj.unit_price.id};
|
|
|
+ //if(evaluate.base_price != glj.unit_price.base_price) udata.doc['base_price'] = evaluate.base_price;
|
|
|
+ if(evaluate.market_price != glj.unit_price.market_price) udata.doc['market_price'] = evaluate.market_price;
|
|
|
+ if(!_.isEmpty(udata.doc)) task.push(udata);
|
|
|
+ }else {
|
|
|
+ let ndata = {type:'evaluate_list',doc:{},action:"add"};
|
|
|
+ ndata.doc['ID'] = uuid.v1();
|
|
|
+ ndata.doc['projectGLJID'] = glj.id;
|
|
|
+ ndata.doc['is_related'] = 1;
|
|
|
+ ndata.doc['locked'] = 0;
|
|
|
+ ndata.doc['seq'] = glj.code;
|
|
|
+ ndata.doc['projectID'] = glj.project_id;
|
|
|
+ ndata.doc['code'] = glj.code;
|
|
|
+ ndata.doc['name'] = glj.name;
|
|
|
+ ndata.doc['specs'] = glj.specs;
|
|
|
+ ndata.doc['unit'] = glj.unit;
|
|
|
+ ndata.doc['quantity'] = glj.quantity;
|
|
|
+ ndata.doc['type'] = glj.type;
|
|
|
+ ndata.doc['market_price'] = glj.unit_price.market_price;
|
|
|
+ // ndata.doc['base_price'] = glj.unit_price.base_price;
|
|
|
+ ndata.doc['originPlace'] = glj.originPlace;
|
|
|
+ ndata.doc['vender'] = glj.vender;
|
|
|
+ ndata.doc['remark'] = glj.remark;
|
|
|
+ task.push(ndata);
|
|
|
+ }
|
|
|
+ }else if(value == 0){
|
|
|
+ let t_evaluate = null;
|
|
|
+ for(let e of projectObj.project.evaluate_list.datas){
|
|
|
+ if(e.projectGLJID == glj.id && e.is_related == 1){
|
|
|
+ t_evaluate = e;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if(t_evaluate){
|
|
|
+ let tdata = {type:'evaluate_list',doc:{is_related:0,quantity:'0'},action:"update",ID:t_evaluate.ID};
|
|
|
+ task.push(tdata);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ },
|
|
|
+ onEvaluateMaterialSelectionChange:function (sender, args) {
|
|
|
+ let me = configMaterialObj;
|
|
|
+ let newSel = args.newSelections[0];
|
|
|
+ let oldSel = args.oldSelections?args.oldSelections[0]:{};
|
|
|
+ if(newSel.row != oldSel.row){
|
|
|
+ me.showEvaluateRelateDatas();
|
|
|
+ me.relateFilterAgain = false;
|
|
|
+ }
|
|
|
+ },
|
|
|
+ onEvaluateMaterialValueChange:function (e,info) {
|
|
|
+ let me = configMaterialObj,row = info.row, col = info.col;
|
|
|
+ let dataCode = me.evaluateMaterialSetting.header[col].dataCode;
|
|
|
+ let value = info.newValue;
|
|
|
+ let evaluate = me.evaluateMaterialDatas[row];
|
|
|
+
|
|
|
+ if (value&&! sheetCommonObj.checkData(col,me.evaluateMaterialSetting,value)) {
|
|
|
+ alert('输入的数据类型不对,请重新输入!');
|
|
|
+ return me.showEvaluateMaterialDatas();
|
|
|
+ }
|
|
|
+
|
|
|
+ if(dataCode == 'locked') value = value == true?1:0;
|
|
|
+ if(dataCode == 'marketPrice'){
|
|
|
+ dataCode = 'market_price';
|
|
|
+ if(evaluate.is_related){//关联的情况下,直接修改工料机价格
|
|
|
+ return projectObj.project.projectGLJ.updatePrice(evaluate,dataCode,value,'rg', projectGljObject.refreshViewsData);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if(dataCode === 'quantity'){//修改数量需做4舍5入
|
|
|
+ value= scMathUtil.roundToString(value,getDecimal('glj.quantity'));
|
|
|
+ }
|
|
|
+
|
|
|
+ let edata = {type:'evaluate_list',doc:{},action:"update",ID:evaluate.ID};
|
|
|
+ if(evaluate[dataCode] == value) return me.showEvaluateMaterialDatas();
|
|
|
+ edata.doc[dataCode] = value;
|
|
|
+ me.updateEvaluateMaterial([edata],false);
|
|
|
+ },
|
|
|
+ onEvaluateRelateValueChange:function (e,info){
|
|
|
+ let me = configMaterialObj,row = info.row, col = info.col;
|
|
|
+ let value = info.newValue;
|
|
|
+ let sel = me.evaluateMaterialSheet.getSelections()[0];
|
|
|
+ let srow = sel.row == -1||sel.row == ""?0:sel.row;
|
|
|
+ let task = [];
|
|
|
+ value = value == true?1:0;
|
|
|
+ if(me.evaluateMaterialDatas.length>srow){
|
|
|
+ let evaluate = me.evaluateMaterialDatas[srow];
|
|
|
+ let relate = me.evaluateRelateDatas[row];
|
|
|
+ let pdata = {id:relate.id,doc:{is_evaluate:value},action:'update',type:"glj_list"};
|
|
|
+ task.push(pdata);
|
|
|
+ let tdata = {type:'evaluate_list',doc:{},action:"update",ID:evaluate.ID};
|
|
|
+ if(value == 0){//如果是1的话
|
|
|
+ tdata.doc = {is_related:0,quantity:'0'};
|
|
|
+ }else {
|
|
|
+ //如果已经关联了其它项目工料机,要把那个项目工料机的是否暂估标记为否
|
|
|
+ if(evaluate.is_related == 1) task.push({id:evaluate.projectGLJID,doc:{is_evaluate:0},action:'update',type:"glj_list"});
|
|
|
+ //更新暂估材料的工料机ID,和关联标记
|
|
|
+ tdata.doc = {projectGLJID:relate.id,is_related:1};
|
|
|
+ //更新新关联工料机的市场价格
|
|
|
+ let udata = {type:'unit_price',doc:{},action:"update",projectGLJID:relate.from.id,id : relate.from.unit_price.id};
|
|
|
+ //if(evaluate.base_price != relate.from.unit_price.base_price) udata.doc['base_price'] = evaluate.base_price;
|
|
|
+ if(evaluate.marketPrice != relate.from.unit_price.market_price) udata.doc['market_price'] = evaluate.marketPrice;
|
|
|
+ if(!_.isEmpty(udata.doc)) task.push(udata);
|
|
|
+ }
|
|
|
+ task.push(tdata);
|
|
|
+ me.updateEvaluateMaterial(task);
|
|
|
+ }
|
|
|
+ },
|
|
|
+ deleteEvaluateMaterial:function (row) {
|
|
|
+ let me = configMaterialObj;
|
|
|
+ let evaluate = me.evaluateMaterialDatas[row],task=[];
|
|
|
+ if(evaluate){
|
|
|
+ task.push({type:'evaluate_list',action:"delete",ID:evaluate.ID});
|
|
|
+ if(evaluate.is_related == 1){//如果关联了工料机,则要把工料机标记为不是暂估
|
|
|
+ task.push({id:evaluate.projectGLJID,doc:{is_evaluate:0},action:'update',type:"glj_list"})
|
|
|
+ }
|
|
|
+ me.updateEvaluateMaterial(task);
|
|
|
+ }
|
|
|
+ },
|
|
|
+ onEvaluateMaterialEditStarting:function (sender, args) {
|
|
|
+ let me = configMaterialObj;
|
|
|
+ let row = args.row,col = args.col;
|
|
|
+ let evaluate = me.evaluateMaterialDatas[row];
|
|
|
+ let dataCode = me.evaluateMaterialSetting.header[col].dataCode;
|
|
|
+ if(evaluate.locked){
|
|
|
+ args.cancel = true;
|
|
|
+ }else if(dataCode == 'quantity' && evaluate.is_related){//在关联的情况下,数量不可编辑
|
|
|
+ args.cancel = true;
|
|
|
+ }
|
|
|
+ },
|
|
|
+ onEvaluateRelateEditStarting:function (sender, args) {
|
|
|
+ let me = configMaterialObj;
|
|
|
+ let row = args.row,col = args.col;
|
|
|
+ args.cancel = true;
|
|
|
+ },
|
|
|
+ initRightClick : function() {
|
|
|
+ let me = this;
|
|
|
+ $.contextMenu({
|
|
|
+ selector: '#config_material_sheet',
|
|
|
+ build: function ($trigger, e) {
|
|
|
+ me.rightClickTarget = SheetDataHelper.safeRightClickSelection($trigger, e, me.configSpread);
|
|
|
+ return me.rightClickTarget.hitTestType === GC.Spread.Sheets.SheetArea.viewport ||
|
|
|
+ me.rightClickTarget.hitTestType === GC.Spread.Sheets.SheetArea.rowHeader;
|
|
|
+ },
|
|
|
+ items: {
|
|
|
+ "addFromGLJ":{
|
|
|
+ name: '从人材机汇总中选择',
|
|
|
+ icon: 'fa-sign-in',
|
|
|
+ disabled: function () {
|
|
|
+ return false;
|
|
|
+ },
|
|
|
+ callback: function (key, opt) {
|
|
|
+ $("#selectPGLJ").modal('show');
|
|
|
+ }
|
|
|
+ },
|
|
|
+ "deleteAdjust": {
|
|
|
+ name: "删除",
|
|
|
+ icon: 'fa-trash-o',
|
|
|
+ disabled: function () {
|
|
|
+ return me.rightClickTarget.row === undefined;
|
|
|
+ },
|
|
|
+ callback: function (key, opt) {
|
|
|
+ let row = me.rightClickTarget.row;
|
|
|
+ me.deleteEvaluateMaterial(row);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
+};
|
|
|
+
|
|
|
+let pgljSelObj={
|
|
|
+ spread:null,
|
|
|
+ sheet:null,
|
|
|
+ datas:[],
|
|
|
+ setting:{
|
|
|
+ header: [
|
|
|
+ {headerName: "选择", headerWidth: 45, dataCode: "select", hAlign: "center", dataType: "String",cellType:'checkBox'},
|
|
|
+ {headerName: "编码", headerWidth: 80, dataCode: "code", dataType: "String"},
|
|
|
+ {headerName: "类型", headerWidth: 30, dataCode: "short_name", hAlign: "center", dataType: "String"},
|
|
|
+ {headerName: "名称", headerWidth: 160, dataCode: "name", dataType: "String",cellType:'tipsCell'},
|
|
|
+ {headerName: "规格型号", headerWidth: 100, dataCode: "specs", hAlign: "left", dataType: "String",cellType:'tipsCell'},
|
|
|
+ {headerName: "单位", headerWidth: 45, dataCode: "unit", hAlign: "center", dataType: "String"},
|
|
|
+ {headerName: "总消耗量", headerWidth: 90, dataCode: "quantity", hAlign: "right", dataType: "Number",decimalField:'glj.quantity'},
|
|
|
+ {headerName: "市场价", headerWidth: 70, dataCode: "marketPrice", hAlign: "right", dataType: "Number",validator:"number"},//,decimalField:"glj.unitPrice"
|
|
|
+ {headerName: "供货方式", headerWidth: 70, dataCode: "supply", hAlign: "center", dataType: "String",cellType:'comboBox',editorValueType:true,options:supplyComboMap},
|
|
|
+ {headerName: "暂估", headerWidth: 45, dataCode: "is_evaluate", hAlign: "center", dataType: "String",cellType:'checkBox'},
|
|
|
+ {headerName: "产地", headerWidth: 80, dataCode: "originPlace", hAlign: "left", dataType: "String"},
|
|
|
+ {headerName: "厂家", headerWidth: 80, dataCode: "vender", hAlign: "left", dataType: "String"},
|
|
|
+ {headerName: "备注", headerWidth: 100, dataCode: "remark", hAlign: "left", dataType: "String"}
|
|
|
+ ],
|
|
|
+ view: {
|
|
|
+ lockColumns: ["is_evaluate"]
|
|
|
+ }
|
|
|
+ },
|
|
|
+ checkType:"取消",//记住点击过的按钮的text
|
|
|
+ initSpread:function () {
|
|
|
+ if(!this.spread){
|
|
|
+ this.spread = SheetDataHelper.createNewSpread($("#pglj_from_sheet")[0]);
|
|
|
+ sheetCommonObj.spreadDefaultStyle(this.spread);
|
|
|
+ }
|
|
|
+ this.sheet = this.spread.getSheet(0);
|
|
|
+ sheetCommonObj.initSheet(this.sheet,this.setting);
|
|
|
+ this.sheet.bind(GC.Spread.Sheets.Events.EditStarting,this.onEditStarting);
|
|
|
+ this.sheet.bind(GC.Spread.Sheets.Events.ClipboardPasting, this.onClipboardPasting);
|
|
|
+ this.sheet.bind(GC.Spread.Sheets.Events.ValueChanged, this.onValueChanged);
|
|
|
+ this.sheet.setRowHeight(0, 36, 1);
|
|
|
+ disableRightMenu("pglj_from_sheet",this.spread);
|
|
|
+ },
|
|
|
+ onEditStarting:function (e,args) {
|
|
|
+ args.cancel = true;
|
|
|
+ },
|
|
|
+ onClipboardPasting:function (e,args) {
|
|
|
+ args.cancel = true;
|
|
|
+ },
|
|
|
+ onValueChanged:function (e,args) {
|
|
|
+ let me = pgljSelObj;
|
|
|
+ let value = args.newValue;
|
|
|
+ value = value == true?1:0;
|
|
|
+ me.datas[args.row].select = value;
|
|
|
+ },
|
|
|
+ showDatas:function () {
|
|
|
+ this.datas = [];
|
|
|
+ let gljList = projectObj.project.projectGLJ.datas.gljList;
|
|
|
+ gljList = this.filterGLJ(gljList);
|
|
|
+ gljList = sortProjectGLJ(gljList);
|
|
|
+ for(let glj of gljList){
|
|
|
+ this.datas.push(this.getSheetDatas(glj));
|
|
|
+ }
|
|
|
+ this.refreshDatas();
|
|
|
+ },
|
|
|
+ filterGLJ:function (gljList) {
|
|
|
+ let typeMap = {};
|
|
|
+ for(let ch of $(".pglj_sel_input:checked")){
|
|
|
+ typeMap[$(ch).val()] = true;
|
|
|
+ }
|
|
|
+ let inputV = $("#pglj_sel_input").val();
|
|
|
+ return _.filter(gljList,function (item) {
|
|
|
+ if(item.quantity === 0 || item.quantity === '0') return false;
|
|
|
+ let firstS = (item.type+"").substring(0,1);
|
|
|
+ if(!typeMap[firstS]) return false;
|
|
|
+ if(inputV!=""){//输入的关键字过滤
|
|
|
+ if(item.code.indexOf(inputV)==-1 && item.name.indexOf(inputV)==-1) return false
|
|
|
+ }
|
|
|
+ return true;
|
|
|
+ });
|
|
|
+ },
|
|
|
+ refreshDatas:function () {
|
|
|
+ this.checkByType(this.checkType);
|
|
|
+ sheetCommonObj.showData(this.sheet, this.setting,this.datas);
|
|
|
+ this.sheet.setRowCount(this.datas.length);
|
|
|
+ },
|
|
|
+ getSheetDatas(glj){
|
|
|
+ let projectGLJ = projectObj.project.projectGLJ;
|
|
|
+ let materialIdList = projectGLJ.datas.constData.materialIdList;
|
|
|
+ let data = materialAdjustObj.getCommonObject(glj);
|
|
|
+ data.select = glj.is_evaluate;
|
|
|
+ data.from = glj;
|
|
|
+ data.short_name = projectGLJ.getShortNameByID(glj.type);
|
|
|
+ // 只有材料才显示是否暂估
|
|
|
+ // if (materialIdList.indexOf(glj.type) >= 0) data.is_evaluate = glj.is_evaluate;
|
|
|
+ data.is_evaluate = glj.is_evaluate;
|
|
|
+ return data;
|
|
|
+ },
|
|
|
+ checkByType:function (type) {
|
|
|
+ for(let d of this.datas){
|
|
|
+ d.select = 0;
|
|
|
+ switch (type){
|
|
|
+ case "全选":
|
|
|
+ d.select = 1;
|
|
|
+ break;
|
|
|
+ case "全选主材":
|
|
|
+ if(d.type == 4) d.select = 1;
|
|
|
+ break;
|
|
|
+ case "全选设备":
|
|
|
+ if(d.type == 5) d.select = 1;
|
|
|
+ break;
|
|
|
+ case "取消":
|
|
|
+ d.select = d.is_evaluate;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //this.refreshDatas();
|
|
|
+ },
|
|
|
+ confirmSelect:function () {
|
|
|
+ let tasks = [];
|
|
|
+ let evaluateMap = _.indexBy(projectObj.project.evaluate_list.datas,"projectGLJID");
|
|
|
+ let evaluateKeyMap = {};//关键字映射表
|
|
|
+ for(let e of projectObj.project.evaluate_list.datas){
|
|
|
+ let eIndex = gljUtil.getIndex(e);
|
|
|
+ evaluateKeyMap[eIndex] = e;
|
|
|
+ }
|
|
|
+ for(let d of this.datas){
|
|
|
+ if(d.select == 1){//如果是选中状态
|
|
|
+ if(d.is_evaluate == 1) {//如果是暂估,查看是否已经存在关联的暂估材料
|
|
|
+ let evl = evaluateMap[d.id];
|
|
|
+ if(evl){
|
|
|
+ //这里应该是错误检查的保证,按正常是不应该出现这种情况的
|
|
|
+ if(evl.is_related !=1) tasks.push({type:'evaluate_list',doc:{projectGLJID:d.id,is_related:1},action:"update",ID:evl.ID});
|
|
|
+ }else {
|
|
|
+ tasks.push(getNewEval(d))
|
|
|
+ }
|
|
|
+ }else {//如果不是暂估,要改成暂估
|
|
|
+ let pdata = {id:d.id,doc:{is_evaluate:1},action:'update',type:"glj_list"};
|
|
|
+ tasks.push(pdata);
|
|
|
+ let evaluate = evaluateKeyMap[gljUtil.getIndex(d)];
|
|
|
+ if(evaluate) {//如果已经存在5个关键字相同的暂估材料,则自动关联起来
|
|
|
+ let edata = {type:'evaluate_list',doc:{projectGLJID:d.id,is_related:1},action:"update",ID:evaluate.ID};
|
|
|
+ tasks.push(edata);
|
|
|
+ let udata = {type:'unit_price',doc:{},action:"update",projectGLJID:d.id,id : d.from.unit_price.id};
|
|
|
+ if(evaluate.market_price != d.from.unit_price.market_price) udata.doc['market_price'] = evaluate.market_price;
|
|
|
+ if(!_.isEmpty(udata.doc)) tasks.push(udata);
|
|
|
+ }else {//如果不存在,则生成一条新的
|
|
|
+ tasks.push(getNewEval(d));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }else {//未选中状态的,检查一下是否存在关联的情况,取消关联
|
|
|
+ if(d.is_evaluate == 1) tasks.push({id:d.id,doc:{is_evaluate:0},action:'update',type:"glj_list"});
|
|
|
+ let evl = evaluateMap[d.id];
|
|
|
+ if(evl){
|
|
|
+ if(evl.is_related ==1) tasks.push({type:'evaluate_list',doc:{is_related:0},action:"update",ID:evl.ID});
|
|
|
+ }
|
|
|
+ let evaluate = evaluateKeyMap[gljUtil.getIndex(d)];
|
|
|
+ if(evaluate) {
|
|
|
+ if(evaluate.is_related ==1) tasks.push({type:'evaluate_list',doc:{is_related:0},action:"update",ID:evaluate.ID});
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if(tasks.length > 0) configMaterialObj.updateEvaluateMaterial(tasks);
|
|
|
+
|
|
|
+
|
|
|
+ function getNewEval(d) {
|
|
|
+ let ndata = {type:'evaluate_list',doc:{},action:"add"};
|
|
|
+ ndata.doc['ID'] = uuid.v1();
|
|
|
+ ndata.doc['projectGLJID'] = d.id;
|
|
|
+ ndata.doc['is_related'] = 1;
|
|
|
+ ndata.doc['locked'] = 0;
|
|
|
+ ndata.doc['seq'] = d.code;
|
|
|
+ ndata.doc['projectID'] = d.from.project_id;
|
|
|
+ ndata.doc['code'] = d.code;
|
|
|
+ ndata.doc['name'] = d.name;
|
|
|
+ ndata.doc['specs'] = d.specs;
|
|
|
+ ndata.doc['unit'] = d.unit;
|
|
|
+ ndata.doc['quantity'] = d.quantity;
|
|
|
+ ndata.doc['type'] = d.type;
|
|
|
+ ndata.doc['market_price'] = d.from.unit_price.market_price;
|
|
|
+ ndata.doc['originPlace'] = d.originPlace;
|
|
|
+ ndata.doc['vender'] = d.vender;
|
|
|
+ ndata.doc['remark'] = d.remark;
|
|
|
+ return ndata;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ }
|
|
|
+};
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+$(function () {
|
|
|
+ $("#filterAgain").click(function(){
|
|
|
+ configMaterialObj.relateFilterAgain = true;//重新过滤标记
|
|
|
+ configMaterialObj.showEvaluateRelateDatas();
|
|
|
+ })
|
|
|
+
|
|
|
+ $('#selectPGLJ').on('shown.bs.modal',function(e){
|
|
|
+ pgljSelObj.checkType="取消";
|
|
|
+ pgljSelObj.initSpread();
|
|
|
+ pgljSelObj.showDatas();
|
|
|
+ });
|
|
|
+
|
|
|
+ $(".pglj_sel_input").change(function () {
|
|
|
+ let check = $(this).prop("checked");
|
|
|
+ if($(this).val() == 0){//勾选的是全选,其它的勾选项跟着改变
|
|
|
+ for(let a of $(".pglj_sel_input")){
|
|
|
+ $(a).prop("checked",check)
|
|
|
+ }
|
|
|
+ }else {//勾选其它选项
|
|
|
+ let a_checked = true;
|
|
|
+ for(let o of $(".pglj_sel_input_other")){//如果其它的有一个不勾选,则所有项也不打勾
|
|
|
+ if($(o).prop("checked") === false){
|
|
|
+ a_checked = false;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ $("#pglj_sel_all").prop("checked",a_checked);
|
|
|
+ }
|
|
|
+
|
|
|
+ pgljSelObj.showDatas();
|
|
|
+ });
|
|
|
+
|
|
|
+ $("#pglj_sel_btn_find").click(function () {
|
|
|
+ pgljSelObj.showDatas();
|
|
|
+ });
|
|
|
+
|
|
|
+ $(".pglj_sel_check_btn").click(function () {
|
|
|
+ pgljSelObj.checkType = $(this).text();
|
|
|
+ pgljSelObj.refreshDatas();
|
|
|
+ })
|
|
|
+
|
|
|
+ $("#pglj_sel_confirm").click(function () {
|
|
|
+ pgljSelObj.confirmSelect();
|
|
|
+ })
|
|
|
+
|
|
|
+});
|
|
|
+
|
|
|
+
|