decidim-reporting_proposals 0.6.1 → 0.7.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 (85) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/lint.yml +8 -6
  3. data/.github/workflows/test_integration.yml +34 -12
  4. data/.github/workflows/test_unit.yml +27 -7
  5. data/.rubocop.yml +21 -1
  6. data/.ruby-version +1 -1
  7. data/Gemfile +6 -8
  8. data/Gemfile.lock +418 -427
  9. data/README.md +10 -0
  10. data/app/cells/concerns/decidim/reporting_proposals/proposals_picker_cell_override.rb +4 -4
  11. data/app/commands/concerns/decidim/reporting_proposals/admin/assign_proposals_to_valuator_override.rb +3 -1
  12. data/app/commands/concerns/decidim/reporting_proposals/admin/create_category_override.rb +5 -11
  13. data/app/commands/concerns/decidim/reporting_proposals/admin/create_proposal_answer_template_override.rb +24 -0
  14. data/app/commands/concerns/decidim/reporting_proposals/admin/has_result_command_override.rb +21 -0
  15. data/app/commands/concerns/decidim/reporting_proposals/admin/update_category_override.rb +8 -11
  16. data/app/commands/concerns/decidim/reporting_proposals/admin/update_imported_result_override.rb +30 -0
  17. data/app/commands/concerns/decidim/reporting_proposals/admin/update_result_override.rb +0 -4
  18. data/app/commands/concerns/decidim/reporting_proposals/create_project_override.rb +1 -1
  19. data/app/controllers/concerns/decidim/reporting_proposals/admin/proposal_answer_templates_controller_override.rb +4 -5
  20. data/app/controllers/concerns/decidim/reporting_proposals/admin/valuation_assignments_controller_override.rb +10 -4
  21. data/app/controllers/concerns/decidim/reporting_proposals/proposals_controller_override.rb +23 -31
  22. data/app/forms/concerns/decidim/reporting_proposals/admin/category_form_override.rb +1 -1
  23. data/app/forms/concerns/decidim/reporting_proposals/form_builder_override.rb +4 -1
  24. data/app/helpers/concerns/decidim/reporting_proposals/admin/proposal_bulk_actions_helper_override.rb +23 -0
  25. data/app/helpers/concerns/decidim/reporting_proposals/admin/proposals_helper_override.rb +18 -0
  26. data/app/helpers/concerns/decidim/reporting_proposals/proposal_wizard_helper_override.rb +17 -3
  27. data/app/jobs/decidim/reporting_proposals/assign_proposal_valuators_job.rb +1 -1
  28. data/app/overrides/decidim/proposals/admin/proposals/_proposal-tr/add_categories_column.html.erb.deface +8 -0
  29. data/app/overrides/decidim/proposals/admin/proposals/_proposal-tr/add_id_column.html.erb.deface +3 -0
  30. data/app/overrides/decidim/proposals/admin/proposals/_proposal-tr/add_valuators_name.html.erb.deface +5 -5
  31. data/app/overrides/decidim/proposals/admin/proposals/_proposal-tr/replace_td_title.html.erb.deface +1 -1
  32. data/app/overrides/decidim/proposals/admin/proposals/index/add_categories.html.erb.deface +3 -0
  33. data/app/overrides/decidim/proposals/admin/proposals/index/add_form_default_class.html.erb.deface +5 -0
  34. data/app/overrides/decidim/proposals/admin/proposals/index/add_id_column_header.html.erb.deface +3 -0
  35. data/app/overrides/decidim/proposals/admin/proposals/show/add_valuators_form.html.erb.deface +1 -24
  36. data/app/overrides/decidim/proposals/proposals/edit_draft/replace_partial_edit_form_fields.html.erb.deface +0 -1
  37. data/app/overrides/decidim/proposals/proposals/new/replace_partial_edit_form_fields.html.erb.deface +3 -0
  38. data/app/packs/entrypoints/decidim_reporting_proposals.js +1 -0
  39. data/app/packs/src/decidim/reporting_proposals/assign_valuators_select.js +25 -0
  40. data/app/packs/src/decidim/reporting_proposals/user_camera_inputs.js +1 -1
  41. data/app/packs/stylesheets/decidim/reporting_proposals/list_component_admin.scss +6 -0
  42. data/app/permissions/concerns/decidim/reporting_proposals/admin/permissions_override.rb +12 -2
  43. data/app/queries/decidim/reporting_proposals/nearby_proposals.rb +1 -3
  44. data/app/views/decidim/proposals/admin/proposals/_assign_to_valuator.html.erb +31 -0
  45. data/app/views/decidim/proposals/proposals/compare.html.erb +34 -0
  46. data/app/views/decidim/reporting_proposals/admin/categories/_valuators_field.html.erb +1 -1
  47. data/app/views/decidim/reporting_proposals/admin/proposals/_photo_form.html.erb +2 -2
  48. data/app/views/decidim/reporting_proposals/admin/proposals/_photo_gallery.html.erb +2 -1
  49. data/app/views/decidim/reporting_proposals/admin/proposals/_photos.html.erb +4 -1
  50. data/app/views/decidim/reporting_proposals/admin/proposals/_proposal_td_hide.html.erb +1 -9
  51. data/app/views/decidim/reporting_proposals/admin/proposals/_proposal_td_title.html.erb +5 -4
  52. data/app/views/decidim/reporting_proposals/proposals/_camera_button.html.erb +4 -2
  53. data/app/views/decidim/reporting_proposals/proposals/_reporting_proposal_fields.html.erb +66 -65
  54. data/bin/bundle +62 -0
  55. data/bin/rspec +26 -0
  56. data/bin/test +47 -0
  57. data/bin/test-legacy +3 -0
  58. data/config/locales/ca.yml +22 -34
  59. data/config/locales/de.yml +22 -36
  60. data/config/locales/en.yml +20 -1
  61. data/config/locales/es.yml +22 -36
  62. data/decidim-reporting_proposals.gemspec +1 -2
  63. data/lib/decidim/reporting_proposals/component.rb +31 -17
  64. data/lib/decidim/reporting_proposals/engine.rb +16 -12
  65. data/lib/decidim/reporting_proposals/version.rb +3 -3
  66. data/lib/tasks/reporting_proposals_statuses.rake +52 -0
  67. data/package-lock.json +120 -85
  68. data/package.json +7 -7
  69. metadata +61 -79
  70. data/.rubocop-disabled.yml +0 -11
  71. data/.rubocop_rails.yml +0 -90
  72. data/.rubocop_ruby.yml +0 -1767
  73. data/app/commands/concerns/decidim/reporting_proposals/admin/create_answer_override.rb +0 -17
  74. data/app/commands/concerns/decidim/reporting_proposals/admin/create_result_override.rb +0 -17
  75. data/app/commands/concerns/decidim/reporting_proposals/create_report_override.rb +0 -19
  76. data/app/commands/concerns/decidim/reporting_proposals/gallery_methods_override.rb +0 -18
  77. data/app/overrides/decidim/proposals/proposals/compare/add_css.html.erb.deface +0 -5
  78. data/app/overrides/decidim/proposals/proposals/compare/add_distance_badge.html.erb.deface +0 -10
  79. data/app/overrides/decidim/proposals/proposals/edit/add_user_group.html.erb.deface +0 -3
  80. data/app/overrides/decidim/proposals/proposals/new/remove_body.html.erb.deface +0 -1
  81. data/app/overrides/decidim/proposals/proposals/new/replace_body.html.erb.deface +0 -3
  82. data/app/overrides/layouts/decidim/_process_header_steps/always_show_new_proposals.html.erb.deface +0 -3
  83. data/app/views/decidim/reporting_proposals/proposals/_new_proposal_fields.html.erb +0 -9
  84. data/app/views/decidim/reporting_proposals/proposals/_user_group.html.erb +0 -5
  85. data/babel.config.json +0 -25
