| 
				
			 | 
			
			
				@@ -8,6 +8,7 @@ class Member < ApplicationRecord 
			 | 
		
	
		
			
			| 
				8
			 | 
			
				8
			 | 
			
			
				   belongs_to :person 
			 | 
		
	
		
			
			| 
				9
			 | 
			
				9
			 | 
			
			
				   belongs_to :group 
			 | 
		
	
		
			
			| 
				10
			 | 
			
				10
			 | 
			
			
				  
			 | 
		
	
		
			
			| 
				
			 | 
			
				11
			 | 
			
			
				+  after_create   :create_future_participants! 
			 | 
		
	
		
			
			| 
				11
			 | 
			
				12
			 | 
			
			
				   before_destroy :delete_future_participants! 
			 | 
		
	
		
			
			| 
				12
			 | 
			
				13
			 | 
			
			
				  
			 | 
		
	
		
			
			| 
				13
			 | 
			
				14
			 | 
			
			
				   validates :person_id, 
			 | 
		
	
	
		
			
			| 
				
			 | 
			
			
				@@ -16,15 +17,31 @@ class Member < ApplicationRecord 
			 | 
		
	
		
			
			| 
				16
			 | 
			
				17
			 | 
			
			
				       message: "is already a member of this group" 
			 | 
		
	
		
			
			| 
				17
			 | 
			
				18
			 | 
			
			
				     } 
			 | 
		
	
		
			
			| 
				18
			 | 
			
				19
			 | 
			
			
				  
			 | 
		
	
		
			
			| 
				
			 | 
			
				20
			 | 
			
			
				+  # Create Participants for this Member for all the group's future activities, where the member isn't enrolled yet. 
			 | 
		
	
		
			
			| 
				
			 | 
			
				21
			 | 
			
			
				+  # Intended to be called after the member is added to the group. 
			 | 
		
	
		
			
			| 
				
			 | 
			
				22
			 | 
			
			
				+  def create_future_participants! 
			 | 
		
	
		
			
			| 
				
			 | 
			
				23
			 | 
			
			
				+    activities = self.group.future_activities 
			 | 
		
	
		
			
			| 
				
			 | 
			
				24
			 | 
			
			
				+ 
			 | 
		
	
		
			
			| 
				
			 | 
			
				25
			 | 
			
			
				+    if not self.person.activities.empty? 
			 | 
		
	
		
			
			| 
				
			 | 
			
				26
			 | 
			
			
				+      activities = activities.where( 
			 | 
		
	
		
			
			| 
				
			 | 
			
				27
			 | 
			
			
				+        'activities.id NOT IN (?)', self.person.activities.ids 
			 | 
		
	
		
			
			| 
				
			 | 
			
				28
			 | 
			
			
				+      ) 
			 | 
		
	
		
			
			| 
				
			 | 
			
				29
			 | 
			
			
				+    end 
			 | 
		
	
		
			
			| 
				
			 | 
			
				30
			 | 
			
			
				+ 
			 | 
		
	
		
			
			| 
				
			 | 
			
				31
			 | 
			
			
				+    activities.each do |a| 
			 | 
		
	
		
			
			| 
				
			 | 
			
				32
			 | 
			
			
				+      Participant.create!( 
			 | 
		
	
		
			
			| 
				
			 | 
			
				33
			 | 
			
			
				+        activity: a, 
			 | 
		
	
		
			
			| 
				
			 | 
			
				34
			 | 
			
			
				+        person: self.person 
			 | 
		
	
		
			
			| 
				
			 | 
			
				35
			 | 
			
			
				+      ) 
			 | 
		
	
		
			
			| 
				
			 | 
			
				36
			 | 
			
			
				+    end 
			 | 
		
	
		
			
			| 
				
			 | 
			
				37
			 | 
			
			
				+  end 
			 | 
		
	
		
			
			| 
				
			 | 
			
				38
			 | 
			
			
				+ 
			 | 
		
	
		
			
			| 
				19
			 | 
			
				39
			 | 
			
			
				   # Delete all Participants of this Member for Activities in the future. 
			 | 
		
	
		
			
			| 
				20
			 | 
			
				40
			 | 
			
			
				   # Intended to be called before the member is deleted. 
			 | 
		
	
		
			
			| 
				21
			 | 
			
				41
			 | 
			
			
				   def delete_future_participants! 
			 | 
		
	
		
			
			| 
				22
			 | 
			
				
			 | 
			
			
				-    activities = self.group.activities 
			 | 
		
	
		
			
			| 
				23
			 | 
			
				
			 | 
			
			
				-      .where('start > ?', DateTime.now) 
			 | 
		
	
		
			
			| 
				24
			 | 
			
				
			 | 
			
			
				- 
			 | 
		
	
		
			
			| 
				25
			 | 
			
				42
			 | 
			
			
				     participants = Participant.where( 
			 | 
		
	
		
			
			| 
				26
			 | 
			
				43
			 | 
			
			
				       person_id: self.person.id, 
			 | 
		
	
		
			
			| 
				27
			 | 
			
				
			 | 
			
			
				-      activity: activities 
			 | 
		
	
		
			
			| 
				
			 | 
			
				44
			 | 
			
			
				+      activity: self.group.future_activities 
			 | 
		
	
		
			
			| 
				28
			 | 
			
				45
			 | 
			
			
				     ) 
			 | 
		
	
		
			
			| 
				29
			 | 
			
				46
			 | 
			
			
				  
			 | 
		
	
		
			
			| 
				30
			 | 
			
				47
			 | 
			
			
				     participants.each do |p| 
			 |