app/controllers/decidim/budgets/admin/projects_controller.rb in decidim-budgets-0.26.10 vs app/controllers/decidim/budgets/admin/projects_controller.rb in decidim-budgets-0.27.0.rc1
- old
+ new
@@ -6,12 +6,13 @@
# This controller allows an admin to manage projects from a Participatory Process
class ProjectsController < Admin::ApplicationController
include Decidim::ApplicationHelper
include Decidim::Proposals::Admin::Picker if Decidim::Budgets.enable_proposal_linking
include Decidim::Budgets::Admin::Filterable
+ helper Decidim::Budgets::Admin::ProjectBulkActionsHelper
- helper_method :projects, :finished_orders, :pending_orders, :present
+ helper_method :projects, :finished_orders, :pending_orders, :present, :project_ids
def collection
@collection ||= budget.projects.page(params[:page]).per(15)
end
@@ -72,29 +73,176 @@
redirect_to budget_projects_path(budget)
end
end
end
+ def update_category
+ enforce_permission_to :update, :project_category
+
+ ::Decidim::Budgets::Admin::UpdateProjectCategory.call(params[:category][:id], project_ids) do
+ on(:invalid_category) do
+ flash.now[:error] = I18n.t(
+ "projects.update_category.select_a_category",
+ scope: "decidim.budgets.admin"
+ )
+ end
+
+ on(:invalid_project_ids) do
+ flash.now[:alert] = I18n.t(
+ "projects.update_category.select_a_project",
+ scope: "decidim.budgets.admin"
+ )
+ end
+
+ on(:update_projects_category) do
+ flash.now[:notice] = update_projects_bulk_response_successful(@response, :category)
+ flash.now[:alert] = update_projects_bulk_response_errored(@response, :category)
+ end
+ end
+
+ respond_to do |format|
+ format.js { render :update_attribute, locals: { form_selector: "#js-form-recategorize-projects", attribute_selector: "#category_id" } }
+ end
+ end
+
+ def update_scope
+ enforce_permission_to :update, :project_scope
+
+ ::Decidim::Budgets::Admin::UpdateProjectScope.call(params[:scope_id], project_ids) do
+ on(:invalid_scope) do
+ flash.now[:error] = t(
+ "projects.update_scope.select_a_scope",
+ scope: "decidim.budgets.admin"
+ )
+ end
+
+ on(:invalid_project_ids) do
+ flash.now[:alert] = t(
+ "projects.update_scope.select_a_project",
+ scope: "decidim.budgets.admin"
+ )
+ end
+
+ on(:update_projects_scope) do
+ flash.now[:notice] = update_projects_bulk_response_successful(@response, :scope)
+ flash.now[:alert] = update_projects_bulk_response_errored(@response, :scope)
+ end
+ end
+
+ respond_to do |format|
+ format.js { render :update_attribute, locals: { form_selector: "#js-form-scope-change-projects", attribute_selector: "#scope_id" } }
+ end
+ end
+
+ def update_selected
+ enforce_permission_to :update, :project_selected
+
+ ::Decidim::Budgets::Admin::UpdateProjectSelection.call(params.dig(:selected, "value"), project_ids) do
+ on(:invalid_selection) do
+ flash.now[:error] = t(
+ "projects.update_selected.select_a_selection",
+ scope: "decidim.budgets.admin"
+ )
+ end
+
+ on(:invalid_project_ids) do
+ flash.now[:alert] = t(
+ "projects.update_selected.select_a_project",
+ scope: "decidim.budgets.admin"
+ )
+ end
+
+ on(:update_projects_selection) do
+ flash.now[:notice] = update_projects_bulk_response_successful(@response, :selected)
+ flash.now[:alert] = update_projects_bulk_response_errored(@response, :selected)
+ end
+ end
+
+ respond_to do |format|
+ format.js { render :update_attribute, locals: { form_selector: "#js-form-change-selected-projects", attribute_selector: "#selected_value" } }
+ end
+ end
+
private
def projects
@projects ||= filtered_collection
end
def orders
@orders ||= Order.where(budget: budget)
end
+ def project_ids
+ @project_ids ||= params[:project_ids]
+ end
+
def pending_orders
orders.pending
end
def finished_orders
orders.finished
end
def project
@project ||= projects.find(params[:id])
+ end
+
+ def update_projects_bulk_response_successful(response, subject)
+ return if response[:successful].blank?
+
+ case subject
+ when :category
+ t(
+ "projects.update_category.success",
+ subject_name: response[:subject_name],
+ projects: response[:successful].to_sentence,
+ scope: "decidim.budgets.admin"
+ )
+ when :scope
+ t(
+ "projects.update_scope.success",
+ subject_name: response[:subject_name],
+ projects: response[:successful].to_sentence,
+ scope: "decidim.budgets.admin"
+ )
+ when :selected
+ t(
+ "projects.update_selected.success",
+ subject_name: response[:subject_name],
+ projects: response[:successful].to_sentence,
+ scope: "decidim.budgets.admin"
+ )
+ end
+ end
+
+ def update_projects_bulk_response_errored(response, subject)
+ return if response[:errored].blank?
+
+ case subject
+ when :category
+ t(
+ "projects.update_category.invalid",
+ subject_name: response[:subject_name],
+ projects: response[:errored].to_sentence,
+ scope: "decidim.budgets.admin"
+ )
+ when :scope
+ t(
+ "projects.update_scope.invalid",
+ subject_name: response[:subject_name],
+ projects: response[:errored].to_sentence,
+ scope: "decidim.budgets.admin"
+ )
+ when :selected
+ t(
+ "projects.update_selected.invalid",
+ subject_name: response[:subject_name],
+ projects: response[:errored].to_sentence,
+ scope: "decidim.budgets.admin"
+ )
+ end
end
end
end
end
end