decidim-budgets 0.20.1 → 0.23.1

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 (188) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +38 -3
  3. data/app/assets/images/decidim/budgets/icon.svg +1 -11
  4. data/app/assets/javascripts/decidim/budgets/projects.js.es6 +26 -4
  5. data/app/assets/stylesheets/decidim/budgets/budget/_budget-list.scss +152 -24
  6. data/app/cells/decidim/budgets/base_cell.rb +22 -0
  7. data/app/cells/decidim/budgets/budget_cell.rb +21 -0
  8. data/app/cells/decidim/budgets/budget_information_modal/show.erb +28 -0
  9. data/app/cells/decidim/budgets/budget_information_modal_cell.rb +22 -0
  10. data/app/cells/decidim/budgets/budget_list_item/show.erb +22 -0
  11. data/app/cells/decidim/budgets/budget_list_item_cell.rb +40 -0
  12. data/app/cells/decidim/budgets/budget_m/data.erb +12 -0
  13. data/app/cells/decidim/budgets/budget_m/footer.erb +5 -0
  14. data/app/cells/decidim/budgets/budget_m_cell.rb +16 -0
  15. data/app/cells/decidim/budgets/budgets_header/show.erb +7 -0
  16. data/app/cells/decidim/budgets/budgets_header_cell.rb +14 -0
  17. data/app/cells/decidim/budgets/budgets_list/card_list.erb +7 -0
  18. data/app/cells/decidim/budgets/budgets_list/highlighted.erb +11 -0
  19. data/app/cells/decidim/budgets/budgets_list/show.erb +20 -0
  20. data/app/cells/decidim/budgets/budgets_list/voted.erb +43 -0
  21. data/app/cells/decidim/budgets/budgets_list_cell.rb +39 -0
  22. data/app/cells/decidim/budgets/limit_announcement_cell.rb +52 -0
  23. data/app/cells/decidim/budgets/project_list_item/project_data.erb +19 -0
  24. data/app/cells/decidim/budgets/project_list_item/project_data_vote_button.erb +15 -0
  25. data/app/cells/decidim/budgets/project_list_item/project_image.erb +5 -0
  26. data/app/cells/decidim/budgets/project_list_item/project_text.erb +23 -0
  27. data/app/cells/decidim/budgets/project_list_item/show.erb +5 -0
  28. data/app/cells/decidim/budgets/project_list_item_cell.rb +66 -0
  29. data/app/cells/decidim/budgets/project_m/data.erb +3 -3
  30. data/app/cells/decidim/budgets/project_m/footer.erb +1 -1
  31. data/app/cells/decidim/budgets/project_m_cell.rb +4 -0
  32. data/app/cells/decidim/budgets/project_selected_status_cell.rb +28 -0
  33. data/app/cells/decidim/budgets/project_tags/show.erb +5 -0
  34. data/app/cells/decidim/budgets/project_tags_cell.rb +18 -0
  35. data/app/cells/decidim/budgets/project_voted_hint_cell.rb +33 -0
  36. data/app/cells/decidim/budgets/project_votes_count_cell.rb +44 -0
  37. data/app/commands/decidim/budgets/add_line_item.rb +7 -10
  38. data/app/commands/decidim/budgets/admin/create_budget.rb +48 -0
  39. data/app/commands/decidim/budgets/admin/create_project.rb +26 -11
  40. data/app/commands/decidim/budgets/admin/destroy_budget.rb +42 -0
  41. data/app/commands/decidim/budgets/admin/import_proposals_to_budgets.rb +26 -25
  42. data/app/commands/decidim/budgets/admin/update_budget.rb +48 -0
  43. data/app/commands/decidim/budgets/admin/update_project.rb +20 -2
  44. data/app/commands/decidim/budgets/checkout.rb +7 -6
  45. data/app/commands/decidim/budgets/remove_line_item.rb +3 -2
  46. data/app/controllers/concerns/decidim/budgets/needs_current_order.rb +18 -2
  47. data/app/controllers/concerns/decidim/budgets/orderable.rb +57 -0
  48. data/app/controllers/decidim/budgets/admin/application_controller.rb +10 -2
  49. data/app/controllers/decidim/budgets/admin/attachment_collections_controller.rb +1 -1
  50. data/app/controllers/decidim/budgets/admin/attachments_controller.rb +2 -2
  51. data/app/controllers/decidim/budgets/admin/budgets_controller.rb +82 -0
  52. data/app/controllers/decidim/budgets/admin/projects_controller.rb +15 -12
  53. data/app/controllers/decidim/budgets/admin/proposals_imports_controller.rb +10 -2
  54. data/app/controllers/decidim/budgets/application_controller.rb +23 -0
  55. data/app/controllers/decidim/budgets/budgets_controller.rb +24 -0
  56. data/app/controllers/decidim/budgets/line_items_controller.rb +10 -6
  57. data/app/controllers/decidim/budgets/orders_controller.rb +20 -6
  58. data/app/controllers/decidim/budgets/projects_controller.rb +28 -7
  59. data/app/forms/decidim/budgets/admin/budget_form.rb +39 -0
  60. data/app/forms/decidim/budgets/admin/component_form.rb +44 -0
  61. data/app/forms/decidim/budgets/admin/project_form.rb +25 -9
  62. data/app/forms/decidim/budgets/admin/project_import_proposals_form.rb +4 -0
  63. data/app/helpers/decidim/budgets/admin/application_helper.rb +13 -0
  64. data/app/helpers/decidim/budgets/application_helper.rb +11 -0
  65. data/app/helpers/decidim/budgets/projects_helper.rb +13 -0
  66. data/app/jobs/decidim/budgets/send_order_summary_job.rb +15 -0
  67. data/app/mailers/decidim/budgets/order_summary_mailer.rb +36 -0
  68. data/app/models/decidim/budgets/budget.rb +34 -0
  69. data/app/models/decidim/budgets/line_item.rb +4 -4
  70. data/app/models/decidim/budgets/order.rb +46 -16
  71. data/app/models/decidim/budgets/project.rb +37 -4
  72. data/app/permissions/decidim/budgets/admin/permissions.rb +23 -10
  73. data/app/permissions/decidim/budgets/permissions.rb +28 -6
  74. data/app/presenters/decidim/budgets/admin_log/budget_presenter.rb +42 -0
  75. data/app/queries/decidim/budgets/filtered_projects.rb +9 -1
  76. data/app/queries/decidim/budgets/metrics/budget_followers_metric_measure.rb +3 -2
  77. data/app/queries/decidim/budgets/metrics/budget_participants_metric_measure.rb +6 -5
  78. data/app/serializers/decidim/budgets/data_portability_budgets_order_serializer.rb +3 -2
  79. data/app/services/decidim/budgets/project_search.rb +13 -17
  80. data/app/types/decidim/budgets/budget_type.rb +24 -0
  81. data/app/types/decidim/budgets/budgets_type.rb +32 -0
  82. data/app/types/decidim/budgets/project_type.rb +26 -0
  83. data/app/views/decidim/budgets/admin/budgets/_form.html.erb +23 -0
  84. data/app/views/decidim/budgets/admin/budgets/edit.html.erb +7 -0
  85. data/app/views/decidim/budgets/admin/budgets/index.html.erb +58 -0
  86. data/app/views/decidim/budgets/admin/budgets/new.html.erb +7 -0
  87. data/app/views/decidim/budgets/admin/projects/_form.html.erb +15 -10
  88. data/app/views/decidim/budgets/admin/projects/edit.html.erb +2 -2
  89. data/app/views/decidim/budgets/admin/projects/index.html.erb +20 -7
  90. data/app/views/decidim/budgets/admin/projects/new.html.erb +2 -2
  91. data/app/views/decidim/budgets/admin/projects/proposals_picker.html.erb +1 -0
  92. data/app/views/decidim/budgets/admin/proposals_imports/new.html.erb +1 -1
  93. data/app/views/decidim/budgets/budgets/index.html.erb +5 -0
  94. data/app/views/decidim/budgets/order_summary_mailer/order_summary.html.erb +22 -0
  95. data/app/views/decidim/budgets/projects/_budget_confirm.html.erb +3 -3
  96. data/app/views/decidim/budgets/projects/_budget_summary.html.erb +26 -7
  97. data/app/views/decidim/budgets/projects/_filters.html.erb +15 -7
  98. data/app/views/decidim/budgets/projects/_linked_projects.html.erb +2 -2
  99. data/app/views/decidim/budgets/projects/_order_progress.html.erb +14 -18
  100. data/app/views/decidim/budgets/projects/_order_selected_projects.html.erb +3 -3
  101. data/app/views/decidim/budgets/projects/_project.html.erb +1 -57
  102. data/app/views/decidim/budgets/projects/_project_budget_button.html.erb +36 -7
  103. data/app/views/decidim/budgets/projects/_projects.html.erb +8 -1
  104. data/app/views/decidim/budgets/projects/index.html.erb +15 -7
  105. data/app/views/decidim/budgets/projects/index.js.erb +8 -0
  106. data/app/views/decidim/budgets/projects/show.html.erb +18 -11
  107. data/config/locales/am-ET.yml +1 -0
  108. data/config/locales/ar.yml +3 -17
  109. data/config/locales/bg-BG.yml +7 -0
  110. data/config/locales/bg.yml +6 -0
  111. data/config/locales/ca.yml +126 -12
  112. data/config/locales/cs.yml +145 -31
  113. data/config/locales/da-DK.yml +1 -0
  114. data/config/locales/da.yml +1 -0
  115. data/config/locales/de.yml +115 -12
  116. data/config/locales/el.yml +169 -0
  117. data/config/locales/en.yml +126 -12
  118. data/config/locales/eo.yml +1 -0
  119. data/config/locales/es-MX.yml +126 -12
  120. data/config/locales/es-PY.yml +126 -12
  121. data/config/locales/es.yml +126 -12
  122. data/config/locales/et-EE.yml +1 -0
  123. data/config/locales/et.yml +1 -0
  124. data/config/locales/eu.yml +4 -14
  125. data/config/locales/fi-plain.yml +127 -13
  126. data/config/locales/fi.yml +137 -23
  127. data/config/locales/fr-CA.yml +266 -0
  128. data/config/locales/fr.yml +125 -12
  129. data/config/locales/ga-IE.yml +1 -0
  130. data/config/locales/gl.yml +3 -13
  131. data/config/locales/hr-HR.yml +1 -0
  132. data/config/locales/hr.yml +1 -0
  133. data/config/locales/hu.yml +19 -13
  134. data/config/locales/id-ID.yml +3 -12
  135. data/config/locales/is-IS.yml +1 -12
  136. data/config/locales/is.yml +114 -0
  137. data/config/locales/it.yml +97 -13
  138. data/config/locales/ja-JP.yml +172 -0
  139. data/config/locales/ja.yml +262 -0
  140. data/config/locales/ko-KR.yml +1 -0
  141. data/config/locales/ko.yml +1 -0
  142. data/config/locales/lt-LT.yml +1 -0
  143. data/config/locales/lt.yml +1 -0
  144. data/config/locales/lv.yml +164 -0
  145. data/config/locales/mt-MT.yml +1 -0
  146. data/config/locales/mt.yml +1 -0
  147. data/config/locales/nl.yml +113 -13
  148. data/config/locales/no.yml +39 -13
  149. data/config/locales/om-ET.yml +1 -0
  150. data/config/locales/pl.yml +175 -62
  151. data/config/locales/pt-BR.yml +4 -14
  152. data/config/locales/pt.yml +63 -47
  153. data/config/locales/ro-RO.yml +172 -0
  154. data/config/locales/ru.yml +3 -15
  155. data/config/locales/sk-SK.yml +180 -0
  156. data/config/locales/sk.yml +166 -0
  157. data/config/locales/sl.yml +1 -0
  158. data/config/locales/so-SO.yml +1 -0
  159. data/config/locales/sr-CS.yml +27 -0
  160. data/config/locales/sv.yml +126 -12
  161. data/config/locales/ti-ER.yml +1 -0
  162. data/config/locales/tr-TR.yml +3 -13
  163. data/config/locales/uk.yml +3 -15
  164. data/config/locales/vi-VN.yml +1 -0
  165. data/config/locales/vi.yml +1 -0
  166. data/config/locales/zh-CN.yml +260 -0
  167. data/config/locales/zh-TW.yml +1 -0
  168. data/db/migrate/20200617105120_create_decidim_budgets.rb +15 -0
  169. data/db/migrate/20200629072626_rename_budget_to_budget_ammount.rb +7 -0
  170. data/db/migrate/20200629134013_add_budget_reference_to_project.rb +7 -0
  171. data/db/migrate/20200706142609_add_budget_reference_to_order.rb +7 -0
  172. data/db/migrate/20200714103519_move_budgets_to_own_model.rb +109 -0
  173. data/db/migrate/20200717140012_add_scope_to_budgets.rb +7 -0
  174. data/db/migrate/20200728075039_add_selected_at_to_project.rb +7 -0
  175. data/db/migrate/20200804175222_votes_enabled_to_votes_choices.rb +35 -0
  176. data/db/migrate/20200827154129_add_commentable_counter_cache_to_projects.rb +9 -0
  177. data/lib/decidim/budgets.rb +1 -0
  178. data/lib/decidim/budgets/admin_engine.rb +12 -5
  179. data/lib/decidim/budgets/component.rb +94 -38
  180. data/lib/decidim/budgets/engine.rb +8 -6
  181. data/lib/decidim/budgets/seeds/city.jpeg +0 -0
  182. data/lib/decidim/budgets/test/factories.rb +71 -9
  183. data/lib/decidim/budgets/version.rb +1 -1
  184. data/lib/decidim/budgets/workflows.rb +17 -0
  185. data/lib/decidim/budgets/workflows/all.rb +20 -0
  186. data/lib/decidim/budgets/workflows/base.rb +132 -0
  187. data/lib/decidim/budgets/workflows/one.rb +33 -0
  188. metadata +121 -16
