-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathCheckInController.java
132 lines (112 loc) · 5.5 KB
/
CheckInController.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
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
/**
*
*Roll Call application
*Controller for Checkin page
*@authors Howard Chen and Vincent Tian
*
*/
global with sharing class CheckInController{
public Event event{get; set;}
public CheckInController() {
Campaign[] c = [SELECT Id, Name, Description, StartDate, MaxCapacity__c FROM Campaign
WHERE Id=:ApexPages.currentPage().getParameters().get('event_id')];
if (c.size() != 0) {
event = new Event(c[0]);
} else {
event = null;
}
}
public static void register_event_attendee(String campaign_id, Contact attendee ) {
if (Schema.sObjectType.CampaignMember.isCreateable()) {
insert attendee;
CampaignMember new_event_attendee = new CampaignMember(ContactId=attendee.id,
CampaignId=campaign_id,
Status = Event.checkedInStatus);
insert new_event_attendee;
} else {
throw new CheckInController.ProfilePermissionException('Profile does not have insert permission');
}
}
public static void check_in(CampaignMember attendee) {
if (Schema.sObjectType.CampaignMember.fields.Status.isUpdateable()) {
attendee.status = Event.checkedInStatus;
update attendee;
} else {
throw new CheckInController.ProfilePermissionException('Profile does not have update permission');
}
}
// logic to check if a campaign member needs to register or just check in
public static CampaignMember[] handle_parent_events(String campaign_id, String email) {
email = String.escapeSingleQuotes(email);
Map<Id, Campaign> potential_children = new Map<Id, Campaign>([SELECT Name, Description, StartDate, Status,
ParentId, Id, MaxCapacity__c FROM Campaign
WHERE ParentId=:campaign_id OR Id=:campaign_id]);
Campaign pcampaign = potential_children.get(campaign_id);
Decimal capacity = pcampaign.MaxCapacity__c;
if (capacity != null) { // There is a max capacity
Integer checkedIn = [SELECT Count() FROM CampaignMember
WHERE CampaignId in :potential_children.keySet() AND
(Status=:Event.checkedInStatus)];
Integer capacity_int = pcampaign.MaxCapacity__c.intValue();
if (checkedIn >= capacity_int) {
throw new CapacityException('Event already at max capacity');
}
}
String soql = 'SELECT CampaignId, ContactId, LeadId, Lead.Name, Contact.Name, Lead.Email, Contact.Email, ';
for(Schema.FieldSetMember f : SObjectType.Contact.FieldSets.RollCall.getFields()) {
if (f.getFieldPath() != 'Name' && f.getFieldPath() != 'Email')
soql += 'Contact.'+f.getFieldPath() + ', ';
}
for(Schema.FieldSetMember f : SObjectType.Lead.FieldSets.RollCall.getFields()) {
if (f.getFieldPath() != 'Name' && f.getFieldPath() != 'Email')
soql += 'Lead.'+f.getFieldPath() + ', ';
}
String campaignIds = '';
for (String id : potential_children.keySet()){
campaignIds += ',\'' +id + '\'';
}
soql+= ' Id FROM CampaignMember WHERE CampaignId in ('+campaignIds.substring(1)+
') AND (Lead.Email=\'' +email+'\' OR Contact.Email=\''+email+'\')';
CampaignMember[] event_attendee = Database.query(soql);
if (event_attendee.size() == 1) {
check_in(event_attendee[0]);
}
return event_attendee;
}
// Checking in attendees for checkin page
@RemoteAction
global static CampaignMember[] check_in_attendee(String event_id, String email) {
return handle_parent_events(event_id, email);
}
// Checking in attendees for checkin page
@RemoteAction
global static void check_in_multiple(String CampaignMemberId) {
if (Schema.sObjectType.CampaignMember.fields.Status.isUpdateable()) {
// login person that has specific attributes above
CampaignMember event_attendee = [SELECT status FROM CampaignMember WHERE id = :CampaignMemberId];
event_attendee.status = Event.checkedInStatus;
update event_attendee;
} else {
throw new CheckInController.ProfilePermissionException('Profile does not have update permission');
}
}
// Checking in attendees for checkin page
@RemoteAction
global static void update_attendee(String event_id, SObject attendee) {
if (attendee.Id == null){
register_event_attendee(event_id, (Contact)attendee);
}else{
if (Schema.sObjectType.Contact.isUpdateable() && Schema.sObjectType.Lead.isUpdateable()) {
CampaignMember[] cm = [ SELECT Status, ContactId, LeadId FROM CampaignMember
WHERE CampaignId=:event_Id AND (ContactId=:attendee.Id or
LeadId=:attendee.Id)];
update attendee;
check_in(cm[0]);
} else {
throw new CheckInController.ProfilePermissionException('Profile does not have update permission');
}
}
}
public class CapacityException extends Exception {}
public class ProfilePermissionException extends Exception {}
}