public without sharing class TransferShippmentReceived4Controller { public List esdList { get; set; } public Boolean saveBtnDisabled { get; private set; } public boolean done_flg {get;set;} public String ApplyId {get;set;} private Boolean isStartUser; // 是否是调拨前地区的用户 private Boolean isDestUser; // 是否是调拨后地区的用户 private Boolean is2B3; // 是否是2B3_照片 private String Id; public TransferShippmentReceived4Controller() { Id = ApexPages.currentPage().getParameters().get('id'); ApplyId = Id; } private List getDetails(Set tasIdSet) { List tadList = [ select Lost_item_Memo_Final__c, Lost_item_Memo__c, TransferApplySummary__r.Wei_loaner_arranged__c, TransferApply__r.Asset_return_ng_num__c , TransferApplySummary__r.Shippment_loaner_time2__c , TransferApply__r.RecordType.DeveloperName , DeliverySlip__c , Redeliver_Staff__c , Redeliver_SlipNo__c , Redeliver_Distributor_method__c , Redeliver_DeliveryCompany__c , Shippment_loaner_time__c , NoItemReturn__c, SerialNumber_F__c, Asset_return_time__c, Check_lost_Item_F__c, TransferApplySummary__r.Received_ng_detail__c, TransferApplySummary__r.Wei_Return_Finish__c, TransferApplySummary__r.Received_Confirm__c, Check_lost_Item_Final__c, Return_DeliverySlip__c, Fixture_Name_F__c, TransferApplySummary__r.Fixture_Set__r.Name, TransferApplySummary__c, Fixture_QRCode_F__c, TransferApply__r.Name, TransferApplySummary__r.Name, Pre_inspection_time__c, StockDown__c, StockDown_time__c, Id, Name, Asset__c, Asset__r.Name, Asset__r.SerialNumber, Asset__r.Product_Serial_No__c, Asset__r.Remark__c, Asset__r.ImageAsset__c, Asset__r.ImageSerial__c, Asset__r.ImageAssetUploadedTime__c, Asset__r.ImageSerialUploadedTime__c, Loaner_CDS_Info__c, Inspection_result__c, Check_lost_Item__c, Pre_disinfection__c, Water_leacage_check__c, Inspection_result_after__c, Arrival_in_wh__c, Asset__r.Pre_Reserve_RAES_Detail__c, Asset__r.Pre_Reserve_RAES_Detail__r.After_Inspection_time__c, Main_OneToOne__c, CDSChargement__c, CDSType__c, Inspection_result_after_ng__c, Inspection_result_ng__c, Lost_item_giveup__c, Confirm_Lost_Date__c, CDS_complete__c, Loaner_accsessary__c,ArrivalResult__c,Arrival_NG_Comment__c //20210426 ljh add 1832 from TransferApplyDetail__c where TransferApplySummary__c in :tasIdSet and DeliverySlip__c <> null //and Cancel_Select__c = False order by TransferApplySummary__r.Name, TransferApplySummary__c, Name ]; return tadList; } /** @description 用户角色与地区地否匹配 @param roleName 角色Name @param center 备品中心 */ private Boolean isMatch(String roleName, String center) { switch on center { when '北京 备品中心' { return roleName == '备品中心北方管理成员'; } when '上海 备品中心' { return roleName == '备品中心华东管理成员'; } when '广州 备品中心' { return roleName == '备品中心南方管理成员'; } } return false; } // 画面初始化 public PageReference init() { done_flg = false; esdList = new List(); Map esMap = new Map(); saveBtnDisabled = false; if (Id != null) { List ids = Id.split(','); // 当前User List esList; esList = [select TransferApply__r.Loaner_centre_mail_address__c, TransferApply__r.Name , First_TAD_Model_No_F__c, First_TAD__r.SerialNumber_F__c, First_TAD__r.Loaner_asset_no__c , TransferApply__c, Id, TAS_Status__c, Name, Shippment_loaner_time2__c , TransferApply__r.From_Location__c, TransferApply__r.Destination_location__c from TransferApplySummary__c where (TransferApply__r.Name in :ids or Id in :ids) order by TransferApply__r.Name, Id]; if (esList.size() > 0) { for (TransferApplySummary__c raes : esList) { esMap.put(raes.Id, raes); } User user1 = [SELECT UserRole.Name, Profile.Name FROM User WHERE Id=:UserInfo.getUserId()]; isStartUser = isMatch(user1.UserRole.Name, esList[0].TransferApply__r.From_Location__c); isDestUser = isMatch(user1.UserRole.Name, esList[0].TransferApply__r.Destination_location__c); //20210519 you WLIG-C2J9AA start //is2B3 = user1.Profile.Name == '2B3_备品中心管理者(照片)'; is2B3 = false; if(user1.Profile.Name == '2B3_备品中心管理者(照片)' || user1.UserRole.Name == '备品运营部'){ is2B3 = true; } //20210519 you WLIG-C2J9AA end } else { ApexPages.addmessage(new ApexPages.message(ApexPages.severity.Error, '备品不存在')); saveBtnDisabled = true; return null; } } // 备品set明细 List eList = getDetails(esMap.keySet()); String raesId = ''; for (TransferApplyDetail__c esd : eList) { EsdInfo ei = new EsdInfo(esd, isStartUser, isDestUser, is2B3); esdList.add(ei); } if (esdList.size() <= 0) { ApexPages.addmessage(new ApexPages.message(ApexPages.severity.Error, '没有备品set明细')); saveBtnDisabled = true; } return null; } // 保存按钮 public PageReference save() { //检查是否可以继续 List eList = new List(); Set assetIdForLockSet = new Set(); for (EsdInfo esdInfo : esdList) { if (esdInfo.isChecked && esdInfo.editable) { TransferApplyDetail__c esd = esdInfo.rec; if (String.isNotBlank(esd.Check_lost_Item_Final__c)) { if (esd.Check_lost_Item_Final__c == '欠品' || esd.Check_lost_Item_Final__c == '消耗' ) { //esd.Return_DeliverySlip__c = null; esd.CDS_complete__c = false; if (esd.Check_lost_Item_Final__c == '欠品') esd.NoItemReturn__c = false; } } else { esd.Lost_item_check_staff_Final__c = null; esd.Lost_item_check_time_Final__c = null; if (esd.Check_lost_Item__c == '欠品' || esd.Check_lost_Item__c == '消耗' ) { //esd.Return_DeliverySlip__c = null; esd.CDS_complete__c = false; if (esd.Check_lost_Item__c == '欠品') esd.NoItemReturn__c = false; } if (String.isBlank(esd.Check_lost_Item__c)) { esd.Lost_item_check_staff__c = null; esd.Lost_item_check_time__c = null; } } if (esd.Lost_item_giveup__c && esd.Check_lost_Item__c == null) { esd.Check_lost_Item__c = '欠品'; esd.Return_DeliverySlip__c = null; } if (!esd.CDS_complete__c) { esd.CDS_complete_time__c = null; esd.CDS_staff__c = null; } eList.add(esd); assetIdForLockSet.add(esd.Asset__c); } } List assetIdForLockList = [SELECT Id FROM Asset WHERE Id = :assetIdForLockSet AND Asset_loaner_category__c != '耗材' AND RecordTypeId = '01210000000kOPR' FOR UPDATE]; Savepoint sp = Database.setSavepoint(); try { FixtureUtil.withoutUpsertObjects(eList); done_flg = true; } catch (Exception ex) { ApexPages.addmessage(new ApexPages.message(ApexPages.severity.Error, ex.getMessage())); Database.rollback(sp); done_flg = false; } return null; } public class EsdInfo { public TransferApplyDetail__c rec { get; set; } public boolean isChecked { get; set; } public boolean editable { get; set; } public String fsName {get; set;} public Id slipId {get;set;} public EsdInfo(TransferApplyDetail__c rec, Boolean isStartUser, Boolean isDestUser, Boolean is2B3) { this.rec = rec; this.isChecked = true; this.editable = false; this.fsName = rec.TransferApplySummary__r.Name; if(String.isNotBlank(rec.TransferApplySummary__r.Fixture_Set__r.Name)){ this.fsName += ':' + rec.TransferApplySummary__r.Fixture_Set__r.Name; } // 备品中心发到办事处,又被寄回时,要看回寄,由调拨前地区用户做欠品确认 String applyType = rec.TransferApply__r.RecordType.DeveloperName; if(applyType == 'CenterToAgency') { if (rec.Asset_return_time__c != null) { this.editable = (isStartUser || is2B3) && String.isBlank(rec.Inspection_result_after__c) && !rec.Arrival_in_wh__c; this.slipId = rec.Return_DeliverySlip__c; } } // 其它类型只要发货了,由调拨后地区用户做欠品确认 else if(applyType == 'CenterToCenter' || applyType == 'AgencyToCenter') { if (rec.Shippment_loaner_time__c != null) { this.editable = (isDestUser || is2B3) && String.isBlank(rec.Inspection_result_after__c) && !rec.Arrival_in_wh__c; this.slipId = rec.DeliverySlip__c; } } } } }