decidim-reporting_proposals 0.6.0 → 0.7.1
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.
- checksums.yaml +4 -4
- data/.github/workflows/lint.yml +8 -6
- data/.github/workflows/test_integration.yml +24 -11
- data/.github/workflows/test_unit.yml +8 -4
- data/.rubocop.yml +21 -1
- data/.ruby-version +1 -1
- data/Gemfile +4 -8
- data/Gemfile.lock +361 -393
- data/README.md +1 -0
- data/app/cells/concerns/decidim/reporting_proposals/proposals_picker_cell_override.rb +4 -4
- data/app/commands/concerns/decidim/reporting_proposals/admin/assign_proposals_to_valuator_override.rb +3 -1
- data/app/commands/concerns/decidim/reporting_proposals/admin/create_category_override.rb +5 -11
- data/app/commands/concerns/decidim/reporting_proposals/admin/create_proposal_answer_template_override.rb +24 -0
- data/app/commands/concerns/decidim/reporting_proposals/admin/has_result_command_override.rb +21 -0
- data/app/commands/concerns/decidim/reporting_proposals/admin/update_category_override.rb +8 -11
- data/app/commands/concerns/decidim/reporting_proposals/admin/update_imported_result_override.rb +30 -0
- data/app/commands/concerns/decidim/reporting_proposals/admin/update_result_override.rb +0 -4
- data/app/commands/concerns/decidim/reporting_proposals/create_project_override.rb +1 -1
- data/app/commands/concerns/decidim/reporting_proposals/create_report_override.rb +1 -1
- data/app/controllers/concerns/decidim/reporting_proposals/admin/proposal_answer_templates_controller_override.rb +4 -22
- data/app/controllers/concerns/decidim/reporting_proposals/admin/valuation_assignments_controller_override.rb +10 -4
- data/app/controllers/concerns/decidim/reporting_proposals/proposals_controller_override.rb +23 -31
- data/app/forms/concerns/decidim/reporting_proposals/admin/category_form_override.rb +1 -1
- data/app/forms/concerns/decidim/reporting_proposals/form_builder_override.rb +4 -1
- data/app/helpers/concerns/decidim/reporting_proposals/admin/proposal_bulk_actions_helper_override.rb +23 -0
- data/app/helpers/concerns/decidim/reporting_proposals/admin/proposals_helper_override.rb +18 -0
- data/app/helpers/concerns/decidim/reporting_proposals/proposal_wizard_helper_override.rb +17 -3
- data/app/jobs/decidim/reporting_proposals/assign_proposal_valuators_job.rb +1 -1
- data/app/overrides/decidim/proposals/admin/proposals/_proposal-tr/add_valuators_name.html.erb.deface +5 -5
- data/app/overrides/decidim/proposals/admin/proposals/index/add_form_default_class.html.erb.deface +5 -0
- data/app/overrides/decidim/proposals/admin/proposals/show/add_valuators_form.html.erb.deface +1 -24
- data/app/overrides/decidim/proposals/proposals/edit_draft/replace_partial_edit_form_fields.html.erb.deface +0 -1
- data/app/overrides/decidim/proposals/proposals/new/replace_partial_edit_form_fields.html.erb.deface +3 -0
- data/app/packs/entrypoints/decidim_reporting_proposals.js +1 -0
- data/app/packs/src/decidim/reporting_proposals/assign_valuators_select.js +25 -0
- data/app/packs/src/decidim/reporting_proposals/user_camera_inputs.js +1 -1
- data/app/packs/stylesheets/decidim/reporting_proposals/list_component_admin.scss +6 -0
- data/app/permissions/concerns/decidim/reporting_proposals/admin/permissions_override.rb +12 -2
- data/app/queries/decidim/reporting_proposals/nearby_proposals.rb +1 -3
- data/app/views/decidim/proposals/admin/proposals/_assign_to_valuator.html.erb +31 -0
- data/app/views/decidim/proposals/proposals/compare.html.erb +34 -0
- data/app/views/decidim/reporting_proposals/admin/categories/_valuators_field.html.erb +1 -1
- data/app/views/decidim/reporting_proposals/admin/proposals/_photo_form.html.erb +2 -2
- data/app/views/decidim/reporting_proposals/admin/proposals/_photos.html.erb +4 -1
- data/app/views/decidim/reporting_proposals/admin/proposals/_proposal_td_hide.html.erb +1 -9
- data/app/views/decidim/reporting_proposals/proposals/_camera_button.html.erb +4 -2
- data/app/views/decidim/reporting_proposals/proposals/_reporting_proposal_fields.html.erb +66 -65
- data/bin/bundle +62 -0
- data/bin/rspec +26 -0
- data/bin/test +47 -0
- data/bin/test-legacy +3 -0
- data/config/locales/ca.yml +22 -34
- data/config/locales/de.yml +22 -36
- data/config/locales/en.yml +16 -1
- data/config/locales/es.yml +22 -36
- data/decidim-reporting_proposals.gemspec +1 -2
- data/lib/decidim/reporting_proposals/component.rb +26 -17
- data/lib/decidim/reporting_proposals/engine.rb +16 -11
- data/lib/decidim/reporting_proposals/version.rb +3 -3
- data/package-lock.json +129 -86
- data/package.json +7 -7
- metadata +56 -78
- data/.rubocop-disabled.yml +0 -11
- data/.rubocop_rails.yml +0 -90
- data/.rubocop_ruby.yml +0 -1767
- data/app/commands/concerns/decidim/reporting_proposals/admin/create_answer_override.rb +0 -17
- data/app/commands/concerns/decidim/reporting_proposals/admin/create_result_override.rb +0 -17
- data/app/commands/concerns/decidim/reporting_proposals/gallery_methods_override.rb +0 -18
- data/app/overrides/decidim/proposals/proposals/compare/add_css.html.erb.deface +0 -5
- data/app/overrides/decidim/proposals/proposals/compare/add_distance_badge.html.erb.deface +0 -10
- data/app/overrides/decidim/proposals/proposals/edit/add_user_group.html.erb.deface +0 -3
- data/app/overrides/decidim/proposals/proposals/new/remove_body.html.erb.deface +0 -1
- data/app/overrides/decidim/proposals/proposals/new/replace_body.html.erb.deface +0 -3
- data/app/permissions/decidim/templates/admin/permissions.rb +0 -51
- data/app/views/decidim/reporting_proposals/proposals/_new_proposal_fields.html.erb +0 -9
- data/app/views/decidim/reporting_proposals/proposals/_user_group.html.erb +0 -5
- data/babel.config.json +0 -25
data/README.md
CHANGED
@@ -12,10 +12,10 @@ module Decidim
|
|
12
12
|
proposals_query = Decidim.find_resource_manifest(:proposals).try(:resource_scope, component)
|
13
13
|
reporting_proposals_query = Decidim.find_resource_manifest(:reporting_proposals).try(:resource_scope, component)
|
14
14
|
(reporting_proposals_query ? proposals_query.or(reporting_proposals_query) : proposals_query)
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
15
|
+
&.includes(:component)
|
16
|
+
&.published
|
17
|
+
&.not_hidden
|
18
|
+
&.order(id: :asc)
|
19
19
|
end
|
20
20
|
end
|
21
21
|
end
|
@@ -21,7 +21,9 @@ module Decidim
|
|
21
21
|
private
|
22
22
|
|
23
23
|
def send_email
|
24
|
-
|
24
|
+
form.valuator_roles.each do |role|
|
25
|
+
ProposalsValuatorMailer.notify_proposals_valuator(role.user, form.current_user, form.proposals).deliver_later
|
26
|
+
end
|
25
27
|
end
|
26
28
|
end
|
27
29
|
end
|
@@ -7,22 +7,16 @@ module Decidim
|
|
7
7
|
extend ActiveSupport::Concern
|
8
8
|
|
9
9
|
included do
|
10
|
-
def
|
11
|
-
|
12
|
-
|
13
|
-
transaction do
|
14
|
-
@category = create_category
|
15
|
-
update_valuators
|
16
|
-
end
|
17
|
-
|
18
|
-
broadcast(:ok)
|
10
|
+
def run_after_hooks
|
11
|
+
super
|
12
|
+
update_valuators if resource.present? && form.valuator_ids.present?
|
19
13
|
end
|
20
14
|
|
21
15
|
private
|
22
16
|
|
23
17
|
def update_valuators
|
24
|
-
|
25
|
-
Decidim::ReportingProposals::CategoryValuator.create!(category:
|
18
|
+
resource.participatory_space.user_roles.where(id: form.valuator_ids).each do |valuator|
|
19
|
+
Decidim::ReportingProposals::CategoryValuator.create!(category: resource, valuator_role: valuator)
|
26
20
|
end
|
27
21
|
end
|
28
22
|
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Decidim
|
4
|
+
module ReportingProposals
|
5
|
+
module Admin
|
6
|
+
module CreateProposalAnswerTemplateOverride
|
7
|
+
extend ActiveSupport::Concern
|
8
|
+
|
9
|
+
included do
|
10
|
+
def identify_templateable_resource
|
11
|
+
resource = @form.current_organization
|
12
|
+
if @form.component_constraint.present?
|
13
|
+
found_component = Decidim::Component.where(id: @form.component_constraint, manifest_name: %w(proposals reporting_proposals)).first
|
14
|
+
if found_component.present?
|
15
|
+
resource = found_component&.participatory_space&.decidim_organization_id == @form.current_organization.id ? found_component : nil
|
16
|
+
end
|
17
|
+
end
|
18
|
+
resource
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Decidim
|
4
|
+
module ReportingProposals
|
5
|
+
module Admin
|
6
|
+
module HasResultCommandOverride
|
7
|
+
extend ActiveSupport::Concern
|
8
|
+
|
9
|
+
included do
|
10
|
+
def proposals
|
11
|
+
@proposals ||= resource.sibling_scope(:proposals).where(id: form.proposal_ids) + resource.sibling_scope(:reporting_proposals).where(id: form.proposal_ids)
|
12
|
+
end
|
13
|
+
|
14
|
+
def link_proposals
|
15
|
+
resource.link_resources(proposals, "included_proposals")
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -7,22 +7,19 @@ module Decidim
|
|
7
7
|
extend ActiveSupport::Concern
|
8
8
|
|
9
9
|
included do
|
10
|
-
def
|
11
|
-
|
12
|
-
|
13
|
-
transaction do
|
14
|
-
update_category
|
15
|
-
update_valuators
|
16
|
-
end
|
17
|
-
broadcast(:ok)
|
10
|
+
def run_after_hooks
|
11
|
+
super
|
12
|
+
update_valuators
|
18
13
|
end
|
19
14
|
|
20
15
|
private
|
21
16
|
|
22
17
|
def update_valuators
|
23
|
-
|
24
|
-
|
25
|
-
|
18
|
+
resource.category_valuators.destroy_all
|
19
|
+
return unless form.valuator_ids.any?
|
20
|
+
|
21
|
+
resource.participatory_space.user_roles.where(id: form.valuator_ids).each do |valuator|
|
22
|
+
Decidim::ReportingProposals::CategoryValuator.create!(category: resource, valuator_role: valuator)
|
26
23
|
end
|
27
24
|
end
|
28
25
|
end
|
data/app/commands/concerns/decidim/reporting_proposals/admin/update_imported_result_override.rb
ADDED
@@ -0,0 +1,30 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Decidim
|
4
|
+
module ReportingProposals
|
5
|
+
module Admin
|
6
|
+
module UpdateImportedResultOverride
|
7
|
+
extend ActiveSupport::Concern
|
8
|
+
|
9
|
+
included do
|
10
|
+
def send_notifications
|
11
|
+
all = result.linked_resources(:proposals, "included_proposals") + result.linked_resources(:reporting_proposals, "included_proposals")
|
12
|
+
all.each do |proposal|
|
13
|
+
Decidim::EventsManager.publish(
|
14
|
+
event: "decidim.events.accountability.result_progress_updated",
|
15
|
+
event_class: Decidim::Accountability::ResultProgressUpdatedEvent,
|
16
|
+
resource: result,
|
17
|
+
affected_users: proposal.notifiable_identities,
|
18
|
+
followers: proposal.followers - proposal.notifiable_identities,
|
19
|
+
extra: {
|
20
|
+
progress: result.progress,
|
21
|
+
proposal_id: proposal.id
|
22
|
+
}
|
23
|
+
)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -7,10 +7,6 @@ module Decidim
|
|
7
7
|
extend ActiveSupport::Concern
|
8
8
|
|
9
9
|
included do
|
10
|
-
def proposals
|
11
|
-
@proposals ||= result.sibling_scope(:proposals).where(id: form.proposal_ids) + result.sibling_scope(:reporting_proposals).where(id: form.proposal_ids)
|
12
|
-
end
|
13
|
-
|
14
10
|
def send_notifications
|
15
11
|
all = result.linked_resources(:proposals, "included_proposals") + result.linked_resources(:reporting_proposals, "included_proposals")
|
16
12
|
all.each do |proposal|
|
@@ -7,7 +7,7 @@ module Decidim
|
|
7
7
|
|
8
8
|
included do
|
9
9
|
def proposals
|
10
|
-
@proposals ||=
|
10
|
+
@proposals ||= resource.sibling_scope(:proposals).where(id: @form.proposal_ids) + resource.sibling_scope(:reporting_proposals).where(id: form.proposal_ids)
|
11
11
|
end
|
12
12
|
end
|
13
13
|
end
|
@@ -10,7 +10,7 @@ module Decidim
|
|
10
10
|
participatory_space_moderators.each do |moderator|
|
11
11
|
next unless moderator.email_on_moderations
|
12
12
|
|
13
|
-
ReportedMailer.hide(moderator, @report).deliver_later unless
|
13
|
+
ReportedMailer.hide(moderator, @report).deliver_later unless form.current_user == moderator
|
14
14
|
end
|
15
15
|
end
|
16
16
|
end
|
@@ -8,33 +8,15 @@ module Decidim
|
|
8
8
|
extend ActiveSupport::Concern
|
9
9
|
|
10
10
|
included do
|
11
|
-
def
|
12
|
-
@
|
11
|
+
def availability_options
|
12
|
+
@availability_options = []
|
13
13
|
|
14
14
|
Decidim::Component.includes(:participatory_space).where(manifest_name: accepted_components)
|
15
15
|
.select { |a| a.participatory_space.decidim_organization_id == current_organization.id }.each do |component|
|
16
|
-
@
|
16
|
+
@availability_options.push [formatted_name(component), component.id]
|
17
17
|
end
|
18
18
|
|
19
|
-
@
|
20
|
-
@avaliablity_options.prepend [t("global_scope", scope: "decidim.templates.admin.proposal_answer_templates.index"), 0]
|
21
|
-
end
|
22
|
-
|
23
|
-
# This is overriden because a bug in decidim templates that prevents valuators to use templates
|
24
|
-
# This can be removed after https://github.com/decidim/decidim/pull/12765 is merge & backported
|
25
|
-
def fetch
|
26
|
-
enforce_permission_to(:read, :template, template:, proposal:)
|
27
|
-
|
28
|
-
response_object = {
|
29
|
-
state: template.field_values["internal_state"],
|
30
|
-
template: populate_template_interpolations(proposal)
|
31
|
-
}
|
32
|
-
|
33
|
-
respond_to do |format|
|
34
|
-
format.json do
|
35
|
-
render json: response_object.to_json
|
36
|
-
end
|
37
|
-
end
|
19
|
+
@availability_options.sort_by!(&:first)
|
38
20
|
end
|
39
21
|
|
40
22
|
private
|
@@ -8,8 +8,12 @@ module Decidim
|
|
8
8
|
|
9
9
|
included do
|
10
10
|
def create
|
11
|
-
enforce_permission_to :assign_to_valuator, :proposals
|
12
11
|
@form = form(Decidim::Proposals::Admin::ValuationAssignmentForm).from_params(params)
|
12
|
+
|
13
|
+
@form.proposals.each do |proposal|
|
14
|
+
enforce_permission_to :assign_to_valuator, :proposals, proposal:
|
15
|
+
end
|
16
|
+
|
13
17
|
Decidim::Proposals::Admin::AssignProposalsToValuator.call(@form) do
|
14
18
|
on(:ok) do |_proposal|
|
15
19
|
flash[:notice] = I18n.t("valuation_assignments.create.success", scope: "decidim.proposals.admin")
|
@@ -24,14 +28,16 @@ module Decidim
|
|
24
28
|
end
|
25
29
|
|
26
30
|
def destroy
|
27
|
-
@form = form(Decidim::Proposals::Admin::ValuationAssignmentForm).from_params(
|
31
|
+
@form = form(Decidim::Proposals::Admin::ValuationAssignmentForm).from_params(params)
|
28
32
|
|
29
|
-
|
33
|
+
@form.valuator_roles.each do |valuator_role|
|
34
|
+
enforce_permission_to :unassign_from_valuator, :proposals, valuator: valuator_role.user
|
35
|
+
end
|
30
36
|
|
31
37
|
Decidim::Proposals::Admin::UnassignProposalsFromValuator.call(@form) do
|
32
38
|
on(:ok) do |_proposal|
|
33
39
|
flash.keep[:notice] = I18n.t("valuation_assignments.delete.success", scope: "decidim.proposals.admin")
|
34
|
-
if
|
40
|
+
if @form.valuator_roles.map(&:user).include?(current_user)
|
35
41
|
redirect_to EngineRouter.admin_proxy(current_component).root_path
|
36
42
|
else
|
37
43
|
redirect_back fallback_location: EngineRouter.admin_proxy(current_component).root_path
|
@@ -10,6 +10,12 @@ module Decidim
|
|
10
10
|
included do
|
11
11
|
helper_method :reporting_proposal?, :geocoding_comparison?
|
12
12
|
|
13
|
+
# rubocop:disable Naming/VariableNumber
|
14
|
+
STEP1 = :step_1
|
15
|
+
STEP2 = :step_2
|
16
|
+
STEP_COMPARE = :step_compare
|
17
|
+
# rubocop:enable Naming/VariableNumber
|
18
|
+
|
13
19
|
def new
|
14
20
|
enforce_permission_to :create, :proposal
|
15
21
|
@step = Proposals::ProposalsController::STEP1
|
@@ -29,7 +35,15 @@ module Decidim
|
|
29
35
|
on(:ok) do |proposal|
|
30
36
|
flash[:notice] = I18n.t("proposals.create.success", scope: "decidim")
|
31
37
|
|
32
|
-
|
38
|
+
@proposal = proposal
|
39
|
+
|
40
|
+
path = if geocoding_comparison?
|
41
|
+
"#{Decidim::ResourceLocatorPresenter.new(proposal).path}/compare"
|
42
|
+
else
|
43
|
+
"#{Decidim::ResourceLocatorPresenter.new(proposal).path}/preview"
|
44
|
+
end
|
45
|
+
|
46
|
+
redirect_to path
|
33
47
|
end
|
34
48
|
|
35
49
|
on(:invalid) do
|
@@ -39,40 +53,18 @@ module Decidim
|
|
39
53
|
end
|
40
54
|
end
|
41
55
|
|
42
|
-
# change comparison class if geocoding comparison is enabled
|
43
56
|
def compare
|
44
|
-
|
45
|
-
@
|
46
|
-
klass = if geocoding_comparison?
|
47
|
-
Decidim::ReportingProposals::NearbyProposals
|
48
|
-
else
|
49
|
-
Decidim::Proposals::SimilarProposals
|
50
|
-
end
|
51
|
-
@similar_proposals ||= klass
|
52
|
-
.for(current_component, @proposal)
|
53
|
-
.all
|
54
|
-
|
55
|
-
if @similar_proposals.blank?
|
56
|
-
flash[:notice] = I18n.t("proposals.proposals.compare.no_similars_found", scope: "decidim")
|
57
|
-
redirect_to "#{Decidim::ResourceLocatorPresenter.new(@proposal).path}/complete"
|
58
|
-
end
|
59
|
-
end
|
57
|
+
@step = Proposals::ProposalsController::STEP_COMPARE
|
58
|
+
@proposal = Decidim::Proposals::Proposal.find(params[:id])
|
60
59
|
|
61
|
-
# disable this step for reporting proposals
|
62
|
-
def complete
|
63
60
|
enforce_permission_to :edit, :proposal, proposal: @proposal
|
64
|
-
@step = Proposals::ProposalsController::STEP3
|
65
61
|
|
66
|
-
@
|
62
|
+
@similar_proposals ||= Decidim::ReportingProposals::NearbyProposals.for(current_component, @proposal).all
|
67
63
|
|
68
|
-
@
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
def edit_draft
|
74
|
-
@step = reporting_proposal? ? Proposals::ProposalsController::STEP1 : Proposals::ProposalsController::STEP3
|
75
|
-
enforce_permission_to :edit, :proposal, proposal: @proposal
|
64
|
+
if @similar_proposals.blank?
|
65
|
+
flash[:notice] = I18n.t("reporting_proposals.proposals.compare.no_similars_found", scope: "decidim")
|
66
|
+
redirect_to "#{Decidim::ResourceLocatorPresenter.new(@proposal).path}/preview"
|
67
|
+
end
|
76
68
|
end
|
77
69
|
|
78
70
|
def update_draft
|
@@ -125,7 +117,7 @@ module Decidim
|
|
125
117
|
end
|
126
118
|
|
127
119
|
def new_proposal_form
|
128
|
-
reporting_proposal? ? Decidim::ReportingProposals::ProposalForm : Decidim::Proposals::
|
120
|
+
reporting_proposal? ? Decidim::ReportingProposals::ProposalForm : Decidim::Proposals::ProposalForm
|
129
121
|
end
|
130
122
|
|
131
123
|
def create_proposal_command
|
@@ -10,8 +10,11 @@ module Decidim
|
|
10
10
|
delegate :asset_pack_path, to: :@template
|
11
11
|
|
12
12
|
included do
|
13
|
+
alias_method :original_file_field, :file_field
|
14
|
+
|
13
15
|
def file_field(object_name, options = {})
|
14
|
-
return
|
16
|
+
return original_file_field(object_name, options) unless Decidim::ReportingProposals.use_camera_button
|
17
|
+
return original_file_field(object_name, options) unless @template.respond_to?(:snippets)
|
15
18
|
|
16
19
|
unless @template.snippets.any?(:reporting_proposals_camera_scripts) || @template.snippets.any?(:reporting_proposals_camera_styles)
|
17
20
|
@template.snippets.add(:reporting_proposals_camera_scripts, @template.prepend_javascript_pack_tag("decidim_reporting_proposals_camera"))
|
data/app/helpers/concerns/decidim/reporting_proposals/admin/proposal_bulk_actions_helper_override.rb
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Decidim
|
4
|
+
module ReportingProposals
|
5
|
+
module Admin
|
6
|
+
module ProposalBulkActionsHelperOverride
|
7
|
+
extend ActiveSupport::Concern
|
8
|
+
|
9
|
+
included do
|
10
|
+
def find_valuators_for_select(participatory_space, _current_user)
|
11
|
+
valuator_roles = participatory_space.user_roles(:valuator).order_by_name
|
12
|
+
valuators = Decidim::User.where(id: valuator_roles.pluck(:decidim_user_id)).to_a
|
13
|
+
|
14
|
+
valuator_roles.map do |role|
|
15
|
+
valuator = valuators.find { |user| user.id == role.decidim_user_id }
|
16
|
+
[valuator.name, role.id]
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -11,6 +11,24 @@ module Decidim
|
|
11
11
|
# Helpers for overdue proposals
|
12
12
|
include ActionView::Helpers::DateHelper
|
13
13
|
|
14
|
+
def available_valuators_for_proposal(proposal, current_user)
|
15
|
+
participatory_space = proposal.component.participatory_space
|
16
|
+
|
17
|
+
all_roles = participatory_space.user_roles(:valuator).order_by_name
|
18
|
+
assigned_ids = proposal.valuation_assignments.pluck(:valuator_role_id)
|
19
|
+
|
20
|
+
available_roles = all_roles.reject do |role|
|
21
|
+
role.decidim_user_id == current_user.id || assigned_ids.include?(role.id)
|
22
|
+
end
|
23
|
+
|
24
|
+
users_by_id = Decidim::User.where(id: available_roles.map(&:decidim_user_id)).index_by(&:id)
|
25
|
+
|
26
|
+
available_roles.map do |role|
|
27
|
+
user = users_by_id[role.decidim_user_id]
|
28
|
+
[user.name, role.id]
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
14
32
|
def unanswered_proposals_overdue?(proposal)
|
15
33
|
grace_period = days_unanswered(proposal)
|
16
34
|
!grace_period.zero? &&
|
@@ -8,11 +8,12 @@ module Decidim
|
|
8
8
|
|
9
9
|
included do
|
10
10
|
def proposal_wizard_steps
|
11
|
-
steps = [Proposals::ProposalsController::STEP1
|
12
|
-
steps << Proposals::ProposalsController::
|
13
|
-
steps << Proposals::ProposalsController::
|
11
|
+
steps = [Proposals::ProposalsController::STEP1]
|
12
|
+
steps << Proposals::ProposalsController::STEP_COMPARE if reporting_proposals_component?
|
13
|
+
steps << Proposals::ProposalsController::STEP2
|
14
14
|
end
|
15
15
|
|
16
|
+
# rubocop:disable Rails/HelperInstanceVariable
|
16
17
|
def distance(meters = nil)
|
17
18
|
meters = @proposal.component.settings.geocoding_comparison_radius.to_f if meters.nil?
|
18
19
|
|
@@ -20,9 +21,22 @@ module Decidim
|
|
20
21
|
|
21
22
|
"#{(meters / 1000).round}Km"
|
22
23
|
end
|
24
|
+
# rubocop:enable Rails/HelperInstanceVariable
|
23
25
|
|
24
26
|
private
|
25
27
|
|
28
|
+
def proposal_wizard_aside_link_to_back(step)
|
29
|
+
# byebug
|
30
|
+
case step
|
31
|
+
when Decidim::Proposals::ProposalsController::STEP1
|
32
|
+
proposals_path
|
33
|
+
when Decidim::Proposals::ProposalsController::STEP_COMPARE
|
34
|
+
compare_proposal_path
|
35
|
+
when Decidim::Proposals::ProposalsController::STEP2
|
36
|
+
preview_proposal_path
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
26
40
|
def total_steps
|
27
41
|
proposal_wizard_steps.count
|
28
42
|
end
|
@@ -30,7 +30,7 @@ module Decidim
|
|
30
30
|
|
31
31
|
def form(valuator_role)
|
32
32
|
Decidim::Proposals::Admin::ValuationAssignmentForm.from_params(
|
33
|
-
|
33
|
+
valuator_role_ids: valuator_role.id,
|
34
34
|
proposal_ids: [resource.id]
|
35
35
|
).with_context(
|
36
36
|
current_component: resource.component,
|
data/app/overrides/decidim/proposals/admin/proposals/_proposal-tr/add_valuators_name.html.erb.deface
CHANGED
@@ -1,9 +1,9 @@
|
|
1
|
-
<!-- replace "erb[loud]:contains('proposal.
|
1
|
+
<!-- replace "erb[loud]:contains('proposal.valuation_assignments_count')" -->
|
2
2
|
|
3
|
-
<%
|
4
|
-
<% if
|
3
|
+
<% assignments = proposal.valuation_assignments.order(:created_at) %>
|
4
|
+
<% if assignments.empty? %>
|
5
5
|
0
|
6
6
|
<% else %>
|
7
|
-
<%=
|
8
|
-
<%= "(+#{
|
7
|
+
<%= assignments.first&.valuator_role&.user&.name %>
|
8
|
+
<%= "(+#{assignments.size - 1})" if assignments.size > 1 %>
|
9
9
|
<% end %>
|
data/app/overrides/decidim/proposals/admin/proposals/show/add_valuators_form.html.erb.deface
CHANGED
@@ -1,25 +1,2 @@
|
|
1
1
|
<!-- insert_after "#valuators" -->
|
2
|
-
|
3
|
-
<% if allowed_to? :assign_to_valuator, :proposals %>
|
4
|
-
<div id="js-assign-proposal-to-valuator-actions" class="js-bulk-action-form form-single-proposal my-4"
|
5
|
-
style="max-width:400px">
|
6
|
-
<%= form_tag(valuation_assignment_path, method: :post, id: "js-form-assign-proposal-to-valuator",
|
7
|
-
class: "form form-defaults") do %>
|
8
|
-
<div class="form__wrapper">
|
9
|
-
<div class="card">
|
10
|
-
<div class="flex items-center">
|
11
|
-
<div class="checkboxes hide">
|
12
|
-
<%= check_box_tag "proposal_ids[]", proposal.id, true,
|
13
|
-
class: "js-check-all-proposal js-proposal-id-#{proposal.id}" %>
|
14
|
-
</div>
|
15
|
-
|
16
|
-
<%= bulk_valuators_select(current_participatory_space, t("decidim.proposals.admin.proposals.index.assign_to_valuator")) %>
|
17
|
-
<%= submit_tag(t("decidim.proposals.admin.proposals.index.assign_to_valuator_button"),
|
18
|
-
id: "js-submit-assign-proposal-to-valuator",
|
19
|
-
class: "button button__sm button__secondary ml-2") %>
|
20
|
-
</div>
|
21
|
-
</div>
|
22
|
-
</div>
|
23
|
-
<% end %>
|
24
|
-
</div>
|
25
|
-
<% end %>
|
2
|
+
<%= render partial: "decidim/proposals/admin/proposals/assign_to_valuator", locals: { current_participatory_space: current_participatory_space, proposal: proposal } %>
|
@@ -2,7 +2,6 @@
|
|
2
2
|
|
3
3
|
<% if reporting_proposal? %>
|
4
4
|
<%= render "decidim/reporting_proposals/proposals/reporting_proposal_fields", form: form %>
|
5
|
-
<%= render "decidim/reporting_proposals/proposals/user_group", form: form %>
|
6
5
|
<% else %>
|
7
6
|
<%= render "decidim/proposals/proposals/edit_form_fields", form: form %>
|
8
7
|
<% end %>
|
@@ -1,6 +1,7 @@
|
|
1
1
|
import "src/decidim/proposals/utils"
|
2
2
|
import "src/decidim/reporting_proposals/proposals/add_proposal"
|
3
3
|
import "src/decidim/reporting_proposals/proposal_extra_validations"
|
4
|
+
import "src/decidim/reporting_proposals/assign_valuators_select.js"
|
4
5
|
import "stylesheets/decidim/reporting_proposals/proposals/add_proposal.scss";
|
5
6
|
|
6
7
|
// Images
|
@@ -0,0 +1,25 @@
|
|
1
|
+
import TomSelect from "tom-select/dist/cjs/tom-select.popular";
|
2
|
+
|
3
|
+
document.addEventListener("DOMContentLoaded", () => {
|
4
|
+
const select = document.querySelector("#assign_valuator_role_ids");
|
5
|
+
|
6
|
+
if (!select) {
|
7
|
+
return;
|
8
|
+
}
|
9
|
+
|
10
|
+
const { noResults } = select.dataset;
|
11
|
+
|
12
|
+
const config = {
|
13
|
+
plugins: ["remove_button"],
|
14
|
+
render: {
|
15
|
+
item: (data, escape) =>
|
16
|
+
`<div>${escape(data.text)}<input type="hidden" name="valuator_role_ids[]" value="${data.value}" /></div>`,
|
17
|
+
// eslint-disable-next-line camelcase
|
18
|
+
...(noResults && {
|
19
|
+
no_results: () => `<div class="no-results">${noResults}</div>`
|
20
|
+
})
|
21
|
+
}
|
22
|
+
};
|
23
|
+
|
24
|
+
return new TomSelect(select, config);
|
25
|
+
});
|
@@ -1,5 +1,5 @@
|
|
1
1
|
$(() => {
|
2
|
-
const $input = $("#
|
2
|
+
const $input = $("#proposal_add_photos_button");
|
3
3
|
const $button = $(".camera-container .user-device-camera");
|
4
4
|
const $checkbox = $("#proposal_has_no_image");
|
5
5
|
const $formError = $(".camera-container .form-error")
|
@@ -17,12 +17,14 @@ module Decidim
|
|
17
17
|
if valuator_assigned_to_proposal?
|
18
18
|
can_create_proposal_note?
|
19
19
|
can_create_proposal_answer?
|
20
|
+
can_assign_valuator_to_proposal?
|
20
21
|
allow! if action_is_show_on_proposal?
|
21
22
|
elsif action_is_show_on_proposal?
|
22
23
|
disallow!
|
23
24
|
end
|
24
|
-
|
25
|
+
|
25
26
|
valuator_can_unassign_valuator_from_proposals?
|
27
|
+
can_export_proposals?
|
26
28
|
|
27
29
|
return permission_action
|
28
30
|
end
|
@@ -59,7 +61,7 @@ module Decidim
|
|
59
61
|
allow! if permission_action.subject == :proposals && permission_action.action == :split
|
60
62
|
|
61
63
|
# Every user allowed by the space can assign proposals to a valuator
|
62
|
-
|
64
|
+
can_assign_valuator_to_proposal?
|
63
65
|
|
64
66
|
# Every user allowed by the space can unassign a valuator from proposals
|
65
67
|
can_unassign_valuator_from_proposals?
|
@@ -72,6 +74,14 @@ module Decidim
|
|
72
74
|
allow!
|
73
75
|
end
|
74
76
|
|
77
|
+
if permission_action.subject == :proposal_state
|
78
|
+
if permission_action.action == :destroy
|
79
|
+
toggle_allow(proposal_state.proposals.empty?)
|
80
|
+
else
|
81
|
+
allow!
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
75
85
|
permission_action
|
76
86
|
end
|
77
87
|
# rubocop:enable Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
|