def call(
programme: nil,
ods_code: nil,
workgroup: nil,
academic_year: nil,
**
)
MavisCLI.load_rails
organisation = Organisation.find_by(ods_code: ods_code)
if organisation.nil?
warn "Could not find organisation with ODS code '#{ods_code}'"
return
end
if workgroup
teams = organisation.teams.where(workgroup: workgroup)
if teams.empty?
warn "Could not find team '#{workgroup}' for organisation '#{ods_code}'"
return
end
puts "Filtering by organisation: #{organisation.ods_code}"
puts "Filtering by team: #{teams.map(&:workgroup).join(", ")}"
else
puts "Filtering by organisation: #{organisation.ods_code}"
teams = organisation.teams
puts "Filtering by all teams: #{teams.map(&:workgroup).sort.join(", ")}"
end
programme_types =
programme ? [programme] : teams.flat_map(&:programme_types)
academic_year_value =
academic_year ? academic_year.to_i : AcademicYear.current
service =
::Stats::ConsentsBySchool.new(
teams: teams,
programme_types:,
academic_year: academic_year_value
)
results = service.call
puts "\n--- Consent Responses by Date ---"
puts "=" * 50
puts generate_by_date_csv(results)
puts "\n--- Consent Responses by Days Since Request ---"
puts "=" * 50
puts generate_by_days_csv(results)
end