92 lines
3.1 KiB
Ruby
92 lines
3.1 KiB
Ruby
class Admin::Poll::OfficerAssignmentsController < Admin::BaseController
|
|
|
|
before_action :load_poll
|
|
before_action :redirect_if_blank_required_params, only: [:by_officer]
|
|
before_action :load_booth_assignment, only: [:create]
|
|
|
|
def index
|
|
@officers = ::Poll::Officer.
|
|
includes(:user).
|
|
order('users.username').
|
|
where(
|
|
id: @poll.officer_assignments.select(:officer_id).distinct.map(&:officer_id)
|
|
).page(params[:page]).per(50)
|
|
end
|
|
|
|
def by_officer
|
|
@poll = ::Poll.includes(:booths).find(params[:poll_id])
|
|
@officer = ::Poll::Officer.includes(:user).find(officer_assignment_params[:officer_id])
|
|
@officer_assignments = ::Poll::OfficerAssignment.
|
|
joins(:booth_assignment).
|
|
includes(:recount, :final_recounts, booth_assignment: :booth).
|
|
where("officer_id = ? AND poll_booth_assignments.poll_id = ?", @officer.id, @poll.id).
|
|
order(:date)
|
|
end
|
|
|
|
def search_officers
|
|
load_search
|
|
@officers = User.joins(:poll_officer).search(@search).order(username: :asc)
|
|
|
|
respond_to do |format|
|
|
format.js
|
|
end
|
|
end
|
|
|
|
def create
|
|
@officer_assignment = ::Poll::OfficerAssignment.new(booth_assignment: @booth_assignment,
|
|
officer_id: create_params[:officer_id],
|
|
date: create_params[:date])
|
|
@officer_assignment.final = true if @officer_assignment.date > @booth_assignment.poll.ends_at.to_date
|
|
|
|
if @officer_assignment.save
|
|
notice = t("admin.poll_officer_assignments.flash.create")
|
|
else
|
|
notice = t("admin.poll_officer_assignments.flash.error_create")
|
|
end
|
|
redirect_to by_officer_admin_poll_officer_assignments_path(poll_id: create_params[:poll_id], officer_id: create_params[:officer_id]), notice: notice
|
|
end
|
|
|
|
def destroy
|
|
@officer_assignment = ::Poll::OfficerAssignment.includes(:booth_assignment).find(params[:id])
|
|
|
|
if @officer_assignment.destroy
|
|
notice = t("admin.poll_officer_assignments.flash.destroy")
|
|
else
|
|
notice = t("admin.poll_officer_assignments.flash.error_destroy")
|
|
end
|
|
redirect_to by_officer_admin_poll_officer_assignments_path(poll_id: @officer_assignment.poll_id, officer_id: @officer_assignment.officer_id), notice: notice
|
|
end
|
|
|
|
private
|
|
|
|
def officer_assignment_params
|
|
params.permit(:officer_id)
|
|
end
|
|
|
|
def create_params
|
|
params.permit(:poll_id, :booth_id, :date, :officer_id)
|
|
end
|
|
|
|
def load_booth_assignment
|
|
@booth_assignment = ::Poll::BoothAssignment.includes(:poll).find_by(poll_id: create_params[:poll_id], booth_id: create_params[:booth_id])
|
|
end
|
|
|
|
def load_poll
|
|
@poll = ::Poll.find(params[:poll_id])
|
|
end
|
|
|
|
def redirect_if_blank_required_params
|
|
if officer_assignment_params[:officer_id].blank?
|
|
redirect_to admin_poll_path(@poll)
|
|
end
|
|
end
|
|
|
|
def search_params
|
|
params.permit(:poll_id, :search)
|
|
end
|
|
|
|
def load_search
|
|
@search = search_params[:search]
|
|
end
|
|
|
|
end |