// 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工作日)'); 
 | 
                    //} 
 | 
                //} 
 | 
            } 
 | 
        } 
 | 
    } 
 | 
} 
 |