@@ -7,10 +7,11 @@ de:
7
7
  proposal:
8
8
  has_no_address: Adresse unbekannt
9
9
  has_no_image: Kein Foto vorhanden
10
- template:
11
- scope_for_availability: Verfügbarkeit der Komponente einschränken
12
10
  decidim:
13
11
  admin:
12
+ actions:
13
+ manage: Verwalten
14
+ new: Neu
14
15
  hidden_resource_mailer:
15
16
  notify_mail:
16
17
  body_1: Ein Administrator hat Ihre Meldung entfernt, weil sie gemeldet wurde.
@@ -18,10 +19,6 @@ de:
18
19
  hello: Guten Tag,
19
20
  reason: 'Grund: %{reason}'
20
21
  subject: Ihre Meldung wurde ausgeblendet
21
- templates:
22
- fetch:
23
- error: Diese Vorlage kann nicht gefunden werden, vielleicht wurde sie gelöscht?
24
- missing_resource: "(fehlende Ressource)"
25
22
  application:
26
23
  geocoding:
27
24
  unconfigured: Geocoding ist nicht konfiguriert!
@@ -40,6 +37,14 @@ de:
40
37
  unanswered_proposals_overdue: Nach wie vielen Tagen gilt eine nicht beantwortete Meldung als überfällig
41
38
  unanswered_proposals_overdue_help: Falls keine zeitlichen Hinweise angezeigt werden sollen, wähle hier 0.
42
39
  reporting_proposals:
40
+ actions:
41
+ amend: Änderungsvorschlag
42
+ comment: Kommentieren
43
+ create: Erstellen
44
+ endorse: Unterstützung
45
+ vote: Abstimmung
46
+ vote_comment: Kommentar bewerten
47
+ withdraw: Zurückziehen
43
48
  name: Meldungen
44
49
  settings:
45
50
  global:
@@ -168,14 +173,8 @@ de:
168
173
  geolocated_at: Hier geolokalisiert
