83 lines
2.7 KiB
Ruby
83 lines
2.7 KiB
Ruby
class OnboardingsController < ApplicationController
|
|
before_action :set_owner, only: [:index, :submit_onboarding]
|
|
|
|
def index
|
|
# Make sure to set @owner first. If not found, you should redirect or handle the error appropriately.
|
|
set_owner
|
|
|
|
if @owner
|
|
# Initialize onboarding items for each form if they don't exist yet for the owner.
|
|
@forms = Form.all
|
|
@forms.each do |form|
|
|
@owner.onboarding_items.find_or_initialize_by(form: form)
|
|
end
|
|
# After building or finding the onboarding items, load them for the view.
|
|
# This ensures we're only working with items related to the current owner.
|
|
@onboarding_items = @owner.onboarding_items.includes(:form)
|
|
else
|
|
# Handle the scenario where @owner is not found. Redirect or show an error.
|
|
redirect_to root_path, alert: "Owner not found."
|
|
end
|
|
end
|
|
|
|
def create
|
|
# Assuming `onboarding_items_params` method will handle mass assignment
|
|
@onboarding_item = @owner.onboarding_items.build(onboarding_items_params)
|
|
|
|
if @onboarding_item.save
|
|
redirect_to polymorphic_path([@owner, :onboardings]), notice: 'Onboarding item was successfully created.'
|
|
else
|
|
# This assumes you have an instance variable @forms for the form dropdown in the view
|
|
@forms = Form.all
|
|
render :index, status: :unprocessable_entity
|
|
end
|
|
end
|
|
|
|
def submit_onboarding
|
|
@owner = find_owner
|
|
onboarding_items_params.values.each do |item_params|
|
|
item = OnboardingItem.find_or_initialize_by(id: item_params.delete(:id))
|
|
item.assign_attributes(item_params)
|
|
item.owner = @owner
|
|
item.save
|
|
end
|
|
redirect_to polymorphic_path(@owner), notice: 'Onboarding information updated successfully.'
|
|
end
|
|
|
|
|
|
private
|
|
|
|
def set_owner
|
|
params.each do |name, value|
|
|
if name =~ /(.+)_id$/
|
|
model_name = name.match(/(.+)_id$/)[1].classify
|
|
@owner = model_name.constantize.find(value)
|
|
break
|
|
end
|
|
end
|
|
unless @owner
|
|
redirect_to root_path, alert: "Owner not found."
|
|
end
|
|
end
|
|
|
|
def onboarding_items_params
|
|
params.permit(onboarding_items: [:id, :note, :date_completed]).fetch(:onboarding_items, {})
|
|
end
|
|
|
|
def find_owner
|
|
# Check each expected owner type and find the corresponding record
|
|
if params[:participant_id]
|
|
@owner = Participant.find(params[:participant_id])
|
|
elsif params[:employer_id]
|
|
@owner = Employer.find(params[:employer_id])
|
|
elsif params[:worker_id]
|
|
@owner = Worker.find(params[:worker_id])
|
|
elsif params[:vendor_id]
|
|
@owner = Vendor.find(params[:vendor_id])
|
|
else
|
|
# Handle the case where no recognized owner parameter is provided
|
|
redirect_to root_path, alert: "Owner not found."
|
|
return nil
|
|
end
|
|
end
|
|
end |