BathHacked/energy-sparks

View on GitHub
app/services/schools/engaged_school_service.rb

Summary

Maintainability
A
0 mins
Test Coverage
# frozen_string_literal: true

module Schools
  class EngagedSchoolService
    attr_reader :school

    def initialize(school, date_range)
      @school = school
      @date_range = date_range
    end

    def self.list_engaged_schools(previous_year: false)
      current_year = AcademicYear.current
      date_range = if previous_year
                     previous_year = current_year.previous_year
                     previous_year.start_date..previous_year.end_date
                   else
                     current_year.start_date..
                   end
      School.engaged(date_range).joins(:school_group).order('school_groups.name asc, name asc').map do |school|
        EngagedSchoolService.new(school, date_range)
      end
    end

    def school_group
      @school.school_group
    end

    def recent_activity_count
      @school.activities.where(created_at: @date_range).count
    end

    def recent_action_count
      @school.observations.intervention.where(created_at: @date_range).count
    end

    def recently_enrolled_programme_count
      @school.programmes.recently_started_non_default(@date_range).count
    end

    def active_target?
      @active_target ||= @school.school_targets.where(target_date: @date_range).any?
    end

    def transport_surveys?
      @transport_surveys ||= @school.transport_surveys.recently_added(@date_range).any?
    end

    def temperature_recordings?
      @temperature_recordings ||= @school.observations.temperature.where(created_at: @date_range).any?
    end

    def audits?
      @audits ||= @school.observations.audit.where(created_at: @date_range).any?
    end

    def recently_logged_in_user_count
      recently_logged_in.count
    end

    def most_recent_login
      @most_recent_login ||= recently_logged_in.pluck(:last_sign_in_at).max
    end

    private

    def recently_logged_in
      @recently_logged_in ||= @school.users.recently_logged_in(@date_range.begin)
    end
  end
end