trigger LeadTrigger on Lead (before insert, before update) { 
 | 
  
 | 
    if ( StaticParameter.EscapeLeadTrigger == true) { 
 | 
        System.debug( '-----:リードのトリガー動きません'); 
 | 
        return; 
 | 
    } 
 | 
    Lead old = null; 
 | 
    if(Trigger.isBefore){ 
 | 
        if(StartTradingController.EscapeLeadUpdate == false){ 
 | 
            List<String> accIdList = new List<String>(); 
 | 
            for(Lead l : Trigger.New){ 
 | 
                accIdList.add(l.Hospital_Name__c); 
 | 
            } 
 | 
            Map<Id, Account> accountMap = new Map<Id, Account>(); 
 | 
            Map<String, OCM_Management_Province__c> provinceMap = new Map<String, OCM_Management_Province__c>(); 
 | 
            if (accIdList.size() > 0) { 
 | 
                List<Account> accList = [select id, OCM_Management_Province_HP__c, Parent.Department_Class_Label__c from Account where id = :accIdList]; 
 | 
                for (Account acc : accList) { 
 | 
                    accountMap.put(acc.id, acc); 
 | 
                } 
 | 
                List<OCM_Management_Province__c> provinceList = [select id, Name, GI_assistant__c, SP_assistant__c, Energy_assistant__c from OCM_Management_Province__c]; 
 | 
                for (OCM_Management_Province__c province : provinceList) { 
 | 
                    provinceMap.put(province.Name, province); 
 | 
                } 
 | 
            } 
 | 
            for(Lead l : Trigger.New){ 
 | 
                if (Trigger.isUpdate) { 
 | 
                    old = Trigger.oldMap.get(l.Id); 
 | 
                } 
 | 
                if (Trigger.isInsert && l.Status == '確認済み') { 
 | 
                    l.Status.addError('意向转询价前,状态不能为开始询价'); 
 | 
                } 
 | 
                if (Trigger.isUpdate && l.Status != old.Status && l.Status == '確認済み') { 
 | 
                    l.Status.addError('意向转询价前,状态不能为开始询价'); 
 | 
                } 
 | 
                if (Trigger.isInsert){ 
 | 
                    if(l.Owner_Dep__c == '7.能量'){ 
 | 
                        String p = accountMap.get(l.Hospital_Name__c) == null ? '' : accountMap.get(l.Hospital_Name__c).OCM_Management_Province_HP__c; 
 | 
                        l.Energy_Assistant__c = provinceMap.get(p) == null ? null : provinceMap.get(p).Energy_assistant__c; 
 | 
                    }else{ 
 | 
                        String p = accountMap.get(l.Hospital_Name__c) == null ? '' : accountMap.get(l.Hospital_Name__c).OCM_Management_Province_HP__c; 
 | 
                        String c = accountMap.get(l.Hospital_Name__c) == null ? '' : accountMap.get(l.Hospital_Name__c).Parent.Department_Class_Label__c; 
 | 
                        if (c == '消化科' || c == '呼吸科' || c == 'ET') { 
 | 
                            l.OCM_Oppor_Assistant__c = provinceMap.get(p) == null ? null : provinceMap.get(p).GI_assistant__c; 
 | 
                        } else { 
 | 
                            l.OCM_Oppor_Assistant__c = provinceMap.get(p) == null ? null : provinceMap.get(p).SP_assistant__c; 
 | 
                        } 
 | 
                    } 
 | 
                } 
 | 
            } 
 | 
        } 
 | 
  
 | 
    } 
 | 
    // ------------------------------------------------------------- 
 | 
    // リードのメールアドレスを元に、取引先責任者を関連付けます。 
 | 
    // すでに関連づいている場合はなにもしません。 
 | 
    // ------------------------------------------------------------- 
 | 
    // メールアドレスが一致する contactを探します。 
 | 
    // 複数見つかる場合は、最終更新日が一番新しい contactにします 
 | 
    // メールアドレスが null のリードは無視します。 
 | 
     
 | 
    // メアド一覧を得る 
 | 
    // メアド一覧を元に contactを得る 
 | 
    // 更新対象のリードに、contactへの参照をセットする 
 | 
     
 | 
    // メアドの一意のリスト 
 | 
    //************************************2017/08/29 DEL START [CHAN-AQN4FY]*********************************** 
 | 
    //Set<String> emails = new Set<String>(); 
 | 
     
 | 
    //// メアド一覧を得る 
 | 
    //// insertの場合は、メアドが入っていれば全部対象 
 | 
    //// updateの場合は、oldと newで値が違っている時だけ 
 | 
    //if ( Trigger.isInsert) { 
 | 
    //    for ( Lead target : Trigger.New) { 
 | 
    //        if ( target.Email != null) { 
 | 
    //            emails.add( target.Email); 
 | 
    //        } 
 | 
    //    } 
 | 
    //} 
 | 
    //else if ( Trigger.isUpdate) { 
 | 
    //    Lead leadOld = null, leadNew = null; 
 | 
    //    for ( Integer i = 0; i < Trigger.New.size(); i++) { 
 | 
    //        leadOld = Trigger.Old[i]; 
 | 
    //        leadNew = Trigger.New[i]; 
 | 
    //        if ( leadOld.email != leadNew.email && leadNew.email != null) { 
 | 
    //            emails.add( leadNew.email); 
 | 
    //        } 
 | 
    //    } 
 | 
    //} 
 | 
    //else { 
 | 
    //    return; 
 | 
    //} 
 | 
  
 | 
    //// メアド一覧を元に contactを得る 
 | 
    //List<Contact> contacts = [SELECT Id, Email, OwnerId FROM Contact WHERE Email IN :emails ORDER BY Email, LastModifiedDate ASC]; 
 | 
    //Map<String, Contact> contactMap = new Map<String, Contact>(); 
 | 
    //for ( Contact contact : contacts) { 
 | 
    //    contactMap.put( contact.Email, contact); 
 | 
    //} 
 | 
     
 | 
    //// 更新対象のリードに、contactへの参照をセットする 
 | 
    //Contact targetContact = null; 
 | 
    //for ( Lead targetLead : Trigger.New) { 
 | 
    //    targetContact = (Contact)contactMap.get( targetLead.Email); 
 | 
    //    if ( targetContact != null && targetLead.contact__c == null) { 
 | 
    //        targetLead.contact__c = targetContact.Id; 
 | 
    //        targetLead.OwnerId = targetContact.OwnerId; 
 | 
    //    } 
 | 
    //} 
 | 
    //************************************2017/08/29 DEL END [CHAN-AQN4FY]*********************************** 
 | 
    //************************************2017/08/29 ADD START [CHAN-AQN4FY]*********************************** 
 | 
    if ( Trigger.isInsert || Trigger.isUpdate) { 
 | 
        Set<String> departmentClass = new Set<String>(); 
 | 
        for ( Lead target : Trigger.New) { 
 | 
            departmentClass.add(target.Department_Class__c); 
 | 
        } 
 | 
  
 | 
        List<Account> accounts = [SELECT Id, OwnerId FROM Account WHERE Id IN : departmentClass]; 
 | 
        Map<String, Account> accountMap = new Map<String, Account>(); 
 | 
        for (Account acc : accounts) { 
 | 
            accountMap.put(acc.Id, acc); 
 | 
        } 
 | 
  
 | 
        Account targetAccount = null; 
 | 
        for ( Lead targetLead : Trigger.New) { 
 | 
            if (targetLead.owner_not_automatically_update__c == true) { 
 | 
                if (Trigger.isInsert) { 
 | 
                    targetLead.OwnerId = UserInfo.getUserId(); 
 | 
                } 
 | 
                else { 
 | 
                    targetLead.OwnerId = targetLead.CreatedById; 
 | 
                } 
 | 
            }  
 | 
            else { 
 | 
                targetAccount = (Account)accountMap.get(targetLead.Department_Class__c); 
 | 
                if (targetAccount != null) { 
 | 
                    targetLead.OwnerId = targetAccount.OwnerId; 
 | 
                } 
 | 
            } 
 | 
        } 
 | 
    } 
 | 
    //************************************2017/08/29 ADD END [CHAN-AQN4FY]*********************************** 
 | 
} 
 |