@@ -11,9 +11,9 @@
11
11
  <ul class="card__content">
12
12
  <% current_order.projects.each do |project| %>
13
13
  <li class="budget-summary__selected-item">
14
- <%= link_to translated_attribute(project.title), project %>
14
+ <%= link_to translated_attribute(project.title), resource_locator([budget, project]).path %>
15
15
  <strong class="budget-summary__selected-number">
16
- <%= budget_to_currency project.budget %>
16
+ <%= budget_to_currency project.budget_amount %>
17
17
  </strong>
18
18
  </li>
19
19
  <% end %>
@@ -22,7 +22,7 @@
22
22
  <p class="text-center"><%= t(".are_you_sure") %></p>
23
23
  <div class="row">
24
24
  <div class="columns medium-8 medium-offset-2">
25
- <%= button_to t(".confirm"), checkout_order_path, class: "button expanded", data: { disable: true } %>
25
+ <%= button_to t(".confirm"), checkout_budget_order_path(budget), class: "button expanded", data: { disable: true } %>
26
26
  </div>
27
27
  </div>
28
28
  <div class="text-center">
@@ -1,21 +1,38 @@
1
- <div class="card budget-summary" data-progress-reference>
1
+ <div class="card budget-summary" data-progress-reference data-safe-url="<%= budget_url(budget) %>">
2
2
  <div class="card__content">
