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
53 54 55 56 57 58 59 60 |
# File 'app/models/membership.rb', line 53 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
82 83 84 |
# File 'app/models/membership.rb', line 82 def day_in_study(date = nil) ((date || Date.current) - start_date).to_i + 1 end |
#discontinue ⇒ Object
157 158 159 160 161 |
# File 'app/models/membership.rb', line 157 def discontinue return false unless valid? update_columns(end_date: Date.current - 1.day, is_complete: true) end |
#end_date_american ⇒ Object
94 95 96 |
# File 'app/models/membership.rb', line 94 def end_date_american end_date && end_date.strftime(AMERICAN_DATE_FMT) end |
#flag_complete ⇒ Object
102 103 104 105 106 107 |
# File 'app/models/membership.rb', line 102 def flag_complete self.is_complete = true self.end_date = Date.yesterday save validate: false end |
#incomplete_tasks ⇒ Object
68 69 70 71 |
# File 'app/models/membership.rb', line 68 def incomplete_tasks available_task_statuses .incomplete_by_day(day_in_study) end |
#incomplete_tasks_today ⇒ Object
73 74 75 76 |
# File 'app/models/membership.rb', line 73 def incomplete_tasks_today available_task_statuses .incomplete_on_day(day_in_study) end |
#learning_tasks ⇒ Object
98 99 100 |
# File 'app/models/membership.rb', line 98 def learning_tasks tasks.learning end |
#length_of_study ⇒ Object
86 87 88 |
# File 'app/models/membership.rb', line 86 def length_of_study end_date - start_date + 1 end |
#lessons_read ⇒ Object
130 131 132 |
# File 'app/models/membership.rb', line 130 def lessons_read task_statuses.completed.select(&:is_lesson?) end |
#lessons_read_for_day(time) ⇒ Object
134 135 136 137 138 139 140 141 |
# File 'app/models/membership.rb', line 134 def lessons_read_for_day(time) task_statuses .completed .where("completed_at <= ? AND completed_at >= ?", time.end_of_day, time.beginning_of_day) .select(&:is_lesson?) end |
#lessons_read_for_week ⇒ Object
143 144 145 146 147 148 149 |
# File 'app/models/membership.rb', line 143 def lessons_read_for_week task_statuses .completed .where("completed_at >= ?", Time.current.advance(days: -7) .beginning_of_day) .select(&:is_lesson?) end |
#logins_by_week(week_number) ⇒ Object
109 110 111 112 113 114 115 116 117 118 |
# File 'app/models/membership.rb', line 109 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
120 121 122 123 124 125 126 127 128 |
# File 'app/models/membership.rb', line 120 def logins_today participant_login_events = ParticipantLoginEvent.arel_table participant .participant_login_events .where(participant_login_events[:created_at] .gteq(Date.current.beginning_of_day)) .where(participant_login_events[:created_at] .lt(Date.current.end_of_day)) end |
#ordered_task_statuses ⇒ Object
62 63 64 65 66 |
# File 'app/models/membership.rb', line 62 def ordered_task_statuses task_statuses .joins(:task) .order("tasks.release_day ASC") end |
#start_date_american ⇒ Object
90 91 92 |
# File 'app/models/membership.rb', line 90 def start_date_american start_date && start_date.strftime(AMERICAN_DATE_FMT) end |
#week_end_day(week_number) ⇒ Object
167 168 169 |
# File 'app/models/membership.rb', line 167 def week_end_day(week_number) start_date_with_zone + (week_number * 7).days end |
#week_in_study(date = nil) ⇒ Object
78 79 80 |
# File 'app/models/membership.rb', line 78 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
163 164 165 |
# File 'app/models/membership.rb', line 163 def week_start_day(week_number) start_date_with_zone + ((week_number - 1) * 7).days end |
#withdraw ⇒ Object
151 152 153 154 155 |
# File 'app/models/membership.rb', line 151 def withdraw return false unless valid? update_column(:end_date, Date.current - 1.day) end |