FUYU
2023-12-13 4488f711dbc01a8db6753907cae2ef4021dede68
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
48
49
50
51
52
53
54
55
trigger CaseHpDeptUpd on Case (before insert, before update) {
    List<Case> cList = new List<Case>();
    List<Id> contactIds = new List<Id>();
    for(Case c : Trigger.new) {
        if (Trigger.isInsert) {
            if (String.isBlank(c.ContactId) == false) {
                cList.add(c);
                contactIds.add(c.ContactId);
            }
        }
        else {
            Case cOld = Trigger.oldMap.get(c.Id);
            if (cOld.ContactId != c.ContactId) {
                cList.add(c);
                if (String.isBlank(c.ContactId) == false) {
                    contactIds.add(c.ContactId);
                }
            }
        }
    }
    if (cList.size() > 0) {
        // AccoutIdを「Olympus社内 其他 社内用户」にする、TODO 9999997 にする
        List<Account> ocm = [select Id from Account where AgentCode_Ext__c = '9999997'];
        if (ocm.size() > 0) {
            Map<Id, Contact> contactMap = ControllerUtil.selectContactAccountForTrigger(contactIds);
            // 診療科レコードタイプ
            String[] recordTypes = new String[] {'販売店', '診療科 その他', '診療科 呼吸科', '診療科 婦人科', '診療科 普外科', '診療科 泌尿科', '診療科 消化科', '診療科 耳鼻喉科','办事处'}; //zhangyuheng  2022-04-28 '办事处'
            List<RecordType> recordTypeRects = [select Id, Name from RecordType where IsActive = true and SobjectType = 'Account' and Name IN :recordTypes];
            Map<String, String> deptRectMap = new Map<String, String>();
            for (RecordType rect : recordTypeRects) {
                deptRectMap.put(rect.Id, rect.Name);
            }
            for(Case c : cList) {
                if (String.isBlank(c.ContactId) == false) {
                    Contact con = contactMap.get(c.ContactId);
                    if (con != null
                            && deptRectMap.get(con.Account.RecordTypeId) != null) {
                        if (deptRectMap.get(con.Account.RecordTypeId) == '販売店') {
                            c.Account__c = con.AccountId;
                        } else {
                            c.Account__c = con.Account.Parent.ParentId;
                        }
                        c.AccountId = ocm[0].Id;
                    } else {
                        // ありえない
                        c.addError('请选择正确的客户人员');
                    }
                } else {
                    c.Account__c = null;
                    c.AccountId = null;
                }
            }
        }
    }
}