3
3
  <% if include_heading %>
4
4
  <% if current_order_checked_out? %>
5
- <h3 class="heading3"><%= t(".checked_out.title") %></h3>
5
+ <h3 class="heading3">
6
+ <%= t(".checked_out.title") %>
7
+ <% unless current_workflow.single? %>
8
+ <small><%= translated_attribute(budget.title) %></small>
9
+ <% end %>
10
+ </h3>
6
11
  <p>
7
- <%= raw t(".checked_out.description", cancel_link: link_to(t(".cancel_order"), order_path, method: :delete, class: "cancel-order", data: { confirm: t(".are_you_sure") })) %>
12
+ <%= raw t(".checked_out.description", cancel_link: link_to(t(".cancel_order"), budget_order_path(return_to: "budget"), method: :delete, class: "cancel-order", data: { confirm: t(".are_you_sure") })) %>
8
13
  </p>
9
14
  <% else %>
10
- <h3 class="heading3"><%= t(".title") %></h3>
11
- <p><%= t(".description", minimum_budget: budget_to_currency(current_order&.minimum_budget)) %></p>
15
+ <h3 class="heading3">
16
+ <% if current_workflow.single? %>
17
+ <%= t(".title") %>
18
+ <% else %>
19
+ <%= translated_attribute(budget.title) %>
20
+ <% end %>
21
+ </h3>
22
+ <p>
23
+ <% if current_order.minimum_projects_rule? %>
24
+ <%= t(".description_minimum_projects_rule", minimum_number: current_order.minimum_projects) %>
25
+ <% else %>
26
+ <%= t(".description", minimum_budget: budget_to_currency(current_order.minimum_budget)) %>
27
+ <% end %>
28
+ </p>
12
29
  <% end %>
