decidim-budgets 0.22.0 → 0.23.3

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 (173) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +38 -3
  3. data/app/assets/stylesheets/decidim/budgets/budget/_budget-list.scss +5 -0
  4. data/app/cells/decidim/budgets/base_cell.rb +22 -0
  5. data/app/cells/decidim/budgets/budget_cell.rb +21 -0
  6. data/app/cells/decidim/budgets/budget_information_modal/show.erb +28 -0
  7. data/app/cells/decidim/budgets/budget_information_modal_cell.rb +22 -0
  8. data/app/cells/decidim/budgets/budget_list_item/show.erb +22 -0
  9. data/app/cells/decidim/budgets/budget_list_item_cell.rb +40 -0
  10. data/app/cells/decidim/budgets/budget_m/data.erb +12 -0
  11. data/app/cells/decidim/budgets/budget_m/footer.erb +5 -0
  12. data/app/cells/decidim/budgets/budget_m_cell.rb +16 -0
  13. data/app/cells/decidim/budgets/budgets_header/show.erb +7 -0
  14. data/app/cells/decidim/budgets/budgets_header_cell.rb +14 -0
  15. data/app/cells/decidim/budgets/budgets_list/card_list.erb +7 -0
  16. data/app/cells/decidim/budgets/budgets_list/highlighted.erb +11 -0
  17. data/app/cells/decidim/budgets/budgets_list/show.erb +20 -0
  18. data/app/cells/decidim/budgets/budgets_list/voted.erb +43 -0
  19. data/app/cells/decidim/budgets/budgets_list_cell.rb +39 -0
  20. data/app/cells/decidim/budgets/limit_announcement_cell.rb +52 -0
  21. data/app/cells/decidim/budgets/project_list_item/project_data.erb +17 -3
  22. data/app/cells/decidim/budgets/project_list_item/project_data_vote_button.erb +2 -2
  23. data/app/cells/decidim/budgets/project_list_item/project_text.erb +11 -5
  24. data/app/cells/decidim/budgets/project_list_item/show.erb +3 -3
  25. data/app/cells/decidim/budgets/project_list_item_cell.rb +8 -28
  26. data/app/cells/decidim/budgets/project_m/data.erb +1 -1
  27. data/app/cells/decidim/budgets/project_m_cell.rb +4 -0
  28. data/app/cells/decidim/budgets/project_selected_status_cell.rb +28 -0
  29. data/app/cells/decidim/budgets/project_tags/show.erb +5 -0
  30. data/app/cells/decidim/budgets/project_tags_cell.rb +18 -0
  31. data/app/cells/decidim/budgets/project_voted_hint_cell.rb +33 -0
  32. data/app/cells/decidim/budgets/project_votes_count_cell.rb +44 -0
  33. data/app/commands/decidim/budgets/add_line_item.rb +7 -10
  34. data/app/commands/decidim/budgets/admin/create_budget.rb +48 -0
  35. data/app/commands/decidim/budgets/admin/create_project.rb +12 -7
  36. data/app/commands/decidim/budgets/admin/destroy_budget.rb +42 -0
  37. data/app/commands/decidim/budgets/admin/import_proposals_to_budgets.rb +26 -25
  38. data/app/commands/decidim/budgets/admin/update_budget.rb +48 -0
  39. data/app/commands/decidim/budgets/admin/update_project.rb +8 -1
  40. data/app/commands/decidim/budgets/checkout.rb +6 -6
  41. data/app/commands/decidim/budgets/remove_line_item.rb +3 -2
  42. data/app/controllers/concerns/decidim/budgets/needs_current_order.rb +14 -2
  43. data/app/controllers/concerns/decidim/budgets/orderable.rb +3 -7
  44. data/app/controllers/decidim/budgets/admin/application_controller.rb +10 -2
  45. data/app/controllers/decidim/budgets/admin/attachment_collections_controller.rb +1 -1
  46. data/app/controllers/decidim/budgets/admin/attachments_controller.rb +2 -2
  47. data/app/controllers/decidim/budgets/admin/budgets_controller.rb +82 -0
  48. data/app/controllers/decidim/budgets/admin/projects_controller.rb +7 -7
  49. data/app/controllers/decidim/budgets/admin/proposals_imports_controller.rb +10 -2
  50. data/app/controllers/decidim/budgets/application_controller.rb +23 -0
  51. data/app/controllers/decidim/budgets/budgets_controller.rb +24 -0
  52. data/app/controllers/decidim/budgets/line_items_controller.rb +9 -5
  53. data/app/controllers/decidim/budgets/orders_controller.rb +20 -6
  54. data/app/controllers/decidim/budgets/projects_controller.rb +19 -18
  55. data/app/forms/decidim/budgets/admin/budget_form.rb +39 -0
  56. data/app/forms/decidim/budgets/admin/project_form.rb +14 -10
  57. data/app/forms/decidim/budgets/admin/project_import_proposals_form.rb +4 -0
  58. data/app/helpers/decidim/budgets/admin/application_helper.rb +13 -0
  59. data/app/helpers/decidim/budgets/application_helper.rb +10 -0
  60. data/app/helpers/decidim/budgets/projects_helper.rb +0 -4
  61. data/app/mailers/decidim/budgets/order_summary_mailer.rb +5 -3
  62. data/app/models/decidim/budgets/budget.rb +34 -0
  63. data/app/models/decidim/budgets/line_item.rb +4 -4
  64. data/app/models/decidim/budgets/order.rb +23 -19
  65. data/app/models/decidim/budgets/project.rb +34 -5
  66. data/app/permissions/decidim/budgets/admin/permissions.rb +23 -10
  67. data/app/permissions/decidim/budgets/permissions.rb +28 -6
  68. data/app/presenters/decidim/budgets/admin_log/budget_presenter.rb +42 -0
  69. data/app/queries/decidim/budgets/filtered_projects.rb +9 -1
  70. data/app/queries/decidim/budgets/metrics/budget_followers_metric_measure.rb +3 -2
  71. data/app/queries/decidim/budgets/metrics/budget_participants_metric_measure.rb +6 -5
  72. data/app/serializers/decidim/budgets/data_portability_budgets_order_serializer.rb +3 -2
  73. data/app/services/decidim/budgets/project_search.rb +12 -24
  74. data/app/types/decidim/budgets/budget_type.rb +24 -0
  75. data/app/types/decidim/budgets/budgets_type.rb +6 -6
  76. data/app/types/decidim/budgets/project_type.rb +2 -1
  77. data/app/views/decidim/budgets/admin/budgets/_form.html.erb +23 -0
  78. data/app/views/decidim/budgets/admin/budgets/edit.html.erb +7 -0
  79. data/app/views/decidim/budgets/admin/budgets/index.html.erb +58 -0
  80. data/app/views/decidim/budgets/admin/budgets/new.html.erb +7 -0
  81. data/app/views/decidim/budgets/admin/projects/_form.html.erb +12 -4
  82. data/app/views/decidim/budgets/admin/projects/edit.html.erb +2 -2
  83. data/app/views/decidim/budgets/admin/projects/index.html.erb +20 -7
  84. data/app/views/decidim/budgets/admin/projects/new.html.erb +2 -2
  85. data/app/views/decidim/budgets/admin/proposals_imports/new.html.erb +1 -1
  86. data/app/views/decidim/budgets/budgets/index.html.erb +5 -0
  87. data/app/views/decidim/budgets/order_summary_mailer/order_summary.html.erb +1 -0
  88. data/app/views/decidim/budgets/projects/_budget_confirm.html.erb +3 -3
  89. data/app/views/decidim/budgets/projects/_budget_summary.html.erb +19 -6
  90. data/app/views/decidim/budgets/projects/_filters.html.erb +6 -2
  91. data/app/views/decidim/budgets/projects/_linked_projects.html.erb +1 -1
  92. data/app/views/decidim/budgets/projects/_order_progress.html.erb +10 -6
  93. data/app/views/decidim/budgets/projects/_order_selected_projects.html.erb +3 -3
  94. data/app/views/decidim/budgets/projects/_project_budget_button.html.erb +36 -7
  95. data/app/views/decidim/budgets/projects/index.html.erb +12 -4
  96. data/app/views/decidim/budgets/projects/show.html.erb +22 -13
  97. data/config/locales/am-ET.yml +1 -0
  98. data/config/locales/ar.yml +2 -11
  99. data/config/locales/bg.yml +6 -0
  100. data/config/locales/ca.yml +102 -10
  101. data/config/locales/cs.yml +108 -16
  102. data/config/locales/da.yml +1 -0
  103. data/config/locales/de.yml +120 -28
  104. data/config/locales/el.yml +3 -9
  105. data/config/locales/en.yml +101 -9
  106. data/config/locales/eo.yml +1 -0
  107. data/config/locales/es-MX.yml +101 -9
  108. data/config/locales/es-PY.yml +101 -9
  109. data/config/locales/es.yml +102 -10
  110. data/config/locales/et.yml +1 -0
  111. data/config/locales/eu.yml +5 -8
  112. data/config/locales/fi-plain.yml +102 -10
  113. data/config/locales/fi.yml +103 -11
  114. data/config/locales/fr-CA.yml +101 -9
  115. data/config/locales/fr.yml +101 -9
  116. data/config/locales/gl.yml +70 -10
  117. data/config/locales/hr.yml +1 -0
  118. data/config/locales/hu.yml +2 -7
  119. data/config/locales/id-ID.yml +2 -6
  120. data/config/locales/is-IS.yml +0 -6
  121. data/config/locales/is.yml +114 -0
  122. data/config/locales/it.yml +71 -9
  123. data/config/locales/ja-JP.yml +1 -0
  124. data/config/locales/ja.yml +262 -0
  125. data/config/locales/ko-KR.yml +1 -0
  126. data/config/locales/ko.yml +1 -0
  127. data/config/locales/lt.yml +1 -0
  128. data/config/locales/{lv-LV.yml → lv.yml} +2 -10
  129. data/config/locales/mt.yml +1 -0
  130. data/config/locales/nl.yml +88 -10
  131. data/config/locales/no.yml +25 -9
  132. data/config/locales/om-ET.yml +1 -0
  133. data/config/locales/pl.yml +114 -22
  134. data/config/locales/pt-BR.yml +2 -7
  135. data/config/locales/pt.yml +3 -9
  136. data/config/locales/ro-RO.yml +3 -10
  137. data/config/locales/ru.yml +2 -9
  138. data/config/locales/si-LK.yml +1 -0
  139. data/config/locales/sk.yml +2 -11
  140. data/config/locales/sl.yml +0 -4
  141. data/config/locales/so-SO.yml +1 -0
  142. data/config/locales/sr-CS.yml +0 -2
  143. data/config/locales/sv.yml +101 -9
  144. data/config/locales/sw-KE.yml +1 -0
  145. data/config/locales/ti-ER.yml +1 -0
  146. data/config/locales/tr-TR.yml +153 -34
  147. data/config/locales/uk.yml +2 -9
  148. data/config/locales/vi-VN.yml +1 -0
  149. data/config/locales/vi.yml +1 -0
  150. data/config/locales/zh-CN.yml +260 -0
  151. data/config/locales/zh-TW.yml +1 -0
  152. data/db/migrate/20200617105120_create_decidim_budgets.rb +15 -0
  153. data/db/migrate/20200629072626_rename_budget_to_budget_ammount.rb +7 -0
  154. data/db/migrate/20200629134013_add_budget_reference_to_project.rb +7 -0
  155. data/db/migrate/20200706142609_add_budget_reference_to_order.rb +7 -0
  156. data/db/migrate/20200714103519_move_budgets_to_own_model.rb +109 -0
  157. data/db/migrate/20200717140012_add_scope_to_budgets.rb +7 -0
  158. data/db/migrate/20200728075039_add_selected_at_to_project.rb +7 -0
  159. data/db/migrate/20200804175222_votes_enabled_to_votes_choices.rb +35 -0
  160. data/db/migrate/20200827154129_add_commentable_counter_cache_to_projects.rb +9 -0
  161. data/lib/decidim/budgets.rb +1 -0
  162. data/lib/decidim/budgets/admin_engine.rb +10 -5
  163. data/lib/decidim/budgets/component.rb +83 -38
  164. data/lib/decidim/budgets/engine.rb +8 -6
  165. data/lib/decidim/budgets/test/factories.rb +42 -13
  166. data/lib/decidim/budgets/version.rb +1 -1
  167. data/lib/decidim/budgets/workflows.rb +17 -0
  168. data/lib/decidim/budgets/workflows/all.rb +20 -0
  169. data/lib/decidim/budgets/workflows/base.rb +132 -0
  170. data/lib/decidim/budgets/workflows/one.rb +33 -0
  171. metadata +89 -20
  172. data/app/cells/decidim/budgets/project_list_item/project_data_number.erb +0 -3
  173. data/app/cells/decidim/budgets/project_list_item/project_data_votes.erb +0 -7
