decidim-proposals 0.28.5 → 0.29.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 (179) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +1 -18
  3. data/app/cells/decidim/proposals/cost_report_cell.rb +0 -3
  4. data/app/cells/decidim/proposals/highlighted_proposals_for_component/show.erb +11 -11
  5. data/app/cells/decidim/proposals/highlighted_proposals_for_component_cell.rb +1 -1
  6. data/app/cells/decidim/proposals/participatory_text_proposal/buttons.erb +1 -1
  7. data/app/cells/decidim/proposals/participatory_text_proposal_cell.rb +2 -3
  8. data/app/cells/decidim/proposals/proposal_cell.rb +2 -0
  9. data/app/cells/decidim/proposals/proposal_g/show.erb +23 -0
  10. data/app/cells/decidim/proposals/proposal_g_cell.rb +48 -0
  11. data/app/cells/decidim/proposals/proposal_l_cell.rb +18 -19
  12. data/app/cells/decidim/proposals/proposal_metadata_cell.rb +23 -15
  13. data/app/commands/decidim/proposals/admin/answer_proposal.rb +2 -1
  14. data/app/commands/decidim/proposals/admin/assign_proposals_to_valuator.rb +7 -5
  15. data/app/commands/decidim/proposals/admin/create_proposal.rb +4 -6
  16. data/app/commands/decidim/proposals/admin/create_proposal_state.rb +15 -0
  17. data/app/commands/decidim/proposals/admin/destroy_proposal_state.rb +10 -0
  18. data/app/commands/decidim/proposals/admin/import_proposals.rb +10 -2
  19. data/app/commands/decidim/proposals/admin/notify_proposal_answer.rb +4 -21
  20. data/app/commands/decidim/proposals/admin/unassign_proposals_from_valuator.rb +6 -4
  21. data/app/commands/decidim/proposals/admin/update_proposal_state.rb +13 -0
  22. data/app/commands/decidim/proposals/create_proposal.rb +21 -2
  23. data/app/commands/decidim/proposals/update_proposal.rb +2 -2
  24. data/app/commands/decidim/proposals/vote_proposal.rb +1 -1
  25. data/app/commands/decidim/proposals/withdraw_proposal.rb +3 -7
  26. data/app/controllers/concerns/decidim/proposals/admin/filterable.rb +10 -22
  27. data/app/controllers/decidim/proposals/admin/proposal_states_controller.rb +86 -0
  28. data/app/controllers/decidim/proposals/admin/proposals_controller.rb +4 -0
  29. data/app/controllers/decidim/proposals/admin/valuation_assignments_controller.rb +8 -11
  30. data/app/controllers/decidim/proposals/proposals_controller.rb +38 -39
  31. data/app/events/decidim/proposals/proposal_state_changed_event.rb +37 -0
  32. data/app/forms/decidim/proposals/admin/proposal_answer_form.rb +8 -4
  33. data/app/forms/decidim/proposals/admin/proposal_form.rb +1 -1
  34. data/app/forms/decidim/proposals/admin/proposal_state_form.rb +22 -0
  35. data/app/forms/decidim/proposals/admin/proposals_fork_form.rb +1 -1
  36. data/app/forms/decidim/proposals/admin/proposals_import_form.rb +1 -1
  37. data/app/forms/decidim/proposals/admin/valuation_assignment_form.rb +12 -14
  38. data/app/forms/decidim/proposals/proposal_form.rb +25 -4
  39. data/app/forms/decidim/proposals/reject_access_to_collaborative_draft_form.rb +1 -1
  40. data/app/forms/decidim/proposals/request_access_to_collaborative_draft_form.rb +1 -1
  41. data/app/helpers/decidim/proposals/admin/proposal_bulk_actions_helper.rb +7 -17
  42. data/app/helpers/decidim/proposals/admin/proposals_helper.rb +13 -89
  43. data/app/helpers/decidim/proposals/application_helper.rb +16 -10
  44. data/app/helpers/decidim/proposals/map_helper.rb +1 -1
  45. data/app/helpers/decidim/proposals/proposal_cells_helper.rb +6 -2
  46. data/app/helpers/decidim/proposals/proposal_votes_helper.rb +3 -3
  47. data/app/helpers/decidim/proposals/proposal_wizard_helper.rb +5 -8
  48. data/app/helpers/decidim/proposals/proposals_helper.rb +18 -24
  49. data/app/models/decidim/proposals/proposal.rb +83 -29
  50. data/app/models/decidim/proposals/proposal_state.rb +58 -0
  51. data/app/packs/documents/decidim/proposals/participatory_texts/participatory_text.md +1 -3
  52. data/app/packs/images/decidim/proposals/proposal-placeholder-card-g.svg +15 -0
  53. data/app/packs/src/decidim/proposals/add_proposal.js +2 -0
  54. data/app/packs/src/decidim/proposals/admin/proposals.js +43 -8
  55. data/app/packs/stylesheets/decidim/proposals/proposals.scss +39 -1
  56. data/app/permissions/decidim/proposals/admin/permissions.rb +16 -4
  57. data/app/permissions/decidim/proposals/permissions.rb +3 -4
  58. data/app/presenters/decidim/proposals/admin_log/proposal_state_presenter.rb +21 -0
  59. data/app/presenters/decidim/proposals/proposal_presenter.rb +12 -3
  60. data/app/queries/decidim/proposals/metrics/endorsements_metric_manage.rb +1 -1
  61. data/app/queries/decidim/proposals/metrics/proposal_followers_metric_measure.rb +1 -1
  62. data/app/queries/decidim/proposals/metrics/proposal_participants_metric_measure.rb +4 -4
  63. data/app/queries/decidim/proposals/metrics/proposals_metric_manage.rb +1 -1
  64. data/app/queries/decidim/proposals/metrics/votes_metric_manage.rb +1 -1
  65. data/app/services/decidim/proposals/diff_renderer.rb +1 -3
  66. data/app/services/decidim/proposals/proposal_builder.rb +1 -1
  67. data/app/views/decidim/proposals/admin/imports/_proposals_fields.html.erb +1 -1
  68. data/app/views/decidim/proposals/admin/participatory_texts/index.html.erb +3 -2
  69. data/app/views/decidim/proposals/admin/proposal_answers/_form.html.erb +2 -2
  70. data/app/views/decidim/proposals/admin/proposal_notes/_proposal_notes.html.erb +3 -3
  71. data/app/views/decidim/proposals/admin/proposal_states/_form.html.erb +67 -0
  72. data/app/views/decidim/proposals/admin/proposal_states/edit.html.erb +18 -0
  73. data/app/views/decidim/proposals/admin/proposal_states/index.html.erb +50 -0
  74. data/app/views/decidim/proposals/admin/proposal_states/new.html.erb +18 -0
  75. data/app/views/decidim/proposals/admin/proposals/_bulk-actions.html.erb +6 -12
  76. data/app/views/decidim/proposals/admin/proposals/_form.html.erb +6 -6
  77. data/app/views/decidim/proposals/admin/proposals/_proposal-tr.html.erb +2 -2
  78. data/app/views/decidim/proposals/admin/proposals/bulk_actions/_assign_to_valuator.html.erb +11 -7
  79. data/app/views/decidim/proposals/admin/proposals/bulk_actions/_dropdown.html.erb +7 -5
  80. data/app/views/decidim/proposals/admin/proposals/bulk_actions/_merge.html.erb +2 -2
  81. data/app/views/decidim/proposals/admin/proposals/bulk_actions/_publish_answers.html.erb +2 -2
  82. data/app/views/decidim/proposals/admin/proposals/bulk_actions/_recategorize.html.erb +2 -2
  83. data/app/views/decidim/proposals/admin/proposals/bulk_actions/_scope-change.html.erb +2 -2
  84. data/app/views/decidim/proposals/admin/proposals/bulk_actions/_split.html.erb +2 -2
  85. data/app/views/decidim/proposals/admin/proposals/bulk_actions/_unassign_from_valuator.html.erb +11 -7
  86. data/app/views/decidim/proposals/admin/proposals/bulk_actions/_valuators_picker.html.erb +12 -0
  87. data/app/views/decidim/proposals/admin/proposals/index.html.erb +11 -7
  88. data/app/views/decidim/proposals/admin/proposals/publish_answers.js.erb +1 -1
  89. data/app/views/decidim/proposals/admin/proposals/show.html.erb +3 -2
  90. data/app/views/decidim/proposals/admin/proposals/update_attribute.js.erb +3 -3
  91. data/app/views/decidim/proposals/proposals/_edit_form_fields.html.erb +12 -5
  92. data/app/views/decidim/proposals/proposals/_proposal.html.erb +1 -1
  93. data/app/views/decidim/proposals/proposals/_proposal_aside.html.erb +1 -1
  94. data/app/views/decidim/proposals/proposals/_proposals.html.erb +9 -3
  95. data/app/views/decidim/proposals/proposals/_vote_button.html.erb +1 -1
  96. data/app/views/decidim/proposals/proposals/_voting_rules.html.erb +3 -3
  97. data/app/views/decidim/proposals/proposals/_wizard_header.html.erb +0 -1
  98. data/app/views/decidim/proposals/proposals/index.html.erb +1 -1
  99. data/app/views/decidim/proposals/proposals/index.js.erb +0 -12
  100. data/app/views/decidim/proposals/proposals/new.html.erb +2 -7
  101. data/app/views/decidim/proposals/proposals/participatory_texts/_proposal_vote_button.html.erb +4 -4
  102. data/app/views/decidim/proposals/proposals/participatory_texts/_proposal_votes_count.html.erb +8 -8
  103. data/app/views/decidim/proposals/proposals/preview.html.erb +1 -1
  104. data/app/views/decidim/proposals/proposals/show.html.erb +3 -3
  105. data/config/locales/ar.yml +9 -115
  106. data/config/locales/bg.yml +117 -111
  107. data/config/locales/ca.yml +86 -83
  108. data/config/locales/cs.yml +65 -127
  109. data/config/locales/de.yml +128 -125
  110. data/config/locales/el.yml +8 -121
  111. data/config/locales/en.yml +110 -107
  112. data/config/locales/es-MX.yml +85 -82
  113. data/config/locales/es-PY.yml +88 -85
  114. data/config/locales/es.yml +83 -80
  115. data/config/locales/eu.yml +166 -170
  116. data/config/locales/fi-plain.yml +90 -87
  117. data/config/locales/fi.yml +139 -136
  118. data/config/locales/fr-CA.yml +92 -87
  119. data/config/locales/fr.yml +83 -78
  120. data/config/locales/ga-IE.yml +1 -27
  121. data/config/locales/gl.yml +11 -107
  122. data/config/locales/he-IL.yml +0 -17
  123. data/config/locales/hu.yml +18 -90
  124. data/config/locales/id-ID.yml +6 -106
  125. data/config/locales/is-IS.yml +8 -33
  126. data/config/locales/it.yml +14 -103
  127. data/config/locales/ja.yml +117 -112
  128. data/config/locales/lb.yml +1 -0
  129. data/config/locales/lt.yml +6 -123
  130. data/config/locales/lv.yml +4 -101
  131. data/config/locales/nl.yml +11 -102
  132. data/config/locales/no.yml +7 -108
  133. data/config/locales/pl.yml +110 -115
  134. data/config/locales/pt-BR.yml +10 -84
  135. data/config/locales/pt.yml +9 -109
  136. data/config/locales/ro-RO.yml +15 -117
  137. data/config/locales/ru.yml +9 -53
  138. data/config/locales/sk.yml +5 -109
  139. data/config/locales/sl.yml +4 -0
  140. data/config/locales/sv.yml +142 -337
  141. data/config/locales/tr-TR.yml +64 -108
  142. data/config/locales/uk.yml +11 -55
  143. data/config/locales/zh-CN.yml +5 -100
  144. data/config/locales/zh-TW.yml +8 -119
  145. data/db/migrate/20240110203500_add_withdrawn_at_field_to_proposals.rb +27 -0
  146. data/db/migrate/20240110203501_create_decidim_proposals_proposal_state.rb +14 -0
  147. data/db/migrate/20240110203502_add_state_id_to_decidim_proposals_proposals.rb +13 -0
  148. data/db/migrate/20240110203503_remove_state_from_decidim_proposals_proposals.rb +11 -0
  149. data/db/migrate/20240110203504_create_default_proposal_states.rb +31 -0
  150. data/db/migrate/20240209092404_change_color_fields_on_proposals_states.rb +54 -0
  151. data/decidim-proposals.gemspec +3 -3
  152. data/lib/decidim/api/proposal_type.rb +4 -13
  153. data/lib/decidim/api/proposals_type.rb +3 -1
  154. data/lib/decidim/proposals/admin_engine.rb +8 -0
  155. data/lib/decidim/proposals/admin_filter.rb +37 -0
  156. data/lib/decidim/proposals/component.rb +8 -5
  157. data/lib/decidim/proposals/engine.rb +1 -15
  158. data/lib/decidim/proposals/import/proposal_answer_creator.rb +6 -6
  159. data/lib/decidim/proposals/import/proposal_creator.rb +1 -1
  160. data/lib/decidim/proposals/markdown_to_proposals.rb +2 -8
  161. data/lib/decidim/proposals/proposal_serializer.rb +8 -9
  162. data/lib/decidim/proposals/seeds.rb +60 -51
  163. data/lib/decidim/proposals/test/factories.rb +69 -14
  164. data/lib/decidim/proposals/version.rb +1 -1
  165. data/lib/decidim/proposals.rb +84 -12
  166. data/lib/tasks/proposals/upgrade/{decdim_proposals_upgrade_tasks.rake → decidim_proposals_upgrade_tasks.rake} +0 -13
  167. metadata +51 -40
  168. data/app/events/decidim/proposals/accepted_proposal_event.rb +0 -17
  169. data/app/events/decidim/proposals/evaluating_proposal_event.rb +0 -11
  170. data/app/events/decidim/proposals/rejected_proposal_event.rb +0 -17
  171. data/app/forms/decidim/proposals/proposal_wizard_create_step_form.rb +0 -44
  172. data/app/queries/decidim/proposals/similar_proposals.rb +0 -67
  173. data/app/services/decidim/proposals/collaborative_draft_diff_renderer.rb +0 -22
  174. data/app/views/decidim/proposals/proposals/_endorsements_card_row.html.erb +0 -0
  175. data/app/views/decidim/proposals/proposals/_proposal_badge.html.erb +0 -3
  176. data/app/views/decidim/proposals/proposals/compare.html.erb +0 -24
  177. data/app/views/decidim/proposals/proposals/complete.html.erb +0 -31
  178. data/config/locales/bn-BD.yml +0 -1
  179. data/config/locales/bs-BA.yml +0 -100