13
30
  <% end %>
14
31
 
15
- <div class="budget-summary__total" data-total-budget="<%= component_settings.total_budget %>">
32
+ <div class="budget-summary__total" data-total-budget="<%= budget.total_budget %>">
16
33
  <span class="mini-title"><%= t("total_budget") %>
17
34
  <strong class="mini-title__strong mini-title__strong--highlight">
18
- <%= budget_to_currency(component_settings.total_budget) %>
35
+ <%= budget_to_currency(budget.total_budget) %>
19
36
  </strong>
20
37
  </span>
21
38
  </div>
@@ -28,6 +45,8 @@
28
45
  <%= render partial: "order_total_budget" %>
29
46
  </span>
30
47
  </div>
48
+
49
+ <%= cell("decidim/budgets/budget_information_modal", budget) %>
31
50
  </div>
32
51
 
33
52
  <%= render partial: "order_selected_projects" %>
@@ -1,22 +1,30 @@
1
+ <%= render partial: "decidim/shared/filter_form_help", locals: { skip_to_id: "projects" } %>
2
+
1
3
  <%= filter_form_for filter do |form| %>
2
4
  <div class="filters__section">
3
5
  <div class="filters__search">
4
6
  <div class="input-group">
5
- <%= form.search_field :search_text, label: false, class: "input-group-field", placeholder: t(".search") %>
7
+ <%= form.search_field :search_text, label: false, class: "input-group-field", placeholder: t(".search"), title: t(".search"), data: { disable_dynamic_change: true } %>
6
8
  <div class="input-group-button">
7
- <button type="submit" class="button button--muted">
8
- <%= icon "magnifying-glass", aria_label: t(".search") %>
9
+ <button type="submit" class="button" aria-controls="projects">
10
+ <%= icon "magnifying-glass", aria_label: t(".search"), role: "img", "aria-hidden": true %>
9
11
  </button>
10
12
  </div>
11
13
  </div>
12
14
  </div>
13
15
  </div>
14
16
 
15
- <% if current_participatory_space.has_subscopes? %>
16
- <%= scopes_picker_filter form, :scope_id %>
17
+ <% if voting_finished? %>
18
+ <%= form.check_boxes_tree :status, filter_status_values, legend_title: t(".status"), "aria-controls": "projects" %>
19
+ <% end %>
20
+
21
+ <% if current_component.has_subscopes? %>
22
+ <%= form.check_boxes_tree :scope_id, resource_filter_scope_values(budget.scope), legend_title: t(".scope"), "aria-controls": "projects" %>
17
23
  <% end %>
18
24
 
19
- <% if current_component.categories.any? %>
20
- <%= form.categories_select :category_id, current_component.categories, legend_title: t(".category"), disable_parents: false, label: false, prompt: t(".category_prompt") %>
25
+ <% if current_participatory_space.categories.any? %>
26
+ <%= form.check_boxes_tree :category_id, filter_categories_values, legend_title: t(".category"), "aria-controls": "projects" %>
21
27
  <% end %>
