Files
grecia/app/controllers/concerns/admin/budget_phases_actions.rb
Javi Martín 72704d7761 Use separate actions to enable/disable budget phases
This is consistent with the way we use separate actions to hide and
restore records, which is similar to enabling and disabling a record. We
might do something similar with the `toggle_selection` actions in the
future. For now, we're only doing it with budget phases because we're
going to add a similar switch control to hide and restore tenants.

We're also making these actions idempotent, so sending many requests to
the same action will get the same result, which wasn't the case with the
`toggle` action. Although it's a low probability case, the `toggle`
action could result in disabling a phase when trying to enable it if
someone else has enabled it between the time the page loaded and the
time the admin clicked on the "enable" button.
2022-12-28 14:34:00 +01:00

62 lines
1.4 KiB
Ruby

module Admin::BudgetPhasesActions
extend ActiveSupport::Concern
included do
include Translatable
include ImageAttributes
before_action :load_budget
before_action :load_phase, only: [:edit, :update, :enable, :disable]
end
def edit
end
def update
if @phase.update(budget_phase_params)
redirect_to phases_index, notice: t("flash.actions.save_changes.notice")
else
render :edit
end
end
def enable
@phase.update!(enabled: true)
respond_to do |format|
format.html { redirect_to phases_index, notice: t("flash.actions.save_changes.notice") }
format.js { render template: "admin/budgets_wizard/phases/toggle_enabled" }
end
end
def disable
@phase.update!(enabled: false)
respond_to do |format|
format.html { redirect_to phases_index, notice: t("flash.actions.save_changes.notice") }
format.js { render template: "admin/budgets_wizard/phases/toggle_enabled" }
end
end
private
def load_budget
@budget = Budget.find_by_slug_or_id!(params[:budget_id])
end
def load_phase
@phase = @budget.phases.find(params[:id])
end
def budget_phase_params
params.require(:budget_phase).permit(allowed_params)
end
def allowed_params
valid_attributes = [:starts_at, :ends_at, :enabled,
image_attributes: image_attributes]
[*valid_attributes, translation_params(Budget::Phase)]
end
end