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.
Files changed (77) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/lint.yml +8 -6
  3. data/.github/workflows/test_integration.yml +24 -11
  4. data/.github/workflows/test_unit.yml +8 -4
  5. data/.rubocop.yml +21 -1
  6. data/.ruby-version +1 -1
  7. data/Gemfile +4 -8
  8. data/Gemfile.lock +361 -393
  9. data/README.md +1 -0
  10. data/app/cells/concerns/decidim/reporting_proposals/proposals_picker_cell_override.rb +4 -4
  11. data/app/commands/concerns/decidim/reporting_proposals/admin/assign_proposals_to_valuator_override.rb +3 -1
  12. data/app/commands/concerns/decidim/reporting_proposals/admin/create_category_override.rb +5 -11
  13. data/app/commands/concerns/decidim/reporting_proposals/admin/create_proposal_answer_template_override.rb +24 -0
  14. data/app/commands/concerns/decidim/reporting_proposals/admin/has_result_command_override.rb +21 -0
  15. data/app/commands/concerns/decidim/reporting_proposals/admin/update_category_override.rb +8 -11
  16. data/app/commands/concerns/decidim/reporting_proposals/admin/update_imported_result_override.rb +30 -0
  17. data/app/commands/concerns/decidim/reporting_proposals/admin/update_result_override.rb +0 -4
  18. data/app/commands/concerns/decidim/reporting_proposals/create_project_override.rb +1 -1
  19. data/app/commands/concerns/decidim/reporting_proposals/create_report_override.rb +1 -1
  20. data/app/controllers/concerns/decidim/reporting_proposals/admin/proposal_answer_templates_controller_override.rb +4 -22
  21. data/app/controllers/concerns/decidim/reporting_proposals/admin/valuation_assignments_controller_override.rb +10 -4
  22. data/app/controllers/concerns/decidim/reporting_proposals/proposals_controller_override.rb +23 -31
  23. data/app/forms/concerns/decidim/reporting_proposals/admin/category_form_override.rb +1 -1
  24. data/app/forms/concerns/decidim/reporting_proposals/form_builder_override.rb +4 -1
  25. data/app/helpers/concerns/decidim/reporting_proposals/admin/proposal_bulk_actions_helper_override.rb +23 -0
  26. data/app/helpers/concerns/decidim/reporting_proposals/admin/proposals_helper_override.rb +18 -0
  27. data/app/helpers/concerns/decidim/reporting_proposals/proposal_wizard_helper_override.rb +17 -3
  28. data/app/jobs/decidim/reporting_proposals/assign_proposal_valuators_job.rb +1 -1
  29. data/app/overrides/decidim/proposals/admin/proposals/_proposal-tr/add_valuators_name.html.erb.deface +5 -5
  30. data/app/overrides/decidim/proposals/admin/proposals/index/add_form_default_class.html.erb.deface +5 -0
  31. data/app/overrides/decidim/proposals/admin/proposals/show/add_valuators_form.html.erb.deface +1 -24
  32. data/app/overrides/decidim/proposals/proposals/edit_draft/replace_partial_edit_form_fields.html.erb.deface +0 -1
  33. data/app/overrides/decidim/proposals/proposals/new/replace_partial_edit_form_fields.html.erb.deface +3 -0
  34. data/app/packs/entrypoints/decidim_reporting_proposals.js +1 -0
  35. data/app/packs/src/decidim/reporting_proposals/assign_valuators_select.js +25 -0
  36. data/app/packs/src/decidim/reporting_proposals/user_camera_inputs.js +1 -1
  37. data/app/packs/stylesheets/decidim/reporting_proposals/list_component_admin.scss +6 -0
  38. data/app/permissions/concerns/decidim/reporting_proposals/admin/permissions_override.rb +12 -2
  39. data/app/queries/decidim/reporting_proposals/nearby_proposals.rb +1 -3
  40. data/app/views/decidim/proposals/admin/proposals/_assign_to_valuator.html.erb +31 -0
  41. data/app/views/decidim/proposals/proposals/compare.html.erb +34 -0
  42. data/app/views/decidim/reporting_proposals/admin/categories/_valuators_field.html.erb +1 -1
  43. data/app/views/decidim/reporting_proposals/admin/proposals/_photo_form.html.erb +2 -2
  44. data/app/views/decidim/reporting_proposals/admin/proposals/_photos.html.erb +4 -1
  45. data/app/views/decidim/reporting_proposals/admin/proposals/_proposal_td_hide.html.erb +1 -9
  46. data/app/views/decidim/reporting_proposals/proposals/_camera_button.html.erb +4 -2
  47. data/app/views/decidim/reporting_proposals/proposals/_reporting_proposal_fields.html.erb +66 -65
  48. data/bin/bundle +62 -0
  49. data/bin/rspec +26 -0
  50. data/bin/test +47 -0
  51. data/bin/test-legacy +3 -0
  52. data/config/locales/ca.yml +22 -34
  53. data/config/locales/de.yml +22 -36
  54. data/config/locales/en.yml +16 -1
  55. data/config/locales/es.yml +22 -36
  56. data/decidim-reporting_proposals.gemspec +1 -2
  57. data/lib/decidim/reporting_proposals/component.rb +26 -17
  58. data/lib/decidim/reporting_proposals/engine.rb +16 -11
  59. data/lib/decidim/reporting_proposals/version.rb +3 -3
  60. data/package-lock.json +129 -86
  61. data/package.json +7 -7
  62. metadata +56 -78
  63. data/.rubocop-disabled.yml +0 -11
  64. data/.rubocop_rails.yml +0 -90
  65. data/.rubocop_ruby.yml +0 -1767
  66. data/app/commands/concerns/decidim/reporting_proposals/admin/create_answer_override.rb +0 -17
  67. data/app/commands/concerns/decidim/reporting_proposals/admin/create_result_override.rb +0 -17
  68. data/app/commands/concerns/decidim/reporting_proposals/gallery_methods_override.rb +0 -18
  69. data/app/overrides/decidim/proposals/proposals/compare/add_css.html.erb.deface +0 -5
  70. data/app/overrides/decidim/proposals/proposals/compare/add_distance_badge.html.erb.deface +0 -10
  71. data/app/overrides/decidim/proposals/proposals/edit/add_user_group.html.erb.deface +0 -3
  72. data/app/overrides/decidim/proposals/proposals/new/remove_body.html.erb.deface +0 -1
  73. data/app/overrides/decidim/proposals/proposals/new/replace_body.html.erb.deface +0 -3
  74. data/app/permissions/decidim/templates/admin/permissions.rb +0 -51
  75. data/app/views/decidim/reporting_proposals/proposals/_new_proposal_fields.html.erb +0 -9
  76. data/app/views/decidim/reporting_proposals/proposals/_user_group.html.erb +0 -5
  77. data/babel.config.json +0 -25
