|
@@ -49,8 +49,10 @@ class Activity < ApplicationRecord
|
49
|
49
|
validates :start, presence: true
|
50
|
50
|
validate :deadline_before_start, unless: "self.deadline.blank?"
|
51
|
51
|
validate :end_after_start, unless: "self.end.blank?"
|
|
52
|
+ validate :reminder_before_deadline, unless: "self.reminder_at.blank?"
|
52
|
53
|
|
53
|
54
|
after_create :create_missing_participants!
|
|
55
|
+ after_commit :schedule_reminder, if: Proc.new {|a| a.previous_changes["reminder_at"] }
|
54
|
56
|
|
55
|
57
|
# Get all people (not participants) that are organizers. Does not include
|
56
|
58
|
# group leaders, although they may modify the activity as well.
|
|
@@ -154,6 +156,15 @@ class Activity < ApplicationRecord
|
154
|
156
|
|
155
|
157
|
participants = self.participants.where(attending: nil)
|
156
|
158
|
participants.each { |p| p.send_reminder }
|
|
159
|
+
|
|
160
|
+ self.reminder_done = true
|
|
161
|
+ self.save
|
|
162
|
+ end
|
|
163
|
+
|
|
164
|
+ def schedule_reminder
|
|
165
|
+ return if self.reminder_at.nil? || self.reminder_done
|
|
166
|
+
|
|
167
|
+ self.delay(run_at: self.reminder_at).send_reminder
|
157
|
168
|
end
|
158
|
169
|
|
159
|
170
|
private
|
|
@@ -171,4 +182,12 @@ class Activity < ApplicationRecord
|
171
|
182
|
errors.add(:end, I18n.t('activities.errors.must_be_after_start'))
|
172
|
183
|
end
|
173
|
184
|
end
|
|
185
|
+
|
|
186
|
+ # Assert that the reminder for non-response is sent while participants still
|
|
187
|
+ # can change their response.
|
|
188
|
+ def reminder_before_deadline
|
|
189
|
+ if self.reminder_at > self.deadline
|
|
190
|
+ errors.add(:reminder_at, I18n.t('activities.errors.must_be_before_deadline'))
|
|
191
|
+ end
|
|
192
|
+ end
|
174
|
193
|
end
|