28
+
29
+ <%= hidden_field_tag :order, order, id: nil, class: "order_filter" %>
22
30
  <% end %>
@@ -1,8 +1,8 @@
1
1
  <div class="card card--action card--list">
2
2
  <% resources.each do |project| %>
3
3
  <div class="card--list__item">
4
- <%= icon "actions", class: "card--list__icon", remove_icon_class: true %>
5
- <%= link_to resource_locator(project).path, class: "card--list__text card__link card__link--block" do %>
4
+ <%= icon "actions", class: "card--list__icon", role: "img", "aria-hidden": true, remove_icon_class: true %>
5
+ <%= link_to resource_locator([project.budget, project]).path, class: "card--list__text card__link card__link--block" do %>
6
6
  <h5 class="card--list__heading">
7
7
  <%= translated_attribute(project.title) %>
8
8
  </h5>
@@ -1,35 +1,31 @@
1
1
  <div id="order-progress">
2
2
  <div class="budget-summary__progressbox" data-current-budget="<%= current_order ? current_order.total_budget : 0 %>">
3
- <div class="progress budget-progress" role="progressbar" tabindex="0" aria-valuenow="<%= current_order_budget_percent %>" aria-valuemin="<%= component_settings.vote_threshold_percent %>" aria-valuetext="<%= current_order_budget_percent %>%" aria-valuemax="100">
4
- <div class="progress-meter progress-meter--minimum" style="width: <%= 100 - current_order_budget_percent %>%"></div>
3
+ <div class="progress budget-progress" role="progressbar" aria-valuenow="<%= current_order_budget_percent %>" aria-valuetext="<%= current_order_budget_percent %>%" aria-valuemin="0" aria-valuemax="100">
4
+ <div class="progress-meter progress-meter--minimum" style="width: <%= current_order_budget_percent_minimum %>%"></div>
5
5
  <!--Change width and text dynamically.-->
6
6
  <div class="progress-meter budget-progress__meter" style="width: <%= current_order_budget_percent %>%">
7
- <p class="progress-meter-text progress-meter-text--right"><%= current_order_budget_percent %>%</p>
7
+ <span class="progress-meter-text progress-meter-text--right"><%= current_order_budget_percent %>%</span>
8
8
  </div>
9
9
  </div>
10
- <% unless current_order_checked_out? %>
11
- <% if current_order_can_be_checked_out? %>
12
- <button class="button small button--sc" data-toggle="budget-confirm"><%= t(".vote") %></button>
13
- <% else %>
14
- <button class="button small button--sc" data-toggle="budget-confirm" disabled><%= t(".vote") %></button>
15
- <% end %>
10
+ <% if !current_order_checked_out? && voting_open? %>
11
+ <button class="button small button--sc" data-toggle="budget-confirm" <%= budget_confirm_disabled_attr %>>
12
+ <%= t(".vote") %>
13
+ </button>
16
14
  <% end %>
17
15
  </div>
18
16
 
19
17
  <div class="progressbox-fixed-wrapper" data-progressbox-fixed>
20
18
  <div class="budget-summary__progressbox budget-summary__progressbox--fixed">
21
- <div class="progress budget-progress budget-progress--fixed" role="progressbar" tabindex="0" aria-valuenow="<%= current_order_budget_percent %>" aria-valuemin="<%= component_settings.vote_threshold_percent %>" aria-valuetext="<%= current_order_budget_percent %>%" aria-valuemax="100">
22
- <div class="progress-meter progress-meter--minimum" style="width: <%= 100 - current_order_budget_percent %>%"></div>
19
+ <div class="progress budget-progress budget-progress--fixed" role="progressbar" aria-valuenow="<%= current_order_budget_percent %>" aria-valuetext="<%= current_order_budget_percent %>%" aria-valuemin="0" aria-valuemax="100">
20
+ <div class="progress-meter progress-meter--minimum" style="width: <%= current_order_budget_percent_minimum %>%"></div>
23
21
  <div class="progress-meter budget-progress__meter" style="width: <%= current_order_budget_percent %>%">
24
- <p class="progress-meter-text progress-meter-text--right"><%= current_order_budget_percent %>%</p>
22
+ <span class="progress-meter-text progress-meter-text--right"><%= current_order_budget_percent %>%</span>
25
23
  </div>
26
24
  </div>
27
- <% unless current_order_checked_out? %>
28
- <% if current_order_can_be_checked_out? %>
29
- <button class="button small button--sc" data-toggle="budget-confirm"><%= t(".vote") %></button>
30
- <% else %>
31
- <button class="button small button--sc" data-toggle="budget-confirm" disabled><%= t(".vote") %></button>
32
- <% end %>
25
+ <% if !current_order_checked_out? && voting_open? %>
26
+ <button class="button small button--sc" data-toggle="budget-confirm" <%= budget_confirm_disabled_attr %>>
27
+ <%= t(".vote") %>
28
+ </button>
33
29
  <% end %>
34
30
  </div>
35
31
  </div>
@@ -9,12 +9,12 @@
9
9
  <ul class="budget-summary__selected-list">