data/README.md CHANGED
@@ -64,6 +64,7 @@ Depending on your Decidim version, you can choose the corresponding version to e
64
64
 
65
65
  | Version | Compatible Decidim versions |
66
66
  |---------|-----------------------------|
67
+ | 0.7.x | 0.29.x |
67
68
  | 0.6.x | 0.28.x |
68
69
  | 0.5.x | 0.27.x |
69
70
  | 0.4.x | 0.26.x |
@@ -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
- &.includes(:component)
16
- &.published
17
- &.not_hidden
18
- &.order(id: :asc)
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
- ProposalsValuatorMailer.notify_proposals_valuator(form.valuator_role.user, form.current_user, form.proposals).deliver_later
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 call
11
- return broadcast(:invalid) if form.invalid?
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
- @category.participatory_space.user_roles.where(id: form.valuator_ids).each do |valuator|
25
- Decidim::ReportingProposals::CategoryValuator.create!(category: @category, valuator_role: valuator)
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 call
11
- return broadcast(:invalid) if form.invalid?
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
- category.category_valuators.destroy_all
24
- category.participatory_space.user_roles.where(id: form.valuator_ids).each do |valuator|
25
- Decidim::ReportingProposals::CategoryValuator.create!(category:, valuator_role: valuator)
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
@@ -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 ||= project.sibling_scope(:proposals).where(id: @form.proposal_ids) + project.sibling_scope(:reporting_proposals).where(id: form.proposal_ids)
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 @current_user == moderator
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 avaliablity_options
12
- @avaliablity_options = []
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
- @avaliablity_options.push [formatted_name(component), component.id]
16
+ @availability_options.push [formatted_name(component), component.id]
17
17
  end
