decidim-budgets 0.19.1 → 0.23.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (189) 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 +46 -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-GR.yml +1 -0
  117. data/config/locales/el.yml +169 -0
  118. data/config/locales/en.yml +126 -12
  119. data/config/locales/eo.yml +1 -0
  120. data/config/locales/es-MX.yml +126 -12
  121. data/config/locales/es-PY.yml +126 -12
  122. data/config/locales/es.yml +126 -12
  123. data/config/locales/et-EE.yml +1 -0
  124. data/config/locales/et.yml +1 -0
  125. data/config/locales/eu.yml +4 -14
  126. data/config/locales/fi-plain.yml +127 -13
  127. data/config/locales/fi.yml +138 -24
  128. data/config/locales/fr-CA.yml +266 -0
  129. data/config/locales/fr.yml +125 -12
  130. data/config/locales/ga-IE.yml +1 -0
  131. data/config/locales/gl.yml +3 -13
  132. data/config/locales/hr-HR.yml +1 -0
  133. data/config/locales/hr.yml +1 -0
  134. data/config/locales/hu.yml +19 -13
  135. data/config/locales/id-ID.yml +3 -12
  136. data/config/locales/is-IS.yml +108 -0
  137. data/config/locales/is.yml +114 -0
  138. data/config/locales/it.yml +97 -13
  139. data/config/locales/ja-JP.yml +172 -0
  140. data/config/locales/ja.yml +262 -0
  141. data/config/locales/ko-KR.yml +1 -0
  142. data/config/locales/ko.yml +1 -0
  143. data/config/locales/lt-LT.yml +1 -0
  144. data/config/locales/lt.yml +1 -0
  145. data/config/locales/lv.yml +164 -0
  146. data/config/locales/mt-MT.yml +1 -0
  147. data/config/locales/mt.yml +1 -0
  148. data/config/locales/nl.yml +117 -17
  149. data/config/locales/no.yml +129 -8
  150. data/config/locales/om-ET.yml +1 -0
  151. data/config/locales/pl.yml +175 -62
  152. data/config/locales/pt-BR.yml +4 -14
  153. data/config/locales/pt.yml +63 -47
  154. data/config/locales/ro-RO.yml +172 -0
  155. data/config/locales/ru.yml +3 -15
  156. data/config/locales/sk-SK.yml +180 -0
  157. data/config/locales/sk.yml +166 -0
  158. data/config/locales/sl.yml +1 -0
  159. data/config/locales/so-SO.yml +1 -0
  160. data/config/locales/sr-CS.yml +27 -0
  161. data/config/locales/sv.yml +105 -12
  162. data/config/locales/ti-ER.yml +1 -0
  163. data/config/locales/tr-TR.yml +3 -13
  164. data/config/locales/uk.yml +3 -15
  165. data/config/locales/vi-VN.yml +1 -0
  166. data/config/locales/vi.yml +1 -0
  167. data/config/locales/zh-CN.yml +260 -0
  168. data/config/locales/zh-TW.yml +1 -0
  169. data/db/migrate/20200617105120_create_decidim_budgets.rb +15 -0
  170. data/db/migrate/20200629072626_rename_budget_to_budget_ammount.rb +7 -0
  171. data/db/migrate/20200629134013_add_budget_reference_to_project.rb +7 -0
  172. data/db/migrate/20200706142609_add_budget_reference_to_order.rb +7 -0
  173. data/db/migrate/20200714103519_move_budgets_to_own_model.rb +109 -0
  174. data/db/migrate/20200717140012_add_scope_to_budgets.rb +7 -0
  175. data/db/migrate/20200728075039_add_selected_at_to_project.rb +7 -0
  176. data/db/migrate/20200804175222_votes_enabled_to_votes_choices.rb +35 -0
  177. data/db/migrate/20200827154129_add_commentable_counter_cache_to_projects.rb +9 -0
  178. data/lib/decidim/budgets.rb +1 -0
  179. data/lib/decidim/budgets/admin_engine.rb +12 -5
  180. data/lib/decidim/budgets/component.rb +95 -38
  181. data/lib/decidim/budgets/engine.rb +8 -6
  182. data/lib/decidim/budgets/seeds/city.jpeg +0 -0
  183. data/lib/decidim/budgets/test/factories.rb +71 -9
  184. data/lib/decidim/budgets/version.rb +1 -1
  185. data/lib/decidim/budgets/workflows.rb +17 -0
  186. data/lib/decidim/budgets/workflows/all.rb +20 -0
  187. data/lib/decidim/budgets/workflows/base.rb +132 -0
  188. data/lib/decidim/budgets/workflows/one.rb +33 -0
  189. metadata +122 -15