10
10
  <% current_order.projects.each do |project| %>
11
11
  <li class="budget-summary__selected-item">
12
- <%= link_to translated_attribute(project.title), project %>
12
+ <%= link_to translated_attribute(project.title), resource_locator([budget, project]).path %>
13
13
  <strong class="budget-summary__selected-number">
14
- <%= budget_to_currency project.budget %>
14
+ <%= budget_to_currency project.budget_amount %>
15
15
  </strong>
16
16
  <% unless current_order_checked_out? %>
17
- <%= button_to order_line_item_path(project_id: project), method: :delete, remote: true, data: { disable: true }, form: { style: "display: inline" } do %>
17
+ <%= button_to budget_order_line_item_path(project_id: project), method: :delete, remote: true, data: { disable: true }, form: { style: "display: inline" } do %>
18
18
  <%= icon("trash", aria_label: t(".remove"), role: "img") %>
19
19
  <% end %>
20
20
  <% end %>
@@ -1,57 +1 @@
1
- <div id="project-<%= project.id %>-item" class="card--list__item">
2
- <div class="card--list__text">
3
- <div>
4
- <%= link_to project, class: "card__link" do %>
5
- <h5 class="card__title budget-list__title">
6
- <%= translated_attribute project.title %>
7
- </h5>
8
- <% end %>
9
- <%= cell "decidim/tags", project, context: { extra_classes: ["tags--project"] } %>
10
- </div>
11
- </div>
12
- <% if current_user.present? %>
13
- <% if current_order && current_order.projects.include?(project) %>
14
- <div class="card--list__data budget-list__data budget-list__data--added">
15
- <span class="card--list__data__number budget-list__number">
16
- <%= budget_to_currency(project.budget) %>
17
- </span>
18
- <%= action_authorized_button_to "vote", order_line_item_path(project_id: project), method: :delete, remote: true, data: { disable: true, budget: project.budget, "redirect-url": project_path(project) }, disabled: !current_settings.votes_enabled? || current_order_checked_out? || !current_participatory_space.can_participate?(current_user), class: "button tiny budget--list__action success" do %>
19
- <%= icon("check", class: "icon--small", aria_label: t(".remove"), role: "img") %>
20
- <% end %>
21
- <% if current_settings.show_votes? %>
22
- <div class="card__support" style="width: 7em">
23
- <span><%= t(".count", count: project.confirmed_orders_count) %></span>
24
- </div>
25
- <% end %>
26
- </div>
27
- <% else %>
28
- <div class="card--list__data budget-list__data">
29
- <span class="card--list__data__number budget-list__number">
30
- <%= budget_to_currency(project.budget) %>
31
- </span>
32
- <%= action_authorized_button_to "vote", order_line_item_path(project_id: project), method: :post, remote: true, data: { disable: true, budget: project.budget, add: true, "redirect-url": project_path(project) }, disabled: !current_settings.votes_enabled? || current_order_checked_out? || !current_participatory_space.can_participate?(current_user), class: "button tiny hollow budget--list__action" do %>
33
- <%= icon("check", class: "icon--small", aria_label: t(".add"), role: "img") %>
34
- <% end %>
35
- <% if current_settings.show_votes? %>
36
- <div class="card__support" style="width: 7em">
37
- <span><%= t(".count", count: project.confirmed_orders_count) %></span>
38
- </div>
39
- <% end %>
40
- </div>
41
- <% end %>
42
- <% else %>
43
- <div class="card--list__data budget-list__data">
44
- <span class="card--list__data__number budget-list__number">
45
- <%= budget_to_currency(project.budget) %>
46
- </span>
47
- <a href="#" class="button tiny hollow budget--list__action disabled" data-toggle="loginModal">
48
- <%= icon("check", class: "icon--small", aria_label: t(".add"), role: "img") %>
49
- </a>
50
- <% if current_settings.show_votes? %>
51
- <div class="card__support" style="width: 7em">
52
- <span><%= t(".count", count: project.confirmed_orders_count) %></span>
53
- </div>
54
- <% end %>
55
- </div>
56
- <% end %>
57
- </div>
1
+ <%= cell "decidim/budgets/project_list_item", project %>
@@ -1,11 +1,40 @@
1
1
  <div id="project-<%= project.id %>-budget-button">
