Class: Membership
- Inherits:
-
ActiveRecord::Base
- Object
- ActiveRecord::Base
- Membership
- Defined in:
- app/models/membership.rb
Overview
The relationship of a Participant to a Group.
Constant Summary collapse
- AMERICAN_DATE_FMT =
"%m/%d/%Y"
Instance Method Summary collapse
- #available_task_statuses ⇒ Object
- #day_in_study(date = nil) ⇒ Object
- #discontinue ⇒ Object
- #end_date_american ⇒ Object
- #flag_complete ⇒ Object
- #incomplete_tasks ⇒ Object
- #incomplete_tasks_today ⇒ Object
- #learning_tasks ⇒ Object
- #length_of_study ⇒ Object
- #lessons_read ⇒ Object
- #lessons_read_for_day(time) ⇒ Object
- #lessons_read_for_week ⇒ Object
- #logins_by_week(week_number) ⇒ Object
- #logins_today ⇒ Object
- #ordered_task_statuses ⇒ Object
- #start_date_american ⇒ Object
- #week_end_day(week_number) ⇒ Object
- #week_in_study(date = nil) ⇒ Object
- #week_start_day(week_number) ⇒ Object
- #withdraw ⇒ Object
Instance Method Details
#available_task_statuses ⇒ Object
54 55 56 57 58 59 60 61 |
# File 'app/models/membership.rb', line 54 def available_task_statuses @available_task_statuses ||= task_statuses .available_by_day(day_in_study) .not_terminated_by_day(day_in_study) .joins(:task, task: :bit_core_content_module) .by_position end |
#day_in_study(date = nil) ⇒ Object
83 84 85 |
# File 'app/models/membership.rb', line 83 def day_in_study(date = nil) ((date || Time.zone.today) - start_date).to_i + 1 end |
#discontinue ⇒ Object
158 159 160 161 162 |
# File 'app/models/membership.rb', line 158 def discontinue return false unless valid? update_columns(end_date: Time.zone.today - 1.day, is_complete: true) end |
#end_date_american ⇒ Object
95 96 97 |
# File 'app/models/membership.rb', line 95 def end_date_american end_date && end_date.strftime(AMERICAN_DATE_FMT) end |
#flag_complete ⇒ Object
103 104 105 106 107 108 |
# File 'app/models/membership.rb', line 103 def flag_complete self.is_complete = true self.end_date = 1.day.ago save validate: false end |
#incomplete_tasks ⇒ Object
69 70 71 72 |
# File 'app/models/membership.rb', line 69 def incomplete_tasks available_task_statuses .incomplete_by_day(day_in_study) end |
#incomplete_tasks_today ⇒ Object
74 75 76 77 |
# File 'app/models/membership.rb', line 74 def incomplete_tasks_today available_task_statuses .incomplete_on_day(day_in_study) end |
#learning_tasks ⇒ Object
99 100 101 |
# File 'app/models/membership.rb', line 99 def learning_tasks tasks.learning end |
#length_of_study ⇒ Object
87 88 89 |
# File 'app/models/membership.rb', line 87 def length_of_study end_date - start_date + 1 end |
#lessons_read ⇒ Object
131 132 133 |
# File 'app/models/membership.rb', line 131 def lessons_read task_statuses.completed.select(&:lesson?) end |
#lessons_read_for_day(time) ⇒ Object
135 136 137 138 139 140 141 142 |
# File 'app/models/membership.rb', line 135 def lessons_read_for_day(time) task_statuses .completed .where("completed_at <= ? AND completed_at >= ?", time.end_of_day, time.beginning_of_day) .select(&:lesson?) end |
#lessons_read_for_week ⇒ Object
144 145 146 147 148 149 150 |
# File 'app/models/membership.rb', line 144 def lessons_read_for_week task_statuses .completed .where("completed_at >= ?", Time.current.advance(days: -7) .beginning_of_day) .select(&:lesson?) end |
#logins_by_week(week_number) ⇒ Object
110 111 112 113 114 115 116 117 118 119 |
# File 'app/models/membership.rb', line 110 def logins_by_week(week_number) participant_login_events = ParticipantLoginEvent.arel_table participant .participant_login_events .where(participant_login_events[:created_at] .gteq(week_start_day(week_number))) .where(participant_login_events[:created_at] .lt(week_end_day(week_number))) .count end |
#logins_today ⇒ Object
121 122 123 124 125 126 127 128 129 |
# File 'app/models/membership.rb', line 121 def logins_today participant_login_events = ParticipantLoginEvent.arel_table participant .participant_login_events .where(participant_login_events[:created_at] .gteq(Time.zone.today.beginning_of_day)) .where(participant_login_events[:created_at] .lt(Time.zone.today.end_of_day)) end |
#ordered_task_statuses ⇒ Object
63 64 65 66 67 |
# File 'app/models/membership.rb', line 63 def ordered_task_statuses task_statuses .joins(:task) .order("tasks.release_day ASC") end |
#start_date_american ⇒ Object
91 92 93 |
# File 'app/models/membership.rb', line 91 def start_date_american start_date && start_date.strftime(AMERICAN_DATE_FMT) end |
#week_end_day(week_number) ⇒ Object
168 169 170 |
# File 'app/models/membership.rb', line 168 def week_end_day(week_number) start_date_with_zone + (week_number * 7).days end |
#week_in_study(date = nil) ⇒ Object
79 80 81 |
# File 'app/models/membership.rb', line 79 def week_in_study(date = nil) (day_in_study(date) / 7.0).ceil == 0 ? 1 : (day_in_study(date) / 7.0).ceil end |
#week_start_day(week_number) ⇒ Object
164 165 166 |
# File 'app/models/membership.rb', line 164 def week_start_day(week_number) start_date_with_zone + ((week_number - 1) * 7).days end |
#withdraw ⇒ Object
152 153 154 155 156 |
# File 'app/models/membership.rb', line 152 def withdraw return false unless valid? update_column(:end_date, Time.zone.today - 1.day) end |