@@ -0,0 +1 @@
1
+ zh-TW:
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ class CreateDecidimBudgets < ActiveRecord::Migration[5.0]
4
+ def change
5
+ create_table :decidim_budgets_budgets do |t|
6
+ t.jsonb :title
7
+ t.integer :weight, null: false, default: 0
8
+ t.jsonb :description
9
+ t.integer :total_budget, default: 0
10
+ t.references :decidim_component, index: true
11
+
12
+ t.timestamps
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ class RenameBudgetToBudgetAmmount < ActiveRecord::Migration[5.2]
4
+ def change
5
+ rename_column :decidim_budgets_projects, :budget, :budget_amount
6
+ end
7
+ end
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ class AddBudgetReferenceToProject < ActiveRecord::Migration[5.2]
4
+ def change
5
+ add_reference :decidim_budgets_projects, :decidim_budgets_budget, foreign_key: true
6
+ end
7
+ end
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ class AddBudgetReferenceToOrder < ActiveRecord::Migration[5.2]
4
+ def change
5
+ add_reference :decidim_budgets_orders, :decidim_budgets_budget, foreign_key: true
6
+ end
7
+ end
@@ -0,0 +1,109 @@
1
+ # frozen_string_literal: true
2
+
3
+ class MoveBudgetsToOwnModel < ActiveRecord::Migration[5.2]
4
+ class Component < ApplicationRecord
5
+ self.table_name = :decidim_components
6
+ end
7
+
8
+ class Budget < ApplicationRecord
9
+ self.table_name = :decidim_budgets_budgets
10
+ end
11
+
12
+ class Project < ApplicationRecord
13
+ self.table_name = :decidim_budgets_projects
14
+ end
15
+
16
+ class Order < ApplicationRecord
17
+ self.table_name = :decidim_budgets_orders
18
+ end
19
+
20
+ def up
21
+ Project.reset_column_information
22
+ Order.reset_column_information
23
+
24
+ budget_components.each do |component|
25
+ resource = create_budget_resource_from(component)
26
+
27
+ add_budget_references_to_projects(resource)
28
+ add_budget_reference_to_orders(resource)
29
+ end
30
+
31
+ remove_column :decidim_budgets_projects, :decidim_component_id
32
+ remove_column :decidim_budgets_orders, :decidim_component_id
33
+ end
34
+
35
+ def down
36
+ add_column :decidim_budgets_projects, :decidim_component_id, :integer, index: true
37
+ add_column :decidim_budgets_orders, :decidim_component_id, :integer, index: true
38
+
39
+ Budget.find_each do |resource|
40
+ revert_budget_to_component(resource)
41
+ if resource
42
+ add_component_reference_to_projects(resource)
43
+ add_component_reference_to_orders(resource)
44
+ end
45
+ end
46
+ end
47
+
48
+ # up methods
49
+ def budget_components
50
+ @budget_components ||= Component.where(manifest_name: "budgets")
51
+ end
52
+
53
+ def create_budget_resource_from(component)
54
+ component_total_budget = if component["settings"].dig("global", "total_budget")
55
+ component["settings"]["global"]["total_budget"]
56
+ else
57
+ 100_000_000
58
+ end
59
+
60
+ Budget.create!(
61
+ decidim_component_id: component.id,
62
+ total_budget: component_total_budget,
63
+ title: component.name
64
+ )
65
+ end
66
+
67
+ def add_budget_references_to_projects(resource)
68
+ # rubocop:disable Rails/SkipsModelValidations
69
+ Project.where(decidim_component_id: resource.decidim_component_id)
70
+ .update_all(decidim_budgets_budget_id: resource.id)
71
+ # rubocop:enable Rails/SkipsModelValidations
72
+ end
73
+
74
+ def add_budget_reference_to_orders(resource)
75
+ # rubocop:disable Rails/SkipsModelValidations
76
+ Order.where(decidim_component_id: resource.decidim_component_id)
77
+ .update_all(decidim_budgets_budget_id: resource.id)
78
+ # rubocop:enable Rails/SkipsModelValidations
79
+ end
80
+
81
+ # down methods
82
+
83
+ def revert_budget_to_component(resource)
84
+ component = Component.find_by(id: resource.decidim_component_id, manifest_name: "budgets")
85
+ component_settings = if resource.total_budget && component["settings"].try(:key?, "global")
86
+ component["settings"]["global"].merge!(total_budget: resource.total_budget)
87
+ component["settings"]
88
+ end
89
+
90
+ component.update!(
91
+ settings: component_settings,
92
+ name: resource.title
93
+ )
94
+ end
95
+
96
+ def add_component_reference_to_orders(resource)
97
+ # rubocop:disable Rails/SkipsModelValidations
98
+ Order.where(decidim_budgets_budget_id: resource.id)
99
+ .update_all(decidim_component_id: resource.decidim_component_id)
100
+ # rubocop:enable Rails/SkipsModelValidations
101
+ end
102
+
103
+ def add_component_reference_to_projects(resource)
104
+ # rubocop:disable Rails/SkipsModelValidations
105
+ Project.where(decidim_budgets_budget_id: resource.id)
106
+ .update_all(decidim_component_id: resource.decidim_component_id)
107
+ # rubocop:enable Rails/SkipsModelValidations
108
+ end
109
+ end
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ class AddScopeToBudgets < ActiveRecord::Migration[5.2]
4
+ def change
5
+ add_reference :decidim_budgets_budgets, :decidim_scope, foreign_key: true, index: true
6
+ end
7
+ end
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ class AddSelectedAtToProject < ActiveRecord::Migration[5.2]
4
+ def change
5
+ add_column :decidim_budgets_projects, :selected_at, :date, index: true
6
+ end
7
+ end
@@ -0,0 +1,35 @@
1
+ # frozen_string_literal: true
2
+
3
+ class VotesEnabledToVotesChoices < ActiveRecord::Migration[5.2]
4
+ class Component < ApplicationRecord
5
+ self.table_name = :decidim_components
6
+ end
7
+
8
+ def up
9
+ budget_components.each do |component|
10
+ steps = component["settings"] && component["settings"].dig("steps")
11
+ default_step = component["settings"] && component["settings"].dig("default_step")
12
+
13
+ if steps.present?
14
+ new_steps_settings = component["settings"]["steps"].each_with_object({}) do |(step, config), new_config|
15
+ votes_value = config.dig("votes_enabled") ? "enabled" : "disabled"
16
+
17
+ new_config[step] = config.merge("votes": votes_value).except("votes_enabled")
18
+ new_config
19
+ end
20
+ component["settings"]["steps"] = new_steps_settings
21
+ component.save!
22
+ elsif default_step.present?
23
+ votes_value = component["settings"]["default_step"].dig("votes_enabled") ? "enabled" : "disabled"
24
+
25
+ new_default_step_settings = component["settings"]["default_step"].merge("votes": votes_value).except("votes_enabled")
26
+ component["settings"]["default_step"] = new_default_step_settings
27
+ component.save!
28
+ end
29
+ end
30
+ end
31
+
32
+ def budget_components
33
+ @budget_components ||= Component.where(manifest_name: "budgets")
34
+ end
35
+ end
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ class AddCommentableCounterCacheToProjects < ActiveRecord::Migration[5.2]
4
+ def change
5
+ add_column :decidim_budgets_projects, :comments_count, :integer, null: false, default: 0, index: true
6
+ Decidim::Budgets::Project.reset_column_information
7
+ Decidim::Budgets::Project.find_each(&:update_comments_count)
8
+ end
9
+ end
@@ -1,5 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require "decidim/budgets/workflows"
3
4
  require "decidim/budgets/admin"
