| 
				
			 | 
			
			
				@@ -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 
			 |