2
- <% if current_user.present? %>
3
- <% if current_order && current_order.projects.include?(project) %>
4
- <%= action_authorized_button_to "vote", t(".added"), order_line_item_path(project_id: project), method: :delete, remote: true, data: { disable: true, budget: project.budget, "redirect-url": project_path(project) }, disabled: !current_settings.votes_enabled? || current_order_checked_out? || !current_participatory_space.can_participate?(current_user), class: "button expanded button--sc success budget--list__action" %>
5
- <% else %>
6
- <%= action_authorized_button_to "vote", t(".add"), order_line_item_path(project_id: project), method: :post, remote: true, data: { disable: true, budget: project.budget, add: true, "redirect-url": project_path(project) }, disabled: !current_settings.votes_enabled? || current_order_checked_out? || !current_participatory_space.can_participate?(current_user), class: "button expanded button--sc budget--list__action" %>
7
- <% end %>
2
+ <% if voted_for?(project) %>
3
+ <%= action_authorized_button_to(
4
+ "vote",
5
+ t(".added"),
6
+ budget_order_line_item_path(budget, project_id: project),
7
+ method: :delete,
8
+ remote: true,
9
+ data: {
10
+ disable: true,
11
+ budget: project.budget_amount,
12
+ "redirect-url": budget_project_path(budget, project)
13
+ },
14
+ disabled: !can_have_order? || current_order_checked_out?,
15
+ class: "button expanded button--sc success",
16
+ "aria-label": t(".added_descriptive", resource_name: translated_attribute(project.title))
17
+ ) %>
18
+ <% elsif current_user.present? %>
19
+ <%= action_authorized_button_to(
20
+ "vote",
21
+ t(".add"),
22
+ budget_order_line_item_path(budget, project_id: project),
23
+ method: :post,
24
+ remote: true,
25
+ data: {
26
+ disable: true,
27
+ budget: project.budget_amount,
28
+ add: true,
29
+ "redirect-url": budget_project_path(budget, project)
30
+ },
31
+ disabled: !can_have_order? || current_order_checked_out?,
32
+ class: "button expanded button--sc",
33
+ "aria-label": t(".add_descriptive", resource_name: translated_attribute(project.title))
34
+ ) %>
8
35
  <% else %>
9
- <button class="button expanded button--sc disabled" data-toggle="loginModal"><%= t(".add") %></button>
36
+ <button class="button expanded button--sc" data-toggle="loginModal">
37
+ <%= t(".add") %>
38
+ </button>
10
39
  <% end %>
11
40
  </div>
@@ -1,6 +1,13 @@
1
- <div class="card card--list budget-list">
1
+ <div class="collection-sort-controls row small-up-1 medium-up-3 card-grid">
2
+ <div class="column">
3
+ <%= order_selector available_orders, i18n_scope: "decidim.budgets.projects.orders" %>
4
+ </div>
5
+ </div>
6
+
7
+ <div class="budget-list">
2
8
  <% projects.each do |project| %>
3
9
  <%= render partial: "project", locals: { project: project } %>
4
10
  <% end %>
5
11
  </div>
12
+
6
13
  <%= decidim_paginate projects %>
@@ -1,15 +1,23 @@
1
1
  <%= render partial: "decidim/shared/component_announcement" %>
2
2
 
3
- <% if current_user.present? && current_settings.votes_enabled? && current_participatory_space.can_participate?(current_user) %>
4
- <div class="row column">
3
+ <%= cell("decidim/budgets/limit_announcement", budget) %>
4
+
5
+ <div class="row columns">
6
+ <% if voting_finished? %>
7
+ <h2 class="heading2">
8
+ <%= t("decidim.budgets.projects.projects_for", name: translated_attribute(budget.title)) %>
9
+ </h2>
10
+ <% else %>
5
11
  <%= render partial: "budget_summary", locals: { include_heading: true } %>
6
- </div>
7
- <% end %>
12
+ <% end %>
13
+ </div>
14
+
8
15
  <div class="row columns">
9
- <h2 class="section-heading">
16
+ <h3 class="section-heading">
10
17
  <%= render partial: "count" %>
11
- </h2>
18
+ </h3>
12
19
  </div>
20
+
13
21
  <div class="row">
14
22
  <div class="columns mediumlarge-4 large-3">
15
23
  <%= render partial: "filters_small_view" %>
@@ -17,7 +25,7 @@
17
25
  <%= render partial: "filters" %>
18
26
  </div>
19
27
  </div>
20
- <div id="projects" class="columns mediumlarge-8 large-9">
28
+ <div id="projects" class="columns mediumlarge-8 large-9" aria-live="polite">
21
29
  <%= render partial: "projects" %>
22
30
  </div>
23
31
  </div>
@@ -1,2 +1,10 @@
1
1
  var $projects = $('#projects');
2
+ var $projectsCount = $('#projects-count');
3
+ var $orderFilterInput = $('.order_filter');
4
+
2
5
  $projects.html('<%= j(render partial: "projects").strip.html_safe %>');
6
+ $projectsCount.html('<%= j(render partial: "count").strip.html_safe %>');
7
+ $orderFilterInput.val('<%= order %>');
8
+
9
+ var $dropdownMenu = $('.dropdown.menu', $projects);
10
+ $dropdownMenu.foundation();
@@ -5,19 +5,22 @@
5
5
 
6
6
  <%
7
7
  edit_link(
8
- resource_locator(project).edit,
8
+ resource_locator([project.budget, project]).edit,
9
9
  :update,
10
10
  :project,
11
11
  project: project
12
12
  )
13
13
  %>
14
14
 
15
+ <%= cell("decidim/budgets/limit_announcement", budget) %>
16
+
15
17
  <div class="row column view-header">
16
- <% if current_user.present? && current_settings.votes_enabled? && current_participatory_space.can_participate?(current_user) %>
18
+ <% unless voting_finished? %>
17
19
  <%= render partial: "budget_summary", locals: { include_heading: false } %>