4
5
  require "decidim/budgets/engine"
5
6
  require "decidim/budgets/admin_engine"
@@ -12,17 +12,22 @@ module Decidim
12
12
  paths["lib/tasks"] = nil
13
13
 
14
14
  routes do
15
- resources :projects do
15
+ resources :budgets do
16
+ resources :projects do
17
+ collection do
18
+ resource :proposals_import, only: [:new, :create]
19
+ end
20
+ end
21
+ end
22
+
23
+ resources :projects, exclude: [:index, :new, :create, :edit, :update, :destroy] do
16
24
  get :proposals_picker, on: :collection
17
25
 
18
26
  resources :attachment_collections
19
27
  resources :attachments
20
- collection do
21
- resource :proposals_import, only: [:new, :create]
22
- end
23
28
  end
24
29
 
25
- root to: "projects#index"
30
+ root to: "budgets#index"
26
31
  end
27
32
 
28
33
  def load_seed
@@ -19,7 +19,13 @@ Decidim.register_component(:budgets) do |component|
19
19
  component.actions = %(vote)
20
20
 
21
21
  component.on(:before_destroy) do |instance|
22
- raise StandardError, "Can't remove this component" if Decidim::Budgets::Project.where(component: instance).any?
22
+ raise StandardError, "Can't remove this component" if Decidim::Budgets::Budget.where(component: instance).any?
23
+ end
24
+
25
+ component.register_resource(:budget) do |resource|
26
+ resource.model_class_name = "Decidim::Budgets::Budget"
27
+ resource.card = "decidim/budgets/budget"
28
+ resource.searchable = true
23
29
  end
