decidim-budgets 0.0.6 → 0.0.7
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/controllers/decidim/budgets/admin/projects_controller.rb +1 -1
- data/app/controllers/decidim/budgets/line_items_controller.rb +21 -15
- data/app/views/decidim/budgets/admin/projects/_form.html.erb +34 -24
- data/app/views/decidim/budgets/admin/projects/edit.html.erb +3 -5
- data/app/views/decidim/budgets/admin/projects/index.html.erb +52 -34
- data/app/views/decidim/budgets/admin/projects/new.html.erb +4 -5
- data/app/views/decidim/budgets/projects/_filters.html.erb +1 -1
- data/config/i18n-tasks.yml +1 -0
- data/config/locales/ca.yml +5 -0
- data/config/locales/en.yml +5 -0
- data/config/locales/es.yml +5 -0
- data/config/locales/eu.yml +27 -0
- metadata +13 -13
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: '034088ae5b466ef853b3bf717793131d2a2be14f'
|
4
|
+
data.tar.gz: bf4a366848416446c2722cccf40e97770c774138
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c22063bcda419c7c30a4f40984d76eeee36f63fd77dc238c39d66d2bf97c800fc4e7703b88e56d7d95d46de7dd824fffed816212838c7886054eef78580504b0
|
7
|
+
data.tar.gz: 228cd378ba5ed440f4f2355f227c63a19d6435a3795d897be6e6282e72729b747d70bb7b04cf6f6dfd16edd15147650e6869f448f4bbcef8b0dff8a902a124e7
|
@@ -11,26 +11,32 @@ module Decidim
|
|
11
11
|
def create
|
12
12
|
authorize_action! "vote"
|
13
13
|
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
14
|
+
respond_to do |format|
|
15
|
+
AddLineItem.call(current_order, project, current_user) do
|
16
|
+
on(:ok) do |order|
|
17
|
+
self.current_order = order
|
18
|
+
format.html { redirect_to :back }
|
19
|
+
format.js { render "update_budget" }
|
20
|
+
end
|
21
|
+
|
22
|
+
on(:invalid) do
|
23
|
+
render nothing: true, status: 422
|
24
|
+
end
|
22
25
|
end
|
23
26
|
end
|
24
27
|
end
|
25
28
|
|
26
29
|
def destroy
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
30
|
+
respond_to do |format|
|
31
|
+
RemoveLineItem.call(current_order, project) do
|
32
|
+
on(:ok) do |_order|
|
33
|
+
format.html { redirect_to :back }
|
34
|
+
format.js { render "update_budget" }
|
35
|
+
end
|
36
|
+
|
37
|
+
on(:invalid) do
|
38
|
+
render nothing: true, status: 422
|
39
|
+
end
|
34
40
|
end
|
35
41
|
end
|
36
42
|
end
|
@@ -1,29 +1,39 @@
|
|
1
|
-
<div class="
|
2
|
-
|
3
|
-
|
1
|
+
<div class="card">
|
2
|
+
<div class="card-divider">
|
3
|
+
<h2 class="card-title"><%= title %></h2>
|
4
|
+
</div>
|
4
5
|
|
5
|
-
<div class="
|
6
|
-
|
7
|
-
|
6
|
+
<div class="card-section">
|
7
|
+
<div class="row column" >
|
8
|
+
<%= form.translated :text_field, :title, autofocus: true %>
|
9
|
+
</div>
|
8
10
|
|
9
|
-
<div class="
|
10
|
-
|
11
|
-
</div>
|
11
|
+
<div class="row column" >
|
12
|
+
<%= form.translated :editor, :description %>
|
13
|
+
</div>
|
12
14
|
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
</div>
|
17
|
-
<% end %>
|
15
|
+
<div class="row column" >
|
16
|
+
<%= form.number_field :budget %>
|
17
|
+
</div>
|
18
18
|
|
19
|
-
|
20
|
-
|
21
|
-
|
19
|
+
<% if !current_participatory_process.scope %>
|
20
|
+
<div class="row column" >
|
21
|
+
<%= form.collection_select :decidim_scope_id, organization_scopes, :id, :name %>
|
22
|
+
</div>
|
23
|
+
<% end %>
|
22
24
|
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
25
|
+
<div class="row column" >
|
26
|
+
<%= form.categories_select :decidim_category_id, current_participatory_process.categories, include_blank: true, disable_parents: false %>
|
27
|
+
</div>
|
28
|
+
|
29
|
+
<div class="row column">
|
30
|
+
<% if @form.proposals %>
|
31
|
+
<%= form.select :proposal_ids,
|
32
|
+
@form.proposals,
|
33
|
+
{},
|
34
|
+
{ multiple: true, class: "chosen-select" }
|
35
|
+
%>
|
36
|
+
<% end %>
|
37
|
+
</div>
|
38
|
+
</div>
|
39
|
+
</div>
|
@@ -1,9 +1,7 @@
|
|
1
|
-
|
1
|
+
<%= decidim_form_for(@form, html: { class: "form edit_project" }) do |f| %>
|
2
|
+
<%= render partial: 'form', object: f, locals: { title: t('.title') } %>
|
2
3
|
|
3
|
-
|
4
|
-
<%= render partial: 'form', object: f %>
|
5
|
-
|
6
|
-
<div class="actions">
|
4
|
+
<div class="button--double form-general-submit">
|
7
5
|
<%= f.submit t(".update") %>
|
8
6
|
</div>
|
9
7
|
<% end %>
|
@@ -1,37 +1,55 @@
|
|
1
|
-
<
|
1
|
+
<div class="card">
|
2
|
+
<div class="card-divider">
|
3
|
+
<h2 class="card-title">
|
4
|
+
<%= t(".title") %>
|
5
|
+
<%= link_to t("actions.new", scope: "decidim.budgets", name: t("models.project.name", scope: "decidim.budgets.admin")), new_project_path, class: 'button tiny button--title' if can? :manage, current_feature %>
|
6
|
+
</h2>
|
7
|
+
</div>
|
2
8
|
|
3
|
-
<
|
4
|
-
|
5
|
-
|
6
|
-
|
9
|
+
<div class="card-section">
|
10
|
+
<div class="table-scroll">
|
11
|
+
<table class="table-list">
|
12
|
+
<thead>
|
13
|
+
<tr>
|
14
|
+
<th><%= t("models.project.fields.title", scope: "decidim.budgets") %></th>
|
15
|
+
<th class="center"><%= t("index.confirmed_orders_count") %></th>
|
16
|
+
<th class="actions"><%= t("actions.title", scope: "decidim.budgets") %></th>
|
17
|
+
</tr>
|
18
|
+
</thead>
|
19
|
+
<tbody>
|
20
|
+
<% projects.each do |project| %>
|
21
|
+
<tr data-id="<%= project.id %>">
|
22
|
+
<td>
|
23
|
+
<%= translated_attribute(project.title) %><br />
|
24
|
+
</td>
|
25
|
+
<td class='center'>
|
26
|
+
<%= project.confirmed_orders_count %>
|
27
|
+
</td>
|
28
|
+
<td class="table-list__actions">
|
29
|
+
<%= icon_link_to "eye", decidim_budgets.project_path(id: project, feature_id: current_feature, participatory_process_id: current_participatory_process), t("actions.preview", scope: "decidim.budgets"), target: :blank, class: "action-icon--preview" %>
|
7
30
|
|
8
|
-
|
9
|
-
|
10
|
-
|
31
|
+
<% if can? :update, current_feature %>
|
32
|
+
<%= icon_link_to "pencil", edit_project_path(project), t("actions.edit", scope: "decidim.budgets"), class: "action-icon--edit" %>
|
33
|
+
<% end %>
|
34
|
+
|
35
|
+
<% if can? :update, current_feature %>
|
36
|
+
<%= icon_link_to "paperclip", project_attachments_path(project), t("actions.attachments", scope: "decidim.budgets"), class: "action-icon--attachments" %>
|
37
|
+
<% end %>
|
11
38
|
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
<td class="actions">
|
30
|
-
<%= link_to t("actions.edit", scope: "decidim.budgets"), edit_project_path(project) if can? :update, current_feature %>
|
31
|
-
<%= link_to t("actions.attachments", scope: "decidim.budgets"), project_attachments_path(project) if can? :update, current_feature %>
|
32
|
-
<%= link_to t("actions.destroy", scope: "decidim.budgets"), project_path(project), method: :delete, class: "small alert button", data: { confirm: t("actions.confirm_destroy", scope: "decidim.budgets") } if can? :destroy, current_feature %>
|
33
|
-
</td>
|
34
|
-
</tr>
|
35
|
-
<% end %>
|
36
|
-
</tbody>
|
37
|
-
</table>
|
39
|
+
<% if can? :destroy, current_feature %>
|
40
|
+
<%= icon_link_to "circle-x", project_path(project), t("actions.destroy", scope: "decidim.budgets"), method: :delete, class: "action-icon--remove", data: { confirm: t("actions.confirm_destroy", scope: "decidim.budgets") } %>
|
41
|
+
<% end %>
|
42
|
+
</td>
|
43
|
+
</tr>
|
44
|
+
<% end %>
|
45
|
+
</tbody>
|
46
|
+
</table>
|
47
|
+
<%= paginate projects, theme: "decidim" %>
|
48
|
+
</div>
|
49
|
+
</div>
|
50
|
+
<div class="card-divider">
|
51
|
+
<strong><%= t ".finished_orders" %>: </strong><span><%= finished_orders.count %></span>
|
52
|
+
<span>|</span>
|
53
|
+
<strong><%= t ".pending_orders" %>: </strong><span><%= pending_orders.count %></span>
|
54
|
+
</div>
|
55
|
+
</div>
|
@@ -1,9 +1,8 @@
|
|
1
|
-
|
1
|
+
<%= decidim_form_for(@form, html: { class: "form new_project" }) do |f| %>
|
2
|
+
<%= render partial: 'form', object: f, locals: { title: t('.title') } %>
|
2
3
|
|
3
|
-
|
4
|
-
<%= render partial: 'form', object: f %>
|
5
|
-
|
6
|
-
<div class="actions">
|
4
|
+
<div class="button--double form-general-submit">
|
7
5
|
<%= f.submit t(".create") %>
|
8
6
|
</div>
|
9
7
|
<% end %>
|
8
|
+
|
@@ -17,7 +17,7 @@
|
|
17
17
|
<% end %>
|
18
18
|
|
19
19
|
<% if current_feature.categories.any? %>
|
20
|
-
<%= form.categories_select :category_id, current_feature.categories, legend_title: t('.category'), disable_parents: false, label: false,
|
20
|
+
<%= form.categories_select :category_id, current_feature.categories, legend_title: t('.category'), disable_parents: false, label: false, prompt: t('.category_prompt') %>
|
21
21
|
<% end %>
|
22
22
|
|
23
23
|
<%= form.hidden_field :random_seed %>
|
data/config/i18n-tasks.yml
CHANGED
data/config/locales/ca.yml
CHANGED
@@ -16,6 +16,7 @@ ca:
|
|
16
16
|
destroy: Esborrar
|
17
17
|
edit: Editar
|
18
18
|
new: Nou %{name}
|
19
|
+
preview: Previsualitzar
|
19
20
|
title: Accions
|
20
21
|
admin:
|
21
22
|
models:
|
@@ -71,6 +72,7 @@ ca:
|
|
71
72
|
other: "%{count} projectes"
|
72
73
|
filters:
|
73
74
|
category: Categoria
|
75
|
+
category_prompt: Selecciona una categoria
|
74
76
|
scopes: Àmbits
|
75
77
|
search: Cerca
|
76
78
|
filters_small_view:
|
@@ -118,6 +120,9 @@ ca:
|
|
118
120
|
destroy:
|
119
121
|
error: S'ha produït un error en cancel·lar el seu vot
|
120
122
|
success: El seu vot ha estat cancel·lat correctament
|
123
|
+
resource_links:
|
124
|
+
included_proposals:
|
125
|
+
project_proposals: 'Propostes incloses en aquest projecte:'
|
121
126
|
index:
|
122
127
|
confirmed_orders_count: Nombre de vots
|
123
128
|
total_budget: Pressupost total
|
data/config/locales/en.yml
CHANGED
@@ -17,6 +17,7 @@ en:
|
|
17
17
|
destroy: Delete
|
18
18
|
edit: Edit
|
19
19
|
new: New %{name}
|
20
|
+
preview: Preview
|
20
21
|
title: Actions
|
21
22
|
admin:
|
22
23
|
models:
|
@@ -78,6 +79,7 @@ en:
|
|
78
79
|
other: "%{count} projects"
|
79
80
|
filters:
|
80
81
|
category: Category
|
82
|
+
category_prompt: Select a category
|
81
83
|
scopes: Scopes
|
82
84
|
search: Search
|
83
85
|
filters_small_view:
|
@@ -125,6 +127,9 @@ en:
|
|
125
127
|
destroy:
|
126
128
|
error: An error ocurred while canceling your vote
|
127
129
|
success: Your vote has been canceled successfully
|
130
|
+
resource_links:
|
131
|
+
included_proposals:
|
132
|
+
project_proposals: 'Proposals included in this project:'
|
128
133
|
index:
|
129
134
|
confirmed_orders_count: Orders count
|
130
135
|
total_budget: Total budget
|
data/config/locales/es.yml
CHANGED
@@ -16,6 +16,7 @@ es:
|
|
16
16
|
destroy: Borrar
|
17
17
|
edit: Editar
|
18
18
|
new: Nuevo %{name}
|
19
|
+
preview: Previsualizar
|
19
20
|
title: Acciones
|
20
21
|
admin:
|
21
22
|
models:
|
@@ -71,6 +72,7 @@ es:
|
|
71
72
|
other: "%{count} proyectos"
|
72
73
|
filters:
|
73
74
|
category: Categoría
|
75
|
+
category_prompt: Selecciona una categoría
|
74
76
|
scopes: Ámbitos
|
75
77
|
search: Buscar
|
76
78
|
filters_small_view:
|
@@ -118,6 +120,9 @@ es:
|
|
118
120
|
destroy:
|
119
121
|
error: Ha habido un error al cancelar tu voto
|
120
122
|
success: Tu voto ha sido cancelado correctamente
|
123
|
+
resource_links:
|
124
|
+
included_proposals:
|
125
|
+
project_proposals: 'Propuestas incluidas en este proyecto:'
|
121
126
|
index:
|
122
127
|
confirmed_orders_count: Número de votos
|
123
128
|
total_budget: Presupuesto total
|
data/config/locales/eu.yml
CHANGED
@@ -16,6 +16,7 @@ eu:
|
|
16
16
|
destroy: Garbitu
|
17
17
|
edit: Editatu
|
18
18
|
new: '%{name} berria'
|
19
|
+
preview: Aurreikusi
|
19
20
|
title: Ekintzak
|
20
21
|
admin:
|
21
22
|
models:
|
@@ -31,6 +32,8 @@ eu:
|
|
31
32
|
title: Editatu proiektua
|
32
33
|
update: Eguneratu proiektua
|
33
34
|
index:
|
35
|
+
finished_orders: Emandako botoak
|
36
|
+
pending_orders: Emateke dauden botoak
|
34
37
|
title: Proiektuak
|
35
38
|
new:
|
36
39
|
create: Sortu proiektua
|
@@ -57,7 +60,9 @@ eu:
|
|
57
60
|
budget_summary:
|
58
61
|
are_you_sure: Ziur zaude zure botoa ezeztatu nahi duzula?
|
59
62
|
assigned: 'Esleituta:'
|
63
|
+
cancel_order: ezabatu ezazu botoa eta hasi berriro
|
60
64
|
checked_out:
|
65
|
+
description: 'Jada bozkatu duzu aurrekonturako. Iritziz aldatu baduzu, ezeztatu hemen: %{cancel_link}.'
|
61
66
|
title: Botoa zuzen bidali da
|
62
67
|
description: Zure aburuz, proiektuetako zeinei esleitu behar diegu aurrekontua? Gutxienez, %{minimum_budget} esleitu nahi dituzun proiektuei, eta bozkatu aurrekontua zehazteko.
|
63
68
|
title: Zure esku dago aurrekontua erabakitzea
|
@@ -67,10 +72,14 @@ eu:
|
|
67
72
|
other: "%{count} proiektu"
|
68
73
|
filters:
|
69
74
|
category: Kategoria
|
75
|
+
category_prompt: Aukeratu kategoria bat
|
70
76
|
scopes: Esparruak
|
71
77
|
search: Bilatu
|
72
78
|
filters_small_view:
|
79
|
+
close_modal: Itxi leihoa
|
80
|
+
filter: Iragazi
|
73
81
|
filter_by: 'Iragazi honen arabera:'
|
82
|
+
unfold: Zabaldu
|
74
83
|
order_progress:
|
75
84
|
vote: Bozkatu
|
76
85
|
order_selected_projects:
|
@@ -81,6 +90,9 @@ eu:
|
|
81
90
|
view: Ikusi
|
82
91
|
project:
|
83
92
|
add: Gehitu
|
93
|
+
count:
|
94
|
+
one: 1 sostengu
|
95
|
+
other: "%{count} sostengu"
|
84
96
|
remove: Kendu
|
85
97
|
project_budget_button:
|
86
98
|
add: Gehitu
|
@@ -90,7 +102,17 @@ eu:
|
|
90
102
|
view_all_projects: Ikusi proiektu guztiak
|
91
103
|
features:
|
92
104
|
budgets:
|
105
|
+
actions:
|
106
|
+
vote: Proiektuaren alde egin
|
93
107
|
name: Aurrekontuak
|
108
|
+
settings:
|
109
|
+
global:
|
110
|
+
comments_enabled: Iruzkinak gaituta
|
111
|
+
total_budget: Guztizko aurrekontua
|
112
|
+
vote_threshold_percent: Aurrekontuaren gutxieneko ehunekoa
|
113
|
+
step:
|
114
|
+
comments_blocked: Iruzkinak blokeatuta
|
115
|
+
votes_enabled: Botoak gaituta
|
94
116
|
orders:
|
95
117
|
checkout:
|
96
118
|
error: Errorea gertatu da zure botoa prozesatzean
|
@@ -98,4 +120,9 @@ eu:
|
|
98
120
|
destroy:
|
99
121
|
error: Errorea gertatu da zure botoa ezeztatzean
|
100
122
|
success: Zure botua zuzen ezeztatu da
|
123
|
+
resource_links:
|
124
|
+
included_proposals:
|
125
|
+
project_proposals: 'Proiektu honetan jasotako proposamenak:'
|
126
|
+
index:
|
127
|
+
confirmed_orders_count: Boto-kopurua
|
101
128
|
total_budget: Guztizko aurrekontua
|
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.0.
|
4
|
+
version: 0.0.7
|
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: 2017-
|
13
|
+
date: 2017-04-07 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: decidim-core
|
@@ -18,28 +18,28 @@ dependencies:
|
|
18
18
|
requirements:
|
19
19
|
- - '='
|
20
20
|
- !ruby/object:Gem::Version
|
21
|
-
version: 0.0.
|
21
|
+
version: 0.0.7
|
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.0.
|
28
|
+
version: 0.0.7
|
29
29
|
- !ruby/object:Gem::Dependency
|
30
30
|
name: decidim-comments
|
31
31
|
requirement: !ruby/object:Gem::Requirement
|
32
32
|
requirements:
|
33
33
|
- - '='
|
34
34
|
- !ruby/object:Gem::Version
|
35
|
-
version: 0.0.
|
35
|
+
version: 0.0.7
|
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.0.
|
42
|
+
version: 0.0.7
|
43
43
|
- !ruby/object:Gem::Dependency
|
44
44
|
name: rectify
|
45
45
|
requirement: !ruby/object:Gem::Requirement
|
@@ -88,42 +88,42 @@ dependencies:
|
|
88
88
|
requirements:
|
89
89
|
- - '='
|
90
90
|
- !ruby/object:Gem::Version
|
91
|
-
version: 0.0.
|
91
|
+
version: 0.0.7
|
92
92
|
type: :development
|
93
93
|
prerelease: false
|
94
94
|
version_requirements: !ruby/object:Gem::Requirement
|
95
95
|
requirements:
|
96
96
|
- - '='
|
97
97
|
- !ruby/object:Gem::Version
|
98
|
-
version: 0.0.
|
98
|
+
version: 0.0.7
|
99
99
|
- !ruby/object:Gem::Dependency
|
100
100
|
name: decidim-proposals
|
101
101
|
requirement: !ruby/object:Gem::Requirement
|
102
102
|
requirements:
|
103
103
|
- - '='
|
104
104
|
- !ruby/object:Gem::Version
|
105
|
-
version: 0.0.
|
105
|
+
version: 0.0.7
|
106
106
|
type: :development
|
107
107
|
prerelease: false
|
108
108
|
version_requirements: !ruby/object:Gem::Requirement
|
109
109
|
requirements:
|
110
110
|
- - '='
|
111
111
|
- !ruby/object:Gem::Version
|
112
|
-
version: 0.0.
|
112
|
+
version: 0.0.7
|
113
113
|
- !ruby/object:Gem::Dependency
|
114
114
|
name: decidim-admin
|
115
115
|
requirement: !ruby/object:Gem::Requirement
|
116
116
|
requirements:
|
117
117
|
- - '='
|
118
118
|
- !ruby/object:Gem::Version
|
119
|
-
version: 0.0.
|
119
|
+
version: 0.0.7
|
120
120
|
type: :development
|
121
121
|
prerelease: false
|
122
122
|
version_requirements: !ruby/object:Gem::Requirement
|
123
123
|
requirements:
|
124
124
|
- - '='
|
125
125
|
- !ruby/object:Gem::Version
|
126
|
-
version: 0.0.
|
126
|
+
version: 0.0.7
|
127
127
|
description: ''
|
128
128
|
email:
|
129
129
|
- josepjaume@gmail.com
|
@@ -226,7 +226,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
226
226
|
version: '0'
|
227
227
|
requirements: []
|
228
228
|
rubyforge_project:
|
229
|
-
rubygems_version: 2.6.
|
229
|
+
rubygems_version: 2.6.11
|
230
230
|
signing_key:
|
231
231
|
specification_version: 4
|
232
232
|
summary: A budgets component for decidim's participatory processes.
|