169
174
  send_email_button:
170
175
  send_mail: Den Meldungslink per E-Mail weiterleiten
171
- proposals_valuator_mailer:
172
- notify_proposals_valuator:
173
- admin_panel: Admin Panel
174
- email_body: Du bist für die hier aufgelisteten Meldungen als Experte / Expertin zugeteilt worden. Danke für eine zeitnahe Prüfung der Statthaftigkeit und Bearbeitung der Meldung.
175
- gratitude: Vielen Dank!
176
- greeting: Hallo %{name}
177
- public_side: User-Ansicht
178
- subject: Dir wurden neue Meldungen zugewiesen
176
+ show:
177
+ report: Bericht
179
178
  reported_mailer:
180
179
  report:
181
180
  admin_resource: Diese Ressource moderieren
@@ -341,6 +340,7 @@ de:
341
340
  photo_form:
342
341
  action: Bild hinzufügen
343
342
  add_images: Bilder hinzufügen
343
+ edit_images: Bilder hinzufügen
344
344
  gallery_legend: Bilder hinzufügen
345
345
  title: Bilder
346
346
  upload_msg: Keine Dateien ausgewählt
@@ -354,6 +354,14 @@ de:
354
354
  remove_assignment: Zuweisung entfernen
355
355
  remove_assignment_confirmation: Zuweisung wurde entfernt
356
356
  valuators: Expert/innen
357
+ proposals_valuator_mailer:
358
+ notify_proposals_valuator:
359
+ admin_panel: admin panel
360
+ email_body: Du bist für die hier aufgelisteten Meldungen als Experte / Expertin zugeteilt worden. Danke für eine zeitnahe Prüfung der Statthaftigkeit und Bearbeitung der Meldung.
361
+ gratitude: Vielen Dank!
362
+ greeting: Hallo %{name}
363
+ public_side: User-Ansicht
364
+ subject: Dir wurden neue Meldungen zugewiesen
357
365
  resolution_time: Bearbeitungszeit
358
366
  time_elapsed:
359
367
  datetime:
@@ -418,25 +426,3 @@ de:
418
426
  delete_image: Bild löschen
419
427
  form:
420
428
  image: Foto
421
- templates:
422
- admin:
423
- proposal_answer_templates:
424
- form:
425
- answer_template: Standardantworten
426
- hint: "<strong>Hinweis:</strong> Diese Platzhalter kannst du überall in den Standortantworten verwenden. Sie werden dann durch die entsprechenden Inhalte ersetzt"
427
- hint1: "<strong>%{organization}</strong> wird durch den Namen der Organisation ersetzt"
428
- hint2: "<strong>%{name}</strong> wird durch den Namen des Autors ersetzt"
429
- hint3: "<strong>%{admin}</strong> wird durch den Namen der Person ersetzt, die den Vorschlag beantwortet"
430
- save: Speichern
431
- scope_for_availability_help: Beachte, dass nur Prozesse mit Komponenten des Typs "Vorschlag" aufgelistet werden.
432
- template_title: Titel der Vorlage
433
- index:
434
- confirm_delete: Möchten Sie diese Vorlage wirklich löschen?
435
- global_scope: Global (überall verfügbar)
436
- internal_state: Interner Status
437
- scope_for_availability: Bereich
438
- title: Antworten für Vorschläge / Meldungen
439
- template_chooser:
440
- select_template: Wähle eine Vorlage
441
- template_types:
442
- proposal_answer_templates: Antworten für Vorschläge / Meldungen
@@ -50,6 +50,14 @@ en:
50
50
  unanswered_proposals_overdue_help: This adds a visual alert to the list
51
51
  of proposals. Leave it to zero to disable this feature.
52
52
  reporting_proposals:
53
+ actions:
54
+ amend: Amend
55
+ comment: Comment
56
+ create: Create
57
+ endorse: Endorse
58
+ vote: Support
59
+ vote_comment: Vote comment
60
+ withdraw: Withdraw
53
61
  name: Reporting proposals
54
62
  settings:
55
63
  global:
@@ -72,7 +80,7 @@ en:
72
80
  amendments_wizard_help_text: Amendments Wizard help text
73
81
  announcement: Announcement
74
82
  attachments_allowed: Allow attachments
75
- can_accumulate_supports_beyond_threshold: Can accumulate supports beyond
83
+ can_accumulate_votes_beyond_threshold: Can accumulate supports beyond
76
84
  threshold
77
85
  collaborative_drafts_enabled: Collaborative drafts enabled
78
86
  comments_enabled: Comments enabled
@@ -226,10 +234,19 @@ en:
226
234
  proposals:
227
235
  address:
228
236
  geolocated_at: Geolocated at
237
+ index:
238
+ categories: Categories
239
+ id: ID
229
240
  send_email_button:
230
241
  send_mail: Send an email to user
231
242
  show:
232
243
  report: Report
