Module: EffectiveWorkExperienceSummary

Extended by:
ActiveSupport::Concern
Defined in:
app/models/concerns/effective_work_experience_summary.rb

Overview

EffectiveWorkExperienceSummary

Mark your model with effective_work_experience_summary to get all the includes

The summary of an intern's work experience for one period, usually 3 months. Submitted by the intern, and reviewed by their mentor.

Defined Under Namespace

Modules: Base, ClassMethods

Instance Method Summary collapse

Instance Method Details

#intern_stepsObject

The intern completes the first half of the wizard, the mentor completes the second half



162
163
164
# File 'app/models/concerns/effective_work_experience_summary.rb', line 162

def intern_steps
  [:start, :records, :projects, :submit, :submitted, :reviewed]
end

#mentor_present?Boolean

An intern with an outside mentor has no mentor user. Their summaries are automatically reviewed.

Returns:

  • (Boolean)


189
190
191
# File 'app/models/concerns/effective_work_experience_summary.rb', line 189

def mentor_present?
  mentor.present? || user.try(:work_experience_outside_mentor?).present?
end

#mentor_stepsObject



166
167
168
# File 'app/models/concerns/effective_work_experience_summary.rb', line 166

def mentor_steps
  [:submitted, :review, :reviewed]
end

#monthsObject

The first day of each month in this summary period



179
180
181
# File 'app/models/concerns/effective_work_experience_summary.rb', line 179

def months
  @months ||= start_on.all_quarter.to_a.select { |month| month.day == 1 }
end

#periodObject



183
184
185
186
# File 'app/models/concerns/effective_work_experience_summary.rb', line 183

def period
  return if start_on.blank?
  "#{months.first.strftime('%B %Y')} to #{months.last.strftime('%B %Y')}"
end

#recommendationsObject



170
171
172
# File 'app/models/concerns/effective_work_experience_summary.rb', line 170

def recommendations
  Array(EffectiveWorkExperience.recommendations)
end

#review!Object



246
247
248
249
250
251
252
253
254
255
256
257
# File 'app/models/concerns/effective_work_experience_summary.rb', line 246

def review!
  wizard_steps[:review] ||= Time.zone.now
  wizard_steps[:reviewed] = Time.zone.now

  # If it was previously reviewed, or there is no mentor, we don't want to send an email
  unless was_reviewed? || mentor.blank? || importing
    after_commit { EffectiveWorkExperience.mailer_class.work_experience_summary_reviewed(self).deliver }
  end

  work_experience_records.reject(&:was_reviewed?).each { |work_experience_record| work_experience_record.reviewed! }
  reviewed!
end

#status_labelObject



198
199
200
# File 'app/models/concerns/effective_work_experience_summary.rb', line 198

def status_label
  (status_was || status).to_s.gsub('_', ' ').titleize
end

#submit!Object



227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
# File 'app/models/concerns/effective_work_experience_summary.rb', line 227

def submit!
  raise('already submitted') if 

  wizard_steps[:submit] ||= Time.zone.now
  wizard_steps[:submitted] = Time.zone.now

  if mentor.present? && !importing
    after_commit { EffectiveWorkExperience.mailer_class.(self).deliver }
  end

  work_experience_records.reject(&:was_submitted?).each { |work_experience_record| work_experience_record. }
  

  # Auto review summaries for interns without a mentor user
  review! if mentor.blank?

  true
end

#summaryObject



202
203
204
205
206
207
208
209
210
211
212
213
# File 'app/models/concerns/effective_work_experience_summary.rb', line 202

def summary
  case status_was
  when 'draft'
    "Work experience summary has not yet been submitted."
  when 'submitted'
    "Work experience summary has been submitted."
  when 'reviewed'
    "Work experience summary has been reviewed."
  else
    raise("unexpected status #{status}")
  end.html_safe
end

#summary_monthsObject



174
175
176
# File 'app/models/concerns/effective_work_experience_summary.rb', line 174

def summary_months
  (EffectiveWorkExperience.summary_months || 3)
end

#to_sObject



157
158
159
# File 'app/models/concerns/effective_work_experience_summary.rb', line 157

def to_s
  start_on&.strftime('%B %Y') || model_name.human
end

#total_hours_to_dateObject



194
195
196
# File 'app/models/concerns/effective_work_experience_summary.rb', line 194

def total_hours_to_date
  user.work_experience_total_hours_to_date(month: end_on)
end

#work_experience_projectsObject



223
224
225
# File 'app/models/concerns/effective_work_experience_summary.rb', line 223

def work_experience_projects
  @work_experience_projects ||= user.work_experience_projects.during(months)
end

#work_experience_recordsObject



219
220
221
# File 'app/models/concerns/effective_work_experience_summary.rb', line 219

def work_experience_records
  @work_experience_records ||= user.work_experience_records.where(month: months)
end

#work_experience_subcategoriesObject



215
216
217
# File 'app/models/concerns/effective_work_experience_summary.rb', line 215

def work_experience_subcategories
  Effective::WorkExperienceSubcategory.all.sorted
end