Add selector for all data

pull/1/head
rebuilt 3 years ago
parent c33c91c870
commit 72c90b8f47

@ -3,7 +3,7 @@
class AnalyzeController < SqmApplicationController
before_action :assign_categories, :assign_subcategories, :assign_measures, :assign_academic_years,
:response_rate_timestamp, :races, :selected_races, :graph, :graphs, :background, :race_score_timestamp,
:sources, :group, :groups, :selected_grades, :grades, :slice, :selected_genders, :genders, only: [:index]
:source, :sources, :group, :groups, :selected_grades, :grades, :slice, :selected_genders, :genders, only: [:index]
def index; end
private
@ -75,8 +75,8 @@ class AnalyzeController < SqmApplicationController
end
def graphs
@graphs ||= [Analyze::Graph::StudentsAndTeachers.new, Analyze::Graph::StudentsByRace.new(races: selected_races),
Analyze::Graph::StudentsByGrade.new(grades: selected_grades), Analyze::Graph::StudentsByGender.new(genders: selected_genders)]
@graphs ||= [Analyze::Graph::AllData.new, Analyze::Graph::StudentsAndTeachers.new, Analyze::Graph::StudentsByRace.new(races: selected_races),
Analyze::Graph::StudentsByGrade.new(grades: selected_grades), Analyze::Graph::StudentsByGender.new(genders: selected_genders)]
end
def background
@ -91,8 +91,25 @@ class AnalyzeController < SqmApplicationController
end
end
def source
source_param = params[:source]
sources.each do |source|
@source = source if source.slug == source_param
end
@source ||= sources.first
end
def sources
@sources = [Analyze::Source::SurveyData.new(slices:)]
all_data_slices = [Analyze::Slice::AllData.new]
all_data_source = Analyze::Source::AllData.new(slices: all_data_slices)
students_and_teachers = Analyze::Slice::StudentsAndTeachers.new
students_by_group = Analyze::Slice::StudentsByGroup.new(races:, grades:)
survey_data_slices = [students_and_teachers, students_by_group]
survey_data_source = Analyze::Source::SurveyData.new(slices: survey_data_slices)
@sources = [all_data_source, survey_data_source]
end
def slice
@ -105,9 +122,7 @@ class AnalyzeController < SqmApplicationController
end
def slices
students_and_teachers = Analyze::Slice::StudentsAndTeachers.new
students_by_group = Analyze::Slice::StudentsByGroup.new(races:, grades:)
[students_and_teachers, students_by_group]
source.slices
end
def group
@ -156,7 +171,7 @@ class AnalyzeController < SqmApplicationController
gender_list = gender_params.split(',') if gender_params
if gender_list
gender_list = gender_list.map do |gender|
Gender.find_by_designation(gender)
Gender.find_by_designation(gender)
end
end
gender_list

