Skip to content

Commit b383e2f

Browse files
Public views (#20)
* Add public views * Fix sample_participants condition * Fix lints * Fix rubocop ci * Update locale for publish_sortitions * Remove unused setting for component * Remove secrets * Fixes from review
1 parent 0b61401 commit b383e2f

File tree

27 files changed

+556
-28
lines changed

27 files changed

+556
-28
lines changed

.gitignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,3 +21,6 @@ development_app
2121

2222
/node_modules/
2323
package-lock.json
24+
25+
config/application.yml
26+
config/database.yml
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
# frozen_string_literal: true
2+
3+
require "cell/partial"
4+
5+
module Decidim
6+
module StratifiedSortitions
7+
# This cell renders the card for an instance of a StratifiedSortition
8+
# the default size is the Large Card (:l)
9+
class StratifiedSortitionCell < Decidim::ViewModel
10+
def show
11+
cell card_size, model, @options
12+
end
13+
14+
private
15+
16+
def card_size
17+
"decidim/stratified_sortitions/stratified_sortition_l"
18+
end
19+
end
20+
end
21+
end
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
# frozen_string_literal: true
2+
3+
require "cell/partial"
4+
5+
module Decidim
6+
module StratifiedSortitions
7+
# This cell renders a stratified sortition with its L-size card.
8+
class StratifiedSortitionLCell < Decidim::CardLCell
9+
include Decidim::StratifiedSortitions::Engine.routes.url_helpers
10+
11+
private
12+
13+
def has_state?
14+
true
15+
end
16+
17+
def metadata_cell
18+
"decidim/stratified_sortitions/stratified_sortition_metadata"
19+
end
20+
end
21+
end
22+
end
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
# frozen_string_literal: true
2+
3+
module Decidim
4+
module StratifiedSortitions
5+
# This cell renders the stratified sortition metadata for l card
6+
class StratifiedSortitionMetadataCell < Decidim::CardMetadataCell
7+
include Decidim::StratifiedSortitions::ApplicationHelper
8+
9+
def initialize(*)
10+
super
11+
12+
@items.prepend(*stratified_sortition_items)
13+
end
14+
15+
def stratified_sortition_items
16+
[candidates_item, status_item]
17+
end
18+
19+
def candidates_item
20+
{
21+
text: data_with_text(model.num_candidates.to_s, t("decidim.stratified_sortitions.stratified_sortitions.stratified_sortition.num_candidates")),
22+
icon: "group-line",
23+
}
24+
end
25+
26+
def status_item
27+
{
28+
text: content_tag(:span, class: "label #{status_classes}") { status_name },
29+
}
30+
end
31+
32+
def strata_item
33+
{
34+
text: data_with_text(model.strata.count.to_s, t("decidim.stratified_sortitions.stratified_sortitions.stratified_sortition.strata_count")),
35+
icon: "bar-chart-box-line",
36+
}
37+
end
38+
39+
def has_badge?
40+
false
41+
end
42+
43+
def status_name
44+
t(model.status, scope: "decidim.stratified_sortitions.stratified_sortitions.show.statuses", default: model.status)
45+
end
46+
47+
def data_with_text(data, text)
48+
"#{content_tag(:strong) { data }}#{content_tag(:span) { text }}".html_safe
49+
end
50+
51+
def status_classes
52+
case model.status
53+
when "executed"
54+
"success"
55+
when "pending"
56+
"warning"
57+
else
58+
"muted"
59+
end
60+
end
61+
end
62+
end
63+
end

app/controllers/decidim/stratified_sortitions/admin/stratified_sortitions_controller.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,7 @@ def execute
122122
def execute_stratified_sortition
123123
@result = FairSortitionService.new(stratified_sortition).call
124124
if @result.success?
125+
stratified_sortition.update!(status: "executed")
125126
csv_data = generate_sortition_csv(@result)
126127
send_data csv_data,
127128
filename: "sortition_results_#{stratified_sortition.id}_#{Time.current.strftime("%Y%m%d_%H%M%S")}.csv",

app/controllers/decidim/stratified_sortitions/stratified_sortitions_controller.rb

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ class StratifiedSortitionsController < Decidim::StratifiedSortitions::Applicatio
1313
helper Decidim::CheckBoxesTreeHelper
1414
helper Decidim::PaginateHelper
1515

16-
helper_method :stratified_sortitions
16+
helper_method :stratified_sortitions, :stratified_sortition
1717

1818
def index
1919
@stratified_sortitions = search.result
@@ -22,22 +22,32 @@ def index
2222
end
2323

2424
def show
25-
@stratified_sortition = StratifiedSortition.find(params[:id])
26-
@stratified_sortition_scope = stratified_sortition_scope
25+
raise ActionController::RoutingError, "Not Found" unless stratified_sortition
2726
end
2827

2928
private
3029

30+
def stratified_sortition
31+
@stratified_sortition ||= search_collection.find_by(id: params[:id])
32+
end
33+
3134
def stratified_sortition_scope
32-
@stratified_sortition_scope ||= current_organization.scopes.find_by(id: @stratified_sortition.decidim_scope_id)
35+
@stratified_sortition_scope ||= current_organization.scopes.find_by(id: stratified_sortition&.decidim_scope_id)
3336
end
3437

3538
def stratified_sortitions
3639
@stratified_sortitions ||= reorder(paginate(search.result))
3740
end
3841

3942
def search_collection
40-
::Decidim::StratifiedSortitions::StratifiedSortition.where(component: current_component).published
43+
::Decidim::StratifiedSortitions::StratifiedSortition.where(component: current_component)
44+
end
45+
46+
def default_filter_params
47+
{
48+
search_text_cont: "",
49+
with_any_state: "all",
50+
}
4151
end
4252
end
4353
end

app/helpers/decidim/stratified_sortitions/application_helper.rb

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,19 @@ def dynamic_title(title, **options)
4040
truncate translated_attribute(title), length: options[:max_length], omission: options[:omission]
4141
end
4242
end
43+
44+
def filter_sections_stratified_sortitions
45+
sections = [{ method: :with_any_state, collection: filter_state_values, label_scope: "decidim.stratified_sortitions.stratified_sortitions.filters", id: "state" }]
46+
sections.reject { |item| item[:collection].blank? }
47+
end
48+
49+
def filter_state_values
50+
[
51+
["all", t("all", scope: "decidim.stratified_sortitions.stratified_sortitions.filters")],
52+
["pending", t("pending", scope: "decidim.stratified_sortitions.stratified_sortitions.filters")],
53+
["executed", t("executed", scope: "decidim.stratified_sortitions.stratified_sortitions.filters")],
54+
]
55+
end
4356
end
4457
end
4558
end

app/models/decidim/stratified_sortitions/stratified_sortition.rb

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,15 +26,22 @@ class StratifiedSortition < ApplicationRecord
2626
where("title ->> '#{I18n.locale}' ILIKE ?", "%#{search_text}%")
2727
}
2828

