| // xudan 20160128 Status_F__c -> RA_Status__c | 
| trigger RentalApplyBeforeUpdate on Rental_Apply__c (before insert, before update, before delete) { | 
|      | 
|     //public class RentalApplyBeforeUpdateException extends Exception{} | 
|     if (trigger.isDelete) { | 
|         // 出库指示后不能删除备品借出申请 | 
|         for(Rental_Apply__c ra : trigger.old) { | 
|             //if (ra.Status_F__c == '部分出库指示' || ra.Status__c == '出库指示完了') { | 
|             if (ra.RA_Status__c == FixtureUtil.raStatusMap.get(FixtureUtil.RaStatus.Yi_Chu_Ku_Zhi_Shi.ordinal())) { | 
|                 ra.addError('不能删除已经做出库指示的备品借出申请:' + ra.Name); | 
|             } | 
|         } | 
|     } else {        | 
|          | 
|         // 计算借出营业日 | 
|         List<Rental_Apply__c> raList = new List<Rental_Apply__c>(); | 
|         // 病院を取得するIDセット | 
|         Set<Id> hospitalIds = new Set<Id>(); | 
|         // 学会を取得するIDセット | 
|         Set<Id> campaignIds = new Set<Id>(); | 
|         // 修理を取得するIDセット | 
|         Set<Id> repairIds = new Set<Id>(); | 
|         /*因为备品借出申请在业务上不会删除,所以已经分割次数+1就是本次支番号*/ | 
|         /*************************Insert 20160513 Start*************************/ | 
|          | 
| if(Trigger.isInsert){ | 
|     List<Rental_Apply__c> RacList = new List<Rental_Apply__c>(); | 
|     List<Rental_Apply__c> RacListElse = new List<Rental_Apply__c>(); | 
|     List<AggregateResult> GroList = new List<AggregateResult>(); | 
|     Map<String,String> RenMap = new Map<String,String>(); | 
|     Map<String,String> RenCountMap = new Map<String,String>(); | 
|     GroList = [select count(id) countId,Old_Rental_Apply__c from Rental_Apply__c where Old_Rental_Apply__c !=null group by Old_Rental_Apply__c]; | 
|     for(AggregateResult Ta : GroList){ | 
|         RenMap.put( string.valueOf(Ta.get('Old_Rental_Apply__c')),string.valueOf(Ta.get('Old_Rental_Apply__c') )); //旧借出申请 | 
|         RenCountMap.put( string.valueOf(Ta.get('Old_Rental_Apply__c')),string.valueOf(Ta.get('countId') )); | 
|     } | 
|     //ra.Old_Rental_Apply__c  List | 
|     List<String> LoopListRaOCon = new List<String>(); | 
|     //List<String> LoopListRaOIdUnCon = new List<String>(); | 
|     Map<String,Integer> LoopListRaN = new Map<String,Integer>(); | 
|     //Map<String,Integer> LoopListRaNElse = new Map<String,Integer>(); | 
|     for(Rental_Apply__c ra : trigger.new){ | 
|         if(ra.Name ==null){ | 
|             ra.Name='*'; | 
|         } | 
|     // | 
|         if(RenMap.containsKey(ra.Old_Rental_Apply__c)){ | 
|             LoopListRaOCon.add(ra.Old_Rental_Apply__c); | 
|             LoopListRaN.put(ra.Old_Rental_Apply__c,LoopListRaOCon.size()-1); | 
|   | 
|             //RacList = [select id,Old_Rental_Apply__r.Name from Rental_Apply__c where Old_Rental_Apply__c =: ra.Old_Rental_Apply__c]; | 
|             //ra.Name = RacList[0].Old_Rental_Apply__r.Name+'-'+RacList.size(); | 
|         }else{ | 
|             //RacList = [select id,name,Old_Rental_Apply__r.Name from Rental_Apply__c where id =: ra.id]; | 
|             //LoopListRaOIdUnCon.add(ra.id); | 
|             //LoopListRaNElse.put(ra.id, LoopListRaOIdUnCon.size()-1); | 
|             //if(RacList.size()>0){ | 
|             //  ra.Name = RacList[0].Name+'-'+1; | 
|             //  ra.Old_Rental_Apply__c = ra.id; | 
|             //} | 
|              | 
|         } | 
|          | 
|     } | 
|     // bp2 | 
|     // System.debug('测试是否进入'); | 
|     // RacList = [select id,Old_Rental_Apply__r.Name from Rental_Apply__c where Old_Rental_Apply__c in : LoopListRaOCon]; | 
|     // //RacListElse = [select id,name,Old_Rental_Apply__r.Name from Rental_Apply__c where id in : LoopListRaOIdUnCon]; | 
|     // for(Rental_Apply__c ra : trigger.new){  | 
|     //     if(RenMap.containsKey(ra.Old_Rental_Apply__c)){ | 
|     //         if(RacList.size()>0){ | 
|     //             ra.Name = RacList[LoopListRaN.get(ra.Old_Rental_Apply__c)].Old_Rental_Apply__r.Name+'-'+(RacList.size()+1); | 
|     //             ra.Rental_Received_Day__c = null; | 
|     //             ra.All_Delivery_Flag_c__c = false; | 
|     //         } | 
|     //     }else{ | 
|     //         if(ra.Old_Rental_Apply__c!=null){ | 
|     //             ra.Name = ra.Name+'-'+1; | 
|     //             ra.Rental_Received_Day__c = null; | 
|     //             ra.All_Delivery_Flag_c__c = false; | 
|     //         } | 
|     //     } | 
|     // } | 
|     // bp2 | 
| }  | 
|         /*************************Insert 20160513 End***************************/ | 
|   | 
|         for(Rental_Apply__c ra : trigger.new) { | 
|             // xiongyl--add--start | 
|             ra.HP_pic_sign_txt__c = ra.HP_pic_sign_rich__c; | 
|             // OLY_OCM-1137 wang 2020-08-14 start      | 
|             String hprs_rich = String.isBlank(ra.HP_received_sign_rich__c) ? '' : ra.HP_received_sign_rich__c.replaceAll('https:', 'http:'); | 
|             String hprs_text = String.isBlank(ra.HP_received_sign_text__c) ? '' : ra.HP_received_sign_text__c.replaceAll('https:', 'http:'); | 
|             if (hprs_rich != hprs_text) { | 
|                 ra.HP_received_sign_text__c = ra.HP_received_sign_rich__c;   | 
|             } | 
|             // OLY_OCM-1137 wang 2020-08-14 end   | 
|             // xiongyl--add--end | 
|             if (Trigger.isUpdate && ra.Status__c == FixtureUtil.raStatusMap.get(FixtureUtil.RaStatus.Yi_Chu_Ku_Zhi_Shi.ordinal()) | 
|                     && String.isBlank(((Rental_Apply__c) Trigger.oldMap.get(ra.Id)).HP_pic_sign_rich__c) | 
|                     && !String.isBlank(ra.HP_pic_sign_rich__c) | 
|             ) { | 
|                 ra.HP_pic_sign_day__c = System.today(); | 
|             } | 
| //*************************Update 20160708 No.10 趙徳芳 Start*************************// | 
|             //这里取消了自动填日期的需求 | 
|             /* | 
|             if (Trigger.isUpdate && ra.Status__c == '出库指示完了' | 
|                         && String.isBlank(((Rental_Apply__c) Trigger.oldMap.get(ra.Id)).HP_received_sign_rich__c) | 
|                     && !String.isBlank(ra.HP_received_sign_rich__c) | 
|             ) { | 
|                 ra.HP_received_sign_day__c = System.today(); | 
|             } | 
|             */ | 
|             System.debug('测试ra.HP_received_sign_rich__c是否进入'+ra.HP_received_sign_rich__c); | 
|             if (Trigger.isUpdate  | 
|                         &&  !String.isBlank(ra.HP_received_sign_rich__c) | 
|             ) { | 
|                 ra.Test_Element__c = ra.Test_Element__c +'a'; | 
|                 if(ra.Test_Element__c.length()>100){ | 
|                     ra.Test_Element__c = 'a'; | 
|                 } | 
|             } | 
| //*************************Update 20160708 No.10 趙徳芳 End***************************// | 
|   | 
|   | 
|             if (ra.Request_shipping_day__c != null && ra.Request_return_day__c != null &&  | 
|                 (trigger.isInsert || (trigger.isUpdate && | 
|                                         (Trigger.oldMap.get(ra.Id).get('Request_shipping_day__c') != ra.Request_shipping_day__c ||  | 
|                                          Trigger.oldMap.get(ra.Id).get('Request_return_day__c') != ra.Request_return_day__c) | 
|                                      ) | 
|                 )) { | 
|                 raList.add(ra); | 
|             } | 
|             if (String.isBlank(ra.Hospital__c) == false) { | 
|                 hospitalIds.add(ra.Hospital__c); | 
|             } | 
|             if (String.isBlank(ra.Campaign__c) == false) { | 
|                 campaignIds.add(ra.Campaign__c); | 
|             } | 
|              | 
|             // 備品申請は1つずつ作りますから | 
|             if (String.isBlank(ra.Repair__c) == false) { | 
|                 // 意义不明 0715 梁伟 | 
|                 //Repair__c r = [select Agreed_Date__c, Maintenance_Contract__c from Repair__c where Id = :ra.Repair__c]; | 
|                 if (trigger.isInsert) { | 
|                     List<Rental_Apply__c> rs = [select Id from Rental_Apply__c where Repair__c = :ra.Repair__c and Status__c <> '取消' and Status__c <> '删除']; | 
|                     if (rs.size() > 0  | 
|                         && ra.Old_Rental_Apply__c == null // SWAG-B6J7LD 分单时可以重复申请 | 
|                         ) { | 
|                         ra.addError('同一个型号的修理记录不能重复申请备品'); | 
|                     } | 
|                 } | 
|                 // 更新的时候 | 
|                 // 更新的时候不是一个一个的,加上了修理变化的条件 0715 梁伟 | 
|                 if (trigger.isUpdate && ra.Repair__c != trigger.oldMap.get(ra.Id).Repair__c) { | 
|                     List<Rental_Apply__c> rs = [select Id from Rental_Apply__c where Repair__c = :ra.Repair__c and Id <> :ra.Id and Status__c <> '取消' and Status__c <> '删除']; | 
|                     if (rs.size() > 0  | 
|                         && ra.Old_Rental_Apply__c == null // SWAG-B6J7LD 分单时可以重复申请 | 
|                         ) { | 
|                         ra.addError('同一个型号的修理记录不能重复申请备品'); | 
|                     } | 
|                 } | 
|             } | 
|             if (String.isBlank(ra.QIS_number__c) == false) { | 
|                 if (trigger.isInsert) { | 
|                     List<Rental_Apply__c> rs = [select Id from Rental_Apply__c where QIS_number__c = :ra.QIS_number__c and Status__c <> '取消' and Status__c <> '删除']; | 
|                     if (rs.size() > 0  | 
|                         && ra.Old_Rental_Apply__c == null | 
|                         ) { | 
|                         ra.addError('同一个QIS记录不能重复申请备品'); | 
|                     } | 
|                 } | 
|                 if (trigger.isUpdate && ra.QIS_number__c != trigger.oldMap.get(ra.Id).QIS_number__c) { | 
|                     List<Rental_Apply__c> rs = [select Id from Rental_Apply__c where QIS_number__c = :ra.QIS_number__c and Id <> :ra.Id and Status__c <> '取消' and Status__c <> '删除']; | 
|                     if (rs.size() > 0  | 
|                         && ra.Old_Rental_Apply__c == null | 
|                         ) { | 
|                         ra.addError('同一个QIS记录不能重复申请备品'); | 
|                     } | 
|                 } | 
|             } | 
|             /* | 
|             if (String.isBlank(ra.Follow_UP_Opp__c) == false) { | 
|                 Opportunity opp = [select Id, StageName, SAP_Send_OK__c from Opportunity where Id = :ra.Follow_UP_Opp__c]; | 
|                 if (ra.demo_purpose2__c == '已购待货' && opp.StageName != '注残') { | 
|                     ra.addError('已购待货时,跟进的询价必须是注残'); | 
|                 } | 
|             } | 
|             */ | 
|             // 分割の場合、所有者を設定 | 
|             if (Trigger.isInsert && ra.Old_Rental_Apply__c != null) { | 
|                 //Rental_Apply__c oldRa = [select OwnerId from Rental_Apply__c where Id = :ra.Old_Rental_Apply__c]; | 
|                 //ra.OwnerId = oldRa.OwnerId; | 
|                 //ra.Status__c = '已批准'; | 
|                 if (!ra.SupplementCreated__c) {//补充OPD计划创建的备品借出申请跳过 | 
|                     Rental_Apply__c oldRa = [select OwnerId from Rental_Apply__c where Id = :ra.Old_Rental_Apply__c]; | 
|                     ra.OwnerId = oldRa.OwnerId; | 
|                     ra.Status__c = '已批准'; | 
|                 } | 
|             } | 
|   | 
|             //wangweipeng     2021/09/01   SFDC-C4H4BM    start | 
|             //如果是第一次赋值,把当前时间保存到签收单日期字段里面 | 
|             //如果签收单为不合格,并且再次修改签收单那么把当前时间保存到签收单日期里面 | 
|             if (Trigger.isBefore) { | 
|                 if(Trigger.isInsert){ | 
|                     if(ra.HP_received_sign_rich__c != null && ra.HP_received_sign_rich__c != ''){ | 
|                         ra.HP_received_sign_NewDate__c = Date.today(); | 
|                     } | 
|                 }else if(Trigger.isUpdate){ | 
|                     if(Trigger.oldMap.get(ra.Id).HP_received_sign_rich__c != ra.HP_received_sign_rich__c){ | 
|                         //签收单不合格 为 true 或者 备品中心确认 为false时,每回修改签收单都需要记录一个修改时间 | 
|                         if(ra.HP_received_sign_NG__c || !ra.AssetManageConfirm__c){ | 
|                             ra.HP_received_sign_NewDate__c = Date.today(); | 
|                         }else{ | 
|                            if(ra.HP_received_sign_NewDate__c == null){//判断上传签收单日期是否为空,如果为空证明这是第一次上传 | 
|                                 if(ra.HP_received_sign_rich__c != null && ra.HP_received_sign_rich__c != ''){ | 
|                                     ra.HP_received_sign_NewDate__c = Date.today(); | 
|                                 } | 
|                             } | 
|                         } | 
|                     } | 
|                 } | 
|             } | 
|             //wangweipeng     2021/09/01     SFDC-C4H4BM   end | 
|         } | 
|   | 
|         //List<Account> accs = [SELECT Id, Province_formula__c, State_Text__c FROM Account WHERE Id IN: hospitalIds]; | 
|         Map<Id, Account> accMap = new Map<Id, Account>(); | 
|         if (hospitalIds.size() > 0) accMap.putAll([SELECT Id, Province_formula__c, State_Text__c FROM Account WHERE Id IN: hospitalIds ]); | 
|          | 
|         //List<Campaign> cams = [SELECT Id, EndDate FROM Campaign WHERE Id IN: campaignIds]; | 
|         Map<Id, Campaign> camMap = new Map<Id, Campaign>(); | 
|         if (campaignIds.size() > 0) camMap.putAll([SELECT Id, EndDate FROM Campaign WHERE Id IN: campaignIds ]); | 
|          | 
|         //Map<Id, Repair__c> repairMap = new Map<Id, Repair__c>(); | 
|         //if (repairIds.size() > 0) repairMap.putAll([SELECT Id FROM Repair__c WHERE Id IN: repairIds]); | 
|         //Map<String, String> HashMap = new Map<String,string>(); | 
|         if (raList.size() > 0) { | 
|             Date maxDate = Date.today(); | 
|             Date minDate = Date.today(); | 
|             for (Integer i = 0; i < raList.size(); i++) { | 
|                 if (raList[i].Request_shipping_day__c < minDate) { | 
|                     minDate = raList[i].Request_shipping_day__c; | 
|                 } | 
|                 if (raList[i].Request_return_day__c > maxDate) { | 
|                     maxDate = raList[i].Request_return_day__c; | 
|                 } | 
|             } | 
|              | 
|             Map<String,Integer> wdMap = new Map<String,Integer>(); | 
|             List<OlympusCalendar__c> workday = [ | 
|                     select Id, Date__c, IsWorkDay__c  | 
|                       from OlympusCalendar__c  | 
|                      where Date__c >= :minDate  | 
|                        and Date__c <= :maxDate]; | 
|             for (OlympusCalendar__c wd : workday) { | 
|                 wdMap.put(wd.Date__c.format(), Integer.valueOf(wd.IsWorkDay__c)); | 
|             } | 
|              | 
|             for (Rental_Apply__c ra : raList) { | 
|                 Integer cntDay = ra.Request_shipping_day__c.daysBetween(ra.Request_return_day__c); | 
|                 Decimal cnt = 0; | 
|                 for (Integer i = 0; i < cntDay + 1; i++) { | 
|                     cnt += wdMap.get(ra.Request_shipping_day__c.addDays(i).format()) == null ? 0 : wdMap.get(ra.Request_shipping_day__c.addDays(i).format()); | 
|                 } | 
|                 ra.loaner_date__c = cnt; | 
|                 if (accMap.containskey(ra.Hospital__c)) { | 
|                     ra.HP_Province__c = accMap.get(ra.Hospital__c).Province_formula__c; | 
|                 } | 
|                  | 
|                  | 
|                 //if (String.isBlank(ra.Old_Rental_Apply__c) == true) { | 
|                     // 「希望客户使用结束日」のチェック | 
|                     //Set<String> purposeCheck = new Set<String>{'引发询价', '询价跟进'}; | 
|                     //Set<String> provinceCheck = new Set<String>{'内蒙古自治区', '青海省', '宁夏回族自治区', '新疆维吾尔自治区', '黑龙江', '吉林省', '西藏自治区'}; | 
|      | 
|                     // 使用目的2 は"引发询价""询价跟进"の場合 | 
|                     //if (purposeCheck.contains(ra.demo_purpose2__c)) { | 
|                         // 遠隔地の場合、30日 | 
|                     //    if (accMap.containskey(ra.Hospital__c) && (provinceCheck.contains(accMap.get(ra.Hospital__c).Province_formula__c) || provinceCheck.contains(accMap.get(ra.Hospital__c).State_Text__c))) { | 
|                     //        if (cnt > 30) ra.addError('「希望客户使用结束日」设置超过预期值(30工作日)'); | 
|                         // 普通、20日 | 
|                     //    } else { | 
|                     //        if (cnt > 20) ra.addError('「希望客户使用结束日」设置超过预期值(20工作日)'); | 
|                     //    } | 
|                     //} | 
|      | 
|                     // 学会の終了日から経った | 
|                     // 使用目的2 は"学会/展台"の場合 | 
|                     //if (ra.demo_purpose2__c == '学会/展台' && camMap.containskey(ra.Campaign__c) && camMap.get(ra.Campaign__c).EndDate != null) { | 
|                     //    Integer campaignDay = camMap.get(ra.Campaign__c).EndDate.daysBetween(ra.Request_return_day__c); | 
|                     //    Decimal campaignCnt = 0; | 
|                     //    for (Integer i = 0; i < campaignDay + 1; i++) { | 
|                     //        campaignCnt += wdMap.get(camMap.get(ra.Campaign__c).EndDate.addDays(i).format()) == null ? 0 : wdMap.get(camMap.get(ra.Campaign__c).EndDate.addDays(i).format()); | 
|                     //    } | 
|      | 
|                     //    if (campaignCnt > 5) ra.addError('「希望客户使用结束日」设置超过预期值(5工作日)'); | 
|                     //} | 
|                 //} | 
|             } | 
|         } | 
|     } | 
| } |