binxie
2023-06-26 de9565270a88b0749d17c1961cd41399c8483c96
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
trigger ReportHpDeptUpd on Report__c (before insert, before update) {
    if((!Test.isRunningTest())&&UserInfo.getUserId()==System.Label.ByPassTrigger){
        return;
    }
    List<String> accIds = new List<String>();
 
    for(Report__c a : Trigger.new) {
        if (Trigger.isInsert
                || (Trigger.isUpdate
                    && (Trigger.oldMap.get(a.Id).get('Hospital_Department__c') != a.Hospital_Department__c)
                        || a.AccountParentId__c != a.Department_Class_Ref__c
                        || a.AccountParentParentId__c != a.Hospital_Reference__c
                        || String.isBlank(a.Department_Class_Ref__c))) {
            if (!String.isBlank(a.Hospital_Department__c)) {
                accIds.add(a.Hospital_Department__c);
            }
        }
    }
 
    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(Report__c a : Trigger.new) {
            // 「診療科」に診療科を選択する場合
            Account acc = accMap.get(a.Hospital_Department__c);
            if (acc != null
                    && deptRectMap.get(acc.RecordTypeId) != null) {
                a.Department_Class_Ref__c = acc.ParentId;
                a.Hospital_Reference__c = acc.Parent.ParentId;
            }
            // TODO 「販売店」の更新
        }
    }
}