class Admin::Poll::ShiftsController < Admin::Poll::BaseController before_action :load_booth before_action :load_officer def new load_shifts @shift = ::Poll::Shift.new 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(&: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 shift_params = params.require(:shift).permit(allowed_params) shift_params.merge(date: shift_params[:date][:"#{shift_params[:task]}_date"]) end def allowed_params date_attributes = [:vote_collection_date, :recount_scrutiny_date] [:booth_id, :officer_id, :task, date: date_attributes] end end