高章伟
2022-02-18 8b5f4c6c281cfa548f92de52c8021e37aa81901e
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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
public without sharing class SubAuthorizedHandler extends Oly_TriggerHandler {
    private Map<Id, SubAuthorized__c> newMap;
    private Map<Id, SubAuthorized__c> oldMap;
    private List<SubAuthorized__c> newList;
    private List<SubAuthorized__c> oldList;
    public SubAuthorizedHandler() {
        this.newMap = (Map<Id, SubAuthorized__c>) Trigger.newMap;
        this.oldMap = (Map<Id, SubAuthorized__c>) Trigger.oldMap;
        this.newList = (List<SubAuthorized__c>) Trigger.new;
        this.oldList = (List<SubAuthorized__c>) Trigger.old;
    }
    protected override void beforeInsert() {
        CheckValue();
    }
 
    protected override void beforeUpdate() {
        CheckValue();
    }
    // 检查被授权人是否是角色层级的上司
    private void CheckValue() {
        for (SubAuthorized__c tempSub : newList) {
            //Set<ID> parentIDset = getRoleSuperiorUsers(tempSub.ownerid);
            if (!tempSub.IsAuthorize__c && getsubUsers(tempSub.Authorizer__c).size() > 0) {
                tempSub.addError('您不能再次转授权');
            }
 
            //boolean isError = true;
            //for (ID tempID : parentIDset) {
            //    if (tempSub.Authorizee__c == null || tempID == tempSub.Authorizee__c) {
            //        isError = false;
            //        break;
            //    }
            //}
            //if (isError) {
            //    tempSub.Authorizee__c.addError('只能选择您的领导!');
            //}
        }
    }
    public static Set<ID> getsubUsers(Id userId) {
        Map<id, user>  allSubUserMap = new Map<id, user> (
            [select id
             from user
             where
             ZongjianApprovalManager_copy__c = : userId
               or TongkuoZongjian_copy__c = : userId
                   or BuchangApprovalManager_copy__c = : userId
                           or BuchangApprovalManagerSales_copy__c = : userId
                                   or JingliApprovalManager_copy__c = : userId
                                           or SalesManager_copy__c = : userId
                //SWAG-BEM9EP start
                or ManagerId_copy__c = : userId
                or JingliEquipmentManager_copy__c = : userId
                or Buzhang_Equipment_Manager_copy__c = : userId
                //SWAG-BEM9EP end
            ]);
 
        return allSubUserMap.keySet();
    }
 
    //public static Set<ID> getRoleSuperiorUsers(Id userId) {
    //    // get requested user's role
    //    Id roleId = [select UserRoleId from User where Id = :userId].UserRoleId;
    //    // get all of the roles above the user
    //    Set<Id> allSubRoleIds = getAllUpRoleIds(new Set<ID> {roleId});
    //    // get all of the ids for the users in those roles
    //    Map<Id, User> users = new Map<Id, User>([Select Id, Name From User
    //                                            where UserRoleId IN :allSubRoleIds]);
    //    // return the ids as a set so you can do what you want with them
    //    return users.keySet();
 
    //}
 
    //private static Set<ID> getAllUpRoleIds(Set<ID> roleIds) {
 
    //    Set<ID> currentRoleIds = new Set<ID>();
    //    // get all of the roles above the passed roles
    //    for (UserRole userRole : [select Id, ParentRoleId from UserRole where id
    //                              IN :roleIds AND ParentRoleID != null])
    //        currentRoleIds.add(userRole.ParentRoleId);
    //    // go fetch some more rolls!
    //    if (currentRoleIds.size() > 0) {
    //        currentRoleIds.addAll(getAllUpRoleIds(currentRoleIds));
    //    }
 
    //    return currentRoleIds;
    //}
 
}