24
30
 
25
31
  component.register_resource(:project) do |resource|
@@ -30,12 +36,17 @@ Decidim.register_component(:budgets) do |component|
30
36
  resource.searchable = true
31
37
  end
32
38
 
33
- component.register_stat :projects_count, primary: true, priority: Decidim::StatsRegistry::LOW_PRIORITY do |components, start_at, end_at|
39
+ component.register_stat :budgets_count, primary: true, priority: Decidim::StatsRegistry::LOW_PRIORITY do |components|
40
+ Decidim::Budgets::Budget.where(component: components).count
41
+ end
42
+
43
+ component.register_stat :projects_count, priority: Decidim::StatsRegistry::LOW_PRIORITY do |components, start_at, end_at|
34
44
  Decidim::Budgets::FilteredProjects.for(components, start_at, end_at).count
35
45
  end
36
46
 
37
47
  component.register_stat :orders_count do |components, start_at, end_at|
38
- orders = Decidim::Budgets::Order.where(component: components)
48
+ budgets = Decidim::Budgets::Budget.where(component: components)
49
+ orders = Decidim::Budgets::Order.where(component: budgets)
39
50
  orders = orders.where("created_at >= ?", start_at) if start_at.present?
40
51
  orders = orders.where("created_at <= ?", end_at) if end_at.present?