244
+ proposals:
245
+ compare:
246
+ continue: Continue
247
+ title: Compare proposals
248
+ wizard_steps:
249
+ step_compare: Compare
233
250
  reported_mailer:
234
251
  report:
235
252
  admin_resource: Admin this resource
@@ -401,6 +418,7 @@ en:
401
418
  title: Photos
402
419
  upload_msg: No files selected
403
420
  photo_gallery:
421
+ are_you_sure: Are you sure you want to delete this image?
404
422
  delete_image: Delete image
405
423
  photos: Photos
406
424
  photos:
@@ -483,6 +501,7 @@ en:
483
501
  same situation, you can choose to support it instead of creating a new
484
502
  one.
485
503
  title: Nearby proposals
504
+ no_similars_found: No similar proposals found
486
505
  edit:
487
506
  delete_image: Delete image
488
507
  form:
@@ -7,10 +7,11 @@ es:
7
7
  proposal:
8
8
  has_no_address: No tiene dirección
9
9
  has_no_image: No tiene imagen
10
- template:
11
- scope_for_availability: Restringir disponibilidad al componente
12
10
  decidim:
13
11
  admin:
12
+ actions:
13
+ manage: Gestionar
14
+ new: Nuevo
14
15
  hidden_resource_mailer:
15
16
  notify_mail:
16
17
  body_1: Un administrador eliminó su propuesta porque ha sido denunciada.
@@ -18,10 +19,6 @@ es:
18
19
  hello: Hola,
19
20
  reason: 'Motivo: %{reason}'
20
21
  subject: Tu propuesta ha sido ocultada
21
- templates:
22
- fetch:
23
- error: No se pudo encontrar esta plantilla, ¿tal vez se ha eliminado?
24
- missing_resource: "(recurso ausente)"
25
22
  application:
26
23
  geocoding:
27
24
  unconfigured: '¡La geocodificación no está configurada!'
@@ -40,6 +37,14 @@ es:
40
37
  unanswered_proposals_overdue: Después de cuántos días se considera una propuesta sin respuesta atrasada
41
38
  unanswered_proposals_overdue_help: Esto añade una alerta visual a la lista de propuestas. Déjala a cero para desactivar esta característica.
42
39
  reporting_proposals:
40
+ actions:
41
+ amend: Enmendar
42
+ comment: Comentar
43
+ create: Crear
44
+ endorse: Adherirse
45
+ vote: Apoyar
46
+ vote_comment: Votar comentario
47
+ withdraw: Retirar
43
48
  name: Propuestas directas
44
49
  settings:
45
50
  global:
@@ -168,14 +173,8 @@ es:
168
173
  geolocated_at: Geolocalizada en
169
174
  send_email_button:
170
175
  send_mail: Enviar un correo electrónico al usuario
171
- proposals_valuator_mailer:
172
- notify_proposals_valuator:
173
- admin_panel: panel de administración
174
- email_body: Has sido asignado como evaluador para las propuestas que se listan a continuación. Esto significa que en los próximos días deberías comentar y/o una respuesta adecuada.
175
- gratitude: '¡Gracias por tu ayuda!'
176
- greeting: Hola %{name},
177
- public_side: parte pública
178
- subject: Nuevas propuestas asignadas para su evaluación
176
+ show:
177
+ report: Denunciar
179
178
  reported_mailer:
180
179
  report:
181
180
  admin_resource: Administrar este recurso
@@ -341,6 +340,7 @@ es:
341
340
  photo_form:
342
341
  action: Añadir imagen
343
342
  add_images: Añadir imágenes
343
+ edit_images: Añadir imágenes
344
344
  gallery_legend: Añadir imágenes
345
345
  title: Fotos
346
346
  upload_msg: No hay archivos seleccionados
@@ -354,6 +354,14 @@ es:
354
354
  remove_assignment: eliminar asignación
355
355
  remove_assignment_confirmation: Seguro que quieres eliminar esta asignación?
356
356
  valuators: Evaluadoras
357
+ proposals_valuator_mailer:
358
+ notify_proposals_valuator:
359
+ admin_panel: panel de administración
360
+ email_body: Has sido asignado como evaluador para las propuestas que se listan a continuación. Esto significa que en los próximos días deberías comentar y/o una respuesta adecuada.
361
+ gratitude: '¡Gracias por tu ayuda!'
362
+ greeting: Hola %{name},
363
+ public_side: parte pública
364
+ subject: Nuevas propuestas asignadas para su evaluación
357
365
  resolution_time: Tiempo de resolución
358
366
  time_elapsed:
359
367
  datetime:
@@ -418,25 +426,3 @@ es:
418
426
  delete_image: Eliminar imagen
419
427
  form:
420
428
  image: Imágen/foto
