//Rental_Apply_Equipment_Set__c トリガHandler // RentalApplyEquipmentSetDetailHandlerTest // RentalFixtureManage13Test // RentalFixtureManage1Test // RentalFixtureManage2Test // RentalFixtureManage3Test // RentalFixtureManage4Test // RentalFixtureManage5Test // RentalApplyEquipmentSetHandlerTest public without sharing class RentalApplyEquipmentSetHandler extends Oly_TriggerHandler { private Map newMap; private Map oldMap; private List newList; private List oldList; private static final Map DEVELOPERNAMEMAP = Schema.SObjectType.Rental_Apply__c.getRecordTypeInfosByDeveloperName();//记录类型 20210609 ljh add 1732 public RentalApplyEquipmentSetHandler() { 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 ++; if (Trigger.isUpdate || Trigger.isUndelete || Trigger.isDelete) { this.newMap = new Map(); this.newList = new List(); this.oldMap = (Map) Trigger.oldMap; // old そのまま利用 this.oldList = (List) Trigger.old; // old そのまま利用 // 大前提 Fixture_Set__c ですが下記の属性が設定されています // 参照関係に含まれる参照レコードは削除できません。 if (Trigger.isUpdate || Trigger.isUndelete) { for (SObject nSObj : Trigger.new) { Rental_Apply_Equipment_Set__c nObj = (Rental_Apply_Equipment_Set__c) nSObj; Rental_Apply_Equipment_Set__c oObj = null; if (Trigger.isUpdate) { oObj = oldMap.get(nObj.Id); } if (Trigger.isUndelete && String.isBlank(nObj.Fixture_Set__c)) { // 旧データ、beipin2 の trigger 実行しない continue; } else if (Trigger.isUpdate && String.isBlank(nObj.Fixture_Set__c) && String.isNotBlank(oObj.Fixture_Set__c)) { nObj.addError('不能清空借出备品配套 Fixture_Set__c'); } else { this.newList.add(nObj); this.newMap.put(nObj.Id, nObj); } } } } else { // insert this.newMap = (Map) Trigger.newMap; this.oldMap = (Map) Trigger.oldMap; this.newList = (List) Trigger.new; this.oldList = (List) Trigger.old; } } protected override void beforeInsert() { beforeSetValue(); } protected override void beforeUpdate() { beforeSetValue(); } protected override void afterInsert() { Set raesIdSet = new Set(); formulaToTextCheck(); for (Rental_Apply_Equipment_Set__c nObj : newList) { if (nObj.Min_Final_reply_day_Text__c != nObj.Min_Final_reply_day_F__c || nObj.Received_Confirm_Status_Text__c != nObj.Received_Confirm_Status_F__c) { raesIdSet.add(nObj.Id); } } // Batch では@future実行できません if (raesIdSet.size() > 0 && !System.isBatch()) { // before 数式の値がnullになる可能性がありますのでここでも一回チェックします formulaToTextCheck(raesIdSet); } } protected override void afterUpdate() { // キャンセルコピー コピーを先にやらにとcancelフラグが全部falseに変更しますので // cancelCopy(); Map raesdCMap = new Map(); Map raesdNGMap = new Map(); Set raesIdSet = new Set(); for (Rental_Apply_Equipment_Set__c nObj : newList) { Rental_Apply_Equipment_Set__c oObj = oldMap.get(nObj.Id); if (oObj.Cancel_Select__c == false && nObj.Cancel_Select__c == true) { raesdCMap.put(nObj.Id, nObj); } //申请者收货NG变更到不是NG或申请者不是NG到NG的时候需要更新对应的明细(为了修改姓名) if ((oObj.Received_Confirm__c != 'NG' && nObj.Received_Confirm__c == 'NG') || (oObj.Received_Confirm__c == 'NG' && nObj.Received_Confirm__c != 'NG')) { raesdNGMap.put(nObj.Id, nObj); } if (nObj.Min_Final_reply_day_Text__c != nObj.Min_Final_reply_day_F__c || nObj.Received_Confirm_Status_Text__c != nObj.Received_Confirm_Status_F__c) { raesIdSet.add(nObj.Id); } } recCancelNGDetail(raesdCMap, raesdNGMap, true); // before では数式項目がnullの場合があります formulaToTextCheck(); // 下一次借用预计出库时间 状态:已出库-->回收后-检测结果OK 2021118 ljh 排队 NextShippmentDate(); // OLY_OCM-530: 一览从申请单A分到申请单B时,会检查A下是否有至少一条一览,如果没有则报错 checkOldApplyNotNull(); // Batch では@future実行できません if (raesIdSet.size() > 0 && !System.isBatch()) { // before 数式の値がnullになる可能性がありますのでここでも一回チェックします formulaToTextCheck(raesIdSet); } } // before 数式の値がnullになる可能性がありますのでここでも一回チェックします @future private static void formulaToTextCheck(Set raesdIdSet) { List raesList = [SELECT Id , Min_Final_reply_day_Text__c , Min_Final_reply_day_F__c , Received_Confirm_Status_Text__c , Received_Confirm_Status_F__c FROM Rental_Apply_Equipment_Set__c WHERE Id = :raesdIdSet]; List updateRaesList = new List(); for (Rental_Apply_Equipment_Set__c raes : raesList) { if (raes.Min_Final_reply_day_Text__c != raes.Min_Final_reply_day_F__c || raes.Received_Confirm_Status_Text__c != raes.Received_Confirm_Status_F__c) { raes.Min_Final_reply_day_Text__c = raes.Min_Final_reply_day_F__c; raes.Received_Confirm_Status_Text__c = raes.Received_Confirm_Status_F__c; updateRaesList.add(raes); } } if (updateRaesList.size() > 0) { update updateRaesList; } } protected override void afterDelete() { deleteEquipmentError(); // OLY_OCM-530: 如果是非"草案中"状态,删除一览则报错 } // OLY_OCM-530: 新分的申请单名后缀num是根据一览的Old_Rental_Apply___c条数判断的,如果分出的申请单下一览是null,那么计算num时,这条分单就被忽略了。 // ---> 所以需要保证每个申请单下至少有一个一览(一览从申请单A分到申请单B时,会检查A下是否有至少一条一览,如果没有则报错) private void checkOldApplyNotNull() { Set oRaIds = new Set(); // 原申请单s Rental_Apply_Equipment_Set__c nObj = null; List oRaesList = new List(); for (Rental_Apply_Equipment_Set__c oObj : this.oldList) { //20210609 ljh add 1732 start if(oObj.RARecordTypeId__c == DEVELOPERNAMEMAP.get('AgencyRequest').getRecordTypeId()){ break; } //20210609 ljh add 1732 end nObj = this.newMap.get(oObj.Id); if(oObj.Rental_Apply__c != nObj.Rental_Apply__c && oObj.Rental_Apply__c != null) { oRaIds.add(oObj.Rental_Apply__c); oRaesList.add(oObj); } } if (oRaIds.size() != 0) { Set emptyRaObjs = checkRentalApplyNotExistRAES(oRaesList, oRaIds); // oldRaesList分单(转移)到新申请单后,没有一览的原申请单 if (emptyRaObjs.size() != 0) { List raNameList = [ Select Id, Name From Rental_Apply__c Where Id in :emptyRaObjs]; Map raNameMap = new Map(); for (Rental_Apply__c ra : raNameList) { raNameMap.put(ra.Id, ra.Name); } for (Rental_Apply_Equipment_Set__c oObj : oRaesList) { if (emptyRaObjs.contains(oObj.Rental_Apply__c)) { nObj = this.newMap.get(oObj.Id); nObj.addError('申请单 ' + raNameMap.get(oObj.Rental_Apply__c) + ', 下一览不能为空'); } } } } } /** * @param oldRaesList 分单(转移)前的一览List * @param raIds 原申请单 * @return 返回oldRaesList分单(转移)到新申请单后,没有一览的原申请单 */ public static Set checkRentalApplyNotExistRAES(List oldRaesList, Set raIds) { Set emptyRaIds = new Set(); // emptyRaIds--一览为空的申请单 Set oIds = new Set(); for (Rental_Apply_Equipment_Set__c oObj : oldRaesList) { if (oObj.Id != null && false == oIds.contains(oObj.Id)) { oIds.add(oObj.Id); } } AggregateResult[] leftRaesRA = [ // (原申请单s中除了原一览s的一览)存在的申请单 Select Rental_Apply__c From Rental_Apply_Equipment_Set__c Where Id Not In :oIds AND Rental_Apply__c In :raIds group by Rental_Apply__c]; if (leftRaesRA.size() == 0) { return raIds; } else { Set notERaIds = new Set(); for (AggregateResult ar : leftRaesRA) { notERaIds.add(ar.get('Rental_Apply__c').toString()); } for (String idObj : raIds) { if (false == notERaIds.contains(idObj)) { emptyRaIds.add(idObj); } } } return emptyRaIds; } // OLY_OCM-530: 如果是非"草案中"状态,删除一览则报错 private void deleteEquipmentError() { for (Rental_Apply_Equipment_Set__c oObj : oldList) { //20210522 ljh 1829 update start //if (oObj.RAES_Status__c != FixtureUtil.raStatusMap.get(FixtureUtil.RaStatus.Cao_An_Zhong.ordinal())) { if (oObj.RAES_Status__c != FixtureUtil.raStatusMap.get(FixtureUtil.RaStatus.Cao_An_Zhong.ordinal()) && !oObj.canDelete__c) { //20210522 ljh 1829 update end oObj.addError('非草案中状态的一览不能删除'); } } } private void beforeSetValue() { // List raesIdList = new List(); Set fisSet = new Set(); for (Rental_Apply_Equipment_Set__c nObj : newList) { // raesIdList.add(nObj.Id); if (String.isNotBlank(nObj.Fixture_Set__c)) { fisSet.add(nObj.Fixture_Set__c); } } // Map raesMap = new Map([ // SELECT Id, Fixture_Set__r.Name // FROM Rental_Apply_Equipment_Set__c // where Id in :raesIdList]); Map fdMap = new Map(); if (fisSet.size() > 0) { fdMap = new Map([ SELECT Id, Name FROM Fixture_Set__c where Id in :fisSet]); } User applyUser = null; // 申請中になったとき、ログインユーザーからプレセス用の上司を設定 for (Rental_Apply_Equipment_Set__c nObj : newList) { // raesIdList.add(nObj.Id); Rental_Apply_Equipment_Set__c oObj = null; if (Trigger.isUpdate) { oObj = oldMap.get(nObj.Id); if (oObj.Received_Confirm__c != nObj.Received_Confirm__c) { if (nObj.Received_Confirm__c == null) { nObj.Loaner_received_time__c = null; } else { nObj.Loaner_received_time__c = Datetime.now(); } } } nObj.Demo_purpose2_T__c = nObj.Demo_purpose2__c; nObj.Loaner_centre_mail_address__c = nObj.Loaner_centre_mail_address_F__c; if (nObj.Asset_return_time__c == null) { nObj.Asset_return_time__c = nObj.Asset_return_time_F__c; } nObj.Received_Confirm_Text__c = nObj.Received_Confirm__c; Fixture_Set__c fs; if (fdMap.containsKey(nObj.Fixture_Set__c)) { fs = fdMap.get(nObj.Fixture_Set__c); } //画面显示用clone出来的数据不需要设置Name if (nObj.DataMigration_Flag__c == false && String.isNotBlank(nObj.Fixture_Set__c) && fs != null && nObj.IndexFromUniqueKey__c != null) { String split_ApplyNum = nObj.RequestNoJoinStr2__c; if (nObj.Rental_Apply_r_Name__c.contains('_')) { // XXXX-YYYY_1 (ZZZZ_1) List split_ApplyNumList = nObj.Rental_Apply_r_Name__c.split('_'); String raName = split_ApplyNumList[split_ApplyNumList.size() - 2]; // XXXX-YYYY (ZZZZ) split_ApplyNum = split_ApplyNumList[split_ApplyNumList.size() - 1]; // 1 split_ApplyNumList = raName.split('-'); // [XXXX, YYYY] ([ZZZZ]) if (split_ApplyNumList.size() > 1) { // YYYY_1 split_ApplyNum = split_ApplyNumList[split_ApplyNumList.size() - 1] + '_' + split_ApplyNum; } else { // ZZZZ_1 split_ApplyNum = nObj.Rental_Apply_r_Name__c; } } nObj.Name = split_ApplyNum + ':' + fs.Name + ':' + nObj.IndexFromUniqueKey__c.format().leftpad(3,'0'); // 如果是分配代替品名字加:Sub if (nObj.Substitute_Select_Again__c) { nObj.Name += ':Sub'; } //一览时申请者收货NG的话名字添加NG if (nObj.Received_Confirm__c == 'NG') { nObj.Name += ':NG'; } //取消的时候名字加Canceled if (nObj.Cancel_Select__c) { nObj.Name += ':Canceled'; } } if (nObj.DataMigration_Flag__c == false && (!Trigger.isUpdate || String.isNotBlank(nObj.Fixture_Set__c))) { nObj.UniqueKey__c = nObj.RequestNoJoinStr2__c + ':'+ nObj.Fixture_Set__c + ':'+ nObj.IndexFromUniqueKey__c; if (nObj.Cancel_Select__c || nObj.Substitute_Select_Again__c) { nObj.UniqueKey__c += nObj.Id; } } // 取消分配 if (Trigger.isInsert || oObj.Cancel_Select__c != nObj.Cancel_Select__c) { if (nObj.Cancel_Select__c && nObj.NG_Select_Again__C == false) { nObj.Cancel_Date__c = System.today(); nObj.Cancel_Time__c = MainFixtureSelectController.getCurrentTime(); nObj.Cancel_Mem__c = UserInfo.getUserId(); nObj.Rental_Start_Date__c = null; nObj.Rental_End_Date__c = null; // 使用入力规则 //if (String.isBlank(nObj.Cancel_Reason__c)) { // nObj.Cancel_Reason__c.addError('必须输入取消理由。'); //} } else { nObj.Cancel_Date__c = null; nObj.Cancel_Time__c = null; nObj.Cancel_Mem__c = null; nObj.Cancel_Reason__c = null; // TODO 取消理由备注 确认 if (String.isNotBlank(nObj.Loaner_cancel_Remarks__c)) { nObj.Loaner_cancel_Remarks__c = null; } } } // liucheng 20171112 // 配套备品型号(借出时) if (String.isBlank(nObj.Loaner_code_text__c)) { nObj.Loaner_code_text__c = nObj.Loaner_code__c; } // 配套备品名称(借出时) if (String.isBlank(nObj.Loaner_name_text__c)) { nObj.Loaner_name_text__c = nObj.Loaner_name__c; } if (String.isBlank(nObj.Equipment_Set_Borrowed__c) && fs != null) { // 备品set(借出时) nObj.Equipment_Set_Borrowed__c = fs.Name; } //bp2 OLY_OCM-85 通过 EquipmentSetDailyBatch 会自动延期,4个审批流程不需要了 // 所以不需要了 // // ---------------------------------------------------------------------- // // ここより、承認プロセス用に、经理、部长、总监を更新する // // ---------------------------------------------------------------------- // // 申請中かどうかのチェック // if ( ( Trigger.isInsert || oObj.Extend_Status__c != nObj.Extend_Status__c) // && nObj.Extend_Status__c == '申请中') { // if (applyUser == null) { // applyUser = [SELECT Id, Name, SalesManager__c, BuchangApprovalManagerSales__c, JingliApprovalManager__c, BuchangApprovalManager__c, ZongjianApprovalManager__c FROM User WHERE Id = :nObj.applyUser__c]; // } // nObj.SalesManager__c = applyUser.SalesManager__c == null // ? applyUser.Id : applyUser.SalesManager__c; // nObj.BuchangApprovalManagerSales__c = applyUser.BuchangApprovalManagerSales__c == null // ? applyUser.Id : applyUser.BuchangApprovalManagerSales__c; // nObj.JingliApprovalManager__c = applyUser.JingliApprovalManager__c == null // ? applyUser.Id : applyUser.JingliApprovalManager__c; // nObj.BuchangApprovalManager__c = applyUser.BuchangApprovalManager__c == null // ? applyUser.Id : applyUser.BuchangApprovalManager__c; // nObj.ZongjianApprovalManager__c = applyUser.ZongjianApprovalManager__c == null // ? applyUser.Id : applyUser.ZongjianApprovalManager__c; // } // // ---------------------------------------------------------------------- // // ここまで、承認プロセス用に、经理、总监を更新する // // ---------------------------------------------------------------------- // 必ず最後で置く nObj.Received_Confirm_Status_Text__c = nObj.Received_Confirm_Status_F__c; nObj.Canceled_Id__c = nObj.Canceled__c; nObj.Substitute_flag__c = nObj.Substitute_Select_Again__c; nObj.NG_Final_reply_day_Text__c = nObj.NG_Final_reply_day_F__c; nObj.Yizhouweixiu_Final_reply_day_Text__c = nObj.Yizhouweixiu_Final_reply_day_F__c; nObj.Extend_Final_reply_day_Text__c = nObj.Extend_Final_reply_day_F__c; nObj.QIS_Final_reply_day_Text__c = nObj.QIS_Final_reply_day_F__c; nObj.Repair_cancel_Final_reply_day_Text__c = nObj.Repair_cancel_Final_reply_day_F__c; nObj.Return_to_office_Final_reply_day_Text__c = nObj.Return_to_office_Final_reply_day_F__c; nObj.Repair_delete_Final_reply_day_Text__c = nObj.Repair_delete_Final_reply_day_F__c; nObj.Yigoudaihuo_Final_reply_day_Text__c = nObj.Yigoudaihuo_Final_reply_day_F__c; nObj.Guzhangpaicha_Final_reply_day_Text__c = nObj.Guzhangpaicha_Final_reply_day_F__c; nObj.Repair_Agreed_Quotation_Text__c = nObj.Repair_Agreed_Quotation_F__c; nObj.Return_to_office_Final_reply_day_U_RC__c = nObj.Return_to_office_Final_reply_day_U_RC_F__c; nObj.Extend_Date__c = nObj.Extend_Date_F__c; /* Min_Final_reply_day_F__c = MIN( NG_Final_reply_day_Text__c Yizhouweixiu_Final_reply_day_Text__c Extend_Final_reply_day_Text__c QIS_Final_reply_day_Text__c Repair_cancel_Final_reply_day_Text__c Return_to_office_Final_reply_day_Text__c Repair_delete_Final_reply_day_Text__c Yigoudaihuo_Final_reply_day_Text__c ) Min_Final_reply_day_Text__cの設定は最後にする必要があります */ nObj.Min_Final_reply_day_Text__c = nObj.Min_Final_reply_day_F__c; // nObj.Final_reply_day2__c = nObj.Final_reply_day__c; } } //明細更新メソッド(Batch 专用) 更新明細:一覧Cancel明細もCancel // 一覧申请者收获NG明細更新Name // 必須項目:Cancel_Reason__c, Loaner_cancel_Remarks__c // @param raesdCMap Cancel一覧Map // @param raesdNGMap 申请者NG変更一覧Map // @return 保存结果 public static Database.SaveResult[] recCancelNGDetailBatch(Map raesdCMap, Map raesdNGMap) { return recCancelNGDetail(raesdCMap, raesdNGMap, false); } //明細更新メソッド 更新明細:一覧Cancel明細もCancel // 一覧申请者收获NG明細更新Name // 必須項目:Cancel_Reason__c, Loaner_cancel_Remarks__c // @param raesdCMap Cancel一覧Map // @param raesdNGMap 申请者NG変更一覧Map // @param allOrNone 不允许部分保存 // @return 保存结果 private static Database.SaveResult[] recCancelNGDetail(Map raesdCMap, Map raesdNGMap, Boolean allOrNone) { // null.isEmpty の場合えラー if (raesdCMap == null) { raesdCMap = new Map(); } // null.isEmpty の場合えラー if (raesdNGMap == null) { raesdNGMap = new Map(); } //更新明细 Map raesdMap = new Map(); //取消更新的明细 if (!raesdCMap.isEmpty()) { List raesds = [ Select Id, Rental_Apply_Equipment_Set__c, Is_Body__c From Rental_Apply_Equipment_Set_Detail__c Where Rental_Apply_Equipment_Set__c = :raesdCMap.keySet() AND Cancel_Select__c = false AND DeliverySlip__c = null]; set Rental_ApplyId = new set(); //备品借出申请 20210708 SFDC-C448KZ you for (Rental_Apply_Equipment_Set_Detail__c raesd :raesds) { raesd.Cancel_Select__c = true; raesd.Cancel_Mem__c = UserInfo.getUserId(); raesd.Cancel_Date__c = Date.today(); raesd.Cancel_Time__c = MainFixtureSelectController.getCurrentTime(); raesd.Cancel_Reason__c = raesdCMap.get(raesd.Rental_Apply_Equipment_Set__c).Cancel_Reason__c; raesd.Loaner_cancel_Remarks__c = raesdCMap.get(raesd.Rental_Apply_Equipment_Set__c).Loaner_cancel_Remarks__c; //20210706 SFDC-C448KZ you raesd.Loaner_cancel_reason__c = raesdCMap.get(raesd.Rental_Apply_Equipment_Set__c).Loaner_cancel_reason__c; raesdMap.put(raesd.Id, raesd); Rental_ApplyId.add(raesdCMap.get(raesd.Rental_Apply_Equipment_Set__c).Rental_Apply__c); } //20210708 SFDC-C448KZ you start //1)一览全部取消(部份主动,被动),申请单的“取消理由”为被动取消, “取消理由备注”为一览中最新得 //2)一览全部取消(全部主或全部被动),申请单的“取消理由”“取消理由备注”更新为一览中最新更新的配套的取消理由备注; if(Rental_ApplyId.size() > 0){ List raesslist = [select id,Cancel_Reason__c,Loaner_cancel_reason__c,Loaner_cancel_Remarks__c,Rental_Apply__c from Rental_Apply_Equipment_Set__c where Rental_Apply__c in: Rental_ApplyId order by Rental_Apply__c,LastModifiedDate]; // Map raessMap = new Map(); Map raessMap1 = new Map(); for (Rental_Apply_Equipment_Set__c raess :raesslist) { String mapkey = ''; // String mapValue = ''; // 这里是不是判断有问题 if(raess.Cancel_Reason__c==null){ mapkey = raess.Rental_Apply__c +'_'+ 'null'; } if(raess.Cancel_Reason__c=='主动取消'){ mapkey = raess.Rental_Apply__c +'_'+ '主动取消'; } if(raess.Cancel_Reason__c=='被动取消'){ mapkey = raess.Rental_Apply__c +'_'+ '被动取消'; } // mapValue = raess.Cancel_Reason__c+':'+raess.Loaner_cancel_reason__c +':'+raess.Loaner_cancel_Remarks__c; // raessMap.put(mapkey,mapValue); // raessMap.put(raess.Rental_Apply__c, mapValue); raessMap1.put(mapkey, raess); raessMap1.put(raess.Rental_Apply__c, raess); } List updateRentalApplyList = new List(); for (Id rentaId:Rental_ApplyId) { String key_null = rentaId +'_'+ 'null'; String key_zd = rentaId +'_'+ '主动取消'; String key_bd = rentaId +'_'+ '被动取消'; Rental_Apply__c ra = new Rental_Apply__c(); ra.Id = rentaId; String mapValue1=''; Rental_Apply_Equipment_Set__c raeSet = new Rental_Apply_Equipment_Set__c(); if (raessMap1.containsKey(key_null)) { // 含有未取消 continue; } else if (raessMap1.containsKey(key_zd) && raessMap1.containsKey(key_bd)){ // 既有主动也有被动 //raeSet = raessMap1.get(rentaId); raeSet = raessMap1.get(key_bd); ra.Cancel_Reason__c='被动取消'; } else if (raessMap1.containsKey(key_zd)) { // 全部主动 raeSet = raessMap1.get(key_zd); ra.Cancel_Reason__c=raeSet.Cancel_Reason__c; } else if(raessMap1.containsKey(key_bd)) { // 全部被动 raeSet = raessMap1.get(key_bd); ra.Cancel_Reason__c=raeSet.Cancel_Reason__c; } if (String.isBlank(raeSet.Id)) { continue; } ra.Loaner_cancel_reason__c = raeSet.Loaner_cancel_reason__c; ra.Loaner_cancel_request__c = raeSet.Loaner_cancel_Remarks__c; updateRentalApplyList.add(ra); //20210708 SFDC-C448KZ you end /* if (raessMap.containsKey(key_null)) { // 含有未取消 continue; } else if (raessMap.containsKey(key_zd) && raessMap.containsKey(key_bd)){ // 既有主动也有被动 mapValue1 = raessMap.get(rentaId); String[] array1 = mapValue1.split(':'); ra.Cancel_Reason__c='被动取消'; ra.Loaner_cancel_reason__c = array1[1]; ra.Loaner_cancel_request__c = array1[2]; } else if (raessMap.containsKey(key_zd)) { // 全部主动 mapValue1 = raessMap.get(key_zd); String[] array2 = mapValue1.split(':'); ra.Cancel_Reason__c=array2[0]; ra.Loaner_cancel_reason__c = array2[1]; ra.Loaner_cancel_request__c = array2[2]; } else if(raessMap.containsKey(key_bd)) { // 全部被动 mapValue1 = raessMap.get(key_bd); String[] array3 = mapValue1.split(':'); ra.Cancel_Reason__c=array3[0]; ra.Loaner_cancel_reason__c = array3[1]; ra.Loaner_cancel_request__c = array3[2]; } updateRentalApplyList.add(ra); */ } if (!updateRentalApplyList.isEmpty()) { update updateRentalApplyList; } } //20210708 SFDC-C448KZ you end } //申请者收货NG的明细 if (!raesdNGMap.isEmpty()) { List raesds = [ Select Id, Rental_Apply_Equipment_Set__c From Rental_Apply_Equipment_Set_Detail__c Where Rental_Apply_Equipment_Set__c = :raesdNGMap.keySet()]; for (Rental_Apply_Equipment_Set_Detail__c raesd :raesds) { if (!raesdMap.containsKey(raesd.Id)) { raesdMap.put(raesd.Id, raesd); } } } if (!raesdMap.isEmpty()) { return Database.update(raesdMap.values(), allOrNone); } return null; } // private void cancelCopy() { // Map raesdMap = new Map(); // for (Rental_Apply_Equipment_Set__c nObj : newList) { // Rental_Apply_Equipment_Set__c oObj = oldMap.get(nObj.Id); // if (nObj.Ra_Cancel_Select__c == false // && (oObj.Cancel_Select__c == false && nObj.Cancel_Select__c == true)) { // Rental_Apply_Equipment_Set__c nraescolone = new Rental_Apply_Equipment_Set__c(); // nraescolone.Rental_Apply__c = nObj.Rental_Apply__c; // nraescolone.Fixture_Set__c = nObj.Fixture_Set__c; // nraescolone.Canceled_Id__c = nObj.Id; // raesdMap.put(nObj.Id, nraescolone); // } // } // if (raesdMap.isEmpty()) { // return; // } // System.debug(raesdMap.values().size()); // insert raesdMap.values(); // List raesds = [Select Id, Rental_Apply__c, // Fixture_Set_Detail__c, IndexFromUniqueKey__c, Rental_Apply_Equipment_Set__c // FROM Rental_Apply_Equipment_Set_Detail__c // WHERE Rental_Apply_Equipment_Set__c =: raesdMap.keySet() // AND Cancel_Select__c = false]; // List raesdList = new List(); // for (Rental_Apply_Equipment_Set_Detail__c raesd : raesds) { // Rental_Apply_Equipment_Set_Detail__c craesd = new Rental_Apply_Equipment_Set_Detail__c(); // craesd.Rental_Apply_Equipment_Set__c = raesdMap.get(raesd.Rental_Apply_Equipment_Set__c).Id; // craesd.Rental_Apply__c = raesd.Rental_Apply__c; // craesd.Fixture_Set_Detail__c = raesd.Fixture_Set_Detail__c; // craesd.IndexFromUniqueKey__c = raesd.IndexFromUniqueKey__c; // craesd.Canceled_Id__c = raesd.Id; // raesdList.add(craesd); // } // if (!raesdList.isEmpty()) { // insert raesdList; // } // } //before 数式の値がnullになる可能性がありますのでここでも一回チェックします private void formulaToTextCheck() { List raess = new List(); for (Rental_Apply_Equipment_Set__c nObj : newList) { if (nObj.Received_Confirm_Status_Text__c != nObj.Received_Confirm_Status_F__c || nObj.Min_Final_reply_day_Text__c != nObj.Min_Final_reply_day_F__c || ((String.isNotBlank(nObj.Old_Rental_Apply_F__c) && String.isNotBlank(nObj.Old_Rental_Apply__c) && nObj.Old_Rental_Apply_F__c != nObj.Old_Rental_Apply__c) || (String.isNotBlank(nObj.Old_Rental_Apply_F__c) && String.isBlank(nObj.Old_Rental_Apply__c)) || (String.isBlank(nObj.Old_Rental_Apply_F__c) && String.isNotBlank(nObj.Old_Rental_Apply__c)) )// 20210817 XHL add ) { Rental_Apply_Equipment_Set__c raes = new Rental_Apply_Equipment_Set__c(); raes.Id = nObj.Id; // 20210817 XHL update start // raes.Received_Confirm_Status_Text__c = nObj.Received_Confirm_Status_F__c; // raes.Min_Final_reply_day_Text__c = nObj.Min_Final_reply_day_F__c; // 分单理由 是 补充借用 的备品借出申请,创建 借出备品配套一览 时 为 旧借出申请 赋值 if((String.isNotBlank(nObj.Old_Rental_Apply_F__c) && String.isNotBlank(nObj.Old_Rental_Apply__c) && nObj.Old_Rental_Apply_F__c != nObj.Old_Rental_Apply__c) || (String.isNotBlank(nObj.Old_Rental_Apply_F__c) && String.isBlank(nObj.Old_Rental_Apply__c)) || (String.isBlank(nObj.Old_Rental_Apply_F__c) && String.isNotBlank(nObj.Old_Rental_Apply__c)) ){ raes.Old_Rental_Apply__c = nObj.Old_Rental_Apply_F__c; // 20210816 XHL add } if (nObj.Received_Confirm_Status_Text__c != nObj.Received_Confirm_Status_F__c || nObj.Min_Final_reply_day_Text__c != nObj.Min_Final_reply_day_F__c){ raes.Received_Confirm_Status_Text__c = nObj.Received_Confirm_Status_F__c; raes.Min_Final_reply_day_Text__c = nObj.Min_Final_reply_day_F__c; } // 20210817 XHL update end raess.add(raes); } } if (!raess.isEmpty()) { update raess; } } // 20211118 ljh 排队 /* 根据if 状态:已出库--检测ok的(检测NG和欠品的:不显示时间) && 最新预定归还日 RAES_Final_reply_day__c 有值 && new != old{ 最新预定归还日+8个工作日(奥林巴斯日历) } */ private void NextShippmentDate() { Date minDate = Date.newInstance(4000, 12, 31); Date maxDate = Date.newInstance(1700, 1, 1); Map> dLMap = new Map>(); List upRdList = new List(); for (Rental_Apply_Equipment_Set__c nObj : newList) { if(nObj.RARecordTypeId__c != '01210000000NPGK'){ Rental_Apply_Equipment_Set__c oObj = oldMap.get(nObj.Id); // 第一条是主体 && 第一条状态满足 && 最新预定归还日发生改变 List statusList = new String[]{'已出库','申请者已收货','医院已装机确认','已回寄','已回收','回收后已CDS'}; if(nObj.First_RAESD_Is_Main__c == true && String.isNotBlank(nObj.First_Status_All__c) && statusList.contains(nObj.First_Status_All__c) && oObj.Final_reply_day_text__c != nObj.Final_reply_day_text__c){ // 最新预定归还日+8个工作日(奥林巴斯日历) Date date1 = nObj.Final_reply_day_text__c; if (minDate > date1) { minDate = date1; } if (maxDate < date1) { maxDate = date1; } if(!dLMap.containsKey(date1)){ dLMap.put(date1,new List()); } dLMap.get(date1).add(nObj.First_RAESD__c); } } } if(dLMap.size() > 0 ){ List ocList = [SELECT Id , Date__c FROM OlympusCalendar__c WHERE Date__c >= :minDate AND Date__c <= :maxDate.addDays(30) AND IsWorkDay__c = 1 ORDER BY Date__c ASC]; Map dateadd8Map = new Map(); Integer ocListSize = ocList.size(); if (ocListSize > 8) { for (Integer i = 0; i < ocListSize - 8; i ++) { dateadd8Map.put(ocList[i].Date__c, ocList[i + 8].Date__c); } for(Date d:dLMap.keySet()){ if (dateadd8Map.containsKey(d)) { for(String rdId:dLMap.get(d)){ Rental_Apply_Equipment_Set_Detail__c raesd = new Rental_Apply_Equipment_Set_Detail__c(); raesd.Id = rdId; raesd.NextShippmentDate__c = dateadd8Map.get(d); upRdList.add(raesd); } }else{ for (Integer i = 0; i < ocListSize - 8; i ++) { // 也可以都用加上等于 这个ocList[i + 8] 代码虽然简洁了,但是效率就慢了 if(d < ocList[i].Date__c){ for(String rdId:dLMap.get(d)){ Rental_Apply_Equipment_Set_Detail__c raesd = new Rental_Apply_Equipment_Set_Detail__c(); raesd.Id = rdId; raesd.NextShippmentDate__c = ocList[i + 7].Date__c; upRdList.add(raesd); } break; } } } } } } if(upRdList.size() > 0){ update upRdList; } } }