trigger AssetHpDeptUpd on Asset (before update) { 
 | 
    List<String> accIds = new List<String>(); 
 | 
  
 | 
    for(Asset a : Trigger.new) { 
 | 
        Asset olda = Trigger.oldMap.get(a.Id); 
 | 
        if (olda.AccountId != a.AccountId 
 | 
                || a.AccountParentId__c != a.Department_Class__c 
 | 
                || a.AccountParentParentId__c != a.Hospital__c) { 
 | 
            if (!String.isBlank(a.AccountId)) { 
 | 
                accIds.add(a.AccountId); 
 | 
            } 
 | 
        } 
 | 
    } 
 | 
  
 | 
    if (accIds.size() > 0) { 
 | 
        // 診療科レコードタイプ 
 | 
        String[] deptTypes = new String[] {'病院', '診療科 その他', '診療科 呼吸科', '診療科 婦人科', '診療科 普外科', '診療科 泌尿科', '診療科 消化科', '診療科 耳鼻喉科'}; 
 | 
        List<RecordType> deptRects = [select Id, Name from RecordType where IsActive = true and SobjectType = 'Account' and Name IN :deptTypes]; 
 | 
        Map<String, String> deptRectMap = new Map<String, String>(); 
 | 
        for (RecordType rect : deptRects) { 
 | 
            deptRectMap.put(rect.Id, rect.Name); 
 | 
        } 
 | 
        // TODO 販売店のレコードタイプのMapを生成 
 | 
  
 | 
        Map<Id, Account> accMap = new Map<Id, Account>(); 
 | 
        List<Account> accs = ControllerUtil.selectAccountForTrigger(accIds); 
 | 
        for(Account acc : accs) { 
 | 
            accMap.put(acc.Id, acc); 
 | 
        } 
 | 
         
 | 
        for(Asset a : Trigger.new) { 
 | 
            // 「診療科」に診療科を選択する場合 
 | 
            Account acc = accMap.get(a.AccountId); 
 | 
            if (acc != null 
 | 
                    && deptRectMap.get(acc.RecordTypeId) != null 
 | 
                    && acc.Management_Code__c != '9999900' 
 | 
            ) { 
 | 
                if (deptRectMap.get(acc.RecordTypeId) == '病院') { 
 | 
                    a.Department_Class__c = null; 
 | 
                    a.Hospital__c = acc.Id; 
 | 
                } else { 
 | 
                    a.Department_Class__c = acc.ParentId; 
 | 
                    a.Hospital__c = acc.Parent.ParentId; 
 | 
                } 
 | 
            } 
 | 
            // TODO 「販売店」の更新 
 | 
        } 
 | 
    } 
 | 
} 
 |