421
- templates:
422
- admin:
423
- proposal_answer_templates:
424
- form:
425
- answer_template: Plantilla de Respuesta
426
- hint: "<strong>Sugerencia:</strong> Puede utilizar estas variables en cualquier lugar de la plantilla de respuesta que se reemplazarán cuando utilice la plantilla"
427
- hint1: "<strong>%{organization}</strong> será reemplazado por el nombre de la organización"
428
- hint2: "<strong>%{name}</strong> será reemplazado por el nombre del autor"
429
- hint3: "<strong>%{admin}</strong> será sustituido por el nombre del administrador (el que responde a la propuesta)"
430
- save: Guardar
431
- scope_for_availability_help: Tenga en cuenta que sólo los espacios participativos que tengan componentes del tipo "propuestas" serán listados.
432
- template_title: Información de la plantilla
433
- index:
434
- confirm_delete: '¿Está seguro de querer eliminar esta plantilla?'
435
- global_scope: Global (disponible en todas partes)
436
- internal_state: Estado interno
437
- scope_for_availability: Ámbito
438
- title: Respuestas a propuestas
439
- template_chooser:
440
- select_template: Selecciona una plantilla de respuesta
441
- template_types:
442
- proposal_answer_templates: Respuestas a propuestas
@@ -14,7 +14,7 @@ Gem::Specification.new do |spec|
14
14
  spec.description = "A module for Decidim that facilitates the creation of proposals related to geolocated issues in a city"
15
15
  spec.license = "AGPL-3.0"
16
16
  spec.homepage = "https://github.com/openpoke/decidim-module-reporting_proposals"
17
- spec.required_ruby_version = ">= 3.1"
17
+ spec.required_ruby_version = ">= 3.2"
18
18
 
19
19
  spec.files = `git ls-files -z`.split("\x0").reject do |f|
20
20
  f.match(%r{^(test|spec|features)/})
@@ -32,7 +32,6 @@ Gem::Specification.new do |spec|
32
32
  spec.add_development_dependency "decidim-accountability", Decidim::ReportingProposals::COMPAT_DECIDIM_VERSION
33
33
  spec.add_development_dependency "decidim-budgets", Decidim::ReportingProposals::COMPAT_DECIDIM_VERSION
34
34
  spec.add_development_dependency "decidim-dev", Decidim::ReportingProposals::COMPAT_DECIDIM_VERSION
35
- spec.add_development_dependency "decidim-elections", Decidim::ReportingProposals::COMPAT_DECIDIM_VERSION
36
35
  spec.add_development_dependency "decidim-meetings", Decidim::ReportingProposals::COMPAT_DECIDIM_VERSION
37
36
  spec.add_development_dependency "decidim-templates", Decidim::ReportingProposals::COMPAT_DECIDIM_VERSION
38
37
  spec.metadata["rubygems_mfa_required"] = "true"
@@ -14,6 +14,11 @@ Decidim.register_component(:reporting_proposals) do |component|
14
14
  raise "Can't destroy this component when there are proposals" if Decidim::Proposals::Proposal.where(component: instance).any?
15
15
  end
16
16
 
17
+ component.on(:create) do |instance|
18
+ admin_user = GlobalID::Locator.locate(instance.versions.first.whodunnit)
19
+ Decidim::Proposals.create_default_states!(instance, admin_user)
20
+ end
21
+
17
22
  component.data_portable_entities = ["Decidim::Proposals::Proposal"]
18
23
 
19
24
  component.newsletter_participant_entities = ["Decidim::Proposals::Proposal"]
@@ -36,7 +41,7 @@ Decidim.register_component(:reporting_proposals) do |component|
36
41
  settings.attribute :proposal_edit_time, type: :enum, default: "limited", choices: -> { %w(limited infinite) }
37
42
  settings.attribute :proposal_edit_before_minutes, type: :integer, default: 5
38
43
  settings.attribute :threshold_per_proposal, type: :integer, default: 0
39
- settings.attribute :can_accumulate_supports_beyond_threshold, type: :boolean, default: false
44
+ settings.attribute :can_accumulate_votes_beyond_threshold, type: :boolean, default: false
40
45
  settings.attribute :proposal_answering_enabled, type: :boolean, default: true
41
46
  settings.attribute :default_sort_order, type: :select, default: "default", choices: -> { REP_POSSIBLE_SORT_ORDERS }
42
47
  settings.attribute :official_proposals_enabled, type: :boolean, default: true
@@ -103,14 +108,14 @@ Decidim.register_component(:reporting_proposals) do |component|
103
108
  end
104
109
 
105
110
  component.register_stat :proposals_count, primary: true, priority: Decidim::StatsRegistry::HIGH_PRIORITY do |components, start_at, end_at|
106
- Decidim::Proposals::FilteredProposals.for(components, start_at, end_at).published.except_withdrawn.not_hidden.count
111
+ Decidim::Proposals::FilteredProposals.for(components, start_at, end_at).published.not_withdrawn.not_hidden.count
107
112
  end
108
113
 
109
114
  component.register_stat :proposals_accepted, primary: true, priority: Decidim::StatsRegistry::HIGH_PRIORITY do |components, start_at, end_at|