18
18
 
19
- @avaliablity_options.sort_by!(&:first)
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(destroy_params)
31
+ @form = form(Decidim::Proposals::Admin::ValuationAssignmentForm).from_params(params)
28
32
 
29
- enforce_permission_to :unassign_from_valuator, :proposals, valuator: @form.valuator_user
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 current_user == @form.valuator_user
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
- redirect_to "#{Decidim::ResourceLocatorPresenter.new(proposal).path}/compare"
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
- enforce_permission_to :edit, :proposal, proposal: @proposal
45
- @step = Proposals::ProposalsController::STEP2
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
- @form = form_proposal_model
62
+ @similar_proposals ||= Decidim::ReportingProposals::NearbyProposals.for(current_component, @proposal).all
67
63
 
68
- @form.attachment = form_attachment_new
69
-
70
- redirect_to "#{Decidim::ResourceLocatorPresenter.new(@proposal).path}/preview" if reporting_proposal?
71
- end
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::ProposalWizardCreateStepForm
120
+ reporting_proposal? ? Decidim::ReportingProposals::ProposalForm : Decidim::Proposals::ProposalForm
129
121
  end
130
122
 
131
123
  def create_proposal_command
@@ -7,7 +7,7 @@ module Decidim
7
7
  extend ActiveSupport::Concern
8
8
 
9
9
  included do
10
- attribute :valuator_ids, Array[Integer]
10
+ attribute :valuator_ids, [Integer]
11
11
 
12
12
  def map_model(model)
13
13
  self.valuator_ids = model.category_valuators.pluck(:valuator_role_id)
@@ -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 super(object_name, options) unless Decidim::ReportingProposals.use_camera_button
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"))
@@ -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, Proposals::ProposalsController::STEP2]
12
- steps << Proposals::ProposalsController::STEP3 unless reporting_proposals_component?
13
- steps << Proposals::ProposalsController::STEP4
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
- id: valuator_role.id,
33
+ valuator_role_ids: valuator_role.id,
34
34
  proposal_ids: [resource.id]
35
35
  ).with_context(
36
36
  current_component: resource.component,
@@ -1,9 +1,9 @@
1
- <!-- replace "erb[loud]:contains('proposal.valuation_assignments.count')" -->
1
+ <!-- replace "erb[loud]:contains('proposal.valuation_assignments_count')" -->
2
2
 
3
- <% count = proposal.valuation_assignments.count %>
4
- <% if count.zero? %>
3
+ <% assignments = proposal.valuation_assignments.order(:created_at) %>
4
+ <% if assignments.empty? %>
5
5
  0
6
6
  <% else %>
7
- <%= proposal.valuation_assignments.first&.valuator_role&.user&.name %>
8
- <%= "(+#{(count - 1)})" if count > 1 %>
7
+ <%= assignments.first&.valuator_role&.user&.name %>
8
+ <%= "(+#{assignments.size - 1})" if assignments.size > 1 %>
9
9
  <% end %>
@@ -0,0 +1,5 @@
1
+ <!-- insert_after "erb[loud]:contains('append_javascript_pack_tag')" -->
2
+
3
+ <script>
4
+ document.body.classList.add("form-defaults");
5
+ </script>
@@ -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 %>
@@ -0,0 +1,3 @@
1
+ <!-- replace "erb[loud]:contains('edit_form_fields')" -->
2
+
3
+ <%= render (reporting_proposal? ? "decidim/reporting_proposals/proposals/reporting_proposal_fields" : "decidim/proposals/proposals/edit_form_fields"), form: form, new_proposal: true %>
@@ -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 = $("#proposal_add_photos");
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")
@@ -25,3 +25,9 @@
25
25
  font-size: 0.8125rem;
26
26
  text-align: start;
27
27
  }
28
+
29
+ button[data-dialog-open^="flagModal"] {
30
+ > span {
31
+ display: none;
32
+ }
33
+ }
@@ -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
- can_export_proposals?
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
- allow! if permission_action.subject == :proposals && permission_action.action == :assign_to_valuator
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