@@ -0,0 +1,40 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module Budgets
5
+ # This cell renders the budget item list in the budgets list
6
+ class BudgetListItemCell < BaseCell
7
+ delegate :voting_finished?, to: :controller
8
+
9
+ property :title
10
+ alias budget model
11
+
12
+ private
13
+
14
+ def card_class
15
+ ["card--list__item"].tap do |list|
16
+ unless voting_finished?
17
+ list << "card--list__data-added" if voted?
18
+ list << "card--list__data-progress" if progress?
19
+ end
20
+ end.join(" ")
21
+ end
22
+
23
+ def link_class
24
+ "card__link card--list__heading"
25
+ end
26
+
27
+ def voted?
28
+ current_user && status == :voted
29
+ end
30
+
31
+ def progress?
32
+ current_user && status == :progress
33
+ end
34
+
35
+ def status
36
+ @status ||= current_workflow.status(budget)
37
+ end
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,12 @@
1
+ <div class="card__icondata">
2
+ <ul class="card-data">
3
+ <li class="card-data__item">
4
+ <%= icon "euro-outline", class: "icon--big", role: "img", "aria-hidden": true %>
5
+ </li>
6
+ <li class="card-data__item">
7
+ <div class="text-left">
8
+ <strong class="heading4"><%= budget_to_currency model.total_budget %></strong>
9
+ </div>
10
+ </li>
11
+ </ul>
12
+ </div>
@@ -0,0 +1,5 @@
1
+ <div class="card__footer">
2
+ <div class="card__support">
3
+ <%= link_to t("view", scope: "decidim.budgets.budget"), resource_path, class: "card__button button button--sc small" %>
4
+ </div>
5
+ </div>
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module Budgets
5
+ # This cell renders the Medium (:m) budget card
6
+ # for an given instance of a Decidim::Budgets::Budget
7
+ class BudgetMCell < Decidim::CardMCell
8
+ include ActiveSupport::NumberHelper
9
+ include Decidim::Budgets::ProjectsHelper
10
+
11
+ def statuses
12
+ []
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,7 @@
1
+ <div class="row">
2
+ <div class="columns medium-7 mediumlarge-8">
3
+ <div class="section">
4
+ <%= decidim_sanitize(landing_page_content) %>
5
+ </div>
6
+ </div>
7
+ </div>
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module Budgets
5
+ # This cell renders the Budgets component header
6
+ class BudgetsHeaderCell < BaseCell
7
+ private
8
+
9
+ def landing_page_content
10
+ translated_attribute(current_settings.landing_page_content).presence || translated_attribute(settings.landing_page_content)
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,7 @@
1
+ <div id="budgets" class="card card--list card--list--mini">
2
+ <% budgets.each do |budget| %>
3
+ <% next if highlighted.include?(budget) && !voting_finished? %>
4
+
5
+ <%= cell("decidim/budgets/budget_list_item", budget) %>
6
+ <% end %>
7
+ </div>
@@ -0,0 +1,11 @@
1
+ <% if highlighted? %>
2
+ <p id="highlighted-budget">
3
+ <% highlighted.each do |budget| %>
4
+ <%= link_to(
5
+ t("highlighted_cta", scope: i18n_scope,
6
+ name: translated_attribute(budget.title)),
7
+ resource_locator(budget).path,
8
+ class: :button ) %>
9
+ <% end %>
10
+ </p>
11
+ <% end %>
@@ -0,0 +1,20 @@
1
+ <div class="row">
2
+ <div class="columns medium-7 mediumlarge-8">
3
+ <% if !voting_finished? && (highlighted? || voted?) %>
4
+ <div class="section">
5
+ <h3 class="section-heading">
6
+ <%= t(:my_budgets, scope: i18n_scope) %>
7
+ </h3>
8
+
9
+ <%= render :highlighted %>
10
+ <%= render :voted %>
11
+ </div>
12
+ <% end %>
13
+
14
+ <div class="row">
15
+ <div class="columns mediumlarge-6">
16
+ <%= render :card_list %>
17
+ </div>
18
+ </div>
19
+ </div>
20
+ </div>
@@ -0,0 +1,43 @@
1
+ <% if voted? %>
2
+ <div id="voted-budgets">
3
+ <p class="lead">
4
+ <%= t(:voted_on, scope: i18n_scope, links: budgets_link_list(voted)) %>
5
+ </p>
6
+
7
+ <% if finished? %>
8
+ <p class="lead">
9
+ <%= t(:finished_message, scope: i18n_scope) %>
10
+ </p>
11
+ <% end %>
12
+
13
+ <% if voting_open? %>
14
+ <div>
15
+ <p>
16
+ <%= t(:if_change_opinion, scope: i18n_scope) %>
17
+ <%= link_to(
18
+ t("cancel_order.only_one", scope: i18n_scope),
19
+ budget_order_path(voted.first),
20
+ method: :delete,
21
+ data: { confirm: t("projects.budget_summary.are_you_sure", scope: "decidim.budgets") }) if voted.one? %>
22
+ </p>
23
+
24
+ <% if !voted.one? && voted.any? %>
25
+ <ul>
26
+ <% voted.each do |budget| %>
27
+ <li>
28
+ <%= link_to(
29
+ t("cancel_order.more_than_one", scope: i18n_scope, name: translated_attribute(budget.title)),
30
+ budget_order_path(budget),
31
+ method: :delete,
32
+ class: "cancel-order",
33
+ data: {
34
+ confirm: t("projects.budget_summary.are_you_sure", scope: "decidim.budgets")
35
+ }) %>
36
+ </li>
37
+ <% end %>
38
+ </ul>
39
+ <% end %>
40
+ </div>
41
+ <% end %>
42
+ </div>
43
+ <% end %>
@@ -0,0 +1,39 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module Budgets
5
+ # This cell renders the budgets list of a Budget component
6
+ class BudgetsListCell < BaseCell
7
+ alias current_workflow model
8
+
9
+ delegate :allowed, :budgets, :highlighted, :voted, to: :current_workflow
10
+ delegate :voting_open?, :voting_finished?, to: :controller
11
+
12
+ def show
13
+ return unless budgets
14
+
15
+ render
16
+ end
17
+
18
+ private
19
+
20
+ def highlighted?
21
+ current_user && highlighted.any?
22
+ end
23
+
24
+ def voted?
25
+ current_user && voted.any?
26
+ end
27
+
28
+ def finished?
29
+ return unless budgets.any?
30
+
31
+ current_user && (allowed - voted).none?
32
+ end
33
+
34
+ def i18n_scope
35
+ "decidim.budgets.budgets_list"
36
+ end
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,52 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module Budgets
5
+ # This cell renders information when current user can't create more budgets orders.
6
+ class LimitAnnouncementCell < BaseCell
7
+ alias budget model
8
+ delegate :voted?, :vote_allowed?, :discardable, :limit_reached?, to: :current_workflow
9
+ delegate :voting_open?, to: :controller
10
+
11
+ def show
12
+ cell("decidim/announcement", announcement_args) if announce?
13
+ end
14
+
15
+ private
16
+
17
+ def announce?
18
+ return unless voting_open?
19
+ return unless current_user
20
+ return if vote_allowed?(budget)
21
+ return if voted?(budget)
22
+
23
+ discardable.any? || !vote_allowed?(budget, false)
24
+ end
25
+
26
+ def announcement_args
27
+ {
28
+ callout_class: "warning",
29
+ announcement: announcement_message
30
+ }
31
+ end
32
+
33
+ def announcement_message
34
+ if discardable.any?
35
+ t(:limit_reached, scope: i18n_scope,
36
+ links: budgets_link_list(discardable),
37
+ landing_path: budgets_path)
38
+ else
39
+ t(:cant_vote, scope: i18n_scope, landing_path: budgets_path)
40
+ end
41
+ end
42
+
43
+ def should_discard_to_vote?
44
+ limit_reached? && discardable.any?
45
+ end
46
+
47
+ def i18n_scope
48
+ "decidim.budgets.limit_announcement"
49
+ end
50
+ end
51
+ end
52
+ end
@@ -0,0 +1,19 @@
1
+ <div class="budget-list__data <%= data_class %>">
2
+ <% if voting_finished? %>
3
+ <div class="budget-list__data__votes">
4
+ <%= cell("decidim/budgets/project_votes_count", model) %>
5
+
6
+ <%= cell("decidim/budgets/project_voted_hint", model, class: "display-block margin-top-1") %>
7
+ </div>
8
+ <% else %>
9
+ <span class="budget-list__data__number budget-list__number show-for-medium">
10
+ <%= budget_to_currency(model.budget_amount) %>
11
+
12
+ <%= cell("decidim/budgets/project_votes_count", model, layout: :one_line, class: "display-inline-block") %>
13
+
14
+ <%= cell("decidim/budgets/project_voted_hint", model, class: "display-block margin-top-1") if current_order_checked_out? && resource_added? %>
15
+ </span>
16
+
17
+ <%= render :project_data_vote_button if !current_order_checked_out? && voting_open? %>
18
+ <% end %>
19
+ </div>
@@ -0,0 +1,15 @@
1
+ <%= action_authorized_button_to "vote",
2
+ budget_order_line_item_path(model.budget, project_id: model),
3
+ method: vote_button_method,
4
+ remote: true,
5
+ class: "button tiny budget-list__action #{vote_button_class}",
6
+ data: {
7
+ add: !resource_added?,
8
+ disable: true,
9
+ budget: model.budget_amount,
10
+ "redirect-url": resource_path
11
+ },
12
+ disabled: vote_button_disabled?,
13
+ title: vote_button_label do %>
14
+ <%= icon(resource_added? ? "x" : "check", class: "icon--small", aria_label: vote_button_label, role: "img") %>
15
+ <% end %>
@@ -0,0 +1,5 @@
1
+ <% if model.photos.first %>
2
+ <div class="budget-list__image">
3
+ <%= image_tag model.photos.first.thumbnail_url, alt: resource_title %>
4
+ </div>
5
+ <% end %>
@@ -0,0 +1,23 @@
1
+ <div class="budget-list__text card__text">
2
+ <div>
3
+ <%= link_to resource_path, class: "card__link" do %>
4
+ <h5 class="card__title budget-list__title">
5
+ <%= cell("decidim/budgets/project_selected_status", model) %>
6
+
7
+ <%= resource_title %>
8
+ </h5>
9
+ <% end %>
10
+
11
+ <div class="show-for-medium">
12
+ <%= cell "decidim/budgets/project_tags", model, context: { extra_classes: ["tags--project"] } %>
13
+ </div>
14
+
15
+ <div class="budget-list__data__number budget-list__number hide-for-medium">
16
+ <%= cell("decidim/budgets/project_votes_count",
17
+ model,
18
+ layout: :one_line) %>
19
+
20
+ <%= cell("decidim/budgets/project_voted_hint", model, class: "margin-left-1") if current_order_checked_out? && resource_added? %>
21
+ </div>
22
+ </div>
23
+ </div>
@@ -0,0 +1,5 @@
1
+ <div id="project-<%= model.id %>-item" class="budget-list__item">
2
+ <%= render :project_image %>
3
+ <%= render :project_text %>
4
+ <%= render :project_data %>
5
+ </div>
@@ -0,0 +1,66 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module Budgets
5
+ # This cell renders a horizontal project card
6
+ # for an given instance of a Project in a budget list
7
+ class ProjectListItemCell < Decidim::ViewModel
8
+ include ActiveSupport::NumberHelper
9
+ include Decidim::LayoutHelper
10
+ include Decidim::ActionAuthorizationHelper
11
+ include Decidim::Budgets::ProjectsHelper
12
+ include Decidim::Budgets::Engine.routes.url_helpers
13
+
14
+ delegate :current_user, :current_settings, :current_order, :current_component,
15
+ :current_participatory_space, :can_have_order?, :voting_open?, :voting_finished?, to: :parent_controller
16
+
17
+ private
18
+
19
+ def resource_path
20
+ resource_locator([model.budget, model]).path(filter_link_params)
21
+ end
22
+
23
+ def resource_title
24
+ translated_attribute model.title
25
+ end
26
+
27
+ def resource_added?
28
+ current_order && current_order.projects.include?(model)
29
+ end
30
+
31
+ def data_class
32
+ [].tap do |list|
33
+ list << "budget-list__data--added" if can_have_order? && resource_added?
34
+ list << "show-for-medium" if voting_finished? || (current_order_checked_out? && !resource_added?)
35
+ end.join(" ")
36
+ end
37
+
38
+ def vote_button_disabled?
39
+ current_user && !can_have_order?
40
+ end
41
+
42
+ def vote_button_class
43
+ return "success" if resource_added?
44
+
45
+ "hollow"
46
+ end
47
+
48
+ def vote_button_method
49
+ return :delete if resource_added?
50
+
51
+ :post
52
+ end
53
+
54
+ def vote_button_label
55
+ if resource_added?
56
+ return t(
57
+ "decidim.budgets.projects.project.remove",
58
+ resource_name: resource_title
59
+ )
60
+ end
61
+
62
+ t("decidim.budgets.projects.project.add", resource_name: resource_title)
63
+ end
64
+ end
65
+ end
66
+ end
@@ -1,11 +1,11 @@
1
1
  <div class="card__icondata">
2
2
  <ul class="card-data">
3
3
  <li class="card-data__item">
4
- <%= icon "euro-outline", class: "icon--big" %>
4
+ <%= icon "euro-outline", class: "icon--big", role: "img", "aria-hidden": true %>
5
5
  </li>
6
6
  <li class="card-data__item">
7
- <div class="text-left text-uppercase">
8
- <strong class="heading4"><%= budget_to_currency model.budget %></strong>
7
+ <div class="text-left">
8
+ <strong class="heading4"><%= budget_to_currency model.budget_amount %></strong>
9
9
  </div>
10
10
  </li>
11
11
  </ul>
@@ -1,5 +1,5 @@
1
1
  <div class="card__footer">
2
2
  <div class="card__support">
3
- <%= link_to t("view", scope: "decidim.budgets.projects.project"), resource_path, class: "card__button button secondary button--sc small light" %>
3
+ <%= link_to t("view", scope: "decidim.budgets.projects.project"), resource_path, class: "card__button button button--sc small" %>
4
4
  </div>
5
5
  </div>