BathHacked/energy-sparks

View on GitHub
app/views/admin/school_groups/show.html.erb

Summary

Maintainability
Test Coverage
<div class="d-flex justify-content-between align-items-center">
  <div class='align-middle pb-3'>
    <h1 class='pb-0'><%= @school_group.name %> School Group</h1>
    <span class="badge badge-pill badge-primary"><%= @school_group.group_type.humanize %></span>
  </div>
  <div>
    <%= header_nav_link 'All school groups', admin_school_groups_url %>
  </div>
</div>
<div class="row pb-2">
  <div class="col-lg-6">
    Pupils in active schools:
    <span class="badge badge-success">
      <%= number_with_delimiter @school_group.schools.visible.map(&:number_of_pupils).compact.sum %>
    </span>
  </div>
  <div class="col-lg-6 text-right">
    <%= render 'default_issues_admin_user', school_group: @school_group %>
  </div>
</div>
<div class="row pb-2">
  <div class="col-lg-12">
    <div class="card-deck">
      <div class="card">
        <div class="card-body">
          <div>
            Active <span class="float-right badge badge-success"><%= @school_group.schools.visible.count %></span>
          </div>
          <div>
            Active (with data visible)
            <span class="float-right badge badge-success"><%= @school_group.schools.visible.data_enabled.count %></span>
          </div>
          <div>
            Invisible
            <span class="float-right badge badge-info"><%= @school_group.schools.not_visible.count %></span>
          </div>
          <div>
            Onboarding
            <span class="float-right badge badge-warning">
              <%= @school_group.school_onboardings.incomplete.count %>
            </span>
          </div>
          <div>
            Removed <span class="float-right badge badge-secondary"><%= @school_group.schools.inactive.count %></span>
          </div>
        </div>
      </div>
      <div class="card">
        <div class="card-body">
          <% School.school_types.keys.each do |school_type| %>
            <div>
              <%= school_type.humanize %>
              <span class="float-right badge badge-success">
                <%= @school_group.schools.visible.where(school_type: school_type).count %>
              </span>
            </div>
          <% end %>
        </div>
      </div>
    </div>
  </div>
</div>

<%= render 'admin/shared/dashboard_message', messageable: @school_group %>

<div id="school-group-button-panel" class="bg-light p-2 mb-2 d-flex justify-content-between border rounded">
  <%= link_to 'View', school_group_path(@school_group), class: 'btn btn-sm' %>
  <%= link_to 'Edit', edit_admin_school_group_path(@school_group), class: 'btn btn-sm' %>
  <%= link_to 'Manage users', admin_school_group_users_path(@school_group), class: 'btn btn-sm' %>
  <%= link_to 'Manage partners', admin_school_group_partners_path(@school_group), class: 'btn btn-sm' %>
  <%= link_to 'Manage tariffs', school_group_energy_tariffs_path(@school_group), class: 'btn btn-sm' %>
  <%= link_to 'Meter attributes', admin_school_group_meter_attributes_path(@school_group), class: 'btn btn-sm' %>
  <%= link_to 'Meter updates', admin_school_group_meter_updates_path(@school_group), class: 'btn btn-sm' %>
  <%= link_to 'Chart updates', school_group_chart_updates_path(@school_group), class: 'btn btn-sm' %>
  <%= render 'email_meter_report_button', school_group: @school_group, class: 'btn btn-sm' %>
  <%= link_to "#{fa_icon('file-download')} Issues".html_safe,
              admin_school_group_issues_path(@school_group, format: :csv),
              class: 'btn btn-sm', title: 'Download issues csv' %>
  <div title="School groups can only be deleted if there are no associated schools or users" rel="tooltip">
    <%= link_to 'Delete', admin_school_group_path(@school_group),
                method: :delete, data: { confirm: 'Are you sure?' },
                class: "btn btn-sm#{' disabled' unless @school_group.safe_to_destroy?}" %>
  </div>
</div>

<%= render 'schools_tabs' %>

<div class="tab-content" id="school-group-schools-content">
  <div class="tab-pane fade show active" id="active" role="tabpanel" aria-labelledby="active-tab">
    <% if @school_group.schools.active.any? %>
      <%= render 'active_schools', school_group: @school_group %>
    <% else %>
      <div class="bg-light p-2">No active schools for <%= @school_group.name %>.</div>
    <% end %>
  </div>
  <div class="tab-pane fade" id="onboarding" role="tabpanel" aria-labelledby="onboarding-tab">
    <% if @school_group.school_onboardings.incomplete.any? %>
      <%= render 'onboarding_schools', school_group: @school_group, anchor: 'onboarding' %>
    <% else %>
      <div class="bg-light p-2">No schools currently onboarding for <%= @school_group.name %>.</div>
    <% end %>
  </div>
  <div class="tab-pane fade" id="removed" role="tabpanel" aria-labelledby="removed-tab">
    <% if @school_group.schools.inactive.any? %>
      <%= render 'removed_schools', school_group: @school_group %>
    <% else %>
      <div class="bg-light p-2">No removed schools for <%= @school_group.name %>.</div>
    <% end %>
  </div>
  <div class="tab-pane fade" id="school-group-issues" role="tabpanel" aria-labelledby="school-group-issues-tab">
    <% if @school_group.issues.any? %>
      <%= render 'admin/issues/issues_list', issues: @school_group.issues, issueable_type: 'Group' %>
    <% else %>
      <div class="bg-light p-2">No school group issues for <%= @school_group.name %>.</div>
    <% end %>
    <%= render 'admin/issues/new_issues_links', issueable: @school_group %>
  </div>
  <div class="tab-pane fade" id="school-issues" role="tabpanel" aria-labelledby="school-issues-tab">
    <% if @school_group.school_issues.any? %>
      <%= render 'admin/issues/issues_list', issues: @school_group.school_issues, issueable_type: 'School' %>
    <% else %>
      <div class="bg-light p-2">No school issues for <%= @school_group.name %>.</div>
    <% end %>
  </div>
</div>

<script>
document.querySelectorAll('#school-group-schools-content a.btn.edit').forEach((element) => {
  element.addEventListener('click', (event) => {
    event.preventDefault();
    window.location.href = `${element.href}?redirect_back=${encodeURIComponent(window.location.pathname + window.location.hash)}`;
  });
});
</script>