110
115
  Decidim::Proposals::FilteredProposals.for(components, start_at, end_at).accepted.not_hidden.count
111
116
  end
112
117
 
113
- component.register_stat :supports_count, priority: Decidim::StatsRegistry::HIGH_PRIORITY do |components, start_at, end_at|
118
+ component.register_stat :votes_count, priority: Decidim::StatsRegistry::HIGH_PRIORITY do |components, start_at, end_at|
114
119
  proposals = Decidim::Proposals::FilteredProposals.for(components, start_at, end_at).published.not_hidden
115
120
  Decidim::Proposals::ProposalVote.where(proposal: proposals).count
116
121
  end
@@ -238,18 +243,11 @@ Decidim.register_component(:reporting_proposals) do |component|
238
243
  global = nil
239
244
  end
240
245
 
246
+ Decidim::Proposals.create_default_states!(component, admin_user)
247
+
241
248
  5.times do |n|
242
- state, answer, state_published_at = if n > 3
243
- ["accepted", Decidim::Faker::Localized.sentence(word_count: 10), Time.current]
244
- elsif n > 2
245
- ["rejected", nil, Time.current]
246
- elsif n > 1
247
- ["evaluating", nil, Time.current]
248
- elsif n.positive?
249
- ["accepted", Decidim::Faker::Localized.sentence(word_count: 10), nil]
250
- else
251
- ["not_answered", nil, nil]
252
- end
249
+ proposal_state, answer, state_published_at = random_state_answer
250
+ proposal_state = Decidim::Proposals::ProposalState.where(component:, token: proposal_state).first
253
251
 
254
252
  params = {
255
253
  component:,
@@ -257,9 +255,9 @@ Decidim.register_component(:reporting_proposals) do |component|
257
255
  scope: Faker::Boolean.boolean(true_ratio: 0.5) ? global : scopes.sample,
258
256
  title: { en: Faker::Lorem.sentence(word_count: 2) },
259
257
  body: { en: Faker::Lorem.paragraphs(number: 2).join("\n") },
260
- state:,
258
+ proposal_state:,
261
259
  answer:,
262
- answered_at: state.present? ? Time.current : nil,
260
+ answered_at: proposal_state.present? ? Time.current : nil,
263
261
  state_published_at:,
264
262
  published_at: Time.current
265
263
  }
@@ -323,7 +321,7 @@ Decidim.register_component(:reporting_proposals) do |component|
323
321
  scope: Faker::Boolean.boolean(true_ratio: 0.5) ? global : scopes.sample,
324
322
  title: { en: "#{proposal.title["en"]} #{Faker::Lorem.sentence(word_count: 1)}" },
325
323
  body: { en: "#{proposal.body["en"]} #{Faker::Lorem.sentence(word_count: 3)}" },
326
- state: "evaluating",
324
+ proposal_state: Decidim::Proposals::ProposalState.where(component: proposal.component, token: :evaluating).first,
327
325
  answer: nil,
328
326
  answered_at: Time.current,
329
327
  published_at: Time.current
@@ -478,4 +476,20 @@ Decidim.register_component(:reporting_proposals) do |component|
478
476
  body: Faker::Lorem.paragraphs(number: 2).join("\n")
479
477
  )
480
478
  end
479
+
480
+ def random_state_answer
481
+ n = rand(5)
482
+
483
+ if n > 3
484
+ [:accepted, Decidim::Faker::Localized.sentence(word_count: 10), Time.current]
485
+ elsif n > 2
486
+ [:rejected, nil, Time.current]
487
+ elsif n > 1
488
+ [:evaluating, nil, Time.current]
489
+ elsif n.positive?
490
+ [:accepted, Decidim::Faker::Localized.sentence(word_count: 10), nil]
491
+ else
492
+ [:not_answered, nil, nil]
493
+ end
494
+ end
481
495
  end
@@ -19,17 +19,14 @@ module Decidim
19
19
  Decidim::FormBuilder.include(Decidim::ReportingProposals::FormBuilderOverride)
20
20
  Decidim::ResourceHelper.include(Decidim::ReportingProposals::ResourceHelperOverride)
21
21
  Decidim::Map::Autocomplete::Builder.include(Decidim::ReportingProposals::MapBuilderOverride)
22
- Decidim::CreateReport.include(Decidim::ReportingProposals::CreateReportOverride)
23
- Decidim::GalleryMethods.include(Decidim::ReportingProposals::GalleryMethodsOverride)
24
22
  Decidim::LinkedResourcesForCell.include(Decidim::ReportingProposals::LinkedResourcesForCellOverride)
25
23
  Decidim::Proposals::ProposalSerializer.include(Decidim::ReportingProposals::ProposalSerializerOverride)
26
24
  Decidim::Proposals::ProposalsPickerCell.include(Decidim::ReportingProposals::ProposalsPickerCellOverride)
27
25
  Decidim::Proposals::PublishProposal.include(Decidim::ReportingProposals::PublishProposalOverride)
