binxie
2024-01-18 0e0dd1e20e7211f3c3c11d77a41090d998dfd06c
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
56
57
58
59
60
61
62
63
64
trigger CaseHpDeptUpd on Case (before insert, before update) {
 
 
    //deloitte-zhj 20231124 本地化导入 start
    if((!Test.isRunningTest())&&System.Label.ByPassTrigger.contains(UserInfo.getUserId())){
        return;
    }
    //deloitte-zhj 20231124 本地化导入 end
 
 
    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;
                }
            }
        }
    }
}