94 lines
2.6 KiB
Ruby
94 lines
2.6 KiB
Ruby
class ParticipantsController < ApplicationController
|
|
before_action :set_participant, only: [:show, :edit, :update, :destroy]
|
|
|
|
def index
|
|
@participants = Participant.order(:last_name).page(params[:page]).per(5) # Adjust the number per page as needed
|
|
|
|
end
|
|
|
|
|
|
def show
|
|
@participant = Participant.includes(:employments).find(params[:id])
|
|
@workers = @participant.workers # Fetch associated workers
|
|
@employment = Employment.new # Initialize a new Employment object
|
|
end
|
|
|
|
|
|
def new
|
|
@participant = Participant.new
|
|
end
|
|
|
|
def create
|
|
@participant = Participant.new(participant_params)
|
|
Participant.transaction do
|
|
if params[:is_employer] == 'yes'
|
|
employer = Employer.create!(employer_params_from_participant(@participant))
|
|
@participant.employer = employer
|
|
end
|
|
|
|
if @participant.save
|
|
redirect_to @participant, notice: 'Participant was successfully created.'
|
|
else
|
|
raise ActiveRecord::Rollback, "Participant could not be saved"
|
|
end
|
|
end
|
|
rescue ActiveRecord::RecordInvalid => e
|
|
Rails.logger.error("Participant creation failed: #{e.message}")
|
|
flash.now[:alert] = "Error: #{e.message}"
|
|
render :new
|
|
end
|
|
|
|
def edit
|
|
end
|
|
|
|
def update
|
|
if @participant.update(participant_params)
|
|
redirect_to @participant, notice: 'Participant was successfully updated.'
|
|
else
|
|
render :edit
|
|
end
|
|
end
|
|
|
|
def destroy
|
|
@participant.destroy
|
|
redirect_to participants_url, notice: 'Participant was successfully destroyed.'
|
|
end
|
|
|
|
def link_worker
|
|
@participant = Participant.find(params[:id])
|
|
employment = @participant.employments.new(employment_params)
|
|
if employment.save
|
|
redirect_to @participant, notice: 'Worker was successfully linked.'
|
|
else
|
|
# Assuming you have a show or edit page to render
|
|
render 'show', alert: 'Failed to link worker.'
|
|
end
|
|
end
|
|
|
|
private
|
|
|
|
def set_participant
|
|
@participant = Participant.find(params[:id])
|
|
end
|
|
|
|
def participant_params
|
|
params.require(:participant).permit(:first_name, :last_name, :address, :phone, :email, :mci, :dob, :ssn, :gender, :employer_id)
|
|
end
|
|
|
|
def employer_params_from_participant(participant)
|
|
{
|
|
name: "#{participant.first_name} #{participant.last_name}",
|
|
address: participant.address,
|
|
phone: participant.phone,
|
|
email: participant.email,
|
|
dob: participant.dob, # Mapping Date of Birth
|
|
ssn: participant.ssn, # Mapping SSN
|
|
gender: participant.gender # Mapping Gender
|
|
}
|
|
end
|
|
|
|
def employment_params
|
|
params.require(:employment).permit(:worker_id, :start_date, :end_date)
|
|
end
|
|
end
|