41
52
  orders.count
@@ -43,7 +54,7 @@ Decidim.register_component(:budgets) do |component|
43
54
 
44
55
  component.register_stat :comments_count, tag: :comments do |components, start_at, end_at|
45
56
  projects = Decidim::Budgets::FilteredProjects.for(components, start_at, end_at)
46
- Decidim::Comments::Comment.where(root_commentable: projects).count
57
+ projects.sum(:comments_count)
47
58
  end
48
59
 
49
60
  component.register_stat :followers_count, tag: :followers, priority: Decidim::StatsRegistry::LOW_PRIORITY do |components, start_at, end_at|
@@ -52,70 +63,104 @@ Decidim.register_component(:budgets) do |component|
52
63
  end
53
64
 
54
65
  component.settings(:global) do |settings|
66
+ settings.attribute :scopes_enabled, type: :boolean, default: false
67
+ settings.attribute :scope_id, type: :scope
68
+ settings.attribute :workflow, type: :enum, default: "one", choices: -> { Decidim::Budgets.workflows.keys.map(&:to_s) }
55
69
  settings.attribute :projects_per_page, type: :integer, default: 12
56
- settings.attribute :total_budget, type: :integer, default: 100_000_000
57
70
  settings.attribute :vote_rule_threshold_percent_enabled, type: :boolean, default: true