28
- Decidim::Proposals::Admin::AnswerProposal.include(Decidim::ReportingProposals::Admin::AnswerProposalOverride)
29
26
  Decidim::Accountability::Admin::ResultForm.include(Decidim::ReportingProposals::MapIncludedProposalsForFormOverride)
30
- Decidim::Accountability::Admin::CreateResult.include(Decidim::ReportingProposals::Admin::CreateResultOverride)
27
+ Decidim::Accountability::Admin::HasResultCommand.include(Decidim::ReportingProposals::Admin::HasResultCommandOverride)
31
28
  Decidim::Accountability::Admin::UpdateResult.include(Decidim::ReportingProposals::Admin::UpdateResultOverride)
32
- Decidim::Accountability::Admin::UpdateImportedResult.include(Decidim::ReportingProposals::Admin::UpdateResultOverride)
29
+ Decidim::Accountability::Admin::UpdateImportedResult.include(Decidim::ReportingProposals::Admin::UpdateImportedResultOverride)
33
30
  Decidim::Meetings::CloseMeetingForm.include(Decidim::ReportingProposals::CloseMeetingFormOverride)
34
31
  Decidim::Meetings::Admin::CloseMeetingForm.include(Decidim::ReportingProposals::CloseMeetingFormOverride)
35
32
  Decidim::Meetings::Admin::CloseMeeting.include(Decidim::ReportingProposals::CloseMeetingOverride)
@@ -38,16 +35,12 @@ module Decidim
38
35
  Decidim::Budgets::Admin::CreateProject.include(Decidim::ReportingProposals::CreateProjectOverride)
39
36
  Decidim::Budgets::Admin::UpdateProject.include(Decidim::ReportingProposals::CreateProjectOverride)
40
37
  Decidim::Templates::Admin::UpdateProposalAnswerTemplate.include(Decidim::ReportingProposals::Admin::UpdateProposalAnswerTemplateOverride) if defined?(Decidim::Templates)
41
- if defined?(Decidim::Elections::Admin::AnswerForm)
42
- Decidim::Elections::Admin::AnswerForm.include(Decidim::ReportingProposals::MapRelatedProposalsForFormOverride)
43
- Decidim::Elections::Admin::CreateAnswer.include(Decidim::ReportingProposals::Admin::CreateAnswerOverride)
44
- Decidim::Elections::Admin::UpdateAnswer.include(Decidim::ReportingProposals::Admin::CreateAnswerOverride)
45
- end
46
38
  Decidim::Admin::CategoryForm.include(Decidim::ReportingProposals::Admin::CategoryFormOverride)
47
39
  Decidim::Admin::CreateCategory.include(Decidim::ReportingProposals::Admin::CreateCategoryOverride)
48
40
  Decidim::Admin::UpdateCategory.include(Decidim::ReportingProposals::Admin::UpdateCategoryOverride)
49
41
  Decidim::Proposals::Admin::Permissions.include(Decidim::ReportingProposals::Admin::PermissionsOverride)
50
42
  Decidim::ParticipatorySpaceRoleConfig::Valuator.include(Decidim::ReportingProposals::ParticipatorySpaceRoleConfig::ValuatorOverride)
43
+ Decidim::Templates::Admin::CreateProposalAnswerTemplate.include(Decidim::ReportingProposals::Admin::CreateProposalAnswerTemplateOverride) if defined?(Decidim::Templates)
51
44
 
52
45
  # port of https://github.com/openpoke/decidim/pull/31,23,29,24,43
53
46
  Decidim::ReportedMailer.include(Decidim::ReportingProposals::ReportedMailerOverride)
@@ -92,6 +85,16 @@ module Decidim
92
85
  end
93
86
  end
94
87
 
88
+ initializer "decidim_reporting_proposals.append_compare_route", after: :append_routes do
89
+ Decidim::Proposals::Engine.routes.append do
90
+ resources :proposals, only: [] do
91
+ member do
92
+ get :compare
93
+ end
94
+ end
95
+ end
96
+ end
97
+
95
98
  # controllers and helpers overrides
96
99
  initializer "decidim_reporting_proposals.overrides", after: "decidim.action_controller" do
97
100
  config.to_prepare do
@@ -103,6 +106,7 @@ module Decidim
103
106
  Decidim::Proposals::Admin::ProposalsController.include(Decidim::ReportingProposals::Admin::ProposalsControllerOverride)
104
107
  Decidim::Proposals::Admin::ProposalAnswersController.include(Decidim::ReportingProposals::Admin::ProposalAnswersControllerOverride)
105
108
  Decidim::Proposals::Admin::ProposalsHelper.include(Decidim::ReportingProposals::Admin::ProposalsHelperOverride)
109
+ Decidim::Proposals::Admin::ProposalBulkActionsHelper.include(Decidim::ReportingProposals::Admin::ProposalBulkActionsHelperOverride)
106
110
 
107
111
  # port of https://github.com/openpoke/decidim/pull/24
