public with sharing class ConsumTrialConfirmController { public Consum_Apply__c ca {get;set;} public Boolean applyerCanEdit {get;set;} public Boolean centerCanEdit {get;set;} private String caid; public ConsumTrialConfirmController() { caid = System.currentPageReference().getParameters().get('id'); } public void init(){ if (String.isBlank(caid)) { ApexPages.addmessage(new ApexPages.Message(ApexPages.severity.ERROR, '无效的耗材申请Id参数') ); return ; } List caList = [SELECT Id , HP_received_sign_rich__c , HP_received_sign_NG__c , HP_received_sign_NG_Reason__c , AssetManageConfirm__c , RA_Status__c FROM Consum_Apply__c WHERE Id =: caid ]; if (caList.size() > 0) { ca = caList[0]; } else { ApexPages.addmessage(new ApexPages.Message(ApexPages.severity.ERROR, '无效的耗材申请Id参数') ); return; } setEditable(ca); String savetype = System.currentPageReference().getParameters().get('savetype'); if(savetype == '1'){ ApexPages.addmessage(new ApexPages.Message(ApexPages.severity.INFO, '操作完成') ); } } /** @param ca Consum_Apply__c 耗材申请 @description 根据用户身份和耗材申请中字段状态,控制画面的可编辑 */ public void setEditable(Consum_Apply__c ca){ Id profileId = userinfo.getProfileId(); Profile pf = [Select Id, Name from Profile where Id=:profileId]; applyerCanEdit = false; centerCanEdit = false; if(pf.Id == '00e10000000Y3o5AAC'){ // 系统管理员 applyerCanEdit = true; centerCanEdit = true; } else { String pfNo = pf.Name.split('_')[0]; if (pfNo.contains('2B')){ // 20211217 ljh SFDC-C9RCEX update start User currentUser = [SELECT UserRole.Name, ProfileId,OCM_man_province_Rental__c,Default_Referable_Apply_Equipment_Center__c,Dept__c FROM User WHERE Id=: UserInfo.getUserId()]; // User currentUser = [SELECT UserRole.Name, ProfileId,OCM_man_province_Rental__c,Default_Referable_Apply_Equipment_Center__c FROM User WHERE Id= '00510000001OOJx']; //用于判断角色 String roleName = String.valueOf(currentUser.UserRole.Name); if( (pf.Id == System.Label.ProfileId_EquipmentCenter && roleName == '备品中心华东管理成员') || pf.Id == System.Label.ProfileId_EquCenAdminPic ){ applyerCanEdit = ca.RA_Status__c == '申请者已收货'; }else{ applyerCanEdit = false; } // applyerCanEdit = false; // 20211217 ljh SFDC-C9RCEX update end // 已上传试用表 且 没有驳回 且 没有最终确认时,可以编辑 centerCanEdit = String.isNotBlank(ca.HP_received_sign_rich__c) && !ca.HP_received_sign_NG__c && !ca.AssetManageConfirm__c; } else{ // 申请者已收货状态下,可编辑 applyerCanEdit = ca.RA_Status__c == '申请者已收货'; centerCanEdit = false; } } } /** @description 全部消耗按钮 */ public PageReference allConsumed() { Savepoint sp = Database.setSavepoint(); try{ if(String.isBlank(ca.HP_received_sign_rich__c)){ throw new ControllerUtil.myException('试用表不可为空!'); } ca.HP_received_sign_NG__c = false; ca.HP_received_sign_NG_Reason__c = null; List caesdList = [ SELECT Id , Received_Confirm__c , Check_lost_Item__c , Asset_Center_Confirm_F__c , RAESD_Status__c FROM Consum_Apply_Equipment_Set_Detail__c WHERE Consum_Apply__c =: caid AND Cancel_Select__c = false FOR UPDATE ]; // 有未做到货确认的明细,不能操作全部消耗,回寄 for(Consum_Apply_Equipment_Set_Detail__c caesd : caesdList){ if( caesd.Asset_Center_Confirm_F__c != 'OK') { throw new ControllerUtil.myException('未完成到货确认或备品中心未确认不能上传试用表'); } } Datetime now = System.now(); for(Consum_Apply_Equipment_Set_Detail__c caesd : caesdList){ if(caesd.RAESD_Status__c == '申请者已收货') { caesd.Check_lost_Item__c = '消耗'; } // trigger 里修改 操作消耗人员 和 时间 } FixtureUtil.withoutUpdate(caesdList); FixtureUtil.withoutUpdate(new List {ca}); // 刷新画面 PageReference page = new PageReference('/apex/ConsumTrialConfirm'); page.getParameters().put('id', caid); page.getParameters().put('savetype', '1'); page.setRedirect(true); return page; } catch(Exception ex){ ApexPages.addMessages(ex); Database.rollback(sp); } return null; } /** @ description 跳到部分寄回画面 */ public PageReference partSendback() { Savepoint sp = Database.setSavepoint(); try{ if(String.isBlank(ca.HP_received_sign_rich__c)){ throw new ControllerUtil.myException('试用表不可为空!'); } List caesdList = [ SELECT Id , Received_Confirm__c , Asset_Center_Confirm__c FROM Consum_Apply_Equipment_Set_Detail__c WHERE Consum_Apply__c =: caid AND Cancel_Select__c = false FOR UPDATE ]; // 有未做到货确认的明细,不能操作全部消耗,回寄 for(Consum_Apply_Equipment_Set_Detail__c caesd : caesdList){ if( caesd.Received_Confirm__c == 'OK' || caesd.Received_Confirm__c == '默认签收-OK' || caesd.Asset_Center_Confirm__c == 'OK') { continue; } else{ throw new ControllerUtil.myException('未完成到货确认或备品中心未确认不能上传试用表'); } } ca.HP_received_sign_NG__c = false; ca.HP_received_sign_NG_Reason__c = null; FixtureUtil.withoutUpdate(new List {ca}); PageReference sendbackPage = new PageReference('/apex/ConsumEquipmentSetReturn'); sendbackPage.getParameters().put('id', caid); sendbackPage.setRedirect(true); return sendbackPage; } catch(Exception ex){ ApexPages.addMessages(ex); Database.rollback(sp); return null; } } /** @description 备品中心确认后保存 */ public PageReference save(){ Savepoint sp = Database.setSavepoint(); try{ List caesdList = [ SELECT Id , Received_Confirm__c , Check_lost_Item_Final__c , Return_DeliverySlip__c , Asset__c FROM Consum_Apply_Equipment_Set_Detail__c WHERE Consum_Apply__c =: caid AND Cancel_Select__c = false FOR UPDATE ]; // 试用表不合格 if(ca.HP_received_sign_NG__c){ if(String.isBlank(ca.HP_received_sign_NG_Reason__c)) { throw new ControllerUtil.myException('试用表不合格理由不可为空!'); } if(ca.AssetManageConfirm__c){ throw new ControllerUtil.myException('试用表不合格时,备品中心不能确认!'); } for(Consum_Apply_Equipment_Set_Detail__c caesd : caesdList){ if(caesd.Check_lost_Item_Final__c != '消耗') { caesd.Return_DeliverySlip__c = null; caesd.Check_lost_Item__c = null; caesd.Asset_return_time__c = null; } } FixtureUtil.withoutUpdate(new List {ca}); FixtureUtil.withoutUpdate(caesdList); // 刷新画面 PageReference page = new PageReference('/apex/ConsumTrialConfirm'); page.getParameters().put('id', caid); page.getParameters().put('savetype', '1'); page.setRedirect(true); return page; // 备品中心确认OK }else if(ca.AssetManageConfirm__c) { if(String.isBlank(ca.HP_received_sign_rich__c)){ throw new ControllerUtil.myException('试用表不可为空!'); } FixtureUtil.withoutUpdate(new List {ca}); Set assetIdSet = new Set(); for(Consum_Apply_Equipment_Set_Detail__c caesd : caesdList) { caesd.Check_lost_Item__c = null; // 没寄回的全部当成消耗 if(caesd.Return_DeliverySlip__c == null) { caesd.Check_lost_Item_Final__c = '消耗'; assetIdSet.add(caesd.Asset__c); } // trigger 里操作保有设备的已消耗数量 } List assetList = [ SELECT Id FROM Asset WHERE Id IN:assetIdSet FOR UPDATE ]; FixtureUtil.withoutUpdate(caesdList); // 刷新画面 PageReference page = new PageReference('/apex/ConsumTrialConfirm'); page.getParameters().put('id', caid); page.getParameters().put('savetype', '1'); page.setRedirect(true); return page; } } catch(Exception ex){ ApexPages.addMessages(ex); Database.rollback(sp); } return null; } @TestVisible private static void test() { if (false == Test.isRunningTest()) return; Integer i = 0; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; //20211220 add i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; } }