Show a flash message that it's not possible to delete booth shifts when they have associated recounts or partial results. Before an execption was raised.
66 lines
1.7 KiB
Ruby
66 lines
1.7 KiB
Ruby
class Admin::Poll::ShiftsController < Admin::Poll::BaseController
|
|
|
|
before_action :load_booth
|
|
before_action :load_officer
|
|
|
|
def new
|
|
load_shifts
|
|
@shift = ::Poll::Shift.new
|
|
@voting_polls = @booth.polls.current
|
|
@recount_polls = @booth.polls.current_or_recounting
|
|
end
|
|
|
|
def create
|
|
@shift = ::Poll::Shift.new(shift_params)
|
|
@officer = @shift.officer
|
|
|
|
if @shift.save
|
|
notice = t("admin.poll_shifts.flash.create")
|
|
redirect_to new_admin_booth_shift_path(@shift.booth), notice: notice
|
|
else
|
|
load_shifts
|
|
flash[:error] = t("admin.poll_shifts.flash.date_missing")
|
|
render :new
|
|
end
|
|
end
|
|
|
|
def destroy
|
|
@shift = Poll::Shift.find(params[:id])
|
|
if @shift.unable_to_destroy?
|
|
alert = t("admin.poll_shifts.flash.unable_to_destroy")
|
|
redirect_to new_admin_booth_shift_path(@booth), alert: alert
|
|
else
|
|
@shift.destroy
|
|
notice = t("admin.poll_shifts.flash.destroy")
|
|
redirect_to new_admin_booth_shift_path(@booth), notice: notice
|
|
end
|
|
end
|
|
|
|
def search_officers
|
|
@officers = User.search(params[:search]).order(username: :asc).select { |o| o.poll_officer? }
|
|
end
|
|
|
|
private
|
|
|
|
def load_booth
|
|
@booth = ::Poll::Booth.find(params[:booth_id])
|
|
end
|
|
|
|
def load_shifts
|
|
@shifts = @booth.shifts
|
|
end
|
|
|
|
def load_officer
|
|
if params[:officer_id].present?
|
|
@officer = ::Poll::Officer.find(params[:officer_id])
|
|
end
|
|
end
|
|
|
|
def shift_params
|
|
date_attributes = [:vote_collection_date, :recount_scrutiny_date]
|
|
attributes = [:booth_id, :officer_id, :task, date: date_attributes]
|
|
shift_params = params.require(:shift).permit(*attributes)
|
|
shift_params.merge(date: shift_params[:date]["#{shift_params[:task]}_date".to_sym])
|
|
end
|
|
end
|