108
112
  Decidim::Proposals::Admin::ValuationAssignmentsController.include(Decidim::ReportingProposals::Admin::ValuationAssignmentsControllerOverride)
@@ -136,14 +140,14 @@ module Decidim
136
140
 
137
141
  initializer "decidim_reporting_proposals.on_publish_proposals" do
138
142
  config.to_prepare do
139
- Decidim::EventsManager.subscribe(/decidim.events\.proposals\.(proposal_published|proposal_update_category)/) do |_event_name, data|
143
+ ActiveSupport::Notifications.subscribe(/decidim.events\.proposals\.(proposal_published|proposal_update_category)/) do |_event_name, data|
140
144
  Decidim::ReportingProposals::AssignProposalValuatorsJob.perform_later(data)
141
145
  end
142
146
  end
143
147
  end
144
148
 
145
149
  initializer "decidim_reporting_proposals.on_hiding_resource" do
146
- Decidim::EventsManager.subscribe("decidim.events.reports.resource_hidden") do |_event_name, data|
150
+ ActiveSupport::Notifications.subscribe("decidim.events.reports.resource_hidden") do |_event_name, data|
147
151
  Decidim::ReportingProposals::Admin::HiddenResourceMailer.notify_mail(
148
152
  data[:resource], data[:affected_users], data[:extra][:report_reasons]
149
153
  ).deliver_later
@@ -2,8 +2,8 @@
2
2
 
3
3
  module Decidim
4
4
  module ReportingProposals
5
- VERSION = "0.6.1"
6
- DECIDIM_VERSION = "0.28.1"
7
- COMPAT_DECIDIM_VERSION = [">= 0.28.1", "< 0.29"].freeze
5
+ VERSION = "0.7.3"
6
+ DECIDIM_VERSION = "0.29.7"
7
+ COMPAT_DECIDIM_VERSION = [">= 0.29.3", "< 0.30"].freeze
8
8
  end
9
9
  end
@@ -0,0 +1,52 @@
1
+ # frozen_string_literal: true
2
+
3
+ namespace :reporting_proposals do
4
+ def create_default_states!(component)
5
+ colors = Decidim::Proposals.proposal_states_colors
6
+
7
+ locale = Decidim.default_locale
8
+ default_states = {
9
+ evaluating: {
10
+ token: :evaluating,
11
+ bg_color: colors[:orange][:background],
12
+ text_color: colors[:orange][:foreground],
13
+ announcement_title: { locale => I18n.with_locale(locale) { I18n.t("proposal_in_evaluation_reason", scope: "decidim.proposals.proposals.show") } },
14
+ title: { locale => I18n.with_locale(locale) { I18n.t(:evaluating, scope: "decidim.proposals.answers") } }
15
+ },
16
+ accepted: {
17
+ token: :accepted,
18
+ bg_color: colors[:green][:background],
19
+ text_color: colors[:green][:foreground],
20
+ announcement_title: { locale => I18n.with_locale(locale) { I18n.t("proposal_accepted_reason", scope: "decidim.proposals.proposals.show") } },
21
+ title: { locale => I18n.with_locale(locale) { I18n.t(:accepted, scope: "decidim.proposals.answers") } }
22
+ },
23
+ rejected: {
24
+ token: :rejected,
25
+ bg_color: colors[:red][:background],
26
+ text_color: colors[:red][:foreground],
27
+ announcement_title: { locale => I18n.with_locale(locale) { I18n.t("proposal_rejected_reason", scope: "decidim.proposals.proposals.show") } },
28
+ title: { locale => I18n.with_locale(locale) { I18n.t(:rejected, scope: "decidim.proposals.answers") } }
29
+ }
30
+ }
31
+ default_states.each_key do |key|
32
+ default_states[key][:object] = Decidim::Proposals::ProposalState.find_or_create_by(component:, **default_states[key])
33
+ end
34
+ default_states.merge(not_answered: { token: :not_answered })
35
+ end
36
+
37
+ desc "Migrate statuses tables"
38
+ task migrate_statuses: :environment do
39
+ STATES = { 0 => :not_answered, 10 => :evaluating, 20 => :accepted, -10 => :rejected }.freeze
40
+ Decidim::Component.where(manifest_name: "reporting_proposals").find_each do |component|
41
+ puts "Creating default states for component ##{component.id} \"#{component.name.values.first}\""
42
+ default_states = create_default_states!(component)
43
+
44
+ Decidim::Proposals::Proposal.where(decidim_component_id: component.id).find_each do |proposal|
45
+ next if proposal.old_state.zero?
46
+
47
+ puts "Migrating proposal ##{proposal.id} from state #{proposal.old_state} (#{STATES[proposal.old_state]}) to #{default_states.dig(STATES[proposal.old_state], :token)}"
48
+ proposal.update!(proposal_state: default_states.dig(STATES[proposal.old_state], :object))
49
+ end
50
+ end
51
+ end
52
+ end