-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathRollCall.java
106 lines (95 loc) · 3.74 KB
/
RollCall.java
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
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
/**
*
*Roll Call application
*Controller for Index page
*@authors Howard Chen and Vincent Tian
*
*/
global with sharing class RollCall{
// For apex: repeat
public Event[] getEvents() {
if (!Schema.sObjectType.Campaign.isAccessible()) {
throw new CheckInController.ProfilePermissionException('Profile does not have read permission');
}
String soql = 'SELECT Name, Description, StartDate, MaxCapacity__c FROM Campaign WHERE IsActive = True AND ParentId = null ';
if (Event.campaignType != '' && Event.campaignType != 'All'){
soql += ' AND Type=\''+Event.campaignType+'\' ';
}
soql += ' ORDER BY StartDate ASC NULLS LAST';
Campaign[] campaigns = Database.query(soql);
ID[] parentIds = new Id[]{};
for (campaign c: campaigns) {
parentIds.add(c.ID);
}
Map<Id, Campaign> potential_children =
new Map<Id, Campaign>([SELECT Name, Description, StartDate, Status, ParentId,
Id FROM Campaign WHERE ParentId IN :parentIds OR ID IN :parentIds]);
CampaignMember[] registered = [SELECT Status, CampaignID, Campaign.ParentID FROM CampaignMember
WHERE CampaignId in :potential_children.keySet() AND
(Status =:Event.registeredStatus
OR Status =:Event.checkedInStatus)];
Map<Id, Integer> regMap = new Map<Id, Integer>();
Map<Id, Integer> checkMap = new Map<Id, Integer>();
CampaignMember[] ps = new CampaignMember[]{};
CampaignMember[] cs = new CampaignMember[]{};
for (CampaignMember m : registered) {
if (m.Campaign.ParentId != null) {
cs.add(m);
} else {
ps.add(m);
}
}
mapVals(regMap, checkMap, ps);
mapVals2(regMap, checkMap, cs);
Event[] events = new Event[]{};
Integer i = 0;
for (Campaign c : campaigns) {
Event e = new Event(c, i);
e.registered = regMap.get(c.ID);
if (e.registered == null) {
e.registered = 0;
}
e.checkedin = regMap.get(c.ID);
if (e.checkedin == null) {
e.checkedin = 0;
}
events.add(e);
i++;
}
return events;
}
private void mapVals(Map<Id, Integer> rMap, Map<Id, Integer> cMap,
CampaignMember[] members) {
for (CampaignMember m: members) {
if (rMap.containsKey(m.CampaignID)) {
rMap.put(m.CampaignID, rMap.get(m.CampaignID) + 1);
} else {
rMap.put(m.CampaignID, 1);
}
if (m.status.equals(Event.checkedInStatus)) {
if (cMap.containsKey(m.CampaignID)) {
cMap.put(m.CampaignID, cMap.get(m.CampaignID) + 1);
} else {
cMap.put(m.CampaignID, 1);
}
}
}
}
private void mapVals2(Map<Id, Integer> rMap, Map<Id, Integer> cMap,
CampaignMember[] members) {
for (CampaignMember m: members) {
if (rMap.containsKey(m.Campaign.ParentId)) {
rMap.put(m.Campaign.ParentId, rMap.get(m.Campaign.ParentId) + 1);
} else {
rMap.put(m.Campaign.ParentId, 1);
}
if (m.status.equals(Event.checkedInStatus)) {
if (cMap.containsKey(m.Campaign.ParentId)) {
cMap.put(m.Campaign.ParentId, cMap.get(m.Campaign.ParentId) + 1);
} else {
cMap.put(m.Campaign.ParentId, 1);
}
}
}
}
}