58
71
  settings.attribute :vote_threshold_percent, type: :integer, default: 70
59
72
  settings.attribute :vote_rule_minimum_budget_projects_enabled, type: :boolean, default: false
60
73
  settings.attribute :vote_minimum_budget_projects_number, type: :integer, default: 1
61
74
  settings.attribute :comments_enabled, type: :boolean, default: true
75
+ settings.attribute :comments_max_length, type: :integer, required: false
62
76
  settings.attribute :resources_permissions_enabled, type: :boolean, default: true
63
77
  settings.attribute :announcement, type: :text, translated: true, editor: true
78
+
79
+ settings.attribute :landing_page_content, type: :text, translated: true, editor: true
80
+ settings.attribute :more_information_modal, type: :text, translated: true
64
81
  end
65
82
 
66
83
  component.settings(:step) do |settings|
67
84
  settings.attribute :comments_blocked, type: :boolean, default: false
68
- settings.attribute :votes_enabled, type: :boolean, default: true
85
+ settings.attribute :votes, type: :enum, default: "enabled", choices: %w(disabled enabled finished)
69
86
  settings.attribute :show_votes, type: :boolean, default: false
70
87
  settings.attribute :announcement, type: :text, translated: true, editor: true
88
+
89
+ settings.attribute :landing_page_content, type: :text, translated: true, editor: true
90
+ settings.attribute :more_information_modal, type: :text, translated: true
91
+ settings.attribute :announcement, type: :text, translated: true, editor: true
71
92
  end
