public without sharing class GuaranteePeriodAlterationController { /*****************検索用******************/ public String text1 { get; set; } // 对象 public String val1 { get; set; } // 值 public String Statu_AchievementsId { get; set; } public GuaranteePeriodAlterationApplication__c ambc { get; set; } public static List textOpts { get; private set; } public static List changeReasonOpts { get; private set; } public Map assetIdMap; static { textOpts = new List(); textOpts.add(new SelectOption('','-无-')); //textOpts.add(new SelectOption('Order_No__c' , Schema.SObjectType.Asset.fields.Order_No__c.label)); textOpts.add(new SelectOption('Name' , Schema.SObjectType.Asset.fields.Name.label)); textOpts.add(new SelectOption('SerialNumber' , Schema.SObjectType.Asset.fields.SerialNumber.label)); //textOpts.add(new SelectOption('Installation_Site__c', Schema.SObjectType.Asset.fields.Installation_Site__c.label)); //textOpts.add(new SelectOption('Department_Name__c' , Schema.SObjectType.Asset.fields.Department_Name__c.label)); changeReasonOpts = new List(); changeReasonOpts.add(new SelectOption('' , '-无-')); changeReasonOpts.add(new SelectOption('集中采购,未分配到医院' , '集中采购,未分配到医院')); changeReasonOpts.add(new SelectOption('其他' , '其他')); } /*****************画面初始化用********************************/ public Boolean editAble {get;set;} public Boolean spoLinkFlag {get;set;} public String statusEdit {get;set;} /*****************画面表示Bean******************/ private List guaranteePeriodAlterationDetailRecords = new List(); public List guaranteePeriodAlterationDetaiRecordsview { get; set; } public Integer ConsumableorderdetailsCount { get { return guaranteePeriodAlterationDetailRecords == null ? 0 : guaranteePeriodAlterationDetailRecords.size(); } } public Integer ConsumableorderdetailsviewCount { get { return guaranteePeriodAlterationDetaiRecordsview == null ? 0 : guaranteePeriodAlterationDetaiRecordsview.size(); } } //变更单Id public String Id { get; set; } public Boolean isShow { get; set; } public List attachments { get; set; } public List contents { get; set; }//update by liwentao 更新lightning附件上传 //分页功能 public Integer pageLimit{get;set;} public String soql {get;set;} public GuaranteePeriodAlterationController(ApexPages.StandardController stdController) { isShow = false; Statu_AchievementsId = ApexPages.currentPage().getParameters().get('Statu_AchievementsId'); Id = ApexPages.currentPage().getParameters().get('Id'); System.debug('id:'+Id+' and sId:'+Statu_AchievementsId);//20231103 李文涛 statusEdit = ApexPages.currentPage().getParameters().get('KeyWords'); guaranteePeriodAlterationDetailRecords = new List(); guaranteePeriodAlterationDetaiRecordsview = new List(); editAble = false; spoLinkFlag = false; pageLimit = Integer.valueOf(System.Label.orderdetPageLimitsize); attachments = new List(); //update 李文涛 2023/07/13 更新lightning附件上传 start if(String.isNotBlank(Id)){ List cdlList = [SELECT ContentDocumentId FROM ContentDocumentLink WHERE LinkedEntityId = :Id]; List fileIDs = new List(); for (ContentDocumentLink docLink : cdlList) { fileIDs.add(docLink.ContentDocumentId); } contents=[SELECT Title,OwnerId,ContentModifiedDate from ContentDocument WHERE id IN :fileIDs]; } //update 李文涛 2023/07/13 更新lightning附件上传 end } // 画面初始化 public void init() { if(Id!=null&&Id!=''&&statusEdit==''&&statusEdit==null){ editAble = false; }else if((Id == null||Id=='')&&(statusEdit==''||statusEdit==null)){ editAble = true; }else if(Id != null&&Id!=''&&statusEdit!=''&&statusEdit!=null){ editAble = true; } ambc = new GuaranteePeriodAlterationApplication__c(); guaranteePeriodAlterationDetailRecords = new List(); List assetListed = new List(); Map MidMap = new Map(); if(Id== NULL || Id==''){ List statuAchievements = [select Id,InstallDate__c from Statu_Achievements__c where Id = :Statu_AchievementsId]; ambc.WarrantyStartDate__c = statuAchievements[0].InstallDate__c; soql = this.makeSoql1('',''); assetListed = Database.query(soql); for (Integer i = 0; i < assetListed.size(); i++) { guaranteePeriodAlterationDetailRecords.add(new GuaranteePeriodAlterationDetailInfo(assetListed[i])); MidMap.put(assetListed[i].Id, new GuaranteePeriodAlterationDetailInfo(assetListed[i])); } for(Integer i = 0; i < guaranteePeriodAlterationDetailRecords.size(); i++){ guaranteePeriodAlterationDetaiRecordsview.add(guaranteePeriodAlterationDetailRecords[i]); } }else{ List changeDetailList = new List(); List assetChangeList = new List(); assetChangeList = [select Id, Name,Change_status__c, ChangeReason__c,WarrantyStartDate__c, ChangeReason_text__c,GpaaStatu_Achievements__c from GuaranteePeriodAlterationApplication__c where Id = :Id]; if(assetChangeList.size()>0){ ambc = assetChangeList[0]; } changeDetailList = [select Id,Name,Asset__c,Asset__r.Name, Asset__r.Asset_situation__c, Asset__r.Order_No__c, Asset__r.SerialNumber, Asset__r.Account.Name, Asset__r.Installation_Site__c, Asset__r.CurrentContract__c, Asset__r.Status, Asset__r.guarantee_period__c, Asset__r.RepairQuantity__c from GuaranteePeriodAlterationDetail__c where GuaranteePeriodAlteration__c = :Id] ; for(Integer i = 0; i < changeDetailList.size(); i++){ MidMap.put(changeDetailList[i].Id, new GuaranteePeriodAlterationDetailInfo(changeDetailList[i])); } for(GuaranteePeriodAlterationDetailInfo ass:MidMap.values()){ guaranteePeriodAlterationDetailRecords.add(ass); } for(GuaranteePeriodAlterationDetailInfo ass : guaranteePeriodAlterationDetailRecords){ for(GuaranteePeriodAlterationDetail__c ambcDetail :changeDetailList){ if(ass.ast.Id == ambcDetail.Asset__c){ ass.check = true; guaranteePeriodAlterationDetaiRecordsview.add(ass); } } } isShow = true; attachments = seekAttachment(); } } //20231103 李文涛 lightning升级 start public void refreshFile(){ if(String.isBlank(id)){ return; } // 20231103 Lightning文件修改 Start List cdlList = [SELECT ContentDocumentId FROM ContentDocumentLink WHERE LinkedEntityId = :Id]; List fileIDs = new List(); for (ContentDocumentLink docLink : cdlList) { fileIDs.add(docLink.ContentDocumentId); } contents=[SELECT Title,OwnerId,ContentModifiedDate from ContentDocument WHERE id IN :fileIDs]; // contents=null; // 20231103 Lightning文件修改 End } //20231103 李文涛 lightning升级 end // 检索 public void searchConsumableorderdetails() { Map MidMap = new Map(); List asListed = new List(); soql = this.makeSoql1(text1,val1); asListed = Database.query(soql); for (GuaranteePeriodAlterationDetailInfo bss : guaranteePeriodAlterationDetaiRecordsview) { if(bss.check == true){ MidMap.put(bss.ast.Id, bss); } } for (Integer i = 0; i < asListed.size(); i++) { if(!MidMap.containsKey(asListed[i].Id)){ MidMap.put(asListed[i].Id, new GuaranteePeriodAlterationDetailInfo(asListed[i])); } } guaranteePeriodAlterationDetaiRecordsview.clear(); for(GuaranteePeriodAlterationDetailInfo bss : MidMap.values()){ guaranteePeriodAlterationDetaiRecordsview.add(bss); } } private String makeSoql1(String text1,String val1){ String statu_AchievementId; if(String.isNotBlank(val1)){ val1 = val1.trim(); } if (String.isNotBlank(Statu_AchievementsId)) { statu_AchievementId = Statu_AchievementsId; //20231103 李文涛 lightning升级 start } else if(String.isNotBlank(ambc.GpaaStatu_Achievements__c)) { statu_AchievementId = ambc.GpaaStatu_Achievements__c; } else{ statu_AchievementId=''; } //20231103 李文涛 lightning升级 end String soql = 'select Id,name,SerialNumber,Asset_situation__c,Order_No__c,Account.Name,Status,Installation_Site__c,CurrentContract__c,guarantee_period__c,RepairQuantity__c from Asset where Backorder__c = \'' + statu_AchievementId +'\''; soql += ' AND AssetMark__c != \'耗材\''; if(!String.isBlank(text1)){ soql += ' AND ('+ text1 +' like \'%' + String.escapeSingleQuotes(val1.replaceAll('%', '\\%')) + '%\' )'; } soql += ' limit 200'; return soql; } // 编辑按钮 public PageReference setEditAble(){ statusEdit = 'Redirect'; PageReference ref = new Pagereference('/apex/AssetGuaranteePeriodAlteration?Id='+Id+'&KeyWords='+statusEdit); ref.setRedirect(true); return ref; } // 再申请 public PageReference backOrder(){ statusEdit = 'Redirect'; PageReference ref = new Pagereference('/apex/AssetGuaranteePeriodAlteration?Id='+Id+'&KeyWords='+statusEdit); ref.setRedirect(true); return ref; } //删除按钮 public PageReference DelConsumable(){ GuaranteePeriodAlterationApplication__c ambc = new GuaranteePeriodAlterationApplication__c(Id = Id); List changeDetailList = [Select Id,GuaranteePeriodAlteration__r.GpaaStatu_Achievements__c from GuaranteePeriodAlterationDetail__c where GuaranteePeriodAlteration__c = :Id]; String rawAccountIded = ''; if(changeDetailList.size()> 0){ rawAccountIded = changeDetailList[0].GuaranteePeriodAlteration__r.GpaaStatu_Achievements__c; } try { delete changeDetailList; delete ambc; //return null; return returnRawAccountPage(rawAccountIded); } catch (Exception e) { ApexPages.addMessages(e); return null; } //return null; } // 删除“变更申请单”时,跳转到“注残”页面 public PageReference returnRawAccountPage(String rawAccountIded){ PageReference ref = new Pagereference('/'+rawAccountIded ); ref.setRedirect(true); return ref; } //查找当前"保修期限变更申请"所有的附件 public List seekAttachment() { return [select Id, ParentId, Name, OwnerId, CreatedDate, BodyLength FROM Attachment where ParentId = :Id]; } //跳转到上传附件页面 public PageReference uploadingAttachment(){ PageReference ref = new Pagereference('/p/attach/NoteAttach?pid=' + Id +'&retURL=%2Fapex/AssetGuaranteePeriodAlteration?Id='+Id); ref.setRedirect(true); return ref; } //update 李文涛 2023/07/13 更新lightning附件上传 start //跳转到上传附件页面Lightning public PageReference uploadingAttachmentLightning(){ //PageReference ref = new Pagereference('/p/attach/NoteAttach?pid=' + Id +'&retURL=%2Fapex/AssetGuaranteePeriodAlteration?Id='+Id); PageReference ref = new Pagereference('/lightning/n/LexUploadPage?0.recordId='+Id+''); ref.setRedirect(true); return ref; } //update 李文涛 2023/07/13 更新lightning附件上传 start //查找"保有设备"是否含有"QIS"和"修理"和"保有设备的保修期限变更过" public Boolean find_QIS_Repair(List assetIdList) { assetIdMap = new Map(); //20231205 lt update DB202312036277 【紧急】设备保修期逻辑优化 //Repair__c QIS_Report__c 两个soql+状态判断 Status2__c QIS_Status__c 20240119 add 删除*2 List repairList = [select Id,Delivered_Product__c,Delivered_Product__r.SerialNumber from Repair__c where Delivered_Product__c In :assetIdList and Status2__c != '00.取消' and Status2__c != '00.关闭' and Status2__c != '00.删除' and Status__c != '草案中' and Status__c != '0.删除' ]; List qIS_ReportList = [select Id,nonyushohin__c,nonyushohin__r.SerialNumber from QIS_Report__c where nonyushohin__c In :assetIdList and QIS_Status__c != '草案中' and QIS_Status__c != '取消']; List assets = [Select Id,Name,WarrantyChanges__c,SerialNumber from Asset where WarrantyChanges__c = true And Id In:assetIdList]; if (repairList.size() > 0 || qIS_ReportList.size() > 0 || assets.size() > 0) { if (repairList.size() > 0) { for (Repair__c repair :repairList) { assetIdMap.put(repair.Delivered_Product__c,repair.Delivered_Product__r.SerialNumber+'(含修理)'); } } if ( qIS_ReportList.size() > 0) { for (QIS_Report__c qIS_Report :qIS_ReportList) { assetIdMap.put(qIS_Report.nonyushohin__c,qIS_Report.nonyushohin__r.SerialNumber+'(含QIS)'); } } if (assets.size() > 0) { for (Asset ass: assets) { assetIdMap.put(ass.Id,ass.SerialNumber+'(变更过)'); } } return true; } return false; } // 提交按钮 public PageReference Sorder() { PageReference ref = new Pagereference('/'+Id); ref.setRedirect(true); Savepoint sp = Database.setSavepoint(); GuaranteePeriodAlterationApplication__c agAlteration = new GuaranteePeriodAlterationApplication__c(); agAlteration.Id = Id; attachments = seekAttachment(); //20231103 lightning升级 李文涛 start // if (ambc.ChangeReason__c == '集中采购,未分配到医院' && attachments.size() == 0) { if (ambc.ChangeReason__c == '集中采购,未分配到医院' && contents.size() == 0) { //20231103 lightning升级 李文涛 end ApexPages.addmessage(new ApexPages.message(ApexPages.severity.Error, '请上传标书')); return null; } try{ update agAlteration; }catch(Exception e){ ApexPages.addmessages(e); } try { Approval.ProcessSubmitRequest psr = new Approval.ProcessSubmitRequest(); psr.setObjectId(Id); Approval.ProcessResult submitResult = Approval.process(psr); return ref; } catch (Exception e) { //ApexPages.addmessages(e); Database.rollback(sp); return null; } //return null; //return UnabletoEdit(); } //验证字段 public Boolean warning() { if (String.isBlank(ambc.ChangeReason__c)) { ApexPages.addmessage(new ApexPages.message(ApexPages.severity.Error, '请输入变更原因')); return true; } else if (ambc.ChangeReason__c == '其他' && String.isBlank(ambc.ChangeReason_text__c)) { ApexPages.addmessage(new ApexPages.message(ApexPages.severity.Error, '变更原因为"其他"时,请输入"变更原因其他"')); return true; } else if (ambc.WarrantyStartDate__c == null) { ApexPages.addmessage(new ApexPages.message(ApexPages.severity.Error, '请输入保修开始日')); return true; } Integer FLG = 0; Integer Count = 0; for (GuaranteePeriodAlterationDetailInfo CheckCount : guaranteePeriodAlterationDetaiRecordsview) { FLG = FLG + 1; if(CheckCount.check == false){ Count = Count + 1; } } if (Count == FLG) { ApexPages.addmessage(new ApexPages.message(ApexPages.severity.Error, '请选择要修改的保有设备')); return true; } return false; } // 保存按钮 public PageReference save() { //return null; GuaranteePeriodAlterationApplication__c agAlteration = new GuaranteePeriodAlterationApplication__c (); List Ins = New List(); //新建变更单时 Savepoint sp = Database.setSavepoint(); try { agAlteration.ChangeReason_text__c = ambc.ChangeReason_text__c; agAlteration.WarrantyStartDate__c = ambc.WarrantyStartDate__c; agAlteration.ChangeReason__c = ambc.ChangeReason__c; if (warning()) { return null; } if (String.isBlank(Id)) { Integer i = 1; agAlteration.Change_status__c = '草案中'; agAlteration.GpaaStatu_Achievements__c = Statu_AchievementsId; try { insert agAlteration; } catch (Exception e) { ApexPages.addMessages(e); } Map assetGuaranteeTimeMap = new Map(); List saveGpaApplicationList = [SELECT Id,Name,WarrantyStartDate__c FROM GuaranteePeriodAlterationApplication__c WHERE id = :agAlteration.id]; if ( saveGpaApplicationList.size() > 0) { List assetList = [Select Id,Guarantee_period_for_products__c,guarantee_period__c,RepairQuantity__c,SerialNumber from Asset where Backorder__c = :Statu_AchievementsId]; Map assetMap = new Map(); for (Asset ass :assetList) { assetMap.put(ass.Id,Integer.valueOf(ass.guarantee_period__c)); } List assetIds = new List(); for (GuaranteePeriodAlterationDetailInfo ass : guaranteePeriodAlterationDetaiRecordsview) { if(ass.check == true){ assetGuaranteeTimeMap.put(saveGpaApplicationList[0].Id,ass.ast.Id); GuaranteePeriodAlterationDetail__c gpaDetail = new GuaranteePeriodAlterationDetail__c(); String str = string.valueOf(i); if(str.length() == 1){ str = '0' + str; } gpaDetail.Name = saveGpaApplicationList[0].Name + '-'+ str; gpaDetail.GuaranteePeriodAlteration__c = saveGpaApplicationList[0].Id; gpaDetail.Asset__c = ass.ast.Id; gpaDetail.GuaranteeTime__c = saveGpaApplicationList[0].WarrantyStartDate__c.addDays(assetMap.get(ass.ast.Id)); i++; Ins.add(gpaDetail); assetIds.add(ass.ast.Id); } } if (find_QIS_Repair(assetIds)) { ApexPages.addmessage(new ApexPages.message(ApexPages.severity.Error, '以下保有设备含有"QIS"或"修理"或"保修期限变更过"不适合变更"保修期限"' + assetIdMap.values())); return null; } //update saveGpaApplicationList; } Id = agAlteration.id; if(Ins.size()>0){ insert Ins; return UnabletoEdit(); } } //修改之后 保存订单 else if(!String.isBlank(Id)){ agAlteration.Id = Id; agAlteration.GpaaStatu_Achievements__c = ambc.GpaaStatu_Achievements__c; update agAlteration; List delIns = [select Id from GuaranteePeriodAlterationDetail__c where GuaranteePeriodAlteration__r.Id = :Id]; if(delIns.size()>0){ delete delIns; } Integer i = 1; List saveGpaApplicationList = [SELECT Id,Name FROM GuaranteePeriodAlterationApplication__c WHERE id =:agAlteration.id]; List assetIds = new List(); for (GuaranteePeriodAlterationDetailInfo ass : guaranteePeriodAlterationDetaiRecordsview) { if(ass.check == true){ GuaranteePeriodAlterationDetail__c gpaDetail = new GuaranteePeriodAlterationDetail__c(); String str = string.valueOf(i); if(str.length() == 1){ str = '0' + str; } gpaDetail.Name = saveGpaApplicationList[0].Name + '-'+ str; gpaDetail.GuaranteePeriodAlteration__c = saveGpaApplicationList[0].Id; gpaDetail.Asset__c = ass.ast.Id; i++; Ins.add(gpaDetail); assetIds.add(ass.ast.Id); } } if (find_QIS_Repair(assetIds)) { ApexPages.addmessage(new ApexPages.message(ApexPages.severity.Error, '以下保有设备含有"QIS"或"修理"或"保修期限变更过"不适合变更"保修期限"' + assetIdMap.values())); return null; } if(Ins.size()>0){ insert Ins; return UnabletoEdit(); } } }catch(Exception e){ ApexPages.addMessages(e); Database.rollback(sp); return null; } return UnabletoEdit(); } // 返回不可编辑状态 public PageReference UnabletoEdit(){ PageReference ref = new Pagereference('/apex/AssetGuaranteePeriodAlteration?Id='+Id); ref.setRedirect(true); return ref; } // Data Bean class GuaranteePeriodAlterationDetailInfo { public Boolean check { get; set; } public Boolean oldCheck { get; set; } public Boolean canSelect { get; set; } public Asset ast { get; set; } public GuaranteePeriodAlterationDetail__c gpad { get; set; } public GuaranteePeriodAlterationDetailInfo(GuaranteePeriodAlterationDetail__c gpad) { check = false; oldCheck = false; ast = gpad.Asset__r; canSelect = true; } public GuaranteePeriodAlterationDetailInfo(Asset e) { check = false; oldCheck = false; ast = e; canSelect = true; } } }