class EmployerSetupController < ApplicationController def new @top_form = EmployerSetupForm.new(session[:employer_setup_data]) case @top_form.current_step when 'general_information' @form = EmployerSetupGeneralInformationForm.new(session[:employer_setup_data]&.dig('general_information_data')) when 'plans' @form = EmployerSetupPlansForm.new(session[:employer_setup_data]&.dig('plans_data')) when 'network_exceptions' @form = EmployerSetupNetworkExceptionsForm.new(session[:employer_setup_data]&.dig('network_exceptions_data')) when 'summary' @form = @top_form end render @top_form.current_step_view end def create @top_form = EmployerSetupForm.new(session[:employer_setup_data]) if @top_form.current_step != 'summary' if process_step(@top_form.current_step) session[:employer_setup_data]['current_step'] = @top_form.next_step redirect_to new_employer_setup_path else render @top_form.current_step_view end else if @top_form.save session.delete(:employer_setup_data) redirect_to root_path, notice: "Employer setup successfully!" else render @top_form.current_step_view end end case @top_form.current_step when 'general_information' @form = EmployerSetupGeneralInformationForm.new(general_information_params) if @form.valid? session[:employer_setup_data]['general_information_data'] = general_information_params session[:employer_setup_data]['current_step'] = @top_form.next_step redirect_to new_employer_setup_path else render @top_form.current_step_view end when 'plans' @form = EmployerSetupPlansForm.new(plans_params) if @form.valid? session[:employer_setup_data]['plans_data'] = plans_params session[:employer_setup_data]['current_step'] = @top_form.next_step redirect_to new_employer_setup_path else render @top_form.current_step_view end when 'network_exceptions' @form = EmployerSetupNetworkExceptionsForm.new(network_exceptions_params) if @form.valid? session[:employer_setup_data]['network_exceptions_data'] = network_exceptions_params session[:employer_setup_data]['current_step'] = @top_form.next_step redirect_to new_employer_setup_path else render @top_form.current_step_view end when 'summary' @form = EmployerSetupForm.new(session[:employer_setup_data]) if @form.save session.delete(:employer_setup_data) redirect_to root_path, notice: "Employer setup successfully!" else render @top_form.current_step_view end end end def update @form = RegistrationForm.new(registration_params) if params[:back_button] @form.current_step = @form.previous_step elsif params[:skip_newsletter] @form.current_step = @form.next_step # Skip newsletter step end render :new end private def general_information_params params.require(:employer_setup_general_information_form).permit( :name, :employer_logo, :group_number, :dental, :pl_plan_key, :effect_date, :number_of_plans, :network, :number_of_additional_network_logos ) end def plans_params params.require(:employer_setup_plans_form).permit( plans: permited_plans_keys, benefit_descs: benefit_sequence_keys ) end def network_exceptions_params params.require(:employer_setup_network_exceptions_form).permit( network_exceptions: [:network_logo, exceptions: [:type, :value]], ) end def process_step(step_name) form_name = "employer_setup_#{step_name}_form".camelize.constantize form_params_name = "#{step_name}_params".to_sym allowed_params = [:general_information_params, :plans_params, :network_exceptions_params] if allowed_params.include?(form_params_name) form_params = send(form_params_name) @form = form_name.new(form_params) if @form.valid? session[:employer_setup_data]["#{step_name}_data"] = form_params true else false end end false end session[:employer_setup_data]['current_step'] = @top_form.next_step redirect_to new_employer_setup_path else render @top_form.current_step_view end end when 'general_information' @form = EmployerSetupGeneralInformationForm.new(general_information_params) if @form.valid? session[:employer_setup_data]['general_information_data'] = general_information_params session[:employer_setup_data]['current_step'] = @top_form.next_step redirect_to new_employer_setup_path else render @top_form.current_step_view end # def employer_setup_params # params.require(:employer_setup_form).permit( # :current_step, # :name, # :employer_logo, # :group_number, # :pl_plan_key, # :effect_date, # :number_of_plans, # :network, # :number_of_additional_network_logos, # network_exceptions: [:network_logo, exceptions: [:type, :value]], # plans: permited_plans_keys, # benefit_descs: benefit_sequence_keys # ) # end def benefit_sequence_keys (1..14).map { |i| i.to_s.to_sym } end def permited_plans_keys benefit_sequence_keys.push(:plan_id) end # def plans_params # plans_keys = params[:plans]&.keys || [] # plans_keys.each_with_object({}) do |key, hash| # if key == 'benefit_descs' || key.match?(/^plan_\d$/) # hash[key.to_sym] = permited_plan_param_list # end # end # end # def permited_plan_param_list # (1..14).map { |i| i.to_s.to_sym }.push(:plan_id) # end end