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.
Files changed (126) hide show
  1. checksums.yaml +4 -4
  2. data/app/cells/decidim/budgets/budget_list_item/show.erb +19 -9
  3. data/app/cells/decidim/budgets/budget_list_item/vote_action.erb +2 -2
  4. data/app/cells/decidim/budgets/budget_list_item_cell.rb +44 -10
  5. data/app/cells/decidim/budgets/budgets_list/card_list.erb +0 -2
  6. data/app/cells/decidim/budgets/budgets_list/main_list.erb +2 -2
  7. data/app/cells/decidim/budgets/budgets_list/show.erb +3 -3
  8. data/app/cells/decidim/budgets/budgets_list/voted.erb +12 -10
  9. data/app/cells/decidim/budgets/budgets_list_cell.rb +22 -0
  10. data/app/cells/decidim/budgets/project_budget_amount_cell.rb +14 -0
  11. data/app/cells/decidim/budgets/project_l/extra_data.erb +8 -2
  12. data/app/cells/decidim/budgets/project_l/metadata.erb +1 -1
  13. data/app/cells/decidim/budgets/project_l_cell.rb +2 -4
  14. data/app/cells/decidim/budgets/project_metadata_cell.rb +11 -19
  15. data/app/cells/decidim/budgets/project_selected_status_cell.rb +1 -11
  16. data/app/cells/decidim/budgets/project_vote_button/show.erb +5 -5
  17. data/app/cells/decidim/budgets/project_vote_button_cell.rb +14 -9
  18. data/app/cells/decidim/budgets/project_votes_count_cell.rb +8 -14
  19. data/app/commands/decidim/budgets/cancel_order.rb +5 -0
  20. data/app/controllers/decidim/budgets/admin/budgets_controller.rb +2 -2
  21. data/app/controllers/decidim/budgets/admin/projects_controller.rb +2 -2
  22. data/app/controllers/decidim/budgets/admin/proposals_imports_controller.rb +1 -1
  23. data/app/controllers/decidim/budgets/application_controller.rb +13 -1
  24. data/app/controllers/decidim/budgets/budgets_controller.rb +1 -3
  25. data/app/controllers/decidim/budgets/line_items_controller.rb +19 -0
  26. data/app/controllers/decidim/budgets/orders_controller.rb +20 -0
  27. data/app/controllers/decidim/budgets/projects_controller.rb +3 -1
  28. data/app/forms/decidim/budgets/admin/component_form.rb +4 -30
  29. data/app/helpers/decidim/budgets/application_helper.rb +1 -0
  30. data/app/helpers/decidim/budgets/projects_helper.rb +11 -7
  31. data/app/models/decidim/budgets/order.rb +2 -2
  32. data/app/packs/entrypoints/decidim_budgets.js +1 -0
  33. data/app/packs/src/decidim/budgets/admin/projects.js +2 -2
  34. data/app/packs/src/decidim/budgets/budgetSummaryBackdrop.js +41 -0
  35. data/app/packs/src/decidim/budgets/exit_handler.js +7 -2
  36. data/app/packs/src/decidim/budgets/progressFixed.js +1 -1
  37. data/app/packs/src/decidim/budgets/projects.js +1 -1
  38. data/app/packs/stylesheets/budgets.scss +57 -37
  39. data/app/permissions/decidim/budgets/permissions.rb +17 -13
  40. data/app/presenters/decidim/budgets/project_presenter.rb +2 -4
  41. data/app/views/decidim/budgets/admin/budgets/_actions.html.erb +65 -18
  42. data/app/views/decidim/budgets/admin/budgets/_budget-tr.html.erb +4 -4
  43. data/app/views/decidim/budgets/admin/budgets/_form.html.erb +1 -1
  44. data/app/views/decidim/budgets/admin/budgets/index.html.erb +14 -11
  45. data/app/views/decidim/budgets/admin/budgets/manage_trash.html.erb +2 -1
  46. data/app/views/decidim/budgets/admin/projects/_actions.html.erb +66 -22
  47. data/app/views/decidim/budgets/admin/projects/_bulk-actions.html.erb +15 -17
  48. data/app/views/decidim/budgets/admin/projects/_form.html.erb +1 -1
  49. data/app/views/decidim/budgets/admin/projects/_project-tr.html.erb +7 -7
  50. data/app/views/decidim/budgets/admin/projects/bulk_actions/_dropdown.html.erb +23 -30
  51. data/app/views/decidim/budgets/admin/projects/index.html.erb +2 -2
  52. data/app/views/decidim/budgets/admin/projects/manage_trash.html.erb +2 -1
  53. data/app/views/decidim/budgets/line_items/update_budget.js.erb +6 -5
  54. data/app/views/decidim/budgets/orders/status.html.erb +30 -30
  55. data/app/views/decidim/budgets/projects/_addition_selector.html.erb +1 -1
  56. data/app/views/decidim/budgets/projects/_budget_summary.html.erb +5 -1
  57. data/app/views/decidim/budgets/projects/_exit_modal.html.erb +1 -1
  58. data/app/views/decidim/budgets/projects/_project.html.erb +5 -1
  59. data/app/views/decidim/budgets/projects/_project_budget_button.html.erb +1 -9
  60. data/app/views/decidim/budgets/projects/_projects.html.erb +3 -1
  61. data/app/views/decidim/budgets/projects/index.html.erb +28 -6
  62. data/app/views/decidim/budgets/projects/order_progress_summary/_content.html.erb +30 -0
  63. data/app/views/decidim/budgets/projects/order_progress_summary/_content_responsive.html.erb +56 -0
  64. data/app/views/decidim/budgets/projects/order_progress_summary/_progress_box.html.erb +43 -0
  65. data/app/views/decidim/budgets/projects/order_progress_summary/_progress_box_buttons.html.erb +12 -0
  66. data/app/views/decidim/budgets/projects/order_progress_summary/_progress_box_sticky.html.erb +25 -0
  67. data/app/views/decidim/budgets/projects/show.html.erb +30 -17
  68. data/config/assets.rb +2 -2
  69. data/config/locales/ar.yml +0 -8
  70. data/config/locales/bg.yml +2 -18
  71. data/config/locales/ca-IT.yml +26 -14
  72. data/config/locales/ca.yml +26 -14
  73. data/config/locales/cs.yml +10 -18
  74. data/config/locales/de.yml +26 -14
  75. data/config/locales/el.yml +0 -7
  76. data/config/locales/en.yml +26 -14
  77. data/config/locales/es-MX.yml +26 -14
  78. data/config/locales/es-PY.yml +26 -14
  79. data/config/locales/es.yml +25 -13
  80. data/config/locales/eu.yml +26 -14
  81. data/config/locales/fi-plain.yml +26 -14
  82. data/config/locales/fi.yml +26 -14
  83. data/config/locales/fr-CA.yml +26 -14
  84. data/config/locales/fr.yml +26 -14
  85. data/config/locales/ga-IE.yml +0 -5
  86. data/config/locales/gl.yml +0 -7
  87. data/config/locales/hu.yml +2 -18
  88. data/config/locales/id-ID.yml +0 -7
  89. data/config/locales/is-IS.yml +0 -6
  90. data/config/locales/it.yml +0 -7
  91. data/config/locales/ja.yml +26 -14
  92. data/config/locales/kaa.yml +0 -1
  93. data/config/locales/ko.yml +0 -5
  94. data/config/locales/lb.yml +0 -7
  95. data/config/locales/lt.yml +2 -18
  96. data/config/locales/lv.yml +0 -7
  97. data/config/locales/nl.yml +0 -7
  98. data/config/locales/no.yml +0 -7
  99. data/config/locales/pl.yml +2 -18
  100. data/config/locales/pt-BR.yml +2 -18
  101. data/config/locales/pt.yml +0 -7
  102. data/config/locales/ro-RO.yml +7 -7
  103. data/config/locales/ru.yml +0 -7
  104. data/config/locales/sk.yml +0 -7
  105. data/config/locales/sq-AL.yml +0 -3
  106. data/config/locales/sv.yml +25 -13
  107. data/config/locales/tr-TR.yml +0 -8
  108. data/config/locales/uk.yml +0 -7
  109. data/config/locales/zh-CN.yml +0 -8
  110. data/config/locales/zh-TW.yml +0 -7
  111. data/db/migrate/20250912110212_move_voting_rules_to_radio_buttons.rb +22 -0
  112. data/lib/decidim/api/budget_type.rb +7 -0
  113. data/lib/decidim/api/project_type.rb +29 -1
  114. data/lib/decidim/budgets/budget_order_pdf.rb +73 -0
  115. data/lib/decidim/budgets/component.rb +26 -13
  116. data/lib/decidim/budgets/engine.rb +3 -11
  117. data/lib/decidim/budgets/seeds.rb +16 -5
  118. data/lib/decidim/budgets/test/factories.rb +3 -18
  119. data/lib/decidim/budgets/version.rb +1 -1
  120. data/lib/decidim/budgets/workflows/base.rb +0 -14
  121. data/lib/decidim/budgets.rb +1 -5
  122. metadata +22 -16
  123. data/app/queries/decidim/budgets/metrics/budget_followers_metric_measure.rb +0 -32
  124. data/app/queries/decidim/budgets/metrics/budget_participants_metric_measure.rb +0 -27
  125. data/app/views/decidim/budgets/projects/_order_progress_summary_content.html.erb +0 -122
  126. /data/app/views/decidim/budgets/projects/{_order_progress_progressbar_marks_right.html.erb → order_progress_summary/_progressbar_marks_right.html.erb} +0 -0
