Skip to content

Commit 7eab16d

Browse files
committed
Group statistics: remove unnecessary containing card (#344, #247)
1 parent 7f30fa3 commit 7eab16d

3 files changed

Lines changed: 101 additions & 128 deletions

File tree

app/views/group/statistics/_memberships.html.haml

Lines changed: 40 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -12,49 +12,44 @@
1212
.mb-3
1313
= direct_filter_date(:to, t(".to"), value: statistic.filter_params[:to] || f(statistic.to_date), data: { submit: true })
1414

15-
.card.mb-3
16-
.card-header.d-flex.justify-content-between.align-items-center
17-
%h3.card-title.mb-0= @group.to_s
18-
%span= t('.period', from: l(statistic.from_date), to: l(statistic.to_date))
19-
.card-body
20-
= render_card title: t('.summary_title') do
21-
%dl.row
22-
- rows = [ |
23-
{ label_key: t('.total_count', date: l(statistic.to_date)), value: statistic.total_count }, |
24-
{ label_key: t('.total_entries'), value: signed_number(statistic.total_entries) }, |
25-
{ label_key: t('.total_exits'), value: signed_number(-statistic.total_exits) }, |
26-
{ label_key: t('.net_change'), |
27-
value: "#{signed_number(statistic.net_change)} #{net_change_arrow(statistic.net_change)}" } |
28-
] |
29-
= render partial: 'overview_row', collection: rows, as: :row
15+
= render_card title: t('.summary_title') do
16+
%dl.row
17+
- rows = [ |
18+
{ label_key: t('.total_count', date: l(statistic.to_date)), value: statistic.total_count }, |
19+
{ label_key: t('.total_entries'), value: signed_number(statistic.total_entries) }, |
20+
{ label_key: t('.total_exits'), value: signed_number(-statistic.total_exits) }, |
21+
{ label_key: t('.net_change'), |
22+
value: "#{signed_number(statistic.net_change)} #{net_change_arrow(statistic.net_change)}" } |
23+
] |
24+
= render partial: 'overview_row', collection: rows, as: :row
3025

31-
- statistic.group_breakdowns.each do |breakdown|
32-
= render_card breakdown.role_rows, title: breakdown.title do |role_rows|
33-
%table.table.table-bordered.text-end
34-
%colgroup
35-
%col{style: "width: 40%"}
36-
%col{style: "width: 15%"}
37-
%col{style: "width: 15%"}
38-
%col{style: "width: 15%"}
39-
%col{style: "width: 15%"}
40-
%thead
41-
%tr
42-
%th.text-start= t('.role_type')
43-
%th= t('.count')
44-
%th= t('.entries')
45-
%th= t('.exits')
46-
%th= t('.net')
47-
%tbody
48-
- role_rows.each do |row|
49-
%tr
50-
%td.text-start= row.label
51-
%td= row.count
52-
%td= row.entries
53-
%td= row.exits
54-
%td= "#{signed_number(row.net)} #{net_change_arrow(row.net)}"
55-
%tr.fw-bold
56-
%td.text-start= t('.total')
57-
%td= breakdown.total_row.count
58-
%td= breakdown.total_row.entries
59-
%td= breakdown.total_row.exits
60-
%td= "#{signed_number(breakdown.total_row.net)} #{net_change_arrow(breakdown.total_row.net)}"
26+
- statistic.group_breakdowns.each do |breakdown|
27+
= render_card breakdown.role_rows, title: breakdown.title do |role_rows|
28+
%table.table.table-bordered.text-end
29+
%colgroup
30+
%col{style: "width: 40%"}
31+
%col{style: "width: 15%"}
32+
%col{style: "width: 15%"}
33+
%col{style: "width: 15%"}
34+
%col{style: "width: 15%"}
35+
%thead
36+
%tr
37+
%th.text-start= t('.role_type')
38+
%th= t('.count')
39+
%th= t('.entries')
40+
%th= t('.exits')
41+
%th= t('.net')
42+
%tbody
43+
- role_rows.each do |row|
44+
%tr
45+
%td.text-start= row.label
46+
%td= row.count
47+
%td= row.entries
48+
%td= row.exits
49+
%td= "#{signed_number(row.net)} #{net_change_arrow(row.net)}"
50+
%tr.fw-bold
51+
%td.text-start= t('.total')
52+
%td= breakdown.total_row.count
53+
%td= breakdown.total_row.entries
54+
%td= breakdown.total_row.exits
55+
%td= "#{signed_number(breakdown.total_row.net)} #{net_change_arrow(breakdown.total_row.net)}"

app/views/group/statistics/_people.html.haml

Lines changed: 59 additions & 67 deletions
Original file line numberDiff line numberDiff line change
@@ -15,79 +15,71 @@
1515
= check_box_tag :include_subgroups, "true", statistic.include_subgroups?, class: "form-check-input", data: { submit: true }
1616
= label_tag :include_subgroups, t(".include_subgroups"), class: "form-check-label"
1717

18-
.card.mb-3
19-
.card-header.d-flex.justify-content-between.align-items-center
20-
%h3.card-title.mb-0
21-
= statistic.group.to_s
22-
= t(".including_subgroups") if statistic.includes_subgroups?
23-
%span
24-
= t(".persons_count", count: statistic.total_count)
25-
.card-body
26-
= render_card title: t('.overview') do
27-
%dl.row
28-
- rows = [ |
29-
{ label_key: t('.total_count'), value: statistic.total_count }, |
30-
{ label_key: t('.magazine_subscribers_count'), value: statistic.magazine_subscribers_count } |
31-
] |
32-
= render partial: 'overview_row', collection: rows, as: :row
33-
%p.text-muted.small= t('.magazine_subscribers_hint')
34-
.row
35-
.col-lg-6
36-
= render_card statistic.language_breakdown, title: t('.language_title') do |breakdown|
37-
%table.table.table-bordered.text-end
38-
%colgroup
39-
%col{style: "width: 40%"}
40-
%col{style: "width: 20%"}
41-
%col{style: "width: 40%"}
42-
%thead
43-
%tr
44-
%th.text-start= t('.language')
45-
%th= t('.count')
46-
%th= t('.share')
47-
%tbody
48-
- breakdown.each do |bucket|
49-
%tr
50-
%td.text-start= bucket.label
51-
%td= bucket.count
52-
%td= number_to_percentage(bucket.percent, precision: 1)
53-
.col-lg-6
54-
= render_card statistic.gender_breakdown, title: t('.gender_title') do |gender_breakdown|
55-
%table.table.table-bordered.text-end
56-
%colgroup
57-
%col{style: "width: 40%"}
58-
%col{style: "width: 20%"}
59-
%col{style: "width: 40%"}
60-
%thead
61-
%tr
62-
%th.text-start= t('.gender')
63-
%th= t('.count')
64-
%th= t('.share')
65-
%tbody
66-
- gender_breakdown.each do |bucket|
67-
%tr
68-
%td.text-start= bucket.label
69-
%td= bucket.count
70-
%td= number_to_percentage(bucket.percent, precision: 1)
71-
72-
= render_card statistic.age_groups, title: t('.age_structure_title') do |age_groups|
18+
= render_card title: t('.overview') do
19+
%dl.row
20+
- rows = [ |
21+
{ label_key: t('.total_count'), value: statistic.total_count }, |
22+
{ label_key: t('.magazine_subscribers_count'), value: statistic.magazine_subscribers_count } |
23+
] |
24+
= render partial: 'overview_row', collection: rows, as: :row
25+
%p.text-muted.small= t('.magazine_subscribers_hint')
26+
.row
27+
.col-lg-6
28+
= render_card statistic.language_breakdown, title: t('.language_title') do |breakdown|
7329
%table.table.table-bordered.text-end
7430
%colgroup
75-
%col{style: "width: 15%"}
76-
%col{style: "width: 10%"}
77-
%col{style: "width: 15%"}
78-
%col{style: "width: 60%"}
31+
%col{style: "width: 40%"}
32+
%col{style: "width: 20%"}
33+
%col{style: "width: 40%"}
7934
%thead
8035
%tr
81-
%th
36+
%th.text-start= t('.language')
8237
%th= t('.count')
83-
%th
84-
%span.pe-2= t('.share')
38+
%th= t('.share')
8539
%tbody
86-
- age_groups.each do |bucket|
40+
- breakdown.each do |bucket|
8741
%tr
88-
%td= bucket.label
42+
%td.text-start= bucket.label
8943
%td= bucket.count
9044
%td= number_to_percentage(bucket.percent, precision: 1)
91-
%td
92-
.progress.ms-2
93-
.progress-bar{style: "width: #{distribution_bar_width(bucket.percent / 100.0, 1.0)}"}
45+
.col-lg-6
46+
= render_card statistic.gender_breakdown, title: t('.gender_title') do |gender_breakdown|
47+
%table.table.table-bordered.text-end
48+
%colgroup
49+
%col{style: "width: 40%"}
50+
%col{style: "width: 20%"}
51+
%col{style: "width: 40%"}
52+
%thead
53+
%tr
54+
%th.text-start= t('.gender')
55+
%th= t('.count')
56+
%th= t('.share')
57+
%tbody
58+
- gender_breakdown.each do |bucket|
59+
%tr
60+
%td.text-start= bucket.label
61+
%td= bucket.count
62+
%td= number_to_percentage(bucket.percent, precision: 1)
63+
64+
= render_card statistic.age_groups, title: t('.age_structure_title') do |age_groups|
65+
%table.table.table-bordered.text-end
66+
%colgroup
67+
%col{style: "width: 15%"}
68+
%col{style: "width: 10%"}
69+
%col{style: "width: 15%"}
70+
%col{style: "width: 60%"}
71+
%thead
72+
%tr
73+
%th
74+
%th= t('.count')
75+
%th
76+
%span.pe-2= t('.share')
77+
%tbody
78+
- age_groups.each do |bucket|
79+
%tr
80+
%td= bucket.label
81+
%td= bucket.count
82+
%td= number_to_percentage(bucket.percent, precision: 1)
83+
%td
84+
.progress.ms-2
85+
.progress-bar{style: "width: #{distribution_bar_width(bucket.percent / 100.0, 1.0)}"}

spec/controllers/group/statistics_controller_spec.rb

Lines changed: 2 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -83,11 +83,10 @@
8383
render_views
8484
include Capybara::RSpecMatchers
8585

86-
it "renders the group header and all statistic cards" do
86+
it "renders all statistic cards" do
8787
get :show, params: {group_id: group.id, key: :people}
8888

8989
expect(response).to have_http_status(200)
90-
expect(response.body).to have_css(".card-header", text: group.to_s)
9190
expect(response.body).to have_css(".card-header", text: "Übersicht")
9291
expect(response.body).to have_css(".card-header", text: "Sprache")
9392
expect(response.body).to have_css(".card-header", text: "Geschlecht")
@@ -101,12 +100,6 @@
101100
expect(response.body).to have_css("input[type='checkbox'][name='include_subgroups']")
102101
end
103102

104-
it "shows the including_subgroups hint when subgroups are included" do
105-
get :show, params: {group_id: group.id, key: :people}
106-
107-
expect(response.body).to have_text("(inkl. Untergruppen)")
108-
end
109-
110103
context "without subgroups" do
111104
let(:group) { groups(:berner_mitglieder) }
112105

@@ -116,12 +109,6 @@
116109
expect(response.body)
117110
.not_to have_css("input[type='checkbox'][name='include_subgroups']")
118111
end
119-
120-
it "hides the including_subgroups hint" do
121-
get :show, params: {group_id: group.id, key: :people}
122-
123-
expect(response.body).not_to have_text("(inkl. Untergruppen)")
124-
end
125112
end
126113
end
127114
end
@@ -151,15 +138,14 @@
151138
render_views
152139
include Capybara::RSpecMatchers
153140

154-
it "renders the group header, summary card and per-group breakdown cards" do
141+
it "renders the summary card and per-group breakdown cards" do
155142
mitglieder = groups(:berner_mitglieder)
156143
Fabricate(Group::Mitglieder::Aktivmitglied.sti_name.to_sym,
157144
group: mitglieder, start_on: Time.zone.today)
158145

159146
get :show, params: {group_id: group.id, key: :memberships}
160147

161148
expect(response).to have_http_status(200)
162-
expect(response.body).to have_css(".card-header", text: group.to_s)
163149
expect(response.body).to have_css(".card-header", text: "Zusammenfassung")
164150
expect(response.body).to have_css(".card-header", text: "Mitglieder")
165151
end

0 commit comments

Comments
 (0)