@ -5,17 +5,22 @@ export default class extends Controller {
connect() { }
refresh(event) {
let base_url = event.target.value;
let target = event.target;
console.log(this.selected_slice(target))
console.log(target.name)
let url =
base_url +
"&academic_years=" +
this.selected_years().join(",") +
"&source=" +
this.selected_source(target) +
"&slice=" +
this.selected_slice(target) +
"&group=" +
this.selected_group() +
"&slice=" +
this.selected_slice() +
"&graph=" +
this.selected_graph() +
this.selected_graph(target) +
"&races=" +
this.selected_races().join(",") +
"&genders=" +
@ -57,37 +62,79 @@ export default class extends Controller {
return selected_group[0];
}
selected_slice() {
let slices = [...document.getElementsByName("slice")];
let selected_slice = slices
.filter((item) => {
return item.checked;
})
.map((item) => {
return item.id;
});
selected_source(target) {
if (target.name === 'source') {
return target.id;
}
if (target.name === 'slice' || target.name === 'group') {
return 'survey-data-only';
}
return selected_slice[0];
return window.source;
}
selected_graph() {
selected_slice(target) {
if (target.name === 'source' && target.id === 'all-data') {
return 'all-data';
}
if (target.name === 'source' && target.id === 'survey-data-only') {
return 'students-and-teachers';
}
if (target.name === 'group') {
return 'students-by-group';
}
if (target.name === 'source' || target.name === 'slice') {
let slices = [...document.getElementsByName("slice")];
let selected_slice = slices
.filter((item) => {
return item.id != "all-data";
})
.filter((item) => {
return item.checked;
})
.map((item) => {
return item.id;
});
return selected_slice[0];
}
return window.slice;
}
selected_graph(target) {
if (target.name === 'source' && target.id === 'all-data') {
return 'all-data'
}
if (target.name === 'source' && target.id === 'survey-data-only') {
return 'students-and-teachers'
}
let graphs = [...document.getElementsByName("slice")];
let selected_graph = graphs
let selected_slice = graphs
.filter((item) => {
return item.checked;
})
.map((item) => {
return item.id;
})[0];
if (selected_graph === 'students-and-teachers') {
return selected_graph;
} else if (this.selected_group() === 'race') {
return 'students-by-race'
} else if (this.selected_group() === 'gender'){
return 'students-by-gender'
} else {
return 'students-by-grade'
if (target.name === 'slice' || target.name === 'group') {
if (selected_slice === 'students-and-teachers') {
return 'students-and-teachers';
} else if (this.selected_group() === 'race') {
return 'students-by-race';
} else if (this.selected_group() === 'gender') {
return 'students-by-gender';
} else if (this.selected_group() === 'grade') {
return 'students-by-grade';
}
}
return window.graph;
}
selected_races() {

@ -96,6 +96,16 @@ class Measure < ActiveRecord::Base
@teacher_score[[school, academic_year]]
end
def admin_score(school:, academic_year:)
@admin_score ||= Hash.new do |memo, (school, academic_year)|
meets_admin_threshold = sufficient_admin_data?(school:, academic_year:)
average = admin_data_averages(school:, academic_year:).average if meets_admin_threshold
memo[[school, academic_year]] = scorify(average:, school:, academic_year:)
end
@admin_score[[school, academic_year]]
end
def warning_low_benchmark
1
end

@ -0,0 +1,20 @@
# frozen_string_literal: true
module Analyze
module Graph
class AllData
include Analyze::Graph::Column
def to_s
'All Data'
end
def slug
'all-data'
end
def columns
[AllStudent, AllTeacher, AllAdmin, GroupedBarColumnPresenter]
end
end
end
end

@ -0,0 +1,34 @@
# frozen_string_literal: true
module Analyze
module Graph
module Column
class AllAdmin < GroupedBarColumnPresenter
def label
'All Admin'
end
def basis
'student'
end
def show_irrelevancy_message?
# !measure.includes_admin_data_items?
false
end
def show_insufficient_data_message?
# academic_years.any? do |year|
# measure.sufficient_admin_data?(school:, academic_year: year)
# end
false
end
def score(year_index)
measure.admin_score(school:, academic_year: academic_years[year_index])
# Score.new(average: 3)
end
end
end
end
end

@ -0,0 +1,47 @@
# frozen_string_literal: true
module Analyze
module Graph
module Column
class AllSurveyData < GroupedBarColumnPresenter
def label
'Survey Data'
end
def basis
'student'
end
def show_irrelevancy_message?
false
end
def show_insufficient_data_message?
scores = academic_years.map do |year|
combined_score(school:, academic_year: year)
end
scores.all? { |score| !score.meets_student_threshold? && !score.meets_teacher_threshold? }
end
def score(year_index)
combined_score(school:, academic_year: academic_years[year_index])
end
private
def combined_score(school:, academic_year:)
teacher_score = measure.teacher_score(school:, academic_year:)
student_score = measure.student_score(school:, academic_year:)
averages = []
averages << student_score.average unless student_score.average.nil?
averages << teacher_score.average unless teacher_score.average.nil?
average = averages.average if averages.length > 0
combined_score = Score.new(average:, meets_student_threshold: student_score.meets_student_threshold,
meets_teacher_threshold: teacher_score.meets_teacher_threshold)
end
end
end
end
end

@ -13,7 +13,7 @@ module Analyze
end
def columns
[AllStudent, AllTeacher, GroupedBarColumnPresenter]
[AllStudent, AllTeacher, AllSurveyData]
end
end
end

@ -0,0 +1,17 @@
module Analyze
module Slice
class AllData
def to_s
'All Data'
end
def slug
'all-data'
end
def graphs
[Analyze::Graph::AllData.new]
end
end
end
end

@ -0,0 +1,21 @@
module Analyze
module Source
class AllData
attr_reader :slices
include Analyze::Slice
def initialize(slices:)
@slices = slices
end
def to_s
'All Data'
end
def slug
'all-data'
end
end
end
end

@ -8,13 +8,14 @@ module Analyze
def initialize(slices:)
@slices = slices
end
# def to_s
# 'Survey Data Only'
# end
# def value
# 'survey-data-only'
# end
def to_s
'Survey Data Only'
end
def slug
'survey-data-only'
end
end
end
end

@ -0,0 +1,8 @@
module Analyze
class Ui
attr_reader :params
def initialize(params:)
@params = params
end
end
end

@ -1,84 +1,41 @@
<h3 class="sub-header-4 mt-5">Data Filters</h3>
<div class="bg-gray p-3" data-controller="analyze">
<% @sources.first.slices.each do |slice| %>
<div>
<input type="radio"
id="<%= slice.slug %>"
class="form-check-input"
name="slice"
value="<%= base_url %>"
data-action="click->analyze#refresh"
<%= slice.slug == @slice.slug ? "checked" : "" %>>
<label for="<%= slice.slug %>"><%= slice.to_s %></label>
</div>
<% end %>
<select id="select-group" class="mx-3 form-select" data-id="group-dropdown" data-action="analyze#refresh">
<% @groups.each do |group| %>
<option id="<%= group.slug %>" name="group-option" value="<%= base_url %>" <%= group.slug == @group.slug ? "Selected": "" %>><%= group.name %> </option>
<% end %>
</select>
<p class="sub-header-5 mt-3 font-size-14"> Select a group </p>
<% @races.each do |race| %>
<div class="d-flex align-items-center">
<input
id="<%= race.slug %>"
class="m-3 race-checkbox form-check-input"
type="checkbox"
name="race-checkbox"
value="<%= base_url %>"
data-action="click->analyze#refresh"
<%= @selected_races.map(&:slug).include?(race.slug) ? "checked" : "" %>
<%= @graph.slug == 'students-and-teachers' ? "disabled" : "" %>
<%= @group.slug == 'race' ? "" : "hidden" %>>
<label for="<%= race.qualtrics_code %>"
<%= @group.slug == 'race' ? "" : "hidden" %>>
<%= race.designation %>
</label>
</div>
<% end %>
<% @grades.each do |grade| %>
<div class="d-flex align-items-center">
<input
id="grade-<%= grade %>"
class="m-3 grade-checkbox form-check-input"
type="checkbox"
name="grade-checkbox"
value="<%= base_url %>"
data-action="click->analyze#refresh"
<%= @selected_grades.include?(grade) ? "checked" : "" %>
<%= @graph.slug == 'students-and-teachers' ? "disabled" : "" %>
<%= @group.slug == 'grade' ? "" : "hidden" %>>
<label for="grade-<%= grade %>"
<%= @group.slug == 'grade' ? "" : "hidden" %>>
<%= grade %>
</label>
</div>
<% end %>
<% @genders.each do |gender| %>
<div class="d-flex align-items-center">
<input
id="gender-<%= gender.designation %>"
class="m-3 gender-checkbox form-check-input"
type="checkbox"
name="gender-checkbox"
value="<%= base_url %>"
data-action="click->analyze#refresh"
<%= @selected_genders.include?(gender) ? "checked" : "" %>
<%= @graph.slug == 'students-and-teachers' ? "disabled" : "" %>
<%= @group.slug == 'gender' ? "" : "hidden" %>>
<label for="gender-<%= gender %>"
<%= @group.slug == 'gender' ? "" : "hidden" %>>
<%= gender.designation %>
</label>
</div>
<% end %>
<% @sources.each do |source| %>
<input type="radio"
id="<%= source.slug %>"
class="form-check-input"
name="source"
value="<%= base_url %>"
data-action="click->analyze#refresh"
<%= source.slug == @source.slug ? "checked" : "" %>>
<label for="<%= source.slug %>"><%= source.to_s %></label>
<% source.slices.each do | slice | %>
<div class="mx-3">
<input type="radio"
id="<%= slice.slug %>"
class="form-check-input"
name="slice"
value="<%= base_url %>"
data-action="click->analyze#refresh"
<%= slice.slug == @slice.slug ? "checked" : "" %>
<%= slice.slug == "all-data" ? "hidden" : "" %>>
<label for="<%= slice.slug %>"
<%= slice.slug == "all-data" ? "hidden" : "" %>>
<%= slice.to_s %></label>
</div>
<% end %>
<% end %>
<%= render partial: "group_selectors" %>
</div>
<script>
window.source = "<%= @source.slug %>";
window.slice = "<%= @slice.slug %>";
window.group = "<%= @group.slug %>";
window.graph = "<%= @graph.slug %>";
</script>

@ -0,0 +1,67 @@
<select id="select-group" name="group" class="mx-4 form-select" data-id="group-dropdown" data-action="analyze#refresh">
<% @groups.each do |group| %>
<option id="<%= group.slug %>" name="group-option" value="<%= base_url %>" <%= group.slug == @group.slug ? "Selected": "" %>><%= group.name %> </option>
<% end %>
</select>
<p class="sub-header-5 mx-4 mt-3 font-size-14"> Select a group </p>
<% @races.each do |race| %>
<div class="d-flex align-items-center mx-5">
<input
id="<%= race.slug %>"
class="m-3 race-checkbox form-check-input"
type="checkbox"
name="race-checkbox"
value="<%= base_url %>"
data-action="click->analyze#refresh"
<%= @selected_races.map(&:slug).include?(race.slug) ? "checked" : "" %>
<%= @graph.slug == 'students-and-teachers' || @source.slug == 'all-data' ? "disabled" : "" %>
<%= @group.slug == 'race' ? "" : "hidden" %>>
<label for="<%= race.qualtrics_code %>"
<%= @group.slug == 'race' ? "" : "hidden" %>>
<%= race.designation %>
</label>
</div>
<% end %>
<% @grades.each do |grade| %>
<div class="d-flex align-items-center mx-5">
<input
id="grade-<%= grade %>"
class="m-3 grade-checkbox form-check-input"
type="checkbox"
name="grade-checkbox"
value="<%= base_url %>"
data-action="click->analyze#refresh"
<%= @selected_grades.include?(grade) ? "checked" : "" %>
<%= @graph.slug == 'students-and-teachers' || @source.slug == 'all-data' ? "disabled" : "" %>
<%= @group.slug == 'grade' ? "" : "hidden" %>>
<label for="grade-<%= grade %>"
<%= @group.slug == 'grade' ? "" : "hidden" %>>
<%= grade %>
</label>
</div>
<% end %>
<% @genders.each do |gender| %>
<div class="d-flex align-items-center mx-5">
<input
id="gender-<%= gender.designation %>"
class="m-3 gender-checkbox form-check-input"
type="checkbox"
name="gender-checkbox"
value="<%= base_url %>"
data-action="click->analyze#refresh"
<%= @selected_genders.include?(gender) ? "checked" : "" %>
<%= @graph.slug == 'students-and-teachers' || @source.slug == 'all-data' ? "disabled" : "" %>
<%= @group.slug == 'gender' ? "" : "hidden" %>>
<label for="gender-<%= gender %>"
<%= @group.slug == 'gender' ? "" : "hidden" %>>
<%= gender.designation %>
</label>
</div>
<% end %>

@ -110,6 +110,7 @@ describe 'analyze/index' do
assign :subcategories, category.subcategories
assign :measures, [support_for_teaching, effective_leadership, professional_qualifications]
assign :sources, sources
assign :source, sources.first
assign :groups, groups
assign :group, group
assign :slice, slice

Loading…
Cancel
Save