@@ -1,11 +1,3 @@
1
1
  <div id="project-<%= project.id %>-budget-button">
2
- <% if current_user.blank? %>
3
- <button class="button button__lg w-full button__secondary"
4
- data-dialog-open="loginModal"
5
- aria-label="<%= t(".added_descriptive", resource_name: translated_attribute(project.title)) %>">
6
- <%= t("add", scope: "decidim.budgets.projects.project_budget_button") %>
7
- </button>
8
- <% else %>
9
- <%= cell("decidim/budgets/project_vote_button", project, project_item: true) %>
10
- <% end %>
2
+ <%= cell("decidim/budgets/project_vote_button", project, project_item: true, button_extra_classes: "w-full") %>
11
3
  </div>
@@ -1,6 +1,8 @@
1
1
  <div class="budget__list--header">
2
2
  <div>
3
- <%= render partial: "addition_selector" %>
3
+ <% if voting_open? %>
4
+ <%= render partial: "addition_selector" %>
5
+ <% end %>
4
6
  </div>
5
7
 
6
8
  <div data-collection-sort-controls>
@@ -1,3 +1,9 @@
1
+ <% if @focus_mode %>
2
+ <% content_for :focus_mode, true %>
3
+ <% content_for :focus_mode_return_path, budgets_path %>
4
+ <% content_for :focus_mode_return_string, t("decidim.budgets.projects.back_to_budgets") %>
5
+ <% end %>
6
+
1
7
  <% add_decidim_meta_tags(
2
8
  description: translated_attribute(budget.description),
3
9
  title: t("decidim.components.pagination.page_title",
@@ -10,7 +16,10 @@
10
16
  <%= append_javascript_pack_tag "decidim_budgets" %>
11
17
  <%= append_stylesheet_pack_tag "decidim_budgets" %>
12
18
 
13
- <%= render partial: "budget_summary", locals: { include_heading: true, project_item: false, responsive: true } %>
19
+ <% if @focus_mode %>
20
+ <%= render partial: "budget_summary", locals: { responsive: true, focus_mode_origin: "index" } %>
21
+ <% end %>
22
+
14
23
  <%= cell("decidim/budgets/budget_information_modal", budget) %>
15
24
 
16
25
  <% content_for :aside do %>
@@ -27,9 +36,9 @@
27
36
  <%= render partial: "budget_excess" %>
28
37
  <%= render partial: "budget_confirm" %>
29
38
 
30
- <% unless voting_finished? %>
39
+ <% if @focus_mode && !voting_finished? %>
31
40
  <div class="budget-summary__container">
32
- <%= render partial: "budget_summary", locals: { include_heading: true, project_item: false, responsive: false } %>
41
+ <%= render partial: "budget_summary", locals: { responsive: false, focus_mode_origin: "index" } %>
33
42
  </div>
34
43
  <% end %>
35
44
 
@@ -43,9 +52,19 @@
43
52
 
44
53
  <% unless voting_finished? %>
45
54
  <section class="layout-main__section">
46
- <span class="text-xl font-semibold">
47
- <%= t("select_projects", scope: "decidim.budgets.projects") %>
48
- </span>
55
+ <div class="flex justify-between items-center mb-4">
56
+ <div class="flex items-center gap-2">
57
+ <span class="text-xl font-semibold">
58
+ <%= t("select_projects", scope: "decidim.budgets.projects") %>
59
+ </span>
60
+
61
+ <% if cell("decidim/budgets/budget_information_modal", budget).more_information.present? %>
62
+ <button type="button" data-dialog-open="budget-modal-info" aria-haspopup="dialog" tabindex="0" class="button button__icon button__text-secondary lg:hidden">
63
+ <%= icon "question-line" %>
64
+ </button>
65
+ <% end %>
66
+ </div>
67
+ </div>
49
68
  </section>
50
69
  <% end %>
51
70
 
@@ -56,4 +75,7 @@
56
75
  <%= cell("decidim/announcement", t("empty", scope: "decidim.budgets.projects")) %>
57
76
  <% end %>
58
77
 
78
+ <% if current_user&.ephemeral? %>
79
+ <div class="h-40 bg-transparent"></div>
80
+ <% end %>
59
81
  <% end %>
@@ -0,0 +1,30 @@
1
+ <div data-order-progress-responsive="false" class="budget-summary__content">
2
+ <%= render partial: "decidim/budgets/projects/order_progress_summary/progress_box" %>
3
+ <%= render partial: "decidim/budgets/projects/order_progress_summary/progress_box_buttons" %>
4
+
5
+ <div class="budget-summary__button-modal">
6
+ <button type="button" data-dialog-open="budget-modal-info" aria-haspopup="dialog" tabindex="0" class="button button__text button__xs underline font-bold">
7
+ <%= t("more_information", scope: "decidim.budgets.budget_information_modal") %>
8
+ </button>
9
+ </div>
10
+
11
+ <div class="w-screen max-w-screen progressbox-fixed-wrapper" data-progressbox-fixed>
12
+ <div class="gap-0 layout-item py-4 items-center budget-summary__progressbar">
13
+ <%= render partial: "decidim/budgets/projects/order_progress_summary/progress_box_sticky" %>
14
+
15
+ <div class="layout-item__aside budget-summary__progressbox-buttons hidden lg:block">
16
+ <% if !current_order_checked_out? && voting_open? %>
17
+ <button class="button button__secondary button__lg mt-2 md:mt-0 w-full" data-dialog-open="budget-confirm" <%= budget_confirm_disabled_attr %>>
18
+ <%= t("vote", scope: "decidim.budgets.projects.budget_summary") %>
19
+ </button>
20
+ <% end %>
21
+ <% if current_order_checked_out? %>
22
+ <%= 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 %>
23
+ <span><%= t("cancel_order", scope: "decidim.budgets.projects.budget_summary") %></span>
24
+ <%= icon "delete-bin-line" %>
25
+ <% end %>
26
+ <% end %>
27
+ </div>
28
+ </div>
29
+ </div>
30
+ </div>
@@ -0,0 +1,56 @@
1
+ <% focus_mode_index = local_assigns[:focus_mode_origin] == "index" %>
2
+ <% focus_mode_show = local_assigns[:focus_mode_origin] == "show" %>
3
+ <% start_voting_param = params[:start_voting] %>
4
+
5
+ <% show_vote_button = !current_order_checked_out? && voting_open? && current_order_can_be_checked_out? %>
6
+ <% show_hint = !show_vote_button && start_voting_param.present? %>
7
+
8
+ <div data-order-progress-responsive="true" class="bg-transparent">
9
+ <% if show_hint %>
10
+ <div id="progress-summary-backdrop" class="fixed hidden inset-0 z-40 bg-black/50"></div>
11
+ <% end %>
12
+
13
+ <div class="fixed bottom-0 left-0 z-50 flex flex-col w-full" data-controller="sticky-buttons">
14
+ <div class="budget-summary__content rounded-t-lg" data-progressbox-fixed>
15
+ <div class="flex items-center justify-between">
16
+ <%= render partial: "decidim/budgets/projects/order_progress_summary/progress_box" %>
17
+ <button
18
+ id="progress-summary-button"
19
+ data-controller="dropdown"
20
+ data-target="progress-summary-dropdown-menu"
21
+ data-open="<%= show_hint ? "true" : "false" %>"
22
+ aria-expanded="<%= show_hint ? "true" : "false" %>"
23
+ class="w-auto pr-0 cursor-pointer">
24
+ <%= icon "arrow-up-s-line" %>
25
+ <%= icon "arrow-down-s-line" %>
26
+ </button>
27
+ </div>
28
+ <div class="pt-5" id="progress-summary-dropdown-menu" aria-hidden="<%= show_hint ? "false" : "true" %>">
29
+ <ul class="list-disc">
30
+ <li>
31
+ <%= current_rule_description %>
32
+ </li>
33
+ </ul>
34
+ </div>
35
+ </div>
36
+
37
+ <% if focus_mode_show %>
38
+ <div class="p-4 bg-white">
39
+ <%= render partial: "decidim/budgets/projects/project_budget_button" %>
40
+ </div>
41
+ <% elsif focus_mode_index && show_vote_button %>
42
+ <div class="p-4 bg-white">
43
+ <button class="button button__secondary button__lg w-full" data-dialog-open="budget-confirm">
44
+ <%= t("vote", scope: "decidim.budgets.projects.budget_summary") %>
45
+ </button>
46
+ </div>
47
+ <% elsif focus_mode_index && current_order_checked_out? %>
48
+ <div class="p-4 bg-white">
49
+ <%= 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 %>
50
+ <span><%= t("cancel_order", scope: "decidim.budgets.projects.budget_summary") %></span>
51
+ <%= icon "delete-bin-line" %>
52
+ <% end %>
53
+ </div>
54
+ <% end %>
55
+ </div>
56
+ </div>
@@ -0,0 +1,43 @@
1
+ <div class="budget-summary__progressbox w-full" data-current-allocation="<%= current_order ? current_order.total : 0 %>">
2
+ <% if current_order_checked_out? %>
3
+ <%= t("title", scope: "decidim.budgets.projects.budget_summary.checked_out") %>
4
+ <div class="budget-summary__content__header">
5
+ <span class="budget-summary__content__header--title">
6
+ <%= t("name", scope: "decidim.components.budgets") %>
7
+ </span>
8
+ /
9
+ <%= translated_attribute(budget.title) %>
10
+ <p class="budget-summary__content__header--description">
11
+ <%= t("description", scope: "decidim.budgets.projects.budget_summary.checked_out") %>
12
+ </p>
13
+ </div>
14
+ <% else %>
15
+ <p class="budget-summary__progressbox--checked_out">
16
+ <%= current_rule_description %>
17
+ </p>
18
+ <% end %>
19
+ <div class="budget-summary__progressbar">
20
+ <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">
21
+ <div class="budget-summary__progressbar--minimum" style="width: <%= current_order_budget_percent_minimum %>%">
22
+ </div>
23
+ <div class="budget-summary__progressbar--meter bg-success" style="width: <%= current_order_budget_percent %>%"> </div>
24
+ </div>
25
+ <div class="budget-summary__progressbar-marks">
26
+ <span class="budget-summary__progressbar-legend">
27
+ <strong id="order-total-budget" class="budget-summary__progressbar-legend-strong">
28
+ <%= render partial: "decidim/budgets/projects/order_total_budget" %>
29
+ </strong>
30
+ <%= t("assigned", scope: "decidim.budgets.projects.order_progress") %>
31
+ </span>
32
+ <% if current_order.minimum_budget > 0 %>
33
+ <span class="budget-summary__progressbar-legend budget-summary__progressbar-marks_center">
34
+ <strong class="budget-summary__progressbar-legend-strong">
35
+ <%= budget_to_currency(current_order.minimum_budget) %>
36
+ </strong>
37
+ <%= t("minimum", scope: "decidim.budgets.projects.order_progress") %>
38
+ </span>
39
+ <% end %>
40
+ <%= render partial: "decidim/budgets/projects/order_progress_summary/progressbar_marks_right" %>
41
+ </div>
42
+ </div>
43
+ </div>
@@ -0,0 +1,12 @@
1
+ <div class="budget-summary__progressbox-buttons layout-aside__ctas-buttons" data-controller="sticky-buttons">
2
+ <% if !current_order_checked_out? && voting_open? %>
3
+ <button class="button button__secondary button__lg w-full" data-dialog-open="budget-confirm" <%= budget_confirm_disabled_attr %>>
4
+ <%= t("vote", scope: "decidim.budgets.projects.budget_summary") %>
5
+ </button>
6
+ <% elsif current_order_checked_out? %>
7
+ <%= 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 %>
8
+ <span><%= t("cancel_order", scope: "decidim.budgets.projects.budget_summary") %></span>
9
+ <%= icon "delete-bin-line" %>
10
+ <% end %>
11
+ <% end %>
12
+ </div>
@@ -0,0 +1,25 @@
1
+ <div class="budget-summary__progressbox layout-item__main">
2
+ <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">
3
+ <div class="budget-summary__progressbar--minimum" style="width: <%= current_order_budget_percent_minimum %>%">
4
+ </div>
5
+ <div class="budget-summary__progressbar--meter bg-success" style="width: <%= current_order_budget_percent %>%">
6
+ </div>
7
+ </div>
8
+ <div class="budget-summary__progressbar-marks">
9
+ <span class="budget-summary__progressbar-legend" style="width: <%= current_order_budget_percent_minimum %>%;">
10
+ <%= t("assigned", scope: "decidim.budgets.projects.order_progress") %>
11
+ <strong id="order-total-budget-sticky" class="budget-summary__progressbar-legend-strong">
12
+ <%= render partial: "decidim/budgets/projects/order_total_budget" %>
13
+ </strong>
14
+ </span>
15
+ <% if current_order.minimum_budget > 0 %>
16
+ <span class="budget-summary__progressbar-legend budget-summary__progressbar-marks_center">
17
+ <%= t("minimum", scope: "decidim.budgets.projects.order_progress") %>
18
+ <strong class="budget-summary__progressbar-legend-strong">
19
+ <%= budget_to_currency(current_order.minimum_budget) %>
20
+ </strong>
21
+ </span>
22
+ <% end %>
23
+ <%= render partial: "decidim/budgets/projects/order_progress_summary/progressbar_marks_right" %>
24
+ </div>
25
+ </div>
@@ -1,3 +1,8 @@
1
+ <% if @focus_mode %>
2
+ <% content_for :focus_mode, true %>
3
+ <% content_for :focus_mode_return_path, budget_projects_path(budget) %>
4
+ <% end %>
5
+
1
6
  <% add_decidim_meta_tags(
2
7
  title: translated_attribute(project.title),
3
8
  description: translated_attribute(project.description),
@@ -20,14 +25,6 @@ edit_link(
20
25
  <%= render partial: "exit_modal" %>
21
26
 
22
27
  <div id="project-item">
23
- <%= render partial: "budget_summary", locals: { include_heading: true, project_item: true, responsive: true } %>
24
- <% content_for :item_header do %>
25
- <% unless voting_finished? %>
26
- <%= render partial: "budget_summary", locals: { include_heading: true, project_item: true, responsive: false } %>
27
- <%= render partial: "budget_excess" %>
28
- <%= render partial: "budget_confirm" %>
29
- <% end %>
30
- <% end %>
31
28
  <%= render layout: "layouts/decidim/shared/layout_item", locals: { back_path: budget_projects_path(budget) } do %>
32
29
  <section class="layout-main__section layout-main__heading">
33
30
  <%= cell("decidim/budgets/budget_information_modal", budget) %>
@@ -38,12 +35,12 @@ edit_link(
38
35
  <%= render partial: "decidim/shared/static_map", locals: { icon_name: "projects", geolocalizable: project } %>
39
36
  </div>
40
37
  <% end %>
41
- <%= cell("decidim/budgets/project_selected_status", project, as_label: true) %>
38
+ <%= cell("decidim/budgets/project_selected_status", project) %>
42
39
 
43
40
  <div class="layout-author">
44
41
  <div class="relative flex items-center justify-center w-full">
45
42
  <div class="w-10/12 flex items-center gap-4">
46
- <h1 class="h1 decorator budget__definition-project__title editor-content">
43
+ <h1 class="h2 decorator">
47
44
  <%= decidim_sanitize translated_attribute project.title %>
48
45
  </h1>
49
46
  </div>
@@ -58,7 +55,7 @@ edit_link(
58
55
  </section>
59
56
  <section class="layout-main__section">
60
57
  <% if tabs.any? %>
61
- <div class="mt-8" data-component="accordion" data-multiselectable="false" data-collapsible="false">
58
+ <div class="mt-8" data-controller="accordion" data-multiselectable="false" data-collapsible="false">
62
59
  <ul class="tab-x-container">
63
60
  <% tabs.each_with_index do |tab, i| %>
64
61
  <li>
@@ -89,19 +86,31 @@ edit_link(
89
86
  </section>
90
87
 
91
88
  <% content_for :aside do %>
92
- <section class="layout-aside__section layout-aside__buttons">
93
- <% if voting_open? %>
94
- <%= render partial: "project_budget_button", locals: { project: } %>
95
- <% end %>
96
- </section>
97
89
  <section class="layout-aside__section">
98
90
  <span class="budget__definition-data__title">
99
91
  <%= t("budget", scope: "decidim.budgets.projects.show") %>
100
92
  </span>
101
93
  <div class="budget__definition-data__number">
102
- <%= budget_to_currency project.budget_amount %>
94
+ <%= budget_to_currency_with_html project.budget_amount %>
103
95
  </div>
104
96
  </section>
97
+
98
+ <% if show_votes_count? %>
99
+ <section class="layout-aside__section">
100
+ <span class="budget__definition-data__title">
101
+ <%= t("votes", scope: "decidim.budgets.projects.show") %>
102
+ </span>
103
+ <div class="budget__definition-data__number" data-spec-project-votes>
104
+ <%= cell "decidim/budgets/project_votes_count", project %>
105
+ </div>
106
+ </section>
107
+ <% end %>
108
+
109
+ <% if current_order_checked_out? && resource_added?(project) %>
110
+ <section class="mt-4">
111
+ <%= cell("decidim/budgets/project_voted_hint", project, class: "margin-left-1") %>
112
+ </section>
113
+ <% end %>
105
114
  <% end %>
106
115
  <% content_for :item_footer do %>
107
116
  <%= comments_for project, polymorphic: [project.budget] %>
@@ -110,4 +119,8 @@ edit_link(
110
119
  </ul>
111
120
  <% end %>
112
121
  <% end %>
122
+
123
+ <% if current_user&.ephemeral? %>
124
+ <div class="h-40 bg-transparent"></div>
125
+ <% end %>
113
126
  </div>
data/config/assets.rb CHANGED
@@ -2,8 +2,8 @@
2
2
 
3
3
  base_path = File.expand_path("..", __dir__)
4
4
 
5
- Decidim::Webpacker.register_path("#{base_path}/app/packs")
6
- Decidim::Webpacker.register_entrypoints(
5
+ Decidim::Shakapacker.register_path("#{base_path}/app/packs")
6
+ Decidim::Shakapacker.register_entrypoints(
7
7
  decidim_budgets: "#{base_path}/app/packs/entrypoints/decidim_budgets.js",
8
8
  decidim_budgets_admin: "#{base_path}/app/packs/entrypoints/decidim_budgets_admin.js"
9
9
  )
@@ -22,10 +22,7 @@ ar:
22
22
  decidim:
23
23
  budgets:
24
24
  actions:
25
- attachment_collections: المجلدات
26
- attachments: مرفقات
27
25
  edit: تعديل
28
- edit_projects: إدارة المشاريع
29
26
  import: استيراد مقترحات للمشاريع
30
27
  preview: معاينة
31
28
  title: أفعال
@@ -37,8 +34,6 @@ ar:
37
34
  exports:
38
35
  projects: المشاريع
39
36
  models:
40
- budget:
41
- name: ميزانية
42
37
  project:
43
38
  name: مشروع
44
39
  projects:
@@ -96,7 +91,6 @@ ar:
96
91
  ok: حسنا
97
92
  budget_summary:
98
93
  are_you_sure: هل أنت متأكد أنك تريد إلغاء تصويتك؟
99
- cancel_order: احذف صوتك وابدأ من جديد
100
94
  checked_out:
101
95
  title: اكتمال التصويت في الميزانية
102
96
  count:
@@ -133,7 +127,5 @@ ar:
133
127
  show_votes: إظهار الأصوات
134
128
  votes_choices:
135
129
  enabled: تم تمكين التصويت
136
- statistics:
137
- projects_count: مشاريع
138
130
  index:
139
131
  confirmed_orders_count: عدد الأصوات
@@ -35,10 +35,7 @@ bg:
35
35
  'true': Не избран за изпълнение
36
36
  budgets:
37
37
  actions:
38
- attachment_collections: Папки
39
- attachments: Прикачени файлове
40
38
  edit: Редактирай
41
- edit_projects: Обедини проекти
42
39
  import: Импортиране на предложения в проекти
43
40
  new_budget: Нов бюджет
44
41
  new_project: Нов проект
@@ -68,8 +65,6 @@ bg:
68
65
  exports:
69
66
  projects: Проекти
70
67
  models:
71
- budget:
72
- name: Бюджет
73
68
  project:
74
69
  name: Проект
75
70
  projects:
@@ -180,6 +175,8 @@ bg:
180
175
  order:
181
176
  status:
182
177
  title: Вашият глас е приет успешно
178
+ order_pdf:
179
+ title: Вашият глас е приет успешно.
183
180
  order_summary_mailer:
184
181
  order_summary:
185
182
  selected_projects: 'Избраните от Вас проекти са:'
@@ -203,7 +200,6 @@ bg:
203
200
  title: Максималният брой проекти е надвишен
204
201
  budget_summary:
205
202
  are_you_sure: Сигурен ли сте, че искате да отмените гласа си?
206
- cancel_order: изтрийте Вашия глас
207
203
  checked_out:
208
204
  description: Вие вече гласувахте бюджета. Ако сте променили решението си, можете да изтриете гласа си.
209
205
  title: Гласуването за бюджета приключи
@@ -229,18 +225,8 @@ bg:
229
225
  assigned: Възложен
230
226
  budget: Бюджет
231
227
  dynamic_help:
232
- keep_adding_projects: Продължете да добавяте проекти
233
228
  minimum_reached: Достигнахте минимума, за да можете да гласувате
234
- start_adding_projects: Започнете да добавяте проекти
235
229
  minimum: Минимум
236
- minimum_projects_rule:
237
- description: Изберете поне %{minimum_number} желани от Вас проекта и гласувайте, според предпочитанията си за дефиниране на бюджета.
238
- projects_rule:
239
- description: Изберете най-малко %{minimum_number}, но не повече от %{maximum_number} желани от Вас проекта и гласувайте, според предпочитанията си за дефиниране на бюджета.
240
- projects_rule_maximum_only:
241
- description: Изберете не повече от %{maximum_number} желани от Вас проекта и гласувайте, според предпочитанията си за дефиниране на бюджета.
242
- vote_threshold_percent_rule:
243
- description: Присъеденете поне %{minimum_budget} към желаните от вас проекти и гласувайте, според предпочитанията си за дефиниране на бюджета.
244
230
  orders:
245
231
  highest_cost: Най-висока стойност
246
232
  label: Подреждане на проектите по
@@ -265,7 +251,6 @@ bg:
265
251
  added: Добавено
266
252
  all: Всички
267
253
  projects_for: Проекти за %{name}
268
- select_projects: Изберете Проекти
269
254
  show:
270
255
  budget: Бюджет
271
256
  prompt: Изберете бюджет
@@ -342,6 +327,5 @@ bg:
342
327
  project_proposal: Предложения, включени в този проект
343
328
  statistics:
344
329
  orders_count: Подкрепа
345
- projects_count: Проекти
346
330
  index:
347
331
  confirmed_orders_count: Брой гласове
@@ -42,15 +42,15 @@ ca-IT:
42
42
  'true': No s'ha seleccionat per implementar
43
43
  taxonomies_part_of_contains:
44
44
  label: Taxonomia
45
+ tooltips:
46
+ deleted_projects_info: No podeu eliminar aquest projecte
45
47
  budgets:
46
48
  actions:
47
- attachment_collections: Carpetes
48
- attachments: Adjunts
49
49
  confirm_delete_budget: Segur que vols suprimir aquest pressupost?
50
50
  confirm_delete_project: Segur que vols eliminar aquest projecte?
51
51
  deleted_budgets_info: Els pressupostos eliminats es poden restaurar des de la paperera.
52
52
  edit: Editar
53
- edit_projects: Gestionar projectes
53
+ edit_projects: Afegir projectes
54
54
  import: Importa propostes a projectes
55
55
  new_budget: Afegir pressupost
56
56
  new_project: Afegir projecte
@@ -84,8 +84,6 @@ ca-IT:
84
84
  exports:
85
85
  projects: Projectes
86
86
  models:
87
- budget:
88
- name: Pressupost
89
87
  project:
90
88
  name: Projecte
91
89
  projects:
@@ -179,6 +177,7 @@ ca-IT:
179
177
  cancel_order:
180
178
  more_than_one: eliminar el teu vot a %{name} i començar de nou
181
179
  only_one: eliminar el teu vot i començar de nou.
180
+ completed: Completat
182
181
  count:
183
182
  one: "%{count} pressupost"
184
183
  other: "%{count} pressupostos"
@@ -186,6 +185,7 @@ ca-IT:
186
185
  finished_message: Has finalitzat el procés de votació. Gràcies per participar-hi!
187
186
  highlighted_cta: Votar a %{name}
188
187
  if_change_opinion: Si has canviat d'opinió, pots
188
+ incomplete: Incomplet
189
189
  orders:
190
190
  highest_cost: Cost més elevat
191
191
  label: Ordenar projectes per
@@ -193,6 +193,8 @@ ca-IT:
193
193
  random: Ordre aleatori
194
194
  progress: Acaba la votació
195
195
  remove_vote: Eliminar el vot
196
+ see_projects: Mostra els projectes
197
+ see_results: Veure els resultats
196
198
  show: Mostra els projectes
197
199
  vote: Vota
198
200
  voted_budgets: Pressupostos votats
@@ -223,6 +225,7 @@ ca-IT:
223
225
  pending_to_vote_budgets:
224
226
  one: Pots votar en un altre pressupost
225
227
  other: Pots votar en altres pressupostos
228
+ share_text: "Acabes de votar pels teus projectes favorits a: \"%{space_name}\"! 🎉 Pots seguir votant a: \"%{component_url}\""
226
229
  share_vote: Comparteix el teu vot
227
230
  title: El teu vot s'ha tramitat correctament
228
231
  view_votes:
@@ -231,12 +234,16 @@ ca-IT:
231
234
  votes_count:
232
235
  one: El teu vot a %{budget_name} ja s'ha registrat.
233
236
  other: El teus %{count} vots a %{budget_name} ja s'han registrat.
237
+ order_pdf:
238
+ text: 'Has votat a "%{space_name}", on has seleccionat els projectes següents:'
239
+ title: El teu vot s'ha acceptat correctament.
234
240
  order_summary_mailer:
235
241
  order_summary:
236
242
  selected_projects: 'Els projectes que has seleccionat són:'
237
243
  subject: Has votat a l'espai de participació %{space_name}
238
244
  voted_on_space: Has votat al pressupost %{budget_name} de l'espai de participació %{space_name}.
239
245
  projects:
246
+ back_to_budgets: Tornar als pressupostos
240
247
  budget_confirm:
241
248
  are_you_sure: Si canvies d'opinió, pots modificar el teu vot més tard.
242
249
  cancel: Cancel·lar
@@ -254,7 +261,7 @@ ca-IT:
254
261
  title: Màxim de projectes excedit
255
262
  budget_summary:
256
263
  are_you_sure: Segur que vols cancel·lar el teu vot?
257
- cancel_order: eliminar el teu vot i començar de nou
264
+ cancel_order: Esborra el teu vot
258
265
  checked_out:
259
266
  description: Ja has votat pel pressupost. Si has canviat d'idea, pots esborrar el teu vot.
260
267
  title: Vot pels pressupostos completat
@@ -280,18 +287,16 @@ ca-IT:
280
287
  assigned: Assignat
281
288
  budget: Pressupost
282
289
  dynamic_help:
283
- keep_adding_projects: Seguir afegint projectes
284
290
  minimum_reached: Has arribat al mínim per a poder votar
285
- start_adding_projects: Començar a afegir projectes
286
291
  minimum: Mínim
287
292
  minimum_projects_rule:
288
- description: Selecciona com a mínim %{minimum_number} projectes que vulguis i vota segons les teves preferències per a definir el pressupost.
293
+ description: "<b>Selecciona com a mínim %{minimum_number} projectes</b> que vulguis i vota segons les teves preferències."
289
294
  projects_rule:
290
- description: Selecciona entre %{minimum_number} i %{maximum_number} projectes que vulguis i vota segons les teves preferències per a definir el pressupost.
295
+ description: "<b>Selecciona entre %{minimum_number} i %{maximum_number} projectes</b> que vulguis i vota segons les teves preferències per a definir el pressupost."
291
296
  projects_rule_maximum_only:
292
- description: Selecciona fins a %{maximum_number} projectes que vulguis i vota segons les teves preferències per a definir el pressupost.
297
+ description: "<b>Selecciona fins a %{maximum_number} projectes</b> que vulguis i vota segons les teves preferències."
293
298
  vote_threshold_percent_rule:
294
- description: Assigna com a mínim %{minimum_budget} amb els projectes que vulguis i vota segons les teves preferències per a definir el pressupost.
299
+ description: "Selecciona els projectes que vulguis <b>fins com a mínim el %{minimum_budget} del total del pressupost</b> i vota segons les teves preferències."
295
300
  orders:
296
301
  highest_cost: Major cost
297
302
  label: Ordenar projectes per
@@ -316,9 +321,10 @@ ca-IT:
316
321
  added: Afegit
317
322
  all: Tots
318
323
  projects_for: Projectes per a %{name}
319
- select_projects: Selecciona projectes
324
+ select_projects: Afegeix projectes
320
325
  show:
321
326
  budget: Pressupost
327
+ votes: Vots
322
328
  prompt: Seleccionar pressupost
323
329
  vote_reminder_mailer:
324
330
  vote_reminder:
@@ -363,6 +369,11 @@ ca-IT:
363
369
  vote_selected_projects_maximum: Número màxim de projectes a seleccionar
364
370
  vote_selected_projects_minimum: Número màxim de projectes a seleccionar
365
371
  vote_threshold_percent: Percentatge del pressupost mínim per fer el vot
372
+ voting_rule: Normes per a la votació
373
+ voting_rule_choices:
374
+ minimum_projects: Número mínim de projectes a votar
375
+ selected_projects: Número mínim i màxim de projectes a votar
376
+ threshold_percent: Percentatge mínim del pressupost a invertir
366
377
  workflow: Workflow
367
378
  workflow_choices:
368
379
  all: 'Votar a tots: permet a les participants votar a tots els pressupostos.'
@@ -436,6 +447,7 @@ ca-IT:
436
447
  project_proposal: Propostes incloses en aquest projecte
437
448
  statistics:
438
449
  orders_count: Suports
439
- projects_count: Projectes
450
+ projects_count: Pressupostos
451
+ projects_count_tooltip: El número de pressupostos participatius i el total de vots emesos en aquests.
440
452
  index:
441
453
  confirmed_orders_count: Recompte de vots