18
20
  <% end %>
19
- <%= link_to projects_path, class: "muted-link" do %>
20
- <%= icon "chevron-left", class: "icon--small" %>
21
+
22
+ <%= link_to resource_locator(budget).path(filter_link_params), class: "muted-link" do %>
23
+ <%= icon "chevron-left", class: "icon--small", role: "img", "aria-hidden": true %>
21
24
  <%= t(".view_all_projects") %>
22
25
  <% end %>
23
26
  <h2 class="heading2"><%= translated_attribute project.title %></h2>
@@ -29,14 +32,17 @@ edit_link(
29
32
  <div class="card__content">
30
33
  <div class="m-bottom">
31
34
  <span class="definition-data__title"><%= t(".budget") %></span>
32
- <span class="definition-data__number"><%= budget_to_currency project.budget %></span>
35
+ <span class="definition-data__number"><%= budget_to_currency project.budget_amount %></span>
33
36
  </div>
34
- <% if current_settings.show_votes? %>
35
- <div class="card__support__data">
36
- <span><%= t("decidim.budgets.projects.project.count", count: project.confirmed_orders_count) %></span>
37
- </div>
37
+
38
+ <%= cell("decidim/budgets/project_votes_count", project, layout: :one_line, class: "display-block") %>
39
+
40
+ <% if voting_finished? %>
41
+ <%= cell("decidim/budgets/project_voted_hint", project, class: "display-block") %>
42
+ <% elsif voting_open? %>
43
+ <%= render partial: "project_budget_button", locals: { project: project } %>
38
44
  <% end %>
39
- <%= render partial: "project_budget_button", locals: { project: project } %>
45
+
40
46
  <%= render partial: "decidim/shared/follow_button", locals: { followable: project, large: false } %>
41
47
  </div>
42
48
  </div>
@@ -44,8 +50,9 @@ edit_link(
44
50
  </div>
45
51
  <div class="columns mediumlarge-8 mediumlarge-pull-4">
46
52
  <div class="section">
53
+ <%= cell("decidim/budgets/project_selected_status", project, as_label: true) %>
47
54
  <%= decidim_sanitize translated_attribute project.description %>
48
- <%= cell "decidim/tags", project, context: { extra_classes: ["tags--project"] } %>
55
+ <%= cell "decidim/budgets/project_tags", project, context: { extra_classes: ["tags--project"] } %>
49
56
  </div>
50
57
  <%= linked_resources_for project, :proposals, "included_proposals" %>
51
58
  <%= linked_resources_for project, :results, "included_projects" %>
@@ -0,0 +1 @@
1
+ am:
@@ -2,7 +2,6 @@ ar:
2
2
  activemodel:
3
3
  attributes:
4
4
  project:
5
- budget: ميزانية
6
5
  decidim_category_id: الفئة
7
6
  decidim_scope_id: نطاق
8
7
  description: وصف
@@ -26,7 +25,6 @@ ar:
26
25
  destroy: حذف
27
26
  edit: تعديل
28
27
  import: استيراد مقترحات للمشاريع
29
- new: مشروع جديد
30
28
  preview: معاينة
31
29
  title: أفعال
32
30
  admin:
@@ -71,7 +69,6 @@ ar:
71
69
  title: عنوان
72
70
  projects:
73
71
  budget_confirm:
74
- are_you_sure: هل توافق؟ بمجرد تأكيد تصويتك ، لا يمكنك تغييره.
75
72
  cancel: إلغاء
76
73
  confirm: تؤكد
77
74
  description: هذه هي المشاريع التي اخترتها لتكون جزءًا من الميزانية.
@@ -100,7 +97,7 @@ ar:
100
97
  other: "%{count} مشاريع"
101
98
  filters:
102
99
  category: الفئة
103
- category_prompt: اختر تصنيف
100
+ scope: نطاق
104
101
  search: بحث
105
102
  filters_small_view:
106
103
  close_modal: إغلاق مشروط
@@ -120,19 +117,7 @@ ar:
120
117
  other: المشاريع المختارة
121
118
  view: رأي
122
119
  project:
123
- add: إضافة
124
- count:
125
- zero: "%{count} يدعم"
126
- one: 1 الدعم
127
- two: "%{count} يدعم"
128
- few: "%{count} يدعم"
129
- many: "%{count} يدعم"
130
- other: "%{count} يدعم"
131
- remove: إزالة
132
120
  view: رأي
133
- project_budget_button:
134
- add: إضافة
135
- added: وأضاف
136
121
  show:
137
122
  budget: ميزانية
138
123
  view_all_projects: عرض جميع المشاريع
@@ -153,7 +138,8 @@ ar:
153
138
  announcement: إعلان
154
139
  comments_blocked: تم حظر التعليقات
155
140
  show_votes: إظهار الأصوات
156
- votes_enabled: تم تمكين التصويت
141
+ votes_choices:
142
+ enabled: تم تمكين التصويت
157
143
  orders:
158
144
  checkout:
159
145
  error: حدثت مشكلة أثناء معالجة تصويتك