decidim-proposals 0.20.1 → 0.21.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/assets/javascripts/decidim/proposals/admin/proposals.es6 +24 -11
- data/app/cells/decidim/proposals/cost_report/show.erb +35 -0
- data/app/cells/decidim/proposals/cost_report_cell.rb +42 -0
- data/app/cells/decidim/proposals/proposal_m_cell.rb +9 -1
- data/app/cells/decidim/proposals/proposal_tags/show.erb +12 -10
- data/app/cells/decidim/proposals/proposal_tags_cell.rb +5 -0
- data/app/commands/decidim/proposals/admin/answer_proposal.rb +24 -46
- data/app/commands/decidim/proposals/admin/assign_proposals_to_valuator.rb +61 -0
- data/app/commands/decidim/proposals/admin/create_proposal.rb +5 -0
- data/app/commands/decidim/proposals/admin/notify_proposal_answer.rb +85 -0
- data/app/commands/decidim/proposals/admin/publish_answers.rb +67 -0
- data/app/commands/decidim/proposals/admin/unassign_proposals_from_valuator.rb +62 -0
- data/app/commands/decidim/proposals/admin/update_proposal_scope.rb +75 -0
- data/app/controllers/concerns/decidim/proposals/admin/filterable.rb +82 -0
- data/app/controllers/decidim/proposals/admin/proposal_answers_controller.rb +16 -6
- data/app/controllers/decidim/proposals/admin/proposal_notes_controller.rb +8 -9
- data/app/controllers/decidim/proposals/admin/proposals_controller.rb +105 -29
- data/app/controllers/decidim/proposals/admin/valuation_assignments_controller.rb +58 -0
- data/app/controllers/decidim/proposals/collaborative_drafts_controller.rb +19 -3
- data/app/controllers/decidim/proposals/proposals_controller.rb +42 -7
- data/app/controllers/decidim/proposals/versions_controller.rb +4 -1
- data/app/events/decidim/proposals/admin/update_proposal_scope_event.rb +11 -0
- data/app/forms/decidim/proposals/admin/proposal_answer_form.rb +27 -2
- data/app/forms/decidim/proposals/admin/valuation_assignment_form.rb +37 -0
- data/app/forms/decidim/proposals/proposal_wizard_create_step_form.rb +8 -0
- data/app/helpers/decidim/proposals/admin/filterable_helper.rb +17 -0
- data/app/helpers/decidim/proposals/admin/proposal_bulk_actions_helper.rb +35 -0
- data/app/helpers/decidim/proposals/admin/proposal_rankings_helper.rb +63 -0
- data/app/helpers/decidim/proposals/admin/proposals_helper.rb +122 -0
- data/app/helpers/decidim/proposals/application_helper.rb +36 -25
- data/app/helpers/decidim/proposals/collaborative_draft_helper.rb +9 -9
- data/app/helpers/decidim/proposals/proposal_cells_helper.rb +1 -1
- data/app/helpers/decidim/proposals/proposals_helper.rb +18 -0
- data/app/models/decidim/proposals/proposal.rb +163 -16
- data/app/models/decidim/proposals/valuation_assignment.rb +24 -0
- data/app/permissions/decidim/proposals/admin/permissions.rb +77 -11
- data/app/presenters/decidim/proposals/admin_log/proposal_presenter.rb +1 -1
- data/app/presenters/decidim/proposals/admin_log/valuation_assignment_presenter.rb +51 -0
- data/app/presenters/decidim/proposals/admin_log/value_types/valuator_role_user_presenter.rb +19 -0
- data/app/presenters/decidim/proposals/collaborative_draft_presenter.rb +2 -28
- data/app/presenters/decidim/proposals/log/valuation_assignment_presenter.rb +22 -0
- data/app/presenters/decidim/proposals/proposal_presenter.rb +26 -1
- data/app/services/decidim/proposals/collaborative_draft_search.rb +18 -10
- data/app/services/decidim/proposals/proposal_search.rb +33 -40
- data/app/types/decidim/proposals/proposal_input_filter.rb +29 -0
- data/app/types/decidim/proposals/proposal_input_sort.rb +28 -0
- data/app/types/decidim/proposals/proposal_type.rb +35 -4
- data/app/types/decidim/proposals/proposals_type.rb +14 -17
- data/app/views/decidim/proposals/admin/proposal_answers/_form.html.erb +35 -0
- data/app/views/decidim/proposals/admin/proposal_notes/_form.html.erb +1 -1
- data/app/views/decidim/proposals/admin/proposal_notes/_proposal_notes.html.erb +1 -1
- data/app/views/decidim/proposals/admin/proposals/_bulk-actions.html.erb +8 -2
- data/app/views/decidim/proposals/admin/proposals/_form.html.erb +1 -1
- data/app/views/decidim/proposals/admin/proposals/_proposal-tr.html.erb +25 -17
- data/app/views/decidim/proposals/admin/proposals/bulk_actions/_assign_to_valuator.html.erb +15 -0
- data/app/views/decidim/proposals/admin/proposals/bulk_actions/_dropdown.html.erb +21 -1
- data/app/views/decidim/proposals/admin/proposals/bulk_actions/_publish_answers.html.erb +14 -0
- data/app/views/decidim/proposals/admin/proposals/bulk_actions/_scope-change.html.erb +25 -0
- data/app/views/decidim/proposals/admin/proposals/bulk_actions/_unassign_from_valuator.html.erb +15 -0
- data/app/views/decidim/proposals/admin/proposals/index.html.erb +16 -7
- data/app/views/decidim/proposals/admin/proposals/publish_answers.js.erb +12 -0
- data/app/views/decidim/proposals/admin/proposals/show.html.erb +186 -0
- data/app/views/decidim/proposals/admin/proposals/update_category.js.erb +3 -2
- data/app/views/decidim/proposals/admin/proposals/update_scope.js.erb +27 -0
- data/app/views/decidim/proposals/collaborative_drafts/_filters.html.erb +3 -3
- data/app/views/decidim/proposals/proposals/_edit_form_fields.html.erb +1 -1
- data/app/views/decidim/proposals/proposals/_filters.html.erb +12 -12
- data/app/views/decidim/proposals/proposals/_proposal_badge.html.erb +1 -4
- data/app/views/decidim/proposals/proposals/_proposal_preview.html.erb +1 -1
- data/app/views/decidim/proposals/proposals/_vote_button.html.erb +1 -1
- data/app/views/decidim/proposals/proposals/index.html.erb +1 -1
- data/app/views/decidim/proposals/proposals/new.html.erb +1 -1
- data/app/views/decidim/proposals/proposals/show.html.erb +17 -23
- data/config/locales/ar.yml +69 -17
- data/config/locales/ca.yml +113 -18
- data/config/locales/cs.yml +123 -31
- data/config/locales/de.yml +38 -18
- data/config/locales/el.yml +1 -0
- data/config/locales/en.yml +112 -17
- data/config/locales/es-MX.yml +112 -17
- data/config/locales/es-PY.yml +112 -17
- data/config/locales/es.yml +113 -18
- data/config/locales/eu.yml +38 -18
- data/config/locales/fi-plain.yml +113 -18
- data/config/locales/fi.yml +113 -18
- data/config/locales/fr.yml +38 -18
- data/config/locales/gl.yml +38 -18
- data/config/locales/hu.yml +112 -17
- data/config/locales/id-ID.yml +38 -18
- data/config/locales/is-IS.yml +25 -15
- data/config/locales/it.yml +38 -18
- data/config/locales/nl.yml +43 -18
- data/config/locales/no.yml +66 -18
- data/config/locales/pl.yml +38 -18
- data/config/locales/pt-BR.yml +39 -19
- data/config/locales/pt.yml +39 -19
- data/config/locales/ru.yml +25 -17
- data/config/locales/sv.yml +39 -18
- data/config/locales/tr-TR.yml +38 -18
- data/config/locales/uk.yml +25 -17
- data/db/migrate/20200203111239_add_proposal_valuation_assignments.rb +12 -0
- data/db/migrate/20200210135152_add_costs_to_proposals.rb +9 -0
- data/db/migrate/20200212120110_sync_proposals_state_with_amendments_state.rb +28 -0
- data/db/migrate/20200227175922_add_state_published_at_to_proposals.rb +7 -0
- data/db/migrate/20200306123652_publish_existing_proposals_state.rb +15 -0
- data/lib/decidim/proposals.rb +1 -0
- data/lib/decidim/proposals/admin_engine.rb +7 -3
- data/lib/decidim/proposals/component.rb +39 -19
- data/lib/decidim/proposals/engine.rb +1 -1
- data/lib/decidim/proposals/test/factories.rb +55 -0
- data/lib/decidim/proposals/valuatable.rb +21 -0
- data/lib/decidim/proposals/version.rb +1 -1
- metadata +53 -36
- data/app/views/decidim/proposals/admin/proposal_answers/edit.html.erb +0 -22
- data/app/views/decidim/proposals/admin/proposal_notes/index.html.erb +0 -3
- data/app/views/decidim/proposals/admin/shared/_info_proposal.html.erb +0 -20
- data/app/views/decidim/proposals/proposal_widgets/show.html.erb +0 -4
@@ -8,27 +8,24 @@ module Decidim
|
|
8
8
|
name "Proposals"
|
9
9
|
description "A proposals component of a participatory space."
|
10
10
|
|
11
|
-
connection :proposals,
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
end
|
11
|
+
connection :proposals,
|
12
|
+
type: ProposalType.connection_type,
|
13
|
+
description: "List all proposals",
|
14
|
+
function: ProposalListHelper.new(model_class: Proposal)
|
16
15
|
|
17
|
-
field
|
18
|
-
|
16
|
+
field :proposal,
|
17
|
+
type: ProposalType,
|
18
|
+
description: "Finds one proposal",
|
19
|
+
function: ProposalFinderHelper.new(model_class: Proposal)
|
20
|
+
end
|
19
21
|
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
end
|
22
|
+
class ProposalListHelper < Decidim::Core::ComponentListBase
|
23
|
+
argument :order, ProposalInputSort, "Provides several methods to order the results"
|
24
|
+
argument :filter, ProposalInputFilter, "Provides several methods to filter the results"
|
24
25
|
end
|
25
26
|
|
26
|
-
|
27
|
-
|
28
|
-
Proposal
|
29
|
-
.where(component: component)
|
30
|
-
.published
|
31
|
-
end
|
27
|
+
class ProposalFinderHelper < Decidim::Core::ComponentFinderBase
|
28
|
+
argument :id, !types.ID, "The ID of the proposal"
|
32
29
|
end
|
33
30
|
end
|
34
31
|
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
<%= decidim_form_for(@answer_form, url: proposal_proposal_answer_path(proposal, @answer_form), html: { class: "form edit_proposal_answer" }) do |f| %>
|
2
|
+
<div class="card" id="proposal-answer">
|
3
|
+
<div class="card-divider">
|
4
|
+
<h2 class="card-title"><%= t ".title", title: present(proposal).title %></h2>
|
5
|
+
</div>
|
6
|
+
|
7
|
+
<div class="card-section">
|
8
|
+
<div class="row column">
|
9
|
+
<%= f.collection_radio_buttons :internal_state, [["accepted", t(".accepted")], ["rejected", t(".rejected")], ["evaluating", t(".evaluating")]], :first, :last, prompt: true %>
|
10
|
+
</div>
|
11
|
+
|
12
|
+
<div class="row column">
|
13
|
+
<%= f.translated :editor, :answer, autofocus: true, rows: 15 %>
|
14
|
+
</div>
|
15
|
+
|
16
|
+
<% if current_component.current_settings.answers_with_costs? %>
|
17
|
+
<div class="row column">
|
18
|
+
<%= f.number_field :cost %>
|
19
|
+
</div>
|
20
|
+
|
21
|
+
<div class="row column">
|
22
|
+
<%= f.translated :editor, :cost_report, lines: 12 %>
|
23
|
+
</div>
|
24
|
+
|
25
|
+
<div class="row column">
|
26
|
+
<%= f.translated :editor, :execution_period, lines: 12 %>
|
27
|
+
</div>
|
28
|
+
<% end %>
|
29
|
+
</div>
|
30
|
+
</div>
|
31
|
+
|
32
|
+
<div class="button--double form-general-submit">
|
33
|
+
<%= f.submit t(".answer_proposal") %>
|
34
|
+
</div>
|
35
|
+
<% end %>
|
@@ -1,4 +1,4 @@
|
|
1
|
-
<%= decidim_form_for(@
|
1
|
+
<%= decidim_form_for(@notes_form, url: proposal_proposal_notes_path(proposal, @notes_form), html: { class: "form new_proposal_note" }) do |f| %>
|
2
2
|
<div class="row column">
|
3
3
|
<%= f.text_area :body, rows: 10, label: t(".note") %>
|
4
4
|
</div>
|
@@ -36,7 +36,7 @@
|
|
36
36
|
<h2 class="card-title"><%= t("leave_your_note", scope: "decidim.proposals.admin.proposal_notes") %></h2>
|
37
37
|
</div>
|
38
38
|
<div class="card-section">
|
39
|
-
<%= render "form" %>
|
39
|
+
<%= render "decidim/proposals/admin/proposal_notes/form" %>
|
40
40
|
</div>
|
41
41
|
</div>
|
42
42
|
</div>
|
@@ -7,14 +7,20 @@
|
|
7
7
|
<% end %>
|
8
8
|
<%= link_to t("actions.import", scope: "decidim.proposals", name: t("models.proposal.name", scope: "decidim.proposals.admin")), new_proposals_import_path, class: "button tiny button--simple" if allowed_to? :import, :proposals %>
|
9
9
|
|
10
|
+
<% if allowed_to? :export, :proposals %>
|
11
|
+
<%= export_dropdown %>
|
12
|
+
<% end %>
|
13
|
+
|
10
14
|
<% if allowed_to? :create, :proposal %>
|
11
15
|
<%= link_to t("actions.new", scope: "decidim.proposals"), new_proposal_path, class: "button tiny button--simple" %>
|
12
16
|
<% end %>
|
13
|
-
|
14
|
-
<%= export_dropdown %>
|
15
17
|
</div>
|
16
18
|
|
17
19
|
<%= render partial: "decidim/proposals/admin/proposals/bulk_actions/recategorize" %>
|
20
|
+
<%= render partial: "decidim/proposals/admin/proposals/bulk_actions/scope-change" %>
|
18
21
|
<%= render partial: "decidim/proposals/admin/proposals/bulk_actions/merge" %>
|
19
22
|
<%= render partial: "decidim/proposals/admin/proposals/bulk_actions/split" %>
|
23
|
+
<%= render partial: "decidim/proposals/admin/proposals/bulk_actions/assign_to_valuator" %>
|
24
|
+
<%= render partial: "decidim/proposals/admin/proposals/bulk_actions/unassign_from_valuator" %>
|
25
|
+
<%= render partial: "decidim/proposals/admin/proposals/bulk_actions/publish_answers" %>
|
20
26
|
</div>
|
@@ -9,7 +9,7 @@
|
|
9
9
|
</div>
|
10
10
|
|
11
11
|
<div class="row column hashtags__container">
|
12
|
-
<%= form.
|
12
|
+
<%= form.editor :body, hashtaggable: true, value: form_presenter.body(extras: false).strip %>
|
13
13
|
</div>
|
14
14
|
|
15
15
|
<% if @form.component_automatic_hashtags.any? %>
|
@@ -1,4 +1,4 @@
|
|
1
|
-
<tr data-id="<%= proposal.id %>"
|
1
|
+
<tr data-id="<%= proposal.id %>" <%= "data-published-state=false" if proposal.answered? && !proposal.published_state? %>>
|
2
2
|
<td>
|
3
3
|
<%= check_box_tag "proposal_ids_s[]", proposal.id, false, class: "js-check-all-proposal js-proposal-list-check js-proposal-id-#{proposal.id}" %><br>
|
4
4
|
</td>
|
@@ -6,7 +6,10 @@
|
|
6
6
|
<%= proposal.id %><br>
|
7
7
|
</td>
|
8
8
|
<td>
|
9
|
-
<%=
|
9
|
+
<%= link_to(
|
10
|
+
decidim_html_escape(present(proposal).title).html_safe,
|
11
|
+
proposal_path(proposal)
|
12
|
+
) %><br>
|
10
13
|
</td>
|
11
14
|
<td>
|
12
15
|
<% if proposal.category %>
|
@@ -22,13 +25,24 @@
|
|
22
25
|
<% end %>
|
23
26
|
</td>
|
24
27
|
<% end %>
|
28
|
+
|
25
29
|
<td>
|
26
30
|
<strong class="<%= proposal_state_css_class proposal.state %>">
|
27
31
|
<%= t("decidim/amendment", scope: "activerecord.models", count: 1) if proposal.emendation? %>
|
28
|
-
<%=
|
32
|
+
<%= proposal_complete_state proposal %>
|
29
33
|
</strong>
|
30
34
|
</td>
|
31
35
|
|
36
|
+
<% unless current_settings.publish_answers_immediately? %>
|
37
|
+
<td>
|
38
|
+
<% if proposal.answered? && !proposal.emendation? %>
|
39
|
+
<%= humanize_boolean proposal.published_state? %>
|
40
|
+
<% else %>
|
41
|
+
-
|
42
|
+
<% end %>
|
43
|
+
</td>
|
44
|
+
<% end %>
|
45
|
+
|
32
46
|
<% if current_settings.votes_enabled? %>
|
33
47
|
<td>
|
34
48
|
<%= proposal.proposal_votes_count %>
|
@@ -41,11 +55,13 @@
|
|
41
55
|
</td>
|
42
56
|
<% end %>
|
43
57
|
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
58
|
+
<td>
|
59
|
+
<%= proposal.proposal_notes_count %>
|
60
|
+
</td>
|
61
|
+
|
62
|
+
<td class="valuators-count">
|
63
|
+
<%= proposal.valuation_assignments.count %>
|
64
|
+
</td>
|
49
65
|
|
50
66
|
<td>
|
51
67
|
<%= l proposal.created_at, format: :decidim_short %>
|
@@ -56,15 +72,7 @@
|
|
56
72
|
<%= icon_link_to "pencil", edit_proposal_path(proposal), t("actions.edit_proposal", scope: "decidim.proposals"), class: "action-icon--edit-proposal" %>
|
57
73
|
<% end %>
|
58
74
|
|
59
|
-
|
60
|
-
<%= icon_link_to "chat", proposal_proposal_notes_path(proposal_id: proposal.id), t("actions.private_notes", scope: "decidim.proposals"), class: "action-icon--index-notes" %>
|
61
|
-
<% end %>
|
62
|
-
|
63
|
-
<% if allowed_to? :create, :proposal_answer and !proposal.emendation? %>
|
64
|
-
<%= icon_link_to "comment-square", edit_proposal_proposal_answer_path(proposal_id: proposal.id, id: proposal.id), t("actions.answer", scope: "decidim.proposals"), class: " icon--small" %>
|
65
|
-
<% else %>
|
66
|
-
<%= icon "comment-square", scope: "decidim.proposals.admin", class: "action-icon action-icon--disabled" %>
|
67
|
-
<% end %>
|
75
|
+
<%= icon_with_link_to_proposal(proposal) %>
|
68
76
|
|
69
77
|
<%= resource_permissions_link(proposal) %>
|
70
78
|
|
@@ -0,0 +1,15 @@
|
|
1
|
+
<div id="js-assign-proposals-to-valuator-actions" class="hide js-bulk-action-form">
|
2
|
+
<%= form_tag(valuation_assignment_path, method: :post, id: "js-form-assign-proposals-to-valuator", class: "flex--cc flex-gap--1") do %>
|
3
|
+
<div class="checkboxes hide">
|
4
|
+
<% proposals.each do |proposal| %>
|
5
|
+
<%= check_box_tag "proposal_ids[]", proposal.id, false, class: "js-check-all-proposal js-proposal-id-#{proposal.id}" %>
|
6
|
+
<% end %>
|
7
|
+
</div>
|
8
|
+
|
9
|
+
<%= bulk_valuators_select(current_participatory_space, t("decidim.proposals.admin.proposals.index.assign_to_valuator")) %>
|
10
|
+
|
11
|
+
<%= submit_tag(t("decidim.proposals.admin.proposals.index.assign_to_valuator_button"), id: "js-submit-assign-proposals-to-valuator", class: "button small button--simple float-left") %>
|
12
|
+
|
13
|
+
<button id="js-cancel-assign-proposals-to-valuator" class="button tiny clear compact js-cancel-bulk-action" type="button"><%= t("decidim.proposals.admin.proposals.index.cancel") %></button>
|
14
|
+
<% end %>
|
15
|
+
</div>
|
@@ -1,7 +1,7 @@
|
|
1
1
|
<div id="js-bulk-actions-wrapper">
|
2
2
|
<button
|
3
3
|
id="js-bulk-actions-button"
|
4
|
-
class="button button--nomargin tiny success light dropdown"
|
4
|
+
class="button button--nomargin tiny success light dropdown hide"
|
5
5
|
type="button"
|
6
6
|
data-toggle="js-bulk-actions-dropdown">
|
7
7
|
<%= t("decidim.proposals.admin.proposals.index.actions") %>
|
@@ -21,6 +21,11 @@
|
|
21
21
|
<%= t("decidim.proposals.admin.proposals.index.change_category") %>
|
22
22
|
</button>
|
23
23
|
</li>
|
24
|
+
<li>
|
25
|
+
<button type="button" data-action="scope-change-proposals">
|
26
|
+
<%= t("decidim.proposals.admin.proposals.index.change_scope") %>
|
27
|
+
</button>
|
28
|
+
</li>
|
24
29
|
<li>
|
25
30
|
<button type="button" data-action="merge-proposals">
|
26
31
|
<%= t("decidim.proposals.admin.proposals.index.merge") %>
|
@@ -31,6 +36,21 @@
|
|
31
36
|
<%= t("decidim.proposals.admin.proposals.index.split") %>
|
32
37
|
</button>
|
33
38
|
</li>
|
39
|
+
<li>
|
40
|
+
<button type="button" data-action="assign-proposals-to-valuator">
|
41
|
+
<%= t("decidim.proposals.admin.proposals.index.assign_to_valuator") %>
|
42
|
+
</button>
|
43
|
+
</li>
|
44
|
+
<li>
|
45
|
+
<button type="button" data-action="unassign-proposals-from-valuator">
|
46
|
+
<%= t("decidim.proposals.admin.proposals.index.unassign_from_valuator") %>
|
47
|
+
</button>
|
48
|
+
</li>
|
49
|
+
<li>
|
50
|
+
<button type="button" data-action="publish-answers">
|
51
|
+
<%= t("decidim.proposals.admin.proposals.index.publish_answers") %>
|
52
|
+
</button>
|
53
|
+
</li>
|
34
54
|
</ul>
|
35
55
|
</div>
|
36
56
|
</div>
|
@@ -0,0 +1,14 @@
|
|
1
|
+
<div id="js-publish-answers-actions" class="hide js-bulk-action-form">
|
2
|
+
<%= form_tag(publish_answers_proposals_path, method: :post, remote: true, id: "js-form-publish-answers", class: "flex--cc flex-gap--1") do %>
|
3
|
+
<div class="checkboxes hide">
|
4
|
+
<% proposals.each do |proposal| %>
|
5
|
+
<%= check_box_tag "proposal_ids[]", proposal.id, false, class: "js-check-all-proposal js-proposal-id-#{proposal.id}" %>
|
6
|
+
<% end %>
|
7
|
+
</div>
|
8
|
+
<p><%= t("decidim.proposals.admin.proposals.publish_answers.number_of_proposals", number: '<span id="js-form-publish-answers-number"></span>').html_safe %></p>
|
9
|
+
|
10
|
+
<%= submit_tag(t("decidim.proposals.admin.proposals.index.publish"), id: "js-submit-publish-answers", class: "button small button--simple float-left") %>
|
11
|
+
|
12
|
+
<button id="js-cancel-publish-answers" class="button tiny clear compact js-cancel-bulk-action" type="button"><%= t("decidim.proposals.admin.proposals.index.cancel") %></button>
|
13
|
+
<% end %>
|
14
|
+
</div>
|
@@ -0,0 +1,25 @@
|
|
1
|
+
<div id="js-scope-change-proposals-actions" class="hide js-bulk-action-form">
|
2
|
+
<%= form_tag(update_scope_proposals_path, method: :post, remote: true, id: "js-form-scope-change-proposals", class: "flex--cc flex-gap--1") do %>
|
3
|
+
<div class="checkboxes hide">
|
4
|
+
<% proposals.each do |proposal| %>
|
5
|
+
<%= check_box_tag "proposal_ids[]", proposal.id, false, class: "js-check-all-proposal js-proposal-id-#{proposal.id}" %>
|
6
|
+
<% end %>
|
7
|
+
</div>
|
8
|
+
|
9
|
+
<%= scopes_picker_tag(
|
10
|
+
:scope_id,
|
11
|
+
try(:current_participatory_space)&.scope,
|
12
|
+
field: t("models.proposal.fields.scope", scope: "decidim.proposals")
|
13
|
+
) %>
|
14
|
+
|
15
|
+
<%= submit_tag(
|
16
|
+
t("decidim.proposals.admin.proposals.index.update_scope_button"),
|
17
|
+
id: "js-submit-scope-change-proposals",
|
18
|
+
class: "button small button--simple float-left"
|
19
|
+
) %>
|
20
|
+
|
21
|
+
<button id="js-cancel-scope-change-proposals" class="button tiny clear compact js-cancel-bulk-action" type="button">
|
22
|
+
<%= t("decidim.proposals.admin.proposals.index.cancel") %>
|
23
|
+
</button>
|
24
|
+
<% end %>
|
25
|
+
</div>
|
data/app/views/decidim/proposals/admin/proposals/bulk_actions/_unassign_from_valuator.html.erb
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
<div id="js-unassign-proposals-from-valuator-actions" class="hide js-bulk-action-form">
|
2
|
+
<%= form_tag(valuation_assignment_path, method: :delete, id: "js-form-unassign-proposals-from-valuator", class: "flex--cc flex-gap--1") do %>
|
3
|
+
<div class="checkboxes hide">
|
4
|
+
<% proposals.each do |proposal| %>
|
5
|
+
<%= check_box_tag "proposal_ids[]", proposal.id, false, class: "js-check-all-proposal js-proposal-id-#{proposal.id}" %>
|
6
|
+
<% end %>
|
7
|
+
</div>
|
8
|
+
|
9
|
+
<%= bulk_valuators_select(current_participatory_space, t("decidim.proposals.admin.proposals.index.unassign_from_valuator")) %>
|
10
|
+
|
11
|
+
<%= submit_tag(t("decidim.proposals.admin.proposals.index.unassign_from_valuator_button"), id: "js-submit-unassign-proposals-from-valuator", class: "button small button--simple float-left") %>
|
12
|
+
|
13
|
+
<button id="js-cancel-unassign-proposals-from-valuator" class="button tiny clear compact js-cancel-bulk-action" type="button"><%= t("decidim.proposals.admin.proposals.index.cancel") %></button>
|
14
|
+
<% end %>
|
15
|
+
</div>
|
@@ -1,4 +1,4 @@
|
|
1
|
-
<div class="card">
|
1
|
+
<div class="card with-overflow">
|
2
2
|
<div class="card-divider">
|
3
3
|
<h2 class="card-title flex--sbc">
|
4
4
|
<div>
|
@@ -8,6 +8,7 @@
|
|
8
8
|
<%= render partial: "bulk-actions" %>
|
9
9
|
</h2>
|
10
10
|
</div>
|
11
|
+
<%= admin_filter_selector %>
|
11
12
|
<div class="card-section">
|
12
13
|
<div class="table-scroll">
|
13
14
|
<table class="table-list">
|
@@ -33,9 +34,15 @@
|
|
33
34
|
<% end %>
|
34
35
|
|
35
36
|
<th>
|
36
|
-
<%= sort_link(query, :state, t("models.proposal.fields.state", scope: "decidim.proposals") ) %>
|
37
|
+
<%= sort_link(query, :state, [:state, :is_emendation], t("models.proposal.fields.state", scope: "decidim.proposals") ) %>
|
37
38
|
</th>
|
38
39
|
|
40
|
+
<% unless current_settings.publish_answers_immediately? %>
|
41
|
+
<th>
|
42
|
+
<%= sort_link(query, :state_published, t("models.proposal.fields.published_answer", scope: "decidim.proposals") ) %>
|
43
|
+
</th>
|
44
|
+
<% end %>
|
45
|
+
|
39
46
|
<% if current_settings.votes_enabled? %>
|
40
47
|
<th>
|
41
48
|
<%= sort_link(query, :proposal_votes_count, t("models.proposal.fields.votes", scope: "decidim.proposals") ) %>
|
@@ -48,11 +55,13 @@
|
|
48
55
|
</th>
|
49
56
|
<% end %>
|
50
57
|
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
58
|
+
<th>
|
59
|
+
<%= sort_link(query, :proposal_notes_count, t("models.proposal.fields.notes", scope: "decidim.proposals") ) %>
|
60
|
+
</th>
|
61
|
+
|
62
|
+
<th>
|
63
|
+
<%= sort_link(query, :valuation_assignments_count, t("models.proposal.fields.valuators", scope: "decidim.proposals") ) %>
|
64
|
+
</th>
|
56
65
|
|
57
66
|
<th>
|
58
67
|
<%= sort_link(query, :published_at, t("models.proposal.fields.published_at", scope: "decidim.proposals") ) %>
|
@@ -0,0 +1,12 @@
|
|
1
|
+
$("<%= escape_javascript(render partial: %q{js-callout}, locals: { css: %q{success}, text: flash.now[:notice] }) %>").appendTo(".callout-wrapper");
|
2
|
+
|
3
|
+
<% proposal_ids.each do |id| %>
|
4
|
+
$(".table-list [data-id='<%= id %>']")
|
5
|
+
.replaceWith("<%= escape_javascript(render partial: %q{proposal-tr}, locals: { proposal: proposal_find(id) }) %>");
|
6
|
+
<% end %>
|
7
|
+
|
8
|
+
$(".js-check-all").prop('checked', false);
|
9
|
+
$(".js-check-all-proposal").prop('checked', false);
|
10
|
+
window.hideBulkActionForms()
|
11
|
+
window.showOtherActionsButtons();
|
12
|
+
window.selectedProposalsCountUpdate();
|
@@ -0,0 +1,186 @@
|
|
1
|
+
<div class="card">
|
2
|
+
<div class="card-divider">
|
3
|
+
<h2 class="card-title">
|
4
|
+
<%= link_to "#{t ".proposals"} > ", proposals_path %>
|
5
|
+
<%= decidim_html_escape(present(proposal).title).html_safe %>
|
6
|
+
|
7
|
+
<% if allowed_to? :edit, :proposal, proposal: proposal %>
|
8
|
+
<%= icon_link_to "pencil", edit_proposal_path(proposal), t("actions.edit_proposal", scope: "decidim.proposals"), class: "action-icon--edit-proposal" %>
|
9
|
+
<% end %>
|
10
|
+
</h2>
|
11
|
+
</div>
|
12
|
+
|
13
|
+
<div class="card-section">
|
14
|
+
<div class="row column">
|
15
|
+
<strong><%= t ".link" %>:</strong> <%= link_to resource_locator(proposal).url, resource_locator(proposal).path %>
|
16
|
+
</div>
|
17
|
+
|
18
|
+
<div class="row column">
|
19
|
+
<strong><%= t ".authors" %>:</strong>
|
20
|
+
<ul id="proposal-authors-list">
|
21
|
+
<% coauthor_presenters_for(proposal).each do |presented_author| %>
|
22
|
+
<li>
|
23
|
+
<%= link_to_if(
|
24
|
+
presented_author.profile_path.present?,
|
25
|
+
presented_author.name,
|
26
|
+
presented_author.profile_path,
|
27
|
+
target: :blank
|
28
|
+
) %>
|
29
|
+
<% if presented_author.can_be_contacted? && presented_author.nickname != present(current_user).nickname %>
|
30
|
+
<%= icon_link_to "envelope-closed", current_or_new_conversation_path_with(presented_author), t("decidim.contact"), class:"action-icon--new" %>
|
31
|
+
<% end %>
|
32
|
+
</li>
|
33
|
+
<% end %>
|
34
|
+
</ul>
|
35
|
+
</div>
|
36
|
+
|
37
|
+
<div class="row column">
|
38
|
+
<strong><%= t ".body" %>:</strong> <%= simple_format(present(proposal).body(strip_tags: true)) %>
|
39
|
+
</div>
|
40
|
+
|
41
|
+
<div class="row column">
|
42
|
+
<strong><%= t ".created_at" %>:</strong> <%= l proposal.created_at, format: :decidim_short %>
|
43
|
+
</div>
|
44
|
+
|
45
|
+
<div class="row column">
|
46
|
+
<strong><%= t ".votes_count" %>:</strong> <%= proposal.proposal_votes_count %>
|
47
|
+
</div>
|
48
|
+
|
49
|
+
<div class="row column">
|
50
|
+
<strong><%= t ".votes_ranking" %>:</strong> <%= i18n_votes_ranking_for(proposal) %>
|
51
|
+
</div>
|
52
|
+
|
53
|
+
<div class="row column">
|
54
|
+
<strong><%= t ".endorsements_count" %>:</strong> <%= proposal.proposal_endorsements_count %>
|
55
|
+
</div>
|
56
|
+
|
57
|
+
<div class="row column">
|
58
|
+
<strong><%= t ".endorsements_ranking" %>:</strong> <%= i18n_endorsements_ranking_for(proposal) %>
|
59
|
+
</div>
|
60
|
+
|
61
|
+
<div class="row column">
|
62
|
+
<strong><%= t ".amendments_count" %>:</strong> <%= proposal.amendments.count %>
|
63
|
+
</div>
|
64
|
+
|
65
|
+
<div class="row column">
|
66
|
+
<strong><%= t ".comments_count" %>:</strong> <%= proposal.comments.count %>
|
67
|
+
<ul id="proposal-comments-alignment-count">
|
68
|
+
<li><strong><%= t ".comments_positive_count" %>:</strong> <%= proposal.comments.positive.count %></li>
|
69
|
+
<li><strong><%= t ".comments_neutral_count" %>:</strong> <%= proposal.comments.neutral.count %></li>
|
70
|
+
<li><strong><%= t ".comments_negative_count" %>:</strong> <%= proposal.comments.negative.count %></li>
|
71
|
+
</ul>
|
72
|
+
</div>
|
73
|
+
|
74
|
+
<div class="row column">
|
75
|
+
<strong><%= t ".endorsers" %>:</strong>
|
76
|
+
<ul id="proposal-endorsers-list">
|
77
|
+
<% presented_endorsers = endorsers_presenters_for(proposal).to_a %>
|
78
|
+
<% presented_endorsers.first(5).each do |presented_endorser| %>
|
79
|
+
<li>
|
80
|
+
<%= link_to_if(
|
81
|
+
presented_endorser.profile_path.present?,
|
82
|
+
presented_endorser.name,
|
83
|
+
presented_endorser.profile_path,
|
84
|
+
target: :blank
|
85
|
+
) %>
|
86
|
+
</li>
|
87
|
+
<% end %>
|
88
|
+
<% if presented_endorsers.count > 5 %>
|
89
|
+
<li>
|
90
|
+
<%= link_to(
|
91
|
+
t(".n_more_endorsers", count: presented_endorsers.count - 5),
|
92
|
+
resource_locator(proposal).path
|
93
|
+
) %>
|
94
|
+
</li>
|
95
|
+
<% end %>
|
96
|
+
</ul>
|
97
|
+
</div>
|
98
|
+
|
99
|
+
<div class="row column">
|
100
|
+
<strong><%= t ".related_meetings" %>:</strong>
|
101
|
+
<ul id="related-meetings">
|
102
|
+
<% proposal.linked_resources(:meetings, "proposals_from_meeting").each do |meeting| %>
|
103
|
+
<% presented_meeting = present(meeting) %>
|
104
|
+
<li>
|
105
|
+
<%= link_to presented_meeting.title, presented_meeting.profile_path %>
|
106
|
+
</li>
|
107
|
+
<% end %>
|
108
|
+
</ul>
|
109
|
+
</div>
|
110
|
+
|
111
|
+
<% if proposal.documents.any? %>
|
112
|
+
<div class="row column">
|
113
|
+
<strong><%= t ".documents" %>:</strong>
|
114
|
+
<ul id="documents">
|
115
|
+
<% proposal.documents.each do |document| %>
|
116
|
+
<li>
|
117
|
+
<%= link_to translated_attribute(document.title), document.url %>
|
118
|
+
<small><%= document.file_type %> <%= number_to_human_size(document.file_size) %></small>
|
119
|
+
</li>
|
120
|
+
<% end %>
|
121
|
+
</ul>
|
122
|
+
</div>
|
123
|
+
<% end %>
|
124
|
+
|
125
|
+
<% if proposal.photos.any? %>
|
126
|
+
<div class="row column">
|
127
|
+
<strong><%= t(".photos") %>:</strong>
|
128
|
+
<div id="photos" class="gallery row">
|
129
|
+
<% proposal.photos.each do |photo| %>
|
130
|
+
<%= link_to photo.big_url, target: "_blank", rel: "noopener" do %>
|
131
|
+
<%= image_tag photo.thumbnail_url, class:"thumbnail", alt: strip_tags(translated_attribute(photo.title)) %>
|
132
|
+
<% end %>
|
133
|
+
<% end %>
|
134
|
+
</div>
|
135
|
+
</div>
|
136
|
+
<% end %>
|
137
|
+
|
138
|
+
</div>
|
139
|
+
</div>
|
140
|
+
|
141
|
+
<% if proposal.valuators.any? %>
|
142
|
+
<div class="card">
|
143
|
+
<div class="card-divider">
|
144
|
+
<h2 class="card-title">
|
145
|
+
<%= t ".valuators" %>
|
146
|
+
</h2>
|
147
|
+
</div>
|
148
|
+
|
149
|
+
<div class="card-section">
|
150
|
+
<div class="row column">
|
151
|
+
<strong><%= t ".assigned_valuators" %>:</strong>
|
152
|
+
<ul id="valuators">
|
153
|
+
<% proposal.valuation_assignments.each do |assignment| %>
|
154
|
+
<% presented_valuator = present(assignment.valuator) %>
|
155
|
+
<li>
|
156
|
+
<%= link_to(
|
157
|
+
presented_valuator.name,
|
158
|
+
presented_valuator.profile_path,
|
159
|
+
target: :blank
|
160
|
+
) %>
|
161
|
+
|
162
|
+
<% if allowed_to? :unassign_from_valuator, :proposals, valuator: assignment.valuator %>
|
163
|
+
<%= icon_link_to(
|
164
|
+
"circle-x",
|
165
|
+
proposal_valuation_assignment_path(proposal, assignment.valuator_role),
|
166
|
+
t(".remove_assignment"),
|
167
|
+
method: :delete,
|
168
|
+
data: { confirm: t(".remove_assignment_confirmation") },
|
169
|
+
class: "red-icon"
|
170
|
+
) %>
|
171
|
+
<% end %>
|
172
|
+
</li>
|
173
|
+
<% end %>
|
174
|
+
</ul>
|
175
|
+
</div>
|
176
|
+
</div>
|
177
|
+
</div>
|
178
|
+
<% end %>
|
179
|
+
|
180
|
+
<% if allowed_to?(:create, :proposal_note, proposal: proposal) %>
|
181
|
+
<%= render "decidim/proposals/admin/proposal_notes/proposal_notes" %>
|
182
|
+
<% end %>
|
183
|
+
|
184
|
+
<% if allowed_to?(:create, :proposal_answer, proposal: proposal) && !proposal.emendation? %>
|
185
|
+
<%= render "decidim/proposals/admin/proposal_answers/form" %>
|
186
|
+
<% end %>
|