72
93
 
73
94
  component.seeds do |participatory_space|
95
+ landing_page_content = Decidim::Faker::Localized.localized do
96
+ "<h2>#{::Faker::Lorem.sentence}</h2>" \
97
+ "<p>#{::Faker::Lorem.paragraph}</p>" \
98
+ "<p>#{::Faker::Lorem.paragraph}</p>"
99
+ end
100
+
74
101
  component = Decidim::Component.create!(
75
102
  name: Decidim::Components::Namer.new(participatory_space.organization.available_locales, :budgets).i18n_name,
76
103
  manifest_name: :budgets,
77
104
  published_at: Time.current,
78
- participatory_space: participatory_space
105
+ participatory_space: participatory_space,
106
+ settings: {
107
+ landing_page_content: landing_page_content,
108
+ more_information_modal: Decidim::Faker::Localized.paragraph(4),
109
+ workflow: %w(one random all).sample
110
+ }
79
111
  )
80
112
 
81
- 2.times do
82
- project = Decidim::Budgets::Project.create!(
113
+ rand(1...3).times do
114
+ Decidim::Budgets::Budget.create!(
83
115
  component: component,
84
- scope: participatory_space.organization.scopes.sample,
85
- category: participatory_space.categories.sample,
86
116
  title: Decidim::Faker::Localized.sentence(2),
87
117
  description: Decidim::Faker::Localized.wrapped("<p>", "</p>") do
88
118
  Decidim::Faker::Localized.paragraph(3)
89
119
  end,
90
- budget: Faker::Number.number(8)
91
- )
92
-
93
- attachment_collection = Decidim::AttachmentCollection.create!(
94
- name: Decidim::Faker::Localized.word,
95
- description: Decidim::Faker::Localized.sentence(5),
96
- collection_for: project
120
+ total_budget: Faker::Number.number(8)
97
121
  )
122
+ end
98
123
 
99
- Decidim::Attachment.create!(
100
- title: Decidim::Faker::Localized.sentence(2),
101
- description: Decidim::Faker::Localized.sentence(5),
102
- file: File.new(File.join(__dir__, "seeds", "Exampledocument.pdf")),
103
- attachment_collection: attachment_collection,
104
- attached_to: project
105
- )
106
- Decidim::Attachment.create!(
107
- title: Decidim::Faker::Localized.sentence(2),
108
- description: Decidim::Faker::Localized.sentence(5),
109
- file: File.new(File.join(__dir__, "seeds", "city.jpeg")),
110
- attached_to: project
111
- )
112
- Decidim::Attachment.create!(
113
- title: Decidim::Faker::Localized.sentence(2),
114
- description: Decidim::Faker::Localized.sentence(5),
115
- file: File.new(File.join(__dir__, "seeds", "Exampledocument.pdf")),
116
- attached_to: project
117
- )
118
- Decidim::Comments::Seed.comments_for(project)
124
+ Decidim::Budgets::Budget.where(component: component).each do |budget|
125
+ rand(2...4).times do
126
+ project = Decidim::Budgets::Project.create!(
127
+ budget: budget,
128
+ scope: participatory_space.organization.scopes.sample,
129
+ category: participatory_space.categories.sample,
130
+ title: Decidim::Faker::Localized.sentence(2),
131
+ description: Decidim::Faker::Localized.wrapped("<p>", "</p>") do
132
+ Decidim::Faker::Localized.paragraph(3)
133
+ end,
134
+ budget_amount: Faker::Number.number(8)
135
+ )
136
+
137
+ attachment_collection = Decidim::AttachmentCollection.create!(
138
+ name: Decidim::Faker::Localized.word,
139
+ description: Decidim::Faker::Localized.sentence(5),
140
+ collection_for: project
141
+ )
142
+
143
+ Decidim::Attachment.create!(
144
+ title: Decidim::Faker::Localized.sentence(2),
145
+ description: Decidim::Faker::Localized.sentence(5),
146
+ attachment_collection: attachment_collection,
147
+ attached_to: project,
148
+ file: File.new(File.join(__dir__, "seeds", "Exampledocument.pdf"))
149
+ )
150
+ Decidim::Attachment.create!(
151
+ title: Decidim::Faker::Localized.sentence(2),
152
+ description: Decidim::Faker::Localized.sentence(5),
153
+ attached_to: project,
154
+ file: File.new(File.join(__dir__, "seeds", "city.jpeg"))
155
+ )
156
+ Decidim::Attachment.create!(
157
+ title: Decidim::Faker::Localized.sentence(2),
158
+ description: Decidim::Faker::Localized.sentence(5),
159
+ attached_to: project,
160
+ file: File.new(File.join(__dir__, "seeds", "Exampledocument.pdf"))
161
+ )
162
+ Decidim::Comments::Seed.comments_for(project)
163
+ end
119
164
  end
120
165
  end
121
166
  end
@@ -12,15 +12,17 @@ module Decidim
12
12
  isolate_namespace Decidim::Budgets
13
13
 
14
14
  routes do
15
- resources :projects, only: [:index, :show]
16
- resource :order, only: [:destroy] do
17
- member do
18
- post :checkout
15
+ resources :budgets, only: [:index, :show] do
16
+ resources :projects, only: [:index, :show]
17
+ resource :order, only: [:destroy] do
18
+ member do
19
+ post :checkout
20
+ end
21
+ resource :line_item, only: [:create, :destroy]
19
22
  end
20
- resource :line_item, only: [:create, :destroy]
21
23
  end
22
24
 
23
- root to: "projects#index"
25
+ root to: "budgets#index"
24
26
  end
25
27
 
26
28
  initializer "decidim_budgets.assets" do |app|