decidim-reporting_proposals 0.5.2 → 0.6.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/workflows/lint.yml +3 -3
- data/.github/workflows/test_integration.yml +17 -3
- data/.github/workflows/test_unit.yml +18 -4
- data/.gitignore +2 -0
- data/.rubocop.yml +1 -3
- data/.rubocop_ruby.yml +1 -2
- data/.ruby-version +1 -1
- data/Gemfile +6 -5
- data/Gemfile.lock +381 -402
- data/README.md +14 -9
- data/Rakefile +0 -2
- data/app/cells/concerns/decidim/reporting_proposals/linked_resources_for_cell_override.rb +23 -0
- data/app/cells/decidim/reporting_proposals/edit_note_modal/show.erb +22 -19
- data/app/commands/concerns/decidim/{proposals → reporting_proposals}/admin/answer_proposal_override.rb +2 -2
- data/app/commands/concerns/decidim/{proposals → reporting_proposals}/admin/assign_proposals_to_valuator_override.rb +1 -1
- data/app/commands/concerns/decidim/reporting_proposals/admin/update_category_override.rb +1 -1
- data/app/commands/concerns/decidim/reporting_proposals/admin/update_proposal_answer_template_override.rb +26 -0
- data/app/commands/concerns/decidim/{proposals → reporting_proposals}/publish_proposal_override.rb +2 -2
- data/app/commands/decidim/reporting_proposals/create_reporting_proposal.rb +1 -1
- data/app/commands/decidim/reporting_proposals/update_reporting_proposal.rb +38 -0
- data/app/controllers/concerns/decidim/reporting_proposals/admin/proposal_answer_templates_controller_override.rb +14 -0
- data/app/controllers/concerns/decidim/reporting_proposals/admin/proposal_answers_controller_override.rb +1 -1
- data/app/controllers/concerns/decidim/reporting_proposals/admin/proposals_controller_override.rb +2 -2
- data/app/controllers/concerns/decidim/{proposals → reporting_proposals}/admin/valuation_assignments_controller_override.rb +5 -5
- data/app/controllers/concerns/decidim/reporting_proposals/needs_proposal_extra_validations_snippets.rb +0 -1
- data/app/controllers/concerns/decidim/reporting_proposals/proposals_controller_override.rb +39 -0
- data/app/controllers/decidim/reporting_proposals/admin/proposals_controller.rb +4 -4
- data/app/controllers/decidim/reporting_proposals/geolocation_controller.rb +1 -1
- data/app/events/concerns/decidim/{proposals → reporting_proposals}/publish_proposal_event_override.rb +1 -1
- data/app/forms/concerns/decidim/reporting_proposals/form_builder_override.rb +9 -16
- data/app/forms/concerns/decidim/reporting_proposals/map_builder_override.rb +6 -5
- data/app/forms/decidim/reporting_proposals/admin/proposal_photo_form.rb +1 -5
- data/app/forms/decidim/reporting_proposals/proposal_form.rb +2 -0
- data/app/helpers/concerns/decidim/reporting_proposals/proposal_wizard_helper_override.rb +7 -30
- data/app/helpers/concerns/decidim/reporting_proposals/resource_helper_override.rb +1 -1
- data/app/mailers/concerns/decidim/reporting_proposals/admin/hidden_resource_mailer.rb +30 -0
- data/app/mailers/concerns/decidim/{proposals → reporting_proposals}/admin/notification_answer_proposal_mailer.rb +1 -1
- data/app/mailers/concerns/decidim/{proposals → reporting_proposals}/admin/proposals_valuator_mailer.rb +2 -2
- data/app/mailers/concerns/decidim/{proposals → reporting_proposals}/notification_publish_proposal_mailer.rb +1 -1
- data/app/mailers/concerns/decidim/reporting_proposals/reported_mailer_override.rb +18 -0
- data/app/overrides/decidim/proposals/admin/proposals/_proposal-tr/add_valuators_name.html.erb.deface +2 -2
- data/app/overrides/decidim/proposals/admin/proposals/show/add_address.html.erb.deface +1 -1
- data/app/overrides/decidim/proposals/admin/proposals/show/add_photo_management.html.erb.deface +1 -1
- data/app/overrides/decidim/proposals/admin/proposals/show/add_send_email_btn.html.erb.deface +1 -1
- data/app/overrides/decidim/proposals/admin/proposals/show/add_valuators_form.html.erb.deface +16 -10
- data/app/overrides/decidim/proposals/proposals/_wizard_header/add_description.html.erb.deface +5 -0
- data/app/overrides/decidim/proposals/proposals/_wizard_header/replace_title.html.erb.deface +5 -6
- data/app/overrides/decidim/proposals/proposals/compare/add_css.html.erb.deface +5 -0
- data/app/overrides/decidim/proposals/proposals/compare/add_distance_badge.html.erb.deface +10 -0
- data/app/overrides/decidim/proposals/proposals/edit/add_css.html.erb.deface +1 -1
- data/app/overrides/decidim/proposals/proposals/edit/replace_javascript.html.erb.deface +2 -2
- data/app/overrides/decidim/proposals/proposals/edit_draft/replace_javascript.html.erb.deface +3 -3
- data/app/overrides/decidim/proposals/proposals/edit_draft/replace_partial_edit_form_fields.html.erb.deface +6 -1
- data/app/overrides/decidim/proposals/proposals/new/add_css.html.erb.deface +2 -2
- data/app/overrides/decidim/proposals/proposals/new/remove_body.html.erb.deface +1 -0
- data/app/overrides/decidim/proposals/proposals/new/remove_title.html.erb.deface +1 -1
- data/app/overrides/decidim/proposals/proposals/new/replace_javascript.html.erb.deface +2 -2
- data/app/overrides/decidim/proposals/proposals/preview/add_css.html.erb.deface +5 -0
- data/app/overrides/decidim/proposals/proposals/show/add_additional_button.html.erb.deface +1 -1
- data/app/packs/entrypoints/decidim_reporting_proposals.js +1 -0
- data/app/packs/src/decidim/reporting_proposals/proposal_extra_validations.js +12 -13
- data/app/packs/src/decidim/reporting_proposals/proposals/add_proposal.js +45 -41
- data/app/packs/src/decidim/reporting_proposals/reverse_geocoding.js +0 -2
- data/app/packs/src/decidim/reporting_proposals/user_camera_inputs.js +7 -7
- data/app/packs/stylesheets/decidim/reporting_proposals/geocoding_addons.scss +9 -26
- data/app/packs/stylesheets/decidim/reporting_proposals/list_component_admin.scss +6 -6
- data/app/packs/stylesheets/decidim/reporting_proposals/manage_component_admin.scss +44 -30
- data/app/packs/stylesheets/decidim/reporting_proposals/proposals/add_proposal.scss +9 -4
- data/app/packs/stylesheets/decidim/reporting_proposals/user_camera_inputs.scss +21 -13
- data/app/presenters/concerns/decidim/reporting_proposals/resource_locator_presenter_override.rb +40 -0
- data/app/resources/concerns/decidim/reporting_proposals/resource_manifest_override.rb +16 -0
- data/app/serializers/decidim/reporting_proposals/proposal_serializer_override.rb +4 -4
- data/app/views/decidim/proposals/admin/proposal_notes/_editing_note.html.erb +3 -3
- data/app/views/decidim/proposals/admin/proposal_notes/_proposal_notes_body.html.erb +1 -1
- data/app/views/decidim/proposals/admin/proposals/_address.html.erb +11 -10
- data/app/views/decidim/proposals/admin/proposals/_send_email_button.html.erb +6 -4
- data/app/views/decidim/proposals/proposals/_additional_button.html.erb +1 -1
- data/app/views/decidim/proposals/proposals/index.js.erb +0 -2
- data/app/views/decidim/reporting_proposals/admin/proposals/_photo_form.html.erb +2 -3
- data/app/views/decidim/reporting_proposals/admin/proposals/_photo_gallery.html.erb +3 -4
- data/app/views/decidim/reporting_proposals/admin/proposals/_photos.html.erb +15 -11
- data/app/views/decidim/reporting_proposals/admin/proposals/_proposal_td_hide.html.erb +7 -11
- data/app/views/decidim/reporting_proposals/admin/proposals/_proposal_td_title.html.erb +2 -2
- data/app/views/decidim/reporting_proposals/admin/proposals_valuator_mailer/notify_proposals_valuator.html.erb +17 -0
- data/app/views/decidim/reporting_proposals/proposals/_additional_button_for_show.html.erb +5 -2
- data/app/views/decidim/reporting_proposals/proposals/_camera_button.html.erb +26 -0
- data/app/views/decidim/reporting_proposals/proposals/_new_proposal_fields.html.erb +7 -5
- data/app/views/decidim/reporting_proposals/proposals/_reporting_proposal_fields.html.erb +61 -86
- data/app/views/decidim/reporting_proposals/proposals/_user_group.html.erb +1 -1
- data/bin/dev +5 -0
- data/bin/{webpack-dev-server → shakapacker} +1 -1
- data/bin/shakapacker-dev-server +6 -0
- data/config/assets.rb +1 -3
- data/config/locales/ca.yml +0 -2
- data/config/locales/en.yml +22 -48
- data/decidim-reporting_proposals.gemspec +1 -2
- data/lib/decidim/reporting_proposals/admin_engine.rb +4 -0
- data/lib/decidim/reporting_proposals/component.rb +26 -26
- data/lib/decidim/reporting_proposals/engine.rb +18 -12
- data/lib/decidim/reporting_proposals/test/factories.rb +2 -12
- data/lib/decidim/reporting_proposals/version.rb +3 -4
- data/lib/tasks/reporting_proposals_upgrade.rake +5 -0
- data/package-lock.json +4043 -5064
- data/package.json +12 -7
- metadata +73 -106
- data/app/commands/concerns/decidim/admin/hide_resource_override.rb +0 -34
- data/app/commands/concerns/decidim/templates/admin/copy_questionnaire_template_override.rb +0 -32
- data/app/commands/concerns/decidim/templates/admin/create_questionnaire_template_override.rb +0 -32
- data/app/commands/decidim/templates/admin/copy_proposal_answer_template.rb +0 -35
- data/app/commands/decidim/templates/admin/create_proposal_answer_template.rb +0 -48
- data/app/commands/decidim/templates/admin/update_proposal_answer_template.rb +0 -52
- data/app/controllers/concerns/decidim/templates/admin/application_controller_override.rb +0 -20
- data/app/controllers/decidim/templates/admin/proposal_answer_templates_controller.rb +0 -183
- data/app/forms/decidim/templates/admin/proposal_answer_template_form.rb +0 -21
- data/app/mailers/concerns/decidim/admin/hidden_resource_mailer.rb +0 -28
- data/app/mailers/concerns/decidim/reported_mailer_override.rb +0 -16
- data/app/overrides/decidim/proposals/admin/proposal_answers/_form/add_template_chooser.html.erb.deface +0 -5
- data/app/overrides/decidim/proposals/proposals/_edit_form_fields/replace_add_photos.html.erb.deface +0 -37
- data/app/overrides/decidim/proposals/proposals/_proposal_similar/add_distance_badge.html.erb.deface +0 -5
- data/app/overrides/decidim/proposals/proposals/edit_draft/add_css.html.erb.deface +0 -5
- data/app/overrides/decidim/proposals/proposals/edit_draft/add_user_group.html.erb.deface +0 -3
- data/app/packs/entrypoints/decidim_reporting_proposals_js_validations.js +0 -1
- data/app/packs/entrypoints/decidim_templates_admin.js +0 -1
- data/app/packs/src/decidim/templates/admin/proposal_answer_template_chooser.js +0 -27
- data/app/permissions/decidim/templates/admin/extra_permissions.rb +0 -37
- data/app/presenters/concerns/decidim/resource_locator_presenter_override.rb +0 -38
- data/app/resources/concerns/decidim/resource_manifest_override.rb +0 -14
- data/app/views/decidim/proposals/admin/proposals_valuator_mailer/notify_proposals_valuator.html.erb +0 -17
- data/app/views/decidim/templates/admin/proposal_answer_templates/_form.html.erb +0 -34
- data/app/views/decidim/templates/admin/proposal_answer_templates/_template_chooser.html.erb +0 -16
- data/app/views/decidim/templates/admin/proposal_answer_templates/edit.html.erb +0 -3
- data/app/views/decidim/templates/admin/proposal_answer_templates/index.html.erb +0 -52
- data/app/views/decidim/templates/admin/proposal_answer_templates/new.html.erb +0 -6
- data/db/migrate/20230404103706_add_target_and_field_values_to_decidim_templates_templates.rb +0 -8
- data/db/migrate/20230404104741_migrate_templatable.rb +0 -13
- /data/app/views/decidim/{admin → reporting_proposals/admin}/hidden_resource_mailer/notify_mail.html.erb +0 -0
- /data/app/views/decidim/{proposals → reporting_proposals}/admin/notification_answer_proposal_mailer/notify_proposal_author.html.erb +0 -0
- /data/app/views/decidim/{proposals → reporting_proposals}/notification_publish_proposal_mailer/notify_proposal_author.html.erb +0 -0
@@ -1,101 +1,76 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
<% if component_settings.attachments_allowed? %>
|
8
|
-
<fieldset class="gallery__container photos_container">
|
9
|
-
<% if @form.photos.any? %>
|
10
|
-
<% @form.photos.each do |photo| %>
|
11
|
-
<div class="callout gallery__item" id="attachment_<%= photo.id %>" data-closable>
|
12
|
-
<%= image_tag photo.thumbnail_url, class: "thumbnail", alt: photo.file.filename %>
|
13
|
-
<%= form.hidden_field :photos, multiple: true, value: photo.id, id: "photo-#{photo.id}" %>
|
14
|
-
<button class="close-button"
|
15
|
-
aria-label="<%= t("delete_image", scope: "decidim.reporting_proposals.proposals.edit") %>"
|
16
|
-
title="<%= t("delete_image", scope: "decidim.reporting_proposals.proposals.edit") %>"
|
17
|
-
type="button"
|
18
|
-
data-close>
|
19
|
-
<span aria-hidden="true">×</span>
|
20
|
-
</button>
|
21
|
-
</div>
|
22
|
-
<% end %>
|
1
|
+
<div class="form__wrapper">
|
2
|
+
<% if @form.categories&.any? %>
|
3
|
+
<div class="field hashtags__container">
|
4
|
+
<%= form.categories_select :category_id, @form.categories, include_blank: t("decidim.proposals.proposals.edit.select_a_category") %>
|
5
|
+
</div>
|
23
6
|
<% end %>
|
24
|
-
<div class="field row column">
|
25
|
-
<%= form.file_field :add_photos, multiple: false, label: t("image", scope: "decidim.reporting_proposals.proposals.form") %>
|
26
7
|
|
27
|
-
|
28
|
-
|
8
|
+
<%= render "decidim/reporting_proposals/proposals/camera_button", form: form %>
|
9
|
+
|
10
|
+
<% if @form.geocoding_enabled? %>
|
11
|
+
<div id="address_input">
|
12
|
+
<div class="address-fill">
|
13
|
+
<%= form.geocoding_field :address, placeholder: t("decidim.proposals.proposals.placeholder.address"), required: true %>
|
14
|
+
</div>
|
15
|
+
<div class="has_no_address">
|
16
|
+
<%= form.check_box :has_no_address %>
|
17
|
+
<%= form.hidden_field :has_address, value: "1" %>
|
18
|
+
</div>
|
19
|
+
<div id="address_map" class="proposal__container">
|
20
|
+
<p class="help-text">
|
21
|
+
<%= t("instructions", scope: "decidim.proposals.proposals.dynamic_map_instructions") %> <%= t("description", scope: "decidim.proposals.proposals.dynamic_map_instructions") %>
|
22
|
+
</p>
|
23
|
+
<%= dynamic_map_for proposal_preview_data_for_map(@form.to_h) %>
|
29
24
|
</div>
|
30
25
|
</div>
|
31
|
-
|
32
|
-
|
33
|
-
<% end %>
|
26
|
+
<% end %>
|
34
27
|
|
35
|
-
|
36
|
-
|
37
|
-
<div class="address-fill">
|
38
|
-
<%= form.geocoding_field :address, placeholder: t("decidim.proposals.proposals.placeholder.address") %>
|
39
|
-
</div>
|
40
|
-
<div class="has_no_address">
|
41
|
-
<%= form.check_box :has_no_address %>
|
42
|
-
<%= form.hidden_field :has_address, value: "1" %>
|
43
|
-
</div>
|
44
|
-
<div class="map address-fill" id="address_map">
|
45
|
-
<%= render partial: "dynamic_map_instructions" %>
|
46
|
-
<%= dynamic_map_for proposal_preview_data_for_map(@form.to_h) %>
|
47
|
-
</div>
|
28
|
+
<div class="field hashtags__container">
|
29
|
+
<%= form.text_field :title, class: "js-hashtags", value: form_presenter.title %>
|
48
30
|
</div>
|
49
|
-
<% end %>
|
50
|
-
|
51
|
-
<div class="field hashtags__container">
|
52
|
-
<%= form.text_field :title, class: "js-hashtags", value: form_presenter.title %>
|
53
|
-
</div>
|
54
31
|
|
55
|
-
<div class="field hashtags__container">
|
56
32
|
<%= text_editor_for_proposal_body(form) %>
|
57
|
-
</div>
|
58
33
|
|
59
|
-
<% if @form.component_automatic_hashtags.any? %>
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
34
|
+
<% if @form.component_automatic_hashtags.any? %>
|
35
|
+
<div class="field">
|
36
|
+
<%= form.label :automatic_hashtags %>
|
37
|
+
<div class="checkboxes hashtags">
|
38
|
+
<% @form.component_automatic_hashtags.each do |hashtag| %>
|
39
|
+
<label>
|
40
|
+
<%= check_box_tag "", "", { checked: true }, { disabled: true } %>#<%= hashtag %>
|
41
|
+
</label>
|
42
|
+
<% end %>
|
43
|
+
</div>
|
68
44
|
</div>
|
69
|
-
|
70
|
-
<% end %>
|
45
|
+
<% end %>
|
71
46
|
|
72
|
-
<% if @form.component_suggested_hashtags.any? %>
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
47
|
+
<% if @form.component_suggested_hashtags.any? %>
|
48
|
+
<div class="field">
|
49
|
+
<%= form.label :suggested_hashtags, nil, for: nil %>
|
50
|
+
<div class="checkboxes hashtags">
|
51
|
+
<%= form.collection_check_boxes :suggested_hashtags, @form.component_suggested_hashtags.map { |hashtag| [hashtag.downcase, "##{hashtag}"] }, :first, :last do |option|
|
52
|
+
option.label { option.check_box(checked: @form.suggested_hashtag_checked?(option.value)) + option.text }
|
53
|
+
end %>
|
54
|
+
</div>
|
79
55
|
</div>
|
80
|
-
|
81
|
-
<% end %>
|
56
|
+
<% end %>
|
82
57
|
|
83
|
-
<% if current_component.has_subscopes? %>
|
84
|
-
|
85
|
-
|
86
|
-
</div>
|
87
|
-
<% end %>
|
58
|
+
<% if current_component.has_subscopes? %>
|
59
|
+
<%= scopes_select_field form, :scope_id, root: current_component.scope %>
|
60
|
+
<% end %>
|
88
61
|
|
89
|
-
<% if component_settings.attachments_allowed? && !component_settings.only_photo_attachments? %>
|
90
|
-
<
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
62
|
+
<% if component_settings.attachments_allowed? && !component_settings.only_photo_attachments? %>
|
63
|
+
<div class="attachments_container gallery__container documents_container">
|
64
|
+
<legend><%= t("attachment_legend", scope: "decidim.proposals.proposals.edit") %></legend>
|
65
|
+
<div>
|
66
|
+
<%= form.attachment :documents,
|
67
|
+
multiple: true,
|
68
|
+
label: t("decidim.proposals.proposals.edit.add_documents"),
|
69
|
+
button_label: t("decidim.proposals.proposals.edit.add_documents"),
|
70
|
+
button_edit_label: t("decidim.proposals.proposals.edit.edit_documents"),
|
71
|
+
button_class: "button button__lg button__transparent-secondary w-full",
|
72
|
+
help_i18n_scope: "decidim.forms.file_help.file" %>
|
73
|
+
</div>
|
99
74
|
</div>
|
100
|
-
|
101
|
-
|
75
|
+
<% end %>
|
76
|
+
</div>
|
data/bin/dev
ADDED
data/config/assets.rb
CHANGED
@@ -8,7 +8,5 @@ Decidim::Webpacker.register_entrypoints(
|
|
8
8
|
decidim_reporting_proposals_manage_component_admin: "#{base_path}/app/packs/entrypoints/decidim_reporting_proposals_manage_component_admin.js",
|
9
9
|
decidim_reporting_proposals_list_component_admin: "#{base_path}/app/packs/entrypoints/decidim_reporting_proposals_list_component_admin.js",
|
10
10
|
decidim_reporting_proposals_geocoding: "#{base_path}/app/packs/entrypoints/decidim_reporting_proposals_geocoding.js",
|
11
|
-
decidim_reporting_proposals_camera: "#{base_path}/app/packs/entrypoints/decidim_reporting_proposals_camera.js"
|
12
|
-
decidim_reporting_proposals_js_validations: "#{base_path}/app/packs/entrypoints/decidim_reporting_proposals_js_validations.js",
|
13
|
-
decidim_templates_admin: "#{base_path}/app/packs/entrypoints/decidim_templates_admin.js"
|
11
|
+
decidim_reporting_proposals_camera: "#{base_path}/app/packs/entrypoints/decidim_reporting_proposals_camera.js"
|
14
12
|
)
|
data/config/locales/ca.yml
CHANGED
data/config/locales/en.yml
CHANGED
@@ -7,10 +7,11 @@ en:
|
|
7
7
|
proposal:
|
8
8
|
has_no_address: Has no address
|
9
9
|
has_no_image: Has no image
|
10
|
-
template:
|
11
|
-
scope_for_availability: Restrict availability to the component
|
12
10
|
decidim:
|
13
11
|
admin:
|
12
|
+
actions:
|
13
|
+
manage: Manage
|
14
|
+
new: New
|
14
15
|
hidden_resource_mailer:
|
15
16
|
notify_mail:
|
16
17
|
body_1: An administrator removed your proposal because it has been reported.
|
@@ -19,10 +20,6 @@ en:
|
|
19
20
|
hello: Hello,
|
20
21
|
reason: 'Reason: %{reason}'
|
21
22
|
subject: Your proposal has been hidden
|
22
|
-
templates:
|
23
|
-
fetch:
|
24
|
-
error: Couldn't find this template, maybe has been deleted?
|
25
|
-
missing_resource: "(missing resource)"
|
26
23
|
application:
|
27
24
|
geocoding:
|
28
25
|
unconfigured: Geocoding is not configured!
|
@@ -56,10 +53,10 @@ en:
|
|
56
53
|
name: Reporting proposals
|
57
54
|
settings:
|
58
55
|
global:
|
59
|
-
additional_button_for_show_proposal_link: Additional action button
|
60
|
-
|
61
|
-
additional_button_for_show_proposal_text: Additional action button
|
62
|
-
|
56
|
+
additional_button_for_show_proposal_link: Additional sidebar action button
|
57
|
+
when visiting a particular proposal (link)
|
58
|
+
additional_button_for_show_proposal_text: Additional sidebar action button
|
59
|
+
when visiting a particular proposal (text)
|
63
60
|
additional_button_link: Additional action button next to new proposal
|
64
61
|
(link)
|
65
62
|
additional_button_text: Additional action button next to new proposal
|
@@ -231,16 +228,8 @@ en:
|
|
231
228
|
geolocated_at: Geolocated at
|
232
229
|
send_email_button:
|
233
230
|
send_mail: Send an email to user
|
234
|
-
|
235
|
-
|
236
|
-
admin_panel: admin panel
|
237
|
-
email_body: You've been assigned as a valuator for the proposals listed
|
238
|
-
below. This means you've been trusted to give them feedback and a proper
|
239
|
-
response in the next coming days.
|
240
|
-
gratitude: Thanks for your help!
|
241
|
-
greeting: Hi %{name}
|
242
|
-
public_side: public side
|
243
|
-
subject: New proposals assigned to you for evaluation
|
231
|
+
show:
|
232
|
+
report: Report
|
244
233
|
reported_mailer:
|
245
234
|
report:
|
246
235
|
admin_resource: Admin this resource
|
@@ -405,9 +394,10 @@ en:
|
|
405
394
|
success: Proposal note successfully updated.
|
406
395
|
proposals:
|
407
396
|
photo_form:
|
408
|
-
action:
|
397
|
+
action: Save images
|
409
398
|
add_images: Add images
|
410
|
-
|
399
|
+
edit_images: Edit images
|
400
|
+
gallery_legend: Add an image gallery (Optional)
|
411
401
|
title: Photos
|
412
402
|
upload_msg: No files selected
|
413
403
|
photo_gallery:
|
@@ -420,6 +410,16 @@ en:
|
|
420
410
|
remove_assignment: remove assignment
|
421
411
|
remove_assignment_confirmation: remove assignment confirmation
|
422
412
|
valuators: Valuators
|
413
|
+
proposals_valuator_mailer:
|
414
|
+
notify_proposals_valuator:
|
415
|
+
admin_panel: admin panel
|
416
|
+
email_body: You've been assigned as a valuator for the proposals listed
|
417
|
+
below. This means you've been trusted to give them feedback and a proper
|
418
|
+
response in the next coming days.
|
419
|
+
gratitude: Thanks for your help!
|
420
|
+
greeting: Hi %{name}
|
421
|
+
public_side: public side
|
422
|
+
subject: New proposals assigned to you for evaluation
|
423
423
|
resolution_time: Resolution time
|
424
424
|
time_elapsed:
|
425
425
|
datetime:
|
@@ -487,29 +487,3 @@ en:
|
|
487
487
|
delete_image: Delete image
|
488
488
|
form:
|
489
489
|
image: Image/photo
|
490
|
-
templates:
|
491
|
-
admin:
|
492
|
-
proposal_answer_templates:
|
493
|
-
form:
|
494
|
-
answer_template: Answer template
|
495
|
-
hint: "<strong>Hint:</strong> You can use these variables anywhere on
|
496
|
-
the answer template that will be replaced when using the template"
|
497
|
-
hint1: "<strong>%{organization}</strong> will be replaced by the organization's
|
498
|
-
name"
|
499
|
-
hint2: "<strong>%{name}</strong> will be replaced by the author's name"
|
500
|
-
hint3: "<strong>%{admin}</strong> will be replaced by the admin's name
|
501
|
-
(the one answering the proposal)"
|
502
|
-
save: Save
|
503
|
-
scope_for_availability_help: Note that only participatory spaces having
|
504
|
-
components of the type "proposals" will be listed.
|
505
|
-
template_title: Template information
|
506
|
-
index:
|
507
|
-
confirm_delete: Are you sure you want to delete this template?
|
508
|
-
global_scope: Global (available everywhere)
|
509
|
-
internal_state: Internal State
|
510
|
-
scope_for_availability: Scope
|
511
|
-
title: Proposal answers
|
512
|
-
template_chooser:
|
513
|
-
select_template: Select a template answer
|
514
|
-
template_types:
|
515
|
-
proposal_answer_templates: Proposal answers
|
@@ -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.
|
17
|
+
spec.required_ruby_version = ">= 3.1"
|
18
18
|
|
19
19
|
spec.files = `git ls-files -z`.split("\x0").reject do |f|
|
20
20
|
f.match(%r{^(test|spec|features)/})
|
@@ -27,7 +27,6 @@ Gem::Specification.new do |spec|
|
|
27
27
|
spec.add_dependency "decidim-core", Decidim::ReportingProposals::COMPAT_DECIDIM_VERSION
|
28
28
|
spec.add_dependency "decidim-participatory_processes", Decidim::ReportingProposals::COMPAT_DECIDIM_VERSION
|
29
29
|
spec.add_dependency "decidim-proposals", Decidim::ReportingProposals::COMPAT_DECIDIM_VERSION
|
30
|
-
spec.add_dependency "decidim-templates", Decidim::ReportingProposals::COMPAT_DECIDIM_VERSION
|
31
30
|
spec.add_dependency "deface", ">= 1.9"
|
32
31
|
|
33
32
|
spec.add_development_dependency "decidim-accountability", Decidim::ReportingProposals::COMPAT_DECIDIM_VERSION
|
@@ -38,6 +38,10 @@ module Decidim
|
|
38
38
|
end
|
39
39
|
end
|
40
40
|
|
41
|
+
initializer "decidim_reporting_proposals.register_icons" do
|
42
|
+
Decidim.icons.register(name: "camera-line", icon: "camera-line", category: "system", description: "", engine: :decidim_reporting_proposals)
|
43
|
+
end
|
44
|
+
|
41
45
|
def load_seed
|
42
46
|
nil
|
43
47
|
end
|
@@ -139,7 +139,7 @@ Decidim.register_component(:reporting_proposals) do |component|
|
|
139
139
|
.where(component: component_instance)
|
140
140
|
.includes(:scope, :category, :component)
|
141
141
|
|
142
|
-
if space.user_roles(:valuator).where(user:
|
142
|
+
if space.user_roles(:valuator).where(user:).any?
|
143
143
|
collection.with_valuation_assigned_to(user, space)
|
144
144
|
else
|
145
145
|
collection
|
@@ -168,7 +168,7 @@ Decidim.register_component(:reporting_proposals) do |component|
|
|
168
168
|
imports.form_class_name = "Decidim::Proposals::Admin::ProposalsFileImportForm"
|
169
169
|
|
170
170
|
imports.messages do |msg|
|
171
|
-
msg.set(:resource_name) { |count: 1| I18n.t("decidim.proposals.admin.imports.resources.proposals", count:
|
171
|
+
msg.set(:resource_name) { |count: 1| I18n.t("decidim.proposals.admin.imports.resources.proposals", count:) }
|
172
172
|
msg.set(:title) { I18n.t("decidim.proposals.admin.imports.title.proposals") }
|
173
173
|
msg.set(:label) { I18n.t("decidim.proposals.admin.imports.label.proposals") }
|
174
174
|
msg.set(:help) { I18n.t("decidim.proposals.admin.imports.help.proposals") }
|
@@ -179,7 +179,7 @@ Decidim.register_component(:reporting_proposals) do |component|
|
|
179
179
|
|
180
180
|
component.imports :answers do |imports|
|
181
181
|
imports.messages do |msg|
|
182
|
-
msg.set(:resource_name) { |count: 1| I18n.t("decidim.proposals.admin.imports.resources.answers", count:
|
182
|
+
msg.set(:resource_name) { |count: 1| I18n.t("decidim.proposals.admin.imports.resources.answers", count:) }
|
183
183
|
msg.set(:title) { I18n.t("decidim.proposals.admin.imports.title.answers") }
|
184
184
|
msg.set(:label) { I18n.t("decidim.proposals.admin.imports.label.answers") }
|
185
185
|
msg.set(:help) { I18n.t("decidim.proposals.admin.imports.help.answers") }
|
@@ -213,12 +213,12 @@ Decidim.register_component(:reporting_proposals) do |component|
|
|
213
213
|
name: Decidim::Components::Namer.new(participatory_space.organization.available_locales, :reporting_proposals).i18n_name,
|
214
214
|
manifest_name: :reporting_proposals,
|
215
215
|
published_at: Time.current,
|
216
|
-
participatory_space
|
216
|
+
participatory_space:,
|
217
217
|
settings: {
|
218
218
|
vote_limit: 0,
|
219
219
|
collaborative_drafts_enabled: true
|
220
220
|
},
|
221
|
-
step_settings:
|
221
|
+
step_settings:
|
222
222
|
}
|
223
223
|
|
224
224
|
component = Decidim.traceability.perform_action!(
|
@@ -248,19 +248,19 @@ Decidim.register_component(:reporting_proposals) do |component|
|
|
248
248
|
elsif n.positive?
|
249
249
|
["accepted", Decidim::Faker::Localized.sentence(word_count: 10), nil]
|
250
250
|
else
|
251
|
-
[
|
251
|
+
["not_answered", nil, nil]
|
252
252
|
end
|
253
253
|
|
254
254
|
params = {
|
255
|
-
component
|
255
|
+
component:,
|
256
256
|
category: participatory_space.categories.sample,
|
257
257
|
scope: Faker::Boolean.boolean(true_ratio: 0.5) ? global : scopes.sample,
|
258
258
|
title: { en: Faker::Lorem.sentence(word_count: 2) },
|
259
259
|
body: { en: Faker::Lorem.paragraphs(number: 2).join("\n") },
|
260
|
-
state
|
261
|
-
answer
|
260
|
+
state:,
|
261
|
+
answer:,
|
262
262
|
answered_at: state.present? ? Time.current : nil,
|
263
|
-
state_published_at
|
263
|
+
state_published_at:,
|
264
264
|
published_at: Time.current
|
265
265
|
}
|
266
266
|
|
@@ -279,7 +279,7 @@ Decidim.register_component(:reporting_proposals) do |component|
|
|
279
279
|
if n.positive?
|
280
280
|
Decidim::User.where(decidim_organization_id: participatory_space.decidim_organization_id).all.sample(n).each do |author|
|
281
281
|
user_group = [true, false].sample ? Decidim::UserGroups::ManageableUserGroups.for(author).verified.sample : nil
|
282
|
-
proposal.add_coauthor(author, user_group:
|
282
|
+
proposal.add_coauthor(author, user_group:)
|
283
283
|
end
|
284
284
|
end
|
285
285
|
|
@@ -287,11 +287,11 @@ Decidim.register_component(:reporting_proposals) do |component|
|
|
287
287
|
email = "amendment-author-#{participatory_space.underscored_name}-#{participatory_space.id}-#{n}-amend#{n}@example.org"
|
288
288
|
name = "#{Faker::Name.name} #{participatory_space.id} #{n} amend#{n}"
|
289
289
|
|
290
|
-
author = Decidim::User.find_or_initialize_by(email:
|
290
|
+
author = Decidim::User.find_or_initialize_by(email:)
|
291
291
|
author.update!(
|
292
292
|
password: "decidim123456",
|
293
293
|
password_confirmation: "decidim123456",
|
294
|
-
name
|
294
|
+
name:,
|
295
295
|
nickname: Faker::Twitter.unique.screen_name,
|
296
296
|
organization: component.organization,
|
297
297
|
tos_agreement: "1",
|
@@ -318,7 +318,7 @@ Decidim.register_component(:reporting_proposals) do |component|
|
|
318
318
|
)
|
319
319
|
|
320
320
|
params = {
|
321
|
-
component
|
321
|
+
component:,
|
322
322
|
category: participatory_space.categories.sample,
|
323
323
|
scope: Faker::Boolean.boolean(true_ratio: 0.5) ? global : scopes.sample,
|
324
324
|
title: { en: "#{proposal.title["en"]} #{Faker::Lorem.sentence(word_count: 1)}" },
|
@@ -344,7 +344,7 @@ Decidim.register_component(:reporting_proposals) do |component|
|
|
344
344
|
Decidim::Amendment.create!(
|
345
345
|
amender: author,
|
346
346
|
amendable: proposal,
|
347
|
-
emendation
|
347
|
+
emendation:,
|
348
348
|
state: "evaluating"
|
349
349
|
)
|
350
350
|
end
|
@@ -353,11 +353,11 @@ Decidim.register_component(:reporting_proposals) do |component|
|
|
353
353
|
email = "vote-author-#{participatory_space.underscored_name}-#{participatory_space.id}-#{n}-#{m}@example.org"
|
354
354
|
name = "#{Faker::Name.name} #{participatory_space.id} #{n} #{m}"
|
355
355
|
|
356
|
-
author = Decidim::User.find_or_initialize_by(email:
|
356
|
+
author = Decidim::User.find_or_initialize_by(email:)
|
357
357
|
author.update!(
|
358
358
|
password: "decidim123456",
|
359
359
|
password_confirmation: "decidim123456",
|
360
|
-
name
|
360
|
+
name:,
|
361
361
|
nickname: Faker::Twitter.unique.screen_name,
|
362
362
|
organization: component.organization,
|
363
363
|
tos_agreement: "1",
|
@@ -366,8 +366,8 @@ Decidim.register_component(:reporting_proposals) do |component|
|
|
366
366
|
about: Faker::Lorem.paragraph(sentence_count: 2)
|
367
367
|
)
|
368
368
|
|
369
|
-
Decidim::Proposals::ProposalVote.create!(proposal
|
370
|
-
Decidim::Proposals::ProposalVote.create!(proposal: emendation, author:
|
369
|
+
Decidim::Proposals::ProposalVote.create!(proposal:, author:) unless proposal.published_state? && proposal.rejected?
|
370
|
+
Decidim::Proposals::ProposalVote.create!(proposal: emendation, author:) if emendation
|
371
371
|
end
|
372
372
|
|
373
373
|
unless proposal.published_state? && proposal.rejected?
|
@@ -375,11 +375,11 @@ Decidim.register_component(:reporting_proposals) do |component|
|
|
375
375
|
email = "endorsement-author-#{participatory_space.underscored_name}-#{participatory_space.id}-#{n}-endr#{index}@example.org"
|
376
376
|
name = "#{Faker::Name.name} #{participatory_space.id} #{n} endr#{index}"
|
377
377
|
|
378
|
-
author = Decidim::User.find_or_initialize_by(email:
|
378
|
+
author = Decidim::User.find_or_initialize_by(email:)
|
379
379
|
author.update!(
|
380
380
|
password: "decidim123456",
|
381
381
|
password_confirmation: "decidim123456",
|
382
|
-
name
|
382
|
+
name:,
|
383
383
|
nickname: Faker::Twitter.unique.screen_name,
|
384
384
|
organization: component.organization,
|
385
385
|
tos_agreement: "1",
|
@@ -405,7 +405,7 @@ Decidim.register_component(:reporting_proposals) do |component|
|
|
405
405
|
user_group: group
|
406
406
|
)
|
407
407
|
end
|
408
|
-
Decidim::Endorsement.create!(resource: proposal, author
|
408
|
+
Decidim::Endorsement.create!(resource: proposal, author:, user_group: author.user_groups.first)
|
409
409
|
end
|
410
410
|
end
|
411
411
|
|
@@ -413,7 +413,7 @@ Decidim.register_component(:reporting_proposals) do |component|
|
|
413
413
|
author_admin = Decidim::User.where(organization: component.organization, admin: true).all.sample
|
414
414
|
|
415
415
|
Decidim::Proposals::ProposalNote.create!(
|
416
|
-
proposal
|
416
|
+
proposal:,
|
417
417
|
author: author_admin,
|
418
418
|
body: Faker::Lorem.paragraphs(number: 2).join("\n")
|
419
419
|
)
|
@@ -435,12 +435,12 @@ Decidim.register_component(:reporting_proposals) do |component|
|
|
435
435
|
|
436
436
|
draft = Decidim.traceability.perform_action!("create", Decidim::Proposals::CollaborativeDraft, author) do
|
437
437
|
draft = Decidim::Proposals::CollaborativeDraft.new(
|
438
|
-
component
|
438
|
+
component:,
|
439
439
|
category: participatory_space.categories.sample,
|
440
440
|
scope: Faker::Boolean.boolean(true_ratio: 0.5) ? global : scopes.sample,
|
441
441
|
title: Faker::Lorem.sentence(word_count: 2),
|
442
442
|
body: Faker::Lorem.paragraphs(number: 2).join("\n"),
|
443
|
-
state
|
443
|
+
state:,
|
444
444
|
published_at: Time.current
|
445
445
|
)
|
446
446
|
draft.coauthorships.build(author: participatory_space.organization)
|
@@ -471,7 +471,7 @@ Decidim.register_component(:reporting_proposals) do |component|
|
|
471
471
|
Decidim.traceability.update!(
|
472
472
|
Decidim::Proposals::CollaborativeDraft.all.sample,
|
473
473
|
Decidim::User.where(organization: component.organization).all.sample,
|
474
|
-
component
|
474
|
+
component:,
|
475
475
|
category: participatory_space.categories.sample,
|
476
476
|
scope: Faker::Boolean.boolean(true_ratio: 0.5) ? global : scopes.sample,
|
477
477
|
title: Faker::Lorem.sentence(word_count: 2),
|
@@ -21,10 +21,11 @@ module Decidim
|
|
21
21
|
Decidim::Map::Autocomplete::Builder.include(Decidim::ReportingProposals::MapBuilderOverride)
|
22
22
|
Decidim::CreateReport.include(Decidim::ReportingProposals::CreateReportOverride)
|
23
23
|
Decidim::GalleryMethods.include(Decidim::ReportingProposals::GalleryMethodsOverride)
|
24
|
+
Decidim::LinkedResourcesForCell.include(Decidim::ReportingProposals::LinkedResourcesForCellOverride)
|
24
25
|
Decidim::Proposals::ProposalSerializer.include(Decidim::ReportingProposals::ProposalSerializerOverride)
|
25
26
|
Decidim::Proposals::ProposalsPickerCell.include(Decidim::ReportingProposals::ProposalsPickerCellOverride)
|
26
|
-
Decidim::Proposals::PublishProposal.include(Decidim::
|
27
|
-
Decidim::Proposals::Admin::AnswerProposal.include(Decidim::
|
27
|
+
Decidim::Proposals::PublishProposal.include(Decidim::ReportingProposals::PublishProposalOverride)
|
28
|
+
Decidim::Proposals::Admin::AnswerProposal.include(Decidim::ReportingProposals::Admin::AnswerProposalOverride)
|
28
29
|
Decidim::Accountability::Admin::ResultForm.include(Decidim::ReportingProposals::MapIncludedProposalsForFormOverride)
|
29
30
|
Decidim::Accountability::Admin::CreateResult.include(Decidim::ReportingProposals::Admin::CreateResultOverride)
|
30
31
|
Decidim::Accountability::Admin::UpdateResult.include(Decidim::ReportingProposals::Admin::UpdateResultOverride)
|
@@ -36,6 +37,7 @@ module Decidim
|
|
36
37
|
Decidim::Budgets::Admin::ProjectForm.include(Decidim::ReportingProposals::MapIncludedProposalsForFormOverride)
|
37
38
|
Decidim::Budgets::Admin::CreateProject.include(Decidim::ReportingProposals::CreateProjectOverride)
|
38
39
|
Decidim::Budgets::Admin::UpdateProject.include(Decidim::ReportingProposals::CreateProjectOverride)
|
40
|
+
Decidim::Templates::Admin::UpdateProposalAnswerTemplate.include(Decidim::ReportingProposals::Admin::UpdateProposalAnswerTemplateOverride) if defined?(Decidim::Templates)
|
39
41
|
if defined?(Decidim::Elections::Admin::AnswerForm)
|
40
42
|
Decidim::Elections::Admin::AnswerForm.include(Decidim::ReportingProposals::MapRelatedProposalsForFormOverride)
|
41
43
|
Decidim::Elections::Admin::CreateAnswer.include(Decidim::ReportingProposals::Admin::CreateAnswerOverride)
|
@@ -48,12 +50,12 @@ module Decidim
|
|
48
50
|
Decidim::ParticipatorySpaceRoleConfig::Valuator.include(Decidim::ReportingProposals::ParticipatorySpaceRoleConfig::ValuatorOverride)
|
49
51
|
|
50
52
|
# port of https://github.com/openpoke/decidim/pull/31,23,29,24,43
|
51
|
-
Decidim::ReportedMailer.include(Decidim::ReportedMailerOverride)
|
53
|
+
Decidim::ReportedMailer.include(Decidim::ReportingProposals::ReportedMailerOverride)
|
52
54
|
|
53
55
|
# since version 0.27 Decidim uses its own version of attribute validation (used to be Rectify::Forms)
|
54
56
|
# To patch the ResourceManifest directly does not work now as the class is initialized by the proposals module on requiring the file component.rb
|
55
57
|
# So we remove the manifest and create it again after patching the class ResourceManifest
|
56
|
-
Decidim::ResourceManifest.include(Decidim::ResourceManifestOverride)
|
58
|
+
Decidim::ResourceManifest.include(Decidim::ReportingProposals::ResourceManifestOverride)
|
57
59
|
Decidim.resource_manifests.delete(Decidim.find_resource_manifest(:proposal))
|
58
60
|
component = Decidim.find_component_manifest(:proposals)
|
59
61
|
component.register_resource(:proposal) do |resource|
|
@@ -75,12 +77,9 @@ module Decidim
|
|
75
77
|
resource.searchable = true
|
76
78
|
resource.admin_route_name = "proposal"
|
77
79
|
end
|
78
|
-
Decidim::ResourceLocatorPresenter.include(Decidim::ResourceLocatorPresenterOverride)
|
79
|
-
Decidim::Proposals::PublishProposalEvent.include(Decidim::
|
80
|
-
Decidim::Proposals::Admin::AssignProposalsToValuator.include(Decidim::
|
81
|
-
Decidim::Admin::HideResource.include(Decidim::Admin::HideResourceOverride)
|
82
|
-
Decidim::Templates::Admin::CopyQuestionnaireTemplate.include(Decidim::Templates::Admin::CopyQuestionnaireTemplateOverride)
|
83
|
-
Decidim::Templates::Admin::CreateQuestionnaireTemplate.include(Decidim::Templates::Admin::CreateQuestionnaireTemplateOverride)
|
80
|
+
Decidim::ResourceLocatorPresenter.include(Decidim::ReportingProposals::ResourceLocatorPresenterOverride)
|
81
|
+
Decidim::Proposals::PublishProposalEvent.include(Decidim::ReportingProposals::PublishProposalEventOverride)
|
82
|
+
Decidim::Proposals::Admin::AssignProposalsToValuator.include(Decidim::ReportingProposals::Admin::AssignProposalsToValuatorOverride)
|
84
83
|
|
85
84
|
# Search user roles for different participatory spaces and apply override to all of them
|
86
85
|
# We'll make sure this does not break rails in situations where database is not installed (ie, creating the test or development apps)
|
@@ -104,10 +103,9 @@ module Decidim
|
|
104
103
|
Decidim::Proposals::Admin::ProposalsController.include(Decidim::ReportingProposals::Admin::ProposalsControllerOverride)
|
105
104
|
Decidim::Proposals::Admin::ProposalAnswersController.include(Decidim::ReportingProposals::Admin::ProposalAnswersControllerOverride)
|
106
105
|
Decidim::Proposals::Admin::ProposalsHelper.include(Decidim::ReportingProposals::Admin::ProposalsHelperOverride)
|
107
|
-
Decidim::Templates::Admin::ApplicationController.include(Decidim::Templates::Admin::ApplicationControllerOverride)
|
108
106
|
|
109
107
|
# port of https://github.com/openpoke/decidim/pull/24
|
110
|
-
Decidim::Proposals::Admin::ValuationAssignmentsController.include(Decidim::
|
108
|
+
Decidim::Proposals::Admin::ValuationAssignmentsController.include(Decidim::ReportingProposals::Admin::ValuationAssignmentsControllerOverride)
|
111
109
|
|
112
110
|
begin
|
113
111
|
Decidim::Templates::Admin::ProposalAnswerTemplatesController.include(Decidim::ReportingProposals::Admin::ProposalAnswerTemplatesControllerOverride)
|
@@ -144,6 +142,14 @@ module Decidim
|
|
144
142
|
end
|
145
143
|
end
|
146
144
|
|
145
|
+
initializer "decidim_reporting_proposals.on_hiding_resource" do
|
146
|
+
Decidim::EventsManager.subscribe("decidim.events.reports.resource_hidden") do |_event_name, data|
|
147
|
+
Decidim::ReportingProposals::Admin::HiddenResourceMailer.notify_mail(
|
148
|
+
data[:resource], data[:affected_users], data[:extra][:report_reasons]
|
149
|
+
).deliver_later
|
150
|
+
end
|
151
|
+
end
|
152
|
+
|
147
153
|
initializer "decidim_reporting_proposals.webpacker.assets_path" do
|
148
154
|
Decidim.register_assets_path File.expand_path("app/packs", root)
|
149
155
|
end
|
@@ -7,17 +7,7 @@ FactoryBot.define do
|
|
7
7
|
end
|
8
8
|
|
9
9
|
factory :category_valuator, class: "Decidim::ReportingProposals::CategoryValuator" do
|
10
|
-
category {
|
11
|
-
valuator_role {
|
12
|
-
end
|
13
|
-
end
|
14
|
-
|
15
|
-
FactoryBot.modify do
|
16
|
-
factory :template, class: "Decidim::Templates::Template" do
|
17
|
-
trait :proposal_answer do
|
18
|
-
templatable { organization }
|
19
|
-
target { :proposal_answer }
|
20
|
-
field_values { { internal_state: :accepted } }
|
21
|
-
end
|
10
|
+
category { association :category, participatory_space: valuator_role.participatory_space }
|
11
|
+
valuator_role { association :participatory_process_user_role, role: "valuator" }
|
22
12
|
end
|
23
13
|
end
|