decidim-budgets 0.30.2 → 0.31.0.rc1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/app/cells/decidim/budgets/budget_list_item/show.erb +19 -9
- data/app/cells/decidim/budgets/budget_list_item/vote_action.erb +2 -2
- data/app/cells/decidim/budgets/budget_list_item_cell.rb +44 -10
- data/app/cells/decidim/budgets/budgets_list/card_list.erb +0 -2
- data/app/cells/decidim/budgets/budgets_list/main_list.erb +2 -2
- data/app/cells/decidim/budgets/budgets_list/show.erb +3 -3
- data/app/cells/decidim/budgets/budgets_list/voted.erb +12 -10
- data/app/cells/decidim/budgets/budgets_list_cell.rb +22 -0
- data/app/cells/decidim/budgets/project_budget_amount_cell.rb +14 -0
- data/app/cells/decidim/budgets/project_l/extra_data.erb +8 -2
- data/app/cells/decidim/budgets/project_l/metadata.erb +1 -1
- data/app/cells/decidim/budgets/project_l_cell.rb +2 -4
- data/app/cells/decidim/budgets/project_metadata_cell.rb +11 -19
- data/app/cells/decidim/budgets/project_selected_status_cell.rb +1 -11
- data/app/cells/decidim/budgets/project_vote_button/show.erb +5 -5
- data/app/cells/decidim/budgets/project_vote_button_cell.rb +14 -9
- data/app/cells/decidim/budgets/project_votes_count_cell.rb +8 -14
- data/app/commands/decidim/budgets/cancel_order.rb +5 -0
- data/app/controllers/decidim/budgets/admin/budgets_controller.rb +2 -2
- data/app/controllers/decidim/budgets/admin/projects_controller.rb +2 -2
- data/app/controllers/decidim/budgets/admin/proposals_imports_controller.rb +1 -1
- data/app/controllers/decidim/budgets/application_controller.rb +13 -1
- data/app/controllers/decidim/budgets/budgets_controller.rb +1 -3
- data/app/controllers/decidim/budgets/line_items_controller.rb +19 -0
- data/app/controllers/decidim/budgets/orders_controller.rb +20 -0
- data/app/controllers/decidim/budgets/projects_controller.rb +3 -1
- data/app/forms/decidim/budgets/admin/component_form.rb +4 -30
- data/app/helpers/decidim/budgets/application_helper.rb +1 -0
- data/app/helpers/decidim/budgets/projects_helper.rb +11 -7
- data/app/models/decidim/budgets/order.rb +2 -2
- data/app/packs/entrypoints/decidim_budgets.js +1 -0
- data/app/packs/src/decidim/budgets/admin/projects.js +2 -2
- data/app/packs/src/decidim/budgets/budgetSummaryBackdrop.js +41 -0
- data/app/packs/src/decidim/budgets/exit_handler.js +7 -2
- data/app/packs/src/decidim/budgets/progressFixed.js +1 -1
- data/app/packs/src/decidim/budgets/projects.js +1 -1
- data/app/packs/stylesheets/budgets.scss +57 -37
- data/app/permissions/decidim/budgets/permissions.rb +17 -13
- data/app/presenters/decidim/budgets/project_presenter.rb +2 -4
- data/app/views/decidim/budgets/admin/budgets/_actions.html.erb +65 -18
- data/app/views/decidim/budgets/admin/budgets/_budget-tr.html.erb +4 -4
- data/app/views/decidim/budgets/admin/budgets/_form.html.erb +1 -1
- data/app/views/decidim/budgets/admin/budgets/index.html.erb +14 -11
- data/app/views/decidim/budgets/admin/budgets/manage_trash.html.erb +2 -1
- data/app/views/decidim/budgets/admin/projects/_actions.html.erb +66 -22
- data/app/views/decidim/budgets/admin/projects/_bulk-actions.html.erb +15 -17
- data/app/views/decidim/budgets/admin/projects/_form.html.erb +1 -1
- data/app/views/decidim/budgets/admin/projects/_project-tr.html.erb +7 -7
- data/app/views/decidim/budgets/admin/projects/bulk_actions/_dropdown.html.erb +23 -30
- data/app/views/decidim/budgets/admin/projects/index.html.erb +2 -2
- data/app/views/decidim/budgets/admin/projects/manage_trash.html.erb +2 -1
- data/app/views/decidim/budgets/line_items/update_budget.js.erb +6 -5
- data/app/views/decidim/budgets/orders/status.html.erb +30 -30
- data/app/views/decidim/budgets/projects/_addition_selector.html.erb +1 -1
- data/app/views/decidim/budgets/projects/_budget_summary.html.erb +5 -1
- data/app/views/decidim/budgets/projects/_exit_modal.html.erb +1 -1
- data/app/views/decidim/budgets/projects/_project.html.erb +5 -1
- data/app/views/decidim/budgets/projects/_project_budget_button.html.erb +1 -9
- data/app/views/decidim/budgets/projects/_projects.html.erb +3 -1
- data/app/views/decidim/budgets/projects/index.html.erb +28 -6
- data/app/views/decidim/budgets/projects/order_progress_summary/_content.html.erb +30 -0
- data/app/views/decidim/budgets/projects/order_progress_summary/_content_responsive.html.erb +56 -0
- data/app/views/decidim/budgets/projects/order_progress_summary/_progress_box.html.erb +43 -0
- data/app/views/decidim/budgets/projects/order_progress_summary/_progress_box_buttons.html.erb +12 -0
- data/app/views/decidim/budgets/projects/order_progress_summary/_progress_box_sticky.html.erb +25 -0
- data/app/views/decidim/budgets/projects/show.html.erb +30 -17
- data/config/assets.rb +2 -2
- data/config/locales/ar.yml +0 -8
- data/config/locales/bg.yml +2 -18
- data/config/locales/ca-IT.yml +26 -14
- data/config/locales/ca.yml +26 -14
- data/config/locales/cs.yml +10 -18
- data/config/locales/de.yml +26 -14
- data/config/locales/el.yml +0 -7
- data/config/locales/en.yml +26 -14
- data/config/locales/es-MX.yml +26 -14
- data/config/locales/es-PY.yml +26 -14
- data/config/locales/es.yml +25 -13
- data/config/locales/eu.yml +26 -14
- data/config/locales/fi-plain.yml +26 -14
- data/config/locales/fi.yml +26 -14
- data/config/locales/fr-CA.yml +26 -14
- data/config/locales/fr.yml +26 -14
- data/config/locales/ga-IE.yml +0 -5
- data/config/locales/gl.yml +0 -7
- data/config/locales/hu.yml +2 -18
- data/config/locales/id-ID.yml +0 -7
- data/config/locales/is-IS.yml +0 -6
- data/config/locales/it.yml +0 -7
- data/config/locales/ja.yml +26 -14
- data/config/locales/kaa.yml +0 -1
- data/config/locales/ko.yml +0 -5
- data/config/locales/lb.yml +0 -7
- data/config/locales/lt.yml +2 -18
- data/config/locales/lv.yml +0 -7
- data/config/locales/nl.yml +0 -7
- data/config/locales/no.yml +0 -7
- data/config/locales/pl.yml +2 -18
- data/config/locales/pt-BR.yml +2 -18
- data/config/locales/pt.yml +0 -7
- data/config/locales/ro-RO.yml +7 -7
- data/config/locales/ru.yml +0 -7
- data/config/locales/sk.yml +0 -7
- data/config/locales/sq-AL.yml +0 -3
- data/config/locales/sv.yml +25 -13
- data/config/locales/tr-TR.yml +0 -8
- data/config/locales/uk.yml +0 -7
- data/config/locales/zh-CN.yml +0 -8
- data/config/locales/zh-TW.yml +0 -7
- data/db/migrate/20250912110212_move_voting_rules_to_radio_buttons.rb +22 -0
- data/lib/decidim/api/budget_type.rb +7 -0
- data/lib/decidim/api/project_type.rb +29 -1
- data/lib/decidim/budgets/budget_order_pdf.rb +73 -0
- data/lib/decidim/budgets/component.rb +26 -13
- data/lib/decidim/budgets/engine.rb +3 -11
- data/lib/decidim/budgets/seeds.rb +16 -5
- data/lib/decidim/budgets/test/factories.rb +3 -18
- data/lib/decidim/budgets/version.rb +1 -1
- data/lib/decidim/budgets/workflows/base.rb +0 -14
- data/lib/decidim/budgets.rb +1 -5
- metadata +22 -16
- data/app/queries/decidim/budgets/metrics/budget_followers_metric_measure.rb +0 -32
- data/app/queries/decidim/budgets/metrics/budget_participants_metric_measure.rb +0 -27
- data/app/views/decidim/budgets/projects/_order_progress_summary_content.html.erb +0 -122
- /data/app/views/decidim/budgets/projects/{_order_progress_progressbar_marks_right.html.erb → order_progress_summary/_progressbar_marks_right.html.erb} +0 -0
@@ -31,7 +31,6 @@ Decidim.register_component(:budgets) do |component|
|
|
31
31
|
resource.model_class_name = "Decidim::Budgets::Project"
|
32
32
|
resource.template = "decidim/budgets/projects/linked_projects"
|
33
33
|
resource.card = "decidim/budgets/project"
|
34
|
-
resource.actions = %w(vote comment)
|
35
34
|
resource.searchable = true
|
36
35
|
end
|
37
36
|
|
@@ -39,24 +38,36 @@ Decidim.register_component(:budgets) do |component|
|
|
39
38
|
Decidim::Budgets::Budget.where(component: components).count
|
40
39
|
end
|
41
40
|
|
42
|
-
component.register_stat :projects_count,
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
41
|
+
component.register_stat :projects_count,
|
42
|
+
priority: Decidim::StatsRegistry::MEDIUM_PRIORITY,
|
43
|
+
sub_title: "votes",
|
44
|
+
icon_name: "git-pull-request-line",
|
45
|
+
tooltip_key: "projects_count_tooltip" do |components, start_at, end_at|
|
47
46
|
budgets = Decidim::Budgets::Budget.where(component: components)
|
47
|
+
projects = Decidim::Budgets::FilteredProjects.for(components, start_at, end_at)
|
48
48
|
orders = Decidim::Budgets::Order.where(budget: budgets)
|
49
49
|
orders = orders.where(created_at: start_at..) if start_at.present?
|
50
50
|
orders = orders.where(created_at: ..end_at) if end_at.present?
|
51
|
-
|
51
|
+
[
|
52
|
+
projects.count,
|
53
|
+
orders.count
|
54
|
+
]
|
52
55
|
end
|
53
56
|
|
54
|
-
component.register_stat :comments_count,
|
57
|
+
component.register_stat :comments_count,
|
58
|
+
priority: Decidim::StatsRegistry::HIGH_PRIORITY,
|
59
|
+
icon_name: "chat-1-line",
|
60
|
+
tooltip_key: "comments_count",
|
61
|
+
tag: :comments do |components, start_at, end_at|
|
55
62
|
projects = Decidim::Budgets::FilteredProjects.for(components, start_at, end_at)
|
56
63
|
projects.sum(:comments_count)
|
57
64
|
end
|
58
65
|
|
59
|
-
component.register_stat :followers_count,
|
66
|
+
component.register_stat :followers_count,
|
67
|
+
tag: :followers,
|
68
|
+
icon_name: "user-follow-line",
|
69
|
+
tooltip_key: "followers_count_tooltip",
|
70
|
+
priority: Decidim::StatsRegistry::MEDIUM_PRIORITY do |components, start_at, end_at|
|
60
71
|
projects_ids = Decidim::Budgets::FilteredProjects.for(components, start_at, end_at).pluck(:id)
|
61
72
|
Decidim::Follow.where(decidim_followable_type: "Decidim::Budgets::Project", decidim_followable_id: projects_ids).count
|
62
73
|
end
|
@@ -76,16 +87,18 @@ Decidim.register_component(:budgets) do |component|
|
|
76
87
|
|
77
88
|
component.settings(:global) do |settings|
|
78
89
|
settings.attribute :taxonomy_filters, type: :taxonomy_filters
|
79
|
-
settings.attribute :workflow, type: :enum, default: "one", choices: -> { Decidim::Budgets.workflows.keys.map(&:to_s) }
|
90
|
+
settings.attribute :workflow, type: :enum, default: "one", choices: ->(_context) { Decidim::Budgets.workflows.keys.map(&:to_s) }
|
80
91
|
settings.attribute :projects_per_page, type: :integer, default: 12
|
81
|
-
settings.attribute :
|
92
|
+
settings.attribute :voting_rule, type: :enum, default: "threshold_percent", choices: %w(threshold_percent minimum_projects selected_projects)
|
93
|
+
|
82
94
|
settings.attribute :vote_threshold_percent, type: :integer, default: 70
|
83
95
|
settings.attribute :vote_threshold_percent, type: :integer, default: 70
|
84
|
-
|
96
|
+
|
85
97
|
settings.attribute :vote_minimum_budget_projects_number, type: :integer, default: 1
|
86
|
-
|
98
|
+
|
87
99
|
settings.attribute :vote_selected_projects_minimum, type: :integer, default: 0
|
88
100
|
settings.attribute :vote_selected_projects_maximum, type: :integer, default: 1
|
101
|
+
|
89
102
|
settings.attribute :comments_enabled, type: :boolean, default: true
|
90
103
|
settings.attribute :comments_max_length, type: :integer, required: true
|
91
104
|
settings.attribute :geocoding_enabled, type: :boolean, default: false
|
@@ -17,6 +17,7 @@ module Decidim
|
|
17
17
|
member do
|
18
18
|
post :checkout
|
19
19
|
get :status
|
20
|
+
get :export_pdf
|
20
21
|
end
|
21
22
|
resource :line_item, only: [:create, :destroy]
|
22
23
|
end
|
@@ -33,6 +34,7 @@ module Decidim
|
|
33
34
|
Decidim.icons.register(name: "Decidim::Budgets::Order", icon: "check-double-fill", description: "Budget voting", category: "activity", engine: :budgets)
|
34
35
|
|
35
36
|
Decidim.icons.register(name: "git-pull-request-line", icon: "git-pull-request-line", category: "system", description: "", engine: :budgets)
|
37
|
+
Decidim.icons.register(name: "progress-2-line", icon: "progress-2-line", category: "system", description: "", engine: :budgets)
|
36
38
|
end
|
37
39
|
|
38
40
|
initializer "decidim_budgets.add_cells_view_paths" do
|
@@ -40,17 +42,7 @@ module Decidim
|
|
40
42
|
Cell::ViewModel.view_paths << File.expand_path("#{Decidim::Budgets::Engine.root}/app/views") # for partials
|
41
43
|
end
|
42
44
|
|
43
|
-
initializer "decidim_budgets.
|
44
|
-
Decidim.metrics_operation.register(:participants, :budgets) do |metric_operation|
|
45
|
-
metric_operation.manager_class = "Decidim::Budgets::Metrics::BudgetParticipantsMetricMeasure"
|
46
|
-
end
|
47
|
-
|
48
|
-
Decidim.metrics_operation.register(:followers, :budgets) do |metric_operation|
|
49
|
-
metric_operation.manager_class = "Decidim::Budgets::Metrics::BudgetFollowersMetricMeasure"
|
50
|
-
end
|
51
|
-
end
|
52
|
-
|
53
|
-
initializer "decidim_budgets.webpacker.assets_path" do
|
45
|
+
initializer "decidim_budgets.shakapacker.assets_path" do
|
54
46
|
Decidim.register_assets_path File.expand_path("app/packs", root)
|
55
47
|
end
|
56
48
|
|
@@ -15,12 +15,12 @@ module Decidim
|
|
15
15
|
def call
|
16
16
|
component = create_component!
|
17
17
|
|
18
|
-
|
18
|
+
number_of_records.times do
|
19
19
|
create_budget!(component:)
|
20
20
|
end
|
21
21
|
|
22
22
|
Decidim::Budgets::Budget.where(component:).each do |budget|
|
23
|
-
|
23
|
+
number_of_records.times do
|
24
24
|
project = create_project!(budget:)
|
25
25
|
|
26
26
|
create_attachments!(attached_to: project)
|
@@ -37,6 +37,14 @@ module Decidim
|
|
37
37
|
"<p>#{::Faker::Lorem.paragraph}</p>"
|
38
38
|
end
|
39
39
|
|
40
|
+
step_settings = if participatory_space.allows_steps?
|
41
|
+
{ participatory_space.active_step.id => {
|
42
|
+
votes: %w(enabled disabled finished).sample
|
43
|
+
} }
|
44
|
+
else
|
45
|
+
{}
|
46
|
+
end
|
47
|
+
|
40
48
|
params = {
|
41
49
|
name: Decidim::Components::Namer.new(participatory_space.organization.available_locales, :budgets).i18n_name,
|
42
50
|
manifest_name: :budgets,
|
@@ -47,7 +55,8 @@ module Decidim
|
|
47
55
|
landing_page_content:,
|
48
56
|
more_information_modal: Decidim::Faker::Localized.paragraph(sentence_count: 4),
|
49
57
|
workflow: Decidim::Budgets.workflows.keys.sample
|
50
|
-
}
|
58
|
+
},
|
59
|
+
step_settings:
|
51
60
|
}
|
52
61
|
|
53
62
|
Decidim.traceability.perform_action!(
|
@@ -72,19 +81,21 @@ module Decidim
|
|
72
81
|
description: Decidim::Faker::Localized.wrapped("<p>", "</p>") do
|
73
82
|
Decidim::Faker::Localized.paragraph(sentence_count: 3)
|
74
83
|
end,
|
75
|
-
total_budget: ::Faker::Number.number(digits:
|
84
|
+
total_budget: ::Faker::Number.number(digits: 7)
|
76
85
|
)
|
77
86
|
end
|
78
87
|
end
|
79
88
|
|
80
89
|
def create_project!(budget:)
|
90
|
+
minimum_amount = Integer(budget.total_budget * 0.1)
|
91
|
+
maximum_amount = Integer(budget.total_budget * 0.5)
|
81
92
|
params = {
|
82
93
|
budget:,
|
83
94
|
title: Decidim::Faker::Localized.sentence(word_count: 2),
|
84
95
|
description: Decidim::Faker::Localized.wrapped("<p>", "</p>") do
|
85
96
|
Decidim::Faker::Localized.paragraph(sentence_count: 3)
|
86
97
|
end,
|
87
|
-
budget_amount: ::Faker::Number.between(from:
|
98
|
+
budget_amount: ::Faker::Number.between(from: minimum_amount, to: maximum_amount)
|
88
99
|
}
|
89
100
|
|
90
101
|
if budget.component.settings.geocoding_enabled?
|
@@ -26,17 +26,12 @@ FactoryBot.define do
|
|
26
26
|
|
27
27
|
trait :with_vote_threshold_percent do
|
28
28
|
transient do
|
29
|
-
vote_rule_threshold_percent_enabled { true }
|
30
|
-
vote_rule_minimum_budget_projects_enabled { false }
|
31
|
-
vote_rule_projects_enabled { false }
|
32
29
|
vote_threshold_percent { 70 }
|
33
30
|
end
|
34
31
|
|
35
32
|
settings do
|
36
33
|
{
|
37
|
-
|
38
|
-
vote_rule_minimum_budget_projects_enabled:,
|
39
|
-
vote_rule_selected_projects_enabled: vote_rule_projects_enabled,
|
34
|
+
voting_rule: "threshold_percent",
|
40
35
|
vote_threshold_percent:
|
41
36
|
}
|
42
37
|
end
|
@@ -44,17 +39,12 @@ FactoryBot.define do
|
|
44
39
|
|
45
40
|
trait :with_minimum_budget_projects do
|
46
41
|
transient do
|
47
|
-
vote_rule_threshold_percent_enabled { false }
|
48
|
-
vote_rule_minimum_budget_projects_enabled { true }
|
49
|
-
vote_rule_projects_enabled { false }
|
50
42
|
vote_minimum_budget_projects_number { 3 }
|
51
43
|
end
|
52
44
|
|
53
45
|
settings do
|
54
46
|
{
|
55
|
-
|
56
|
-
vote_rule_minimum_budget_projects_enabled:,
|
57
|
-
vote_rule_selected_projects_enabled: vote_rule_projects_enabled,
|
47
|
+
voting_rule: "minimum_projects",
|
58
48
|
vote_minimum_budget_projects_number:
|
59
49
|
}
|
60
50
|
end
|
@@ -62,18 +52,13 @@ FactoryBot.define do
|
|
62
52
|
|
63
53
|
trait :with_budget_projects_range do
|
64
54
|
transient do
|
65
|
-
vote_rule_threshold_percent_enabled { false }
|
66
|
-
vote_rule_minimum_budget_projects_enabled { false }
|
67
|
-
vote_rule_projects_enabled { true }
|
68
55
|
vote_minimum_budget_projects_number { 3 }
|
69
56
|
vote_maximum_budget_projects_number { 6 }
|
70
57
|
end
|
71
58
|
|
72
59
|
settings do
|
73
60
|
{
|
74
|
-
|
75
|
-
vote_rule_minimum_budget_projects_enabled:,
|
76
|
-
vote_rule_selected_projects_enabled: vote_rule_projects_enabled,
|
61
|
+
voting_rule: "selected_projects",
|
77
62
|
vote_selected_projects_minimum: vote_minimum_budget_projects_number,
|
78
63
|
vote_selected_projects_maximum: vote_maximum_budget_projects_number
|
79
64
|
}
|
@@ -10,20 +10,6 @@ module Decidim
|
|
10
10
|
@user = user
|
11
11
|
end
|
12
12
|
|
13
|
-
# Public: Checks if the component has only one budget resource.
|
14
|
-
#
|
15
|
-
# Returns Boolean.
|
16
|
-
def single?
|
17
|
-
budgets.one?
|
18
|
-
end
|
19
|
-
|
20
|
-
# Public: Return the single budget resource of the component
|
21
|
-
#
|
22
|
-
# Returns an ActiveRecord.
|
23
|
-
def single
|
24
|
-
budgets.first if single?
|
25
|
-
end
|
26
|
-
|
27
13
|
# Public: Decides if the given resource should be highlighted.
|
28
14
|
# This method must be overwritten for each Workflow class.
|
29
15
|
# - resource: the budget resource to consider
|
data/lib/decidim/budgets.rb
CHANGED
@@ -11,12 +11,8 @@ module Decidim
|
|
11
11
|
# Base module for this engine.
|
12
12
|
module Budgets
|
13
13
|
autoload :ProjectSerializer, "decidim/budgets/project_serializer"
|
14
|
+
autoload :OrderPDF, "decidim/budgets/budget_order_pdf"
|
14
15
|
|
15
16
|
include ActiveSupport::Configurable
|
16
|
-
|
17
|
-
# Public Setting that defines whether proposals can be linked to meetings
|
18
|
-
config_accessor :enable_proposal_linking do
|
19
|
-
Decidim.const_defined?("Proposals")
|
20
|
-
end
|
21
17
|
end
|
22
18
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: decidim-budgets
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.31.0.rc1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Josep Jaume Rey Peroy
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2025-09-
|
13
|
+
date: 2025-09-25 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: decidim-comments
|
@@ -18,70 +18,70 @@ dependencies:
|
|
18
18
|
requirements:
|
19
19
|
- - '='
|
20
20
|
- !ruby/object:Gem::Version
|
21
|
-
version: 0.
|
21
|
+
version: 0.31.0.rc1
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
24
|
version_requirements: !ruby/object:Gem::Requirement
|
25
25
|
requirements:
|
26
26
|
- - '='
|
27
27
|
- !ruby/object:Gem::Version
|
28
|
-
version: 0.
|
28
|
+
version: 0.31.0.rc1
|
29
29
|
- !ruby/object:Gem::Dependency
|
30
30
|
name: decidim-core
|
31
31
|
requirement: !ruby/object:Gem::Requirement
|
32
32
|
requirements:
|
33
33
|
- - '='
|
34
34
|
- !ruby/object:Gem::Version
|
35
|
-
version: 0.
|
35
|
+
version: 0.31.0.rc1
|
36
36
|
type: :runtime
|
37
37
|
prerelease: false
|
38
38
|
version_requirements: !ruby/object:Gem::Requirement
|
39
39
|
requirements:
|
40
40
|
- - '='
|
41
41
|
- !ruby/object:Gem::Version
|
42
|
-
version: 0.
|
42
|
+
version: 0.31.0.rc1
|
43
43
|
- !ruby/object:Gem::Dependency
|
44
44
|
name: decidim-admin
|
45
45
|
requirement: !ruby/object:Gem::Requirement
|
46
46
|
requirements:
|
47
47
|
- - '='
|
48
48
|
- !ruby/object:Gem::Version
|
49
|
-
version: 0.
|
49
|
+
version: 0.31.0.rc1
|
50
50
|
type: :development
|
51
51
|
prerelease: false
|
52
52
|
version_requirements: !ruby/object:Gem::Requirement
|
53
53
|
requirements:
|
54
54
|
- - '='
|
55
55
|
- !ruby/object:Gem::Version
|
56
|
-
version: 0.
|
56
|
+
version: 0.31.0.rc1
|
57
57
|
- !ruby/object:Gem::Dependency
|
58
58
|
name: decidim-dev
|
59
59
|
requirement: !ruby/object:Gem::Requirement
|
60
60
|
requirements:
|
61
61
|
- - '='
|
62
62
|
- !ruby/object:Gem::Version
|
63
|
-
version: 0.
|
63
|
+
version: 0.31.0.rc1
|
64
64
|
type: :development
|
65
65
|
prerelease: false
|
66
66
|
version_requirements: !ruby/object:Gem::Requirement
|
67
67
|
requirements:
|
68
68
|
- - '='
|
69
69
|
- !ruby/object:Gem::Version
|
70
|
-
version: 0.
|
70
|
+
version: 0.31.0.rc1
|
71
71
|
- !ruby/object:Gem::Dependency
|
72
72
|
name: decidim-proposals
|
73
73
|
requirement: !ruby/object:Gem::Requirement
|
74
74
|
requirements:
|
75
75
|
- - '='
|
76
76
|
- !ruby/object:Gem::Version
|
77
|
-
version: 0.
|
77
|
+
version: 0.31.0.rc1
|
78
78
|
type: :development
|
79
79
|
prerelease: false
|
80
80
|
version_requirements: !ruby/object:Gem::Requirement
|
81
81
|
requirements:
|
82
82
|
- - '='
|
83
83
|
- !ruby/object:Gem::Version
|
84
|
-
version: 0.
|
84
|
+
version: 0.31.0.rc1
|
85
85
|
description: A budgets component for decidim's participatory spaces.
|
86
86
|
email:
|
87
87
|
- josepjaume@gmail.com
|
@@ -114,6 +114,7 @@ files:
|
|
114
114
|
- app/cells/decidim/budgets/limit_announcement/show.erb
|
115
115
|
- app/cells/decidim/budgets/limit_announcement_cell.rb
|
116
116
|
- app/cells/decidim/budgets/order_activity_cell.rb
|
117
|
+
- app/cells/decidim/budgets/project_budget_amount_cell.rb
|
117
118
|
- app/cells/decidim/budgets/project_cell.rb
|
118
119
|
- app/cells/decidim/budgets/project_history_cell.rb
|
119
120
|
- app/cells/decidim/budgets/project_l/extra_data.erb
|
@@ -174,6 +175,7 @@ files:
|
|
174
175
|
- app/packs/entrypoints/decidim_budgets_admin.js
|
175
176
|
- app/packs/images/decidim/budgets/decidim_budgets.svg
|
176
177
|
- app/packs/src/decidim/budgets/admin/projects.js
|
178
|
+
- app/packs/src/decidim/budgets/budgetSummaryBackdrop.js
|
177
179
|
- app/packs/src/decidim/budgets/exit_handler.js
|
178
180
|
- app/packs/src/decidim/budgets/progressFixed.js
|
179
181
|
- app/packs/src/decidim/budgets/projects.js
|
@@ -184,8 +186,6 @@ files:
|
|
184
186
|
- app/presenters/decidim/budgets/admin_log/project_presenter.rb
|
185
187
|
- app/presenters/decidim/budgets/project_presenter.rb
|
186
188
|
- app/queries/decidim/budgets/filtered_projects.rb
|
187
|
-
- app/queries/decidim/budgets/metrics/budget_followers_metric_measure.rb
|
188
|
-
- app/queries/decidim/budgets/metrics/budget_participants_metric_measure.rb
|
189
189
|
- app/serializers/decidim/budgets/download_your_data_budgets_order_serializer.rb
|
190
190
|
- app/services/decidim/budgets/order_reminder_generator.rb
|
191
191
|
- app/views/decidim/budgets/admin/budgets/_actions.html.erb
|
@@ -224,8 +224,6 @@ files:
|
|
224
224
|
- app/views/decidim/budgets/projects/_exit_modal.html.erb
|
225
225
|
- app/views/decidim/budgets/projects/_linked_projects.html.erb
|
226
226
|
- app/views/decidim/budgets/projects/_order.html.erb
|
227
|
-
- app/views/decidim/budgets/projects/_order_progress_progressbar_marks_right.html.erb
|
228
|
-
- app/views/decidim/budgets/projects/_order_progress_summary_content.html.erb
|
229
227
|
- app/views/decidim/budgets/projects/_order_total_budget.html.erb
|
230
228
|
- app/views/decidim/budgets/projects/_project.html.erb
|
231
229
|
- app/views/decidim/budgets/projects/_project_budget_button.html.erb
|
@@ -234,6 +232,12 @@ files:
|
|
234
232
|
- app/views/decidim/budgets/projects/_projects_list.html.erb
|
235
233
|
- app/views/decidim/budgets/projects/index.html.erb
|
236
234
|
- app/views/decidim/budgets/projects/index.js.erb
|
235
|
+
- app/views/decidim/budgets/projects/order_progress_summary/_content.html.erb
|
236
|
+
- app/views/decidim/budgets/projects/order_progress_summary/_content_responsive.html.erb
|
237
|
+
- app/views/decidim/budgets/projects/order_progress_summary/_progress_box.html.erb
|
238
|
+
- app/views/decidim/budgets/projects/order_progress_summary/_progress_box_buttons.html.erb
|
239
|
+
- app/views/decidim/budgets/projects/order_progress_summary/_progress_box_sticky.html.erb
|
240
|
+
- app/views/decidim/budgets/projects/order_progress_summary/_progressbar_marks_right.html.erb
|
237
241
|
- app/views/decidim/budgets/projects/show.html.erb
|
238
242
|
- app/views/decidim/budgets/vote_reminder_mailer/vote_reminder.html.erb
|
239
243
|
- config/assets.rb
|
@@ -342,6 +346,7 @@ files:
|
|
342
346
|
- db/migrate/20220428072638_add_geolocalization_fields_to_projects.rb
|
343
347
|
- db/migrate/20240828103724_add_deleted_at_to_decidim_budgets_budgets.rb
|
344
348
|
- db/migrate/20240916135141_add_deleted_at_to_decidim_budgets_projects.rb
|
349
|
+
- db/migrate/20250912110212_move_voting_rules_to_radio_buttons.rb
|
345
350
|
- decidim-budgets.gemspec
|
346
351
|
- lib/decidim/api/budget_type.rb
|
347
352
|
- lib/decidim/api/budgets_type.rb
|
@@ -350,6 +355,7 @@ files:
|
|
350
355
|
- lib/decidim/budgets/admin.rb
|
351
356
|
- lib/decidim/budgets/admin_engine.rb
|
352
357
|
- lib/decidim/budgets/api.rb
|
358
|
+
- lib/decidim/budgets/budget_order_pdf.rb
|
353
359
|
- lib/decidim/budgets/component.rb
|
354
360
|
- lib/decidim/budgets/engine.rb
|
355
361
|
- lib/decidim/budgets/project_serializer.rb
|
@@ -1,32 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Decidim
|
4
|
-
module Budgets
|
5
|
-
module Metrics
|
6
|
-
# Searches for unique Users following the next objects
|
7
|
-
# - Budgets
|
8
|
-
class BudgetFollowersMetricMeasure < Decidim::MetricMeasure
|
9
|
-
def valid?
|
10
|
-
super && @resource.is_a?(Decidim::Component)
|
11
|
-
end
|
12
|
-
|
13
|
-
def calculate
|
14
|
-
budgets = Decidim::Budgets::Budget.where(component: @resource)
|
15
|
-
projects = Decidim::Budgets::Project.where(budget: budgets)
|
16
|
-
|
17
|
-
budgets_followers = Decidim::Follow.where(followable: projects).joins(:user)
|
18
|
-
.where(decidim_follows: { created_at: ..end_time })
|
19
|
-
cumulative_users = budgets_followers.pluck(:decidim_user_id)
|
20
|
-
|
21
|
-
budgets_followers = budgets_followers.where(decidim_follows: { created_at: start_time.. })
|
22
|
-
quantity_users = budgets_followers.pluck(:decidim_user_id)
|
23
|
-
|
24
|
-
{
|
25
|
-
cumulative_users: cumulative_users.uniq,
|
26
|
-
quantity_users: quantity_users.uniq
|
27
|
-
}
|
28
|
-
end
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|
32
|
-
end
|
@@ -1,27 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Decidim
|
4
|
-
module Budgets
|
5
|
-
module Metrics
|
6
|
-
# Searches for Participants in the following actions
|
7
|
-
# - Vote a participatory budgeting project (Budgets)
|
8
|
-
class BudgetParticipantsMetricMeasure < Decidim::MetricMeasure
|
9
|
-
def valid?
|
10
|
-
super && @resource.is_a?(Decidim::Component)
|
11
|
-
end
|
12
|
-
|
13
|
-
def calculate
|
14
|
-
budgets = Decidim::Budgets::Budget.where(component: @resource)
|
15
|
-
orders = Decidim::Budgets::Order.where(budget: budgets)
|
16
|
-
.finished
|
17
|
-
.where(decidim_budgets_orders: { checked_out_at: ..end_time })
|
18
|
-
|
19
|
-
{
|
20
|
-
cumulative_users: orders.pluck(:decidim_user_id),
|
21
|
-
quantity_users: orders.where(decidim_budgets_orders: { checked_out_at: start_time.. }).pluck(:decidim_user_id)
|
22
|
-
}
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
26
|
-
end
|
27
|
-
end
|
@@ -1,122 +0,0 @@
|
|
1
|
-
<div data-order-progress-responsive="<%= responsive.inspect %>" class="budget-summary__content">
|
2
|
-
<div class="budget-summary__progressbox" data-current-allocation="<%= current_order ? current_order.total : 0 %>">
|
3
|
-
<% if include_heading %>
|
4
|
-
<% if current_order_checked_out? %>
|
5
|
-
<%= t("title", scope: "decidim.budgets.projects.budget_summary.checked_out") %>
|
6
|
-
<div class="budget-summary__content__header">
|
7
|
-
<span class="budget-summary__content__header--title">
|
8
|
-
<%= t("name", scope: "decidim.components.budgets") %>
|
9
|
-
</span>
|
10
|
-
/
|
11
|
-
<%= translated_attribute(budget.title) %>
|
12
|
-
<p class="budget-summary__content__header--description">
|
13
|
-
<%= t("description", scope: "decidim.budgets.projects.budget_summary.checked_out") %>
|
14
|
-
</p>
|
15
|
-
</div>
|
16
|
-
<% else %>
|
17
|
-
<p class="budget-summary__progressbox--checked_out">
|
18
|
-
<%= current_rule_description %>
|
19
|
-
</p>
|
20
|
-
<% end %>
|
21
|
-
<% end %>
|
22
|
-
<div class="budget-summary__progressbar">
|
23
|
-
<div class="budget-progress" role="progressbar" aria-label="<%= t("budget", scope: "decidim.budgets.projects.order_progress") %>" aria-valuenow="<%= current_order_budget_percent %>" aria-valuetext="<%= current_order_budget_percent %> %" aria-valuemin="0" aria-valuemax="100">
|
24
|
-
<div class="budget-summary__progressbar--minimum" style="width: <%= current_order_budget_percent_minimum %>%">
|
25
|
-
</div>
|
26
|
-
<div class="budget-summary__progressbar--meter bg-success" style="width: <%= current_order_budget_percent %>%"> </div>
|
27
|
-
</div>
|
28
|
-
<div class="budget-summary__progressbar-marks">
|
29
|
-
<span class="budget-summary__progressbar-legend">
|
30
|
-
<strong id="order-total-budget<%= "-responsive" if responsive %>" class="budget-summary__progressbar-legend-strong">
|
31
|
-
<%= render partial: "decidim/budgets/projects/order_total_budget" %>
|
32
|
-
</strong>
|
33
|
-
<%= t("assigned", scope: "decidim.budgets.projects.order_progress") %>
|
34
|
-
</span>
|
35
|
-
<% if current_order.minimum_budget > 0 %>
|
36
|
-
<span class="budget-summary__progressbar-legend budget-summary__progressbar-marks_center">
|
37
|
-
<strong class="budget-summary__progressbar-legend-strong">
|
38
|
-
<%= budget_to_currency(current_order.minimum_budget) %>
|
39
|
-
</strong>
|
40
|
-
<%= t("minimum", scope: "decidim.budgets.projects.order_progress") %>
|
41
|
-
</span>
|
42
|
-
<% end %>
|
43
|
-
<%= render partial: "decidim/budgets/projects/order_progress_progressbar_marks_right" %>
|
44
|
-
</div>
|
45
|
-
</div>
|
46
|
-
</div>
|
47
|
-
<div class="budget-summary__progressbox-buttons layout-aside__ctas-buttons" data-sticky-buttons>
|
48
|
-
<% if !current_order_checked_out? && voting_open? %>
|
49
|
-
<button class="button button__secondary button__lg w-full" data-dialog-open="budget-confirm" <%= budget_confirm_disabled_attr %>>
|
50
|
-
<%= t("vote", scope: "decidim.budgets.projects.budget_summary") %>
|
51
|
-
<%= icon "check-line" %>
|
52
|
-
</button>
|
53
|
-
<% end %>
|
54
|
-
<% if include_heading && current_order_checked_out? %>
|
55
|
-
<%= link_to budget_order_path(return_to: "budget"), method: :delete, class: "button button__lg button__secondary cancel-order w-full", data: { confirm: t("are_you_sure", scope: "decidim.budgets.projects.budget_confirm") } do %>
|
56
|
-
<span><%= t("cancel_order", scope: "decidim.budgets.projects.budget_summary") %></span>
|
57
|
-
<%= icon "delete-bin-line" %>
|
58
|
-
<% end %>
|
59
|
-
<% end %>
|
60
|
-
</div>
|
61
|
-
<div class="budget-summary__button-modal">
|
62
|
-
<button type="button" data-dialog-open="budget-modal-info" aria-haspopup="dialog" tabindex="0" class="button button__text button__xs underline font-bold">
|
63
|
-
<%= t("more_information", scope: "decidim.budgets.budget_information_modal") %>
|
64
|
-
</button>
|
65
|
-
</div>
|
66
|
-
<div class="w-screen max-w-screen progressbox-fixed-wrapper" data-progressbox-fixed>
|
67
|
-
<div class="gap-0 layout-item py-4 items-center budget-summary__progressbar">
|
68
|
-
<div class="budget-summary__progressbox layout-item__main">
|
69
|
-
<div class="budget-progress relative" role="progressbar" aria-valuenow="<%= current_order_budget_percent %>" aria-valuetext="<%= current_order_budget_percent %>%" aria-valuemin="0" aria-valuemax="100">
|
70
|
-
<div class="budget-summary__progressbar--minimum" style="width: <%= current_order_budget_percent_minimum %>%">
|
71
|
-
</div>
|
72
|
-
<div class="budget-summary__progressbar--meter bg-success" style="width: <%= current_order_budget_percent %>%">
|
73
|
-
</div>
|
74
|
-
</div>
|
75
|
-
<div class="budget-summary__progressbar-marks">
|
76
|
-
<span class="budget-summary__progressbar-legend" style="width: <%= current_order_budget_percent_minimum %>%;">
|
77
|
-
<%= t("assigned", scope: "decidim.budgets.projects.order_progress") %>
|
78
|
-
<strong id="order-total-budget-sticky<%= "-responsive" if responsive %>" class="budget-summary__progressbar-legend-strong">
|
79
|
-
<%= render partial: "decidim/budgets/projects/order_total_budget" %>
|
80
|
-
</strong>
|
81
|
-
</span>
|
82
|
-
<% if current_order.minimum_budget > 0 %>
|
83
|
-
<span class="budget-summary__progressbar-legend budget-summary__progressbar-marks_center">
|
84
|
-
<%= t("minimum", scope: "decidim.budgets.projects.order_progress") %>
|
85
|
-
<strong class="budget-summary__progressbar-legend-strong">
|
86
|
-
<%= budget_to_currency(current_order.minimum_budget) %>
|
87
|
-
</strong>
|
88
|
-
</span>
|
89
|
-
<% end %>
|
90
|
-
<%= render partial: "decidim/budgets/projects/order_progress_progressbar_marks_right" %>
|
91
|
-
</div>
|
92
|
-
</div>
|
93
|
-
<div class="layout-item__aside budget-summary__progressbox-buttons hidden lg:block">
|
94
|
-
<% if !current_order_checked_out? && voting_open? %>
|
95
|
-
<button class="button button__secondary button__lg mt-2 md:mt-0 w-full" data-dialog-open="budget-confirm" <%= budget_confirm_disabled_attr %>>
|
96
|
-
<span>
|
97
|
-
<%= t("vote", scope: "decidim.budgets.projects.budget_summary") %>
|
98
|
-
</span>
|
99
|
-
<%= icon "check-line" %>
|
100
|
-
</button>
|
101
|
-
<% end %>
|
102
|
-
<% if include_heading && current_order_checked_out? %>
|
103
|
-
<%= link_to budget_order_path(return_to: "budget"), method: :delete, class: "button button__lg button__secondary cancel-order w-full mt-2 md:mt-0", data: { confirm: t("are_you_sure", scope: "decidim.budgets.projects.budget_confirm") } do %>
|
104
|
-
<span><%= t("cancel_order", scope: "decidim.budgets.projects.budget_summary") %></span>
|
105
|
-
<%= icon "delete-bin-line" %>
|
106
|
-
<% end %>
|
107
|
-
<% end %>
|
108
|
-
</div>
|
109
|
-
</div>
|
110
|
-
</div>
|
111
|
-
</div>
|
112
|
-
|
113
|
-
<div class="budget-summary__button-dropdown">
|
114
|
-
<button id="dropdown-trigger-button-dropdown" data-component="dropdown" data-target="dropdown-menu-button-dropdown" class="budget-summary__button-dropdown_text">
|
115
|
-
<%= t("more_information", scope: "decidim.budgets.budget_information_modal") %>
|
116
|
-
<%= icon "arrow-down-s-line" %>
|
117
|
-
<%= icon "arrow-up-s-line" %>
|
118
|
-
</button>
|
119
|
-
<p id="dropdown-menu-button-dropdown">
|
120
|
-
<%= cell("decidim/budgets/budget_information_modal", @budget).call(:more_information) %>
|
121
|
-
</p>
|
122
|
-
</div>
|