@@ -5,6 +5,17 @@ require "decidim/core/test/factories"
5
5
  require "decidim/participatory_processes/test/factories"
6
6
  require "decidim/meetings/test/factories"
7
7
 
8
+ def generate_state_title(token, skip_injection: false)
9
+ value = I18n.t(token, scope: "decidim.proposals.answers")
10
+ Decidim::Faker::Localized.localized do
11
+ if skip_injection
12
+ value
13
+ else
14
+ "<script>alert(\"proposal_state_title\");</script> #{value}"
15
+ end
16
+ end
17
+ end
18
+
8
19
  FactoryBot.define do
9
20
  factory :proposal_component, parent: :component do
10
21
  transient do
@@ -14,6 +25,10 @@ FactoryBot.define do
14
25
  manifest_name { :proposals }
15
26
  participatory_space { create(:participatory_process, :with_steps, organization:, skip_injection:) }
16
27
 
28
+ after :create do |proposal_component|
29
+ Decidim::Proposals.create_default_states!(proposal_component, nil, with_traceability: false)
30
+ end
31
+
17
32
  trait :with_endorsements_enabled do
18
33
  step_settings do
19
34
  {
@@ -148,10 +163,10 @@ FactoryBot.define do
148
163
  end
149
164
  end
150
165
 
151
- trait :with_can_accumulate_supports_beyond_threshold do
166
+ trait :with_can_accumulate_votes_beyond_threshold do
152
167
  settings do
153
168
  {
154
- can_accumulate_supports_beyond_threshold: true
169
+ can_accumulate_votes_beyond_threshold: true
155
170
  }
156
171
  end
157
172
  end
@@ -246,12 +261,45 @@ FactoryBot.define do
246
261
  end
247
262
  end
248
263
 
264
+ factory :proposal_state, class: "Decidim::Proposals::ProposalState" do
265
+ transient do
266
+ skip_injection { false }
267
+ end
268
+ token { :not_answered }
269
+ title { generate_state_title(:not_answered, skip_injection:) }
270
+ announcement_title { generate_localized_title(:announcement_title, skip_injection:) }
271
+ component { build(:proposal_component) }
272
+ bg_color { Faker::Color.hex_color(:light) }
273
+ text_color { Faker::Color.hex_color(:dark) }
274
+
275
+ trait :evaluating do
276
+ title { generate_state_title(:evaluating, skip_injection:) }
277
+ token { :evaluating }
278
+ end
279
+
280
+ trait :accepted do
281
+ title { generate_state_title(:accepted, skip_injection:) }
282
+ token { :accepted }
283
+ end
284
+
285
+ trait :rejected do
286
+ title { generate_state_title(:rejected, skip_injection:) }
287
+ token { :rejected }
288
+ end
289
+
290
+ trait :withdrawn do
291
+ title { generate_state_title(:withdrawn, skip_injection:) }
292
+ token { :withdrawn }
293
+ end
294
+ end
295
+
249
296
  factory :proposal, class: "Decidim::Proposals::Proposal" do
250
297
  transient do
251
298
  users { nil }
252
299
  # user_groups correspondence to users is by sorting order
253
300
  user_groups { [] }
254
301
  skip_injection { false }
302
+ state { :not_answered }
255
303
  end
256
304
 
257
305
  title { generate_localized_title(:proposal_title, skip_injection:) }
@@ -266,6 +314,14 @@ FactoryBot.define do
266
314
  execution_period { generate_localized_title(:proposal_execution_period, skip_injection:) }
267
315
 
268
316
  after(:build) do |proposal, evaluator|
317
+ if proposal.component
318
+ existing_states = Decidim::Proposals::ProposalState.where(component: proposal.component)
319
+
320
+ Decidim::Proposals.create_default_states!(proposal.component, nil, with_traceability: false) unless existing_states.any?
321
+ end
322
+
323
+ proposal.assign_state(evaluator.state)
324
+
269
325
  proposal.title = if evaluator.title.is_a?(String)
270
326
  { proposal.try(:organization).try(:default_locale) || "en" => evaluator.title }
271
327
  else
@@ -300,7 +356,7 @@ FactoryBot.define do
300
356
  trait :participant_author do
301
357
  after :build do |proposal, evaluator|
302
358
  proposal.coauthorships.clear
303
- user = build(:user, :confirmed, organization: proposal.component.participatory_space.organization, skip_injection: evaluator.skip_injection)
359
+ user = build(:user, organization: proposal.component.participatory_space.organization, skip_injection: evaluator.skip_injection)
304
360
  proposal.coauthorships.build(author: user)
305
361
  end
306
362
  end
@@ -324,42 +380,42 @@ FactoryBot.define do
324
380
  trait :official_meeting do
325
381
  after :build do |proposal, evaluator|
326
382
  proposal.coauthorships.clear
327
- component = build(:meeting_component, :published, participatory_space: proposal.component.participatory_space, skip_injection: evaluator.skip_injection)
328
- proposal.coauthorships.build(author: build(:meeting, :published, component:, skip_injection: evaluator.skip_injection))
383
+ component = build(:meeting_component, participatory_space: proposal.component.participatory_space, skip_injection: evaluator.skip_injection)
384
+ proposal.coauthorships.build(author: build(:meeting, component:, skip_injection: evaluator.skip_injection))
329
385
  end
330
386
  end
331
387
 
332
388
  trait :evaluating do
333
- state { "evaluating" }
389
+ state { :evaluating }
334
390
  answered_at { Time.current }
335
391
  state_published_at { Time.current }
336
392
  end
337
393
 
338
394
  trait :accepted do
339
- state { "accepted" }
395
+ state { :accepted }
340
396
  answered_at { Time.current }
341
397
  state_published_at { Time.current }
342
398
  end
343
399
 
344
400
  trait :rejected do
345
- state { "rejected" }
401
+ state { :rejected }
346
402
  answered_at { Time.current }
347
403
  state_published_at { Time.current }
348
404
  end
349
405
 
350
406
  trait :withdrawn do
351
- state { "withdrawn" }
407
+ withdrawn_at { Time.current }
352
408
  end
353
409
 
354
410
  trait :accepted_not_published do
355
- state { "accepted" }
411
+ state { :accepted }
356
412
  answered_at { Time.current }
357
413
  state_published_at { nil }
358
414
  answer { generate_localized_title }
359
415
  end
360
416
 
361
417
  trait :with_answer do
362
- state { "accepted" }
418
+ state { :accepted }
363
419
  answer { generate_localized_title }
364
420
  answered_at { Time.current }
365
421
  state_published_at { Time.current }
@@ -388,8 +444,7 @@ FactoryBot.define do
388
444
  trait :with_endorsements do
389
445
  after :create do |proposal, evaluator|
390
446
  5.times.collect do
391
- create(:endorsement, resource: proposal,
392
- author: build(:user, :confirmed, organization: proposal.participatory_space.organization, skip_injection: evaluator.skip_injection),
447
+ create(:endorsement, resource: proposal, author: build(:user, organization: proposal.participatory_space.organization, skip_injection: evaluator.skip_injection),
393
448
  skip_injection: evaluator.skip_injection)
394
449
  end
395
450
  end
@@ -434,7 +489,7 @@ FactoryBot.define do
434
489
  end
435
490
  amendable { build(:proposal, skip_injection:) }
436
491
  emendation { build(:proposal, component: amendable.component, skip_injection:) }
437
- amender { build(:user, :confirmed, organization: amendable.component.participatory_space.organization, skip_injection:) }
492
+ amender { build(:user, organization: amendable.component.participatory_space.organization, skip_injection:) }
438
493
  state { Decidim::Amendment::STATES.keys.sample }
439
494
  end
440
495
 
@@ -4,7 +4,7 @@ module Decidim
4
4
  # This holds decidim-proposals version.
5
5
  module Proposals
6
6
  def self.version
7
- "0.28.5"
7
+ "0.29.0.rc1"
8
8
  end
9
9
  end
10
10
  end
@@ -22,18 +22,6 @@ module Decidim
22
22
 
23
23
  include ActiveSupport::Configurable
24
24
 
25
- # Public Setting that defines the similarity minimum value to consider two
26
- # proposals similar. Defaults to 0.25.
27
- config_accessor :similarity_threshold do
28
- 0.25
29
- end
30
-
31
- # Public Setting that defines how many similar proposals will be shown.
32
- # Defaults to 10.
33
- config_accessor :similarity_limit do
34
- 10
35
- end
36
-
37
25
  # Public Setting that defines how many proposals will be shown in the
38
26
  # participatory_space_highlighted_elements view hook
39
27
  config_accessor :participatory_space_highlighted_proposals_limit do
@@ -45,6 +33,90 @@ module Decidim
45
33
  config_accessor :process_group_highlighted_proposals_limit do
46
34
  3
47
35
  end
36
+
37
+ def self.proposal_states_colors
38
+ {
39
+ gray: {
40
+ background: "#F6F8FA",
41
+ foreground: "#4B5058",
42
+ name: I18n.t("gray", scope: "activemodel.attributes.proposal_state.colors")
43
+ },
44
+ blue: {
45
+ background: "#EBF9FF",
46
+ foreground: "#0851A6",
47
+ name: I18n.t("blue", scope: "activemodel.attributes.proposal_state.colors")
48
+ },
49
+ green: {
50
+ background: "#E3FCE9",
51
+ foreground: "#15602C",
52
+ name: I18n.t("green", scope: "activemodel.attributes.proposal_state.colors")
53
+ },
54
+ yellow: {
55
+ background: "#FFFCE5",
56
+ foreground: "#9A6700",
57
+ name: I18n.t("yellow", scope: "activemodel.attributes.proposal_state.colors")
58
+ },
59
+ orange: {
60
+ background: "#FFF1E5",
61
+ foreground: "#BC4C00",
62
+ name: I18n.t("orange", scope: "activemodel.attributes.proposal_state.colors")
63
+ },
64
+ red: {
65
+ background: "#FFEBE9",
66
+ foreground: "#D1242F",
67
+ name: I18n.t("red", scope: "activemodel.attributes.proposal_state.colors")
68
+ },
69
+ pink: {
70
+ background: "#FFEFF7",
71
+ foreground: "#BF3989",
72
+ name: I18n.t("pink", scope: "activemodel.attributes.proposal_state.colors")
73
+ },
74
+ purple: {
75
+ background: "#FBEFFF",
76
+ foreground: "#8250DF",
77
+ name: I18n.t("purple", scope: "activemodel.attributes.proposal_state.colors")
78
+ }
79
+ }
80
+ end
81
+
82
+ def self.create_default_states!(component, admin_user, with_traceability: true)
83
+ colors = Decidim::Proposals.proposal_states_colors
84
+
85
+ locale = Decidim.default_locale
86
+ default_states = {
87
+ evaluating: {
88
+ token: :evaluating,
89
+ bg_color: colors[:orange][:background],
90
+ text_color: colors[:orange][:foreground],
91
+ announcement_title: { locale => I18n.with_locale(locale) { I18n.t("proposal_in_evaluation_reason", scope: "decidim.proposals.proposals.show") } },
92
+ title: { locale => I18n.with_locale(locale) { I18n.t(:evaluating, scope: "decidim.proposals.answers") } }
93
+ },
94
+ accepted: {
95
+ token: :accepted,
96
+ bg_color: colors[:green][:background],
97
+ text_color: colors[:green][:foreground],
98
+ announcement_title: { locale => I18n.with_locale(locale) { I18n.t("proposal_accepted_reason", scope: "decidim.proposals.proposals.show") } },
99
+ title: { locale => I18n.with_locale(locale) { I18n.t(:accepted, scope: "decidim.proposals.answers") } }
100
+ },
101
+ rejected: {
102
+ token: :rejected,
103
+ bg_color: colors[:red][:background],
104
+ text_color: colors[:red][:foreground],
105
+ announcement_title: { locale => I18n.with_locale(locale) { I18n.t("proposal_rejected_reason", scope: "decidim.proposals.proposals.show") } },
106
+ title: { locale => I18n.with_locale(locale) { I18n.t(:rejected, scope: "decidim.proposals.answers") } }
107
+ }
108
+ }
109
+ default_states.each_key do |key|
110
+ default_states[key][:object] = if with_traceability
111
+ Decidim.traceability.create(
112
+ Decidim::Proposals::ProposalState, admin_user, component:, **default_states[key]
113
+ )
114
+ else
115
+ Decidim::Proposals::ProposalState.create(component:, **default_states[key])
116
+ end
117
+ end
118
+ default_states
119
+ end
48
120
  end
49
121
 
50
122
  module ContentParsers
@@ -2,19 +2,6 @@
2
2
 
3
3
  namespace :decidim_proposals do
4
4
  namespace :upgrade do
5
- desc "Assigns category to emendations based on amendable category"
6
- task set_categories: :environment do
7
- Decidim::Proposals::Proposal.includes(:category).find_each do |proposal|
8
- next if proposal.category.blank?
9
- next unless proposal.amendable?
10
-
11
- proposal.emendations.each do |emendation|
12
- emendation.category = proposal.category
13
- emendation.save(validate: false)
14
- end
15
- end
16
- end
17
-
18
5
  desc "Removes all proposal valuator records of which the role assignment does not exists"
19
6
  task remove_valuator_orphan_records: :environment do
20
7
  if Decidim.module_installed?("participatory_processes")