29+
scope :with_any_state, lambda { |*values|
30+
values = values.flatten.compact_blank
31+
return all if values.empty? || values.include?("all")
32+
33+
where(status: values)
34+
}
35+
2936
def self.ransackable_scopes(_auth_object = nil)
30-
[:search_text_cont]
37+
[:search_text_cont, :with_any_state]
3138
end
3239

3340
searchable_fields({
3441
participatory_space: :itself,
3542
A: :title,
3643
B: :description,
37-
datetime: :published_at,
44+
datetime: :created_at,
3845
})
3946

4047
def strata_and_substrata_configured?
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
.stratified-sortition {
2+
&__aside-element {
3+
&-item {
4+
@apply border-b border-gray-3 py-4 first:pt-0 last:pb-0 last:border-b-0;
5+
}
6+
7+
&-item__title {
8+
@apply text-sm block text-gray-2 mb-1;
9+
}
10+
11+
&-item__text {
12+
@apply text-md block font-semibold text-gray-2;
13+
}
14+
15+
&-item__numbers {
16+
@apply text-md block text-gray-2;
17+
}
18+
}
19+
20+
&__aside__count-number {
21+
@apply text-5xl block text-center text-gray-2 font-bold;
22+
}
23+
24+
&__aside__count-text {
25+
@apply text-gray-2 text-sm block text-center;
26+
}
27+
}
28+
29+
a.stratified-sortition__aside-element-item__title {
30+
@apply text-secondary underline;
31+
}

app/views/decidim/stratified_sortitions/admin/stratified_sortitions/_strata.html.erb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
<% end %>
1616
<% end %>
1717
</div>
18-
<button class="button button__sm button__secondary add-stratum mt-2" type="button" <%= 'disabled' if @stratified_sortition.sample_participants.any? %>>
18+
<button class="button button__sm button__secondary add-stratum mt-2" type="button" <%= 'disabled' if @stratified_sortition&.sample_participants&.any? %>>
1919
<%= t(".add_stratum") %>
2020
</button>
2121
</div>

0 commit comments

Comments
 (0)