Employer form mostly working with persist to db

This commit is contained in:
Jason Jordan
2025-12-10 13:22:33 -05:00
parent 78ce415b94
commit 0464ba8929
68 changed files with 3071 additions and 365 deletions
+16 -11
View File
@@ -6,12 +6,16 @@ class EmployerSetupForm
attribute :current_step, :string, default: FIRST_STEP
attribute :pl_plan_key, :string
attribute :employer_setup_process_id, :integer
def initialize(params = {})
# if params.present?
# params = permitted_params(params)
# end
# @current_step = params["current_step"]
# @employer_setup_process_id = params["employer_setup_process_id"]
super(params)
unless self.steps.first == FIRST_STEP
raise StepMisalignmentError, "FIRST_STEP does not match first entry in steps"
end
@@ -53,7 +57,7 @@ class EmployerSetupForm
end
def permitted_params(params)
params.require(:employer_setup_data).permit(
params.permit(
:pl_plan_key,
:current_step
)
@@ -66,15 +70,16 @@ class EmployerSetupForm
]
end
# def save
# if valid?
# EmployerSetupGeneralInformationForm.new(attributes[:general_information_data]).save
# EmployerSetupPlansForm.new(attributes[:plans_data]).save
# EmployerSetupNetworkExceptionsForm.new(attributes[:network_exceptions_data]).save
# true
# else
# false
# end
# end
def save
if valid?
process = EmployerSetupProcess.find(@employer_setup_process_id)
process.update(
status: "entered"
)
true
else
false
end
end
end
@@ -7,16 +7,17 @@ class EmployerSetupGeneralInformationForm
attribute :group_number, :string
attribute :dental, :boolean, default: false
attribute :pl_plan_key, :string
attribute :effect_date, :string
attribute :effective_date, :string
# attribute :number_of_plans, :integer
attribute :network, :string
# attribute :number_of_additional_network_logos, :integer
attr_accessor :employer_setup_process_id
validates :name, presence: true
validates :employer_logo, presence: true
validates :group_number, presence: true
validates :pl_plan_key, presence: true
validates :effect_date, presence: true
validates :effective_date, presence: true
# validates :number_of_plans, presence: true
validates :network, presence: true
# validates :number_of_additional_network_logos, presence: true if network = "cigna+"
@@ -27,11 +28,27 @@ class EmployerSetupGeneralInformationForm
# super(permitted_attributes)
# end
def initialize(params = {})
def initialize(employer_setup_process_id, params = {})
@employer_setup_process_id = employer_setup_process_id
if params.present?
params = permitted_params(params)
form_params = permitted_params(params)
super(form_params)
else
super(params)
load_from_process
end
super(params)
end
def load_from_process
process = EmployerSetupProcess.find(@employer_setup_process_id)
self.name = process.employer_name
# self.employer_logo = process.
self.group_number = process.group_number
self.dental = false
self.pl_plan_key = process.pl_plan_key
self.effective_date = process.effective_date
self.network = process.network_provider
end
def permitted_params(params)
@@ -41,7 +58,7 @@ class EmployerSetupGeneralInformationForm
:group_number,
:dental,
:pl_plan_key,
:effect_date,
:effective_date,
:number_of_plans,
:network,
:number_of_additional_network_logos
@@ -52,48 +69,57 @@ class EmployerSetupGeneralInformationForm
# Implement logic to save data to models after all steps are complete
# For example, create a User record with the collected data
if valid?
hl_plan_code = Vhcs::HlPlanCode.create!(
process = EmployerSetupProcess.find(@employer_setup_process_id)
process.update(
employer_name: name,
group_number: group_number,
medical_number: group_number,
dental_number: '',
plan_key: pl_plan_key,
effect_date: effect_date
)
# Replace fairos_info with template like for benefits
fairos_info = Vhcs::HlrxCrosRef.where(pl_plan_key: 52).first
hlrx_cros_ref = Vhcs::HlrxCrosRef.create!(
group_no: group_number,
rx_group_id: group_number,
help_desk: fairos_info.help_desk,
customer_service: fairos_info.customer_service,
web_url: fairos_info.web_url,
pl_plan_key: pl_plan_key
)
web_employer = BrittonWeb::Employers.create!(
name: name,
pl_plan_key: pl_plan_key,
dental_plan: dental,
single_card_template: 'FairosRxIDCard',
logo: employer_logo.original_filename
effective_date: effective_date,
network_provider: network
)
default_network_logo =
case
when network.include?("cig")
"CignaLogo.png"
when network.include?("med")
"Logo_MC_PMS.png"
else
"CignaLogo.png"
end
# hl_plan_code = Vhcs::HlPlanCode.create!(
# group_number: group_number,
# medical_number: group_number,
# dental_number: '',
# plan_key: pl_plan_key,
# effect_date: effective_date
# )
BrittonWeb::NetworkLogos.create!(
employer_id: web_employer.id,
net_logo: default_network_logo,
default: true
)
# # Replace fairos_info with template like for benefits
# fairos_info = Vhcs::HlrxCrosRef.where(pl_plan_key: 52).first
# hlrx_cros_ref = Vhcs::HlrxCrosRef.create!(
# group_no: group_number,
# rx_group_id: group_number,
# help_desk: fairos_info.help_desk,
# customer_service: fairos_info.customer_service,
# web_url: fairos_info.web_url,
# pl_plan_key: pl_plan_key
# )
# web_employer = BrittonWeb::Employers.create!(
# name: name,
# pl_plan_key: pl_plan_key,
# dental_plan: dental,
# single_card_template: 'FairosRxIDCard',
# logo: employer_logo.original_filename
# )
# default_network_logo =
# case
# when network.include?("cig")
# "CignaLogo.png"
# when network.include?("med")
# "Logo_MC_PMS.png"
# else
# "CignaLogo.png"
# end
# BrittonWeb::NetworkLogos.create!(
# employer_id: web_employer.id,
# net_logo: default_network_logo,
# default: true
# )
true
else
@@ -5,15 +5,20 @@ class EmployerSetupNetworkExceptionsForm
Network_exception = Struct.new(:network_logo, :exceptions)
attribute :network_exceptions, :array_of_items, default: -> { [] }
attribute :pl_plan_key, :string
attribute :number_of_additional_network_logos, :integer
attr_accessor :employer_setup_process_id
# validates :network_exceptions, presence: true if number_of_additional_network_logos > 0
def initialize(params = {})
if params.present? && params[:employer_setup_network_exceptions_form].is_a?(ActionController::Parameters)
params = permitted_params(params)
def initialize(employer_setup_process_id, params = {})
@employer_setup_process_id = employer_setup_process_id
if params.present?
form_params = permitted_params(params)
super(form_params)
else
super(params)
end
super(params)
end
def permitted_params(params)
@@ -67,20 +72,23 @@ class EmployerSetupNetworkExceptionsForm
# Implement logic to save data to models after all steps are complete
# For example, create a User record with the collected data
if valid?
employer = BrittonWeb::Employers.find_by(pl_plan_key: pl_plan_key)
network_exceptions_data = process_for_save(network_exceptions)
network_exceptions_data.each do |ne|
ne['exceptions'].each do |ex|
BrittonWeb::NetworkLogos.create!(
employer_id: employer.id,
net_logo: ne['network_logo'].original_filename,
exception_type: ex['type'].downcase,
exception_value: ex['value'],
default: false
)
end
process = EmployerSetupProcess.find(@employer_setup_process_id)
# employer = BrittonWeb::Employers.find_by(pl_plan_key: pl_plan_key)
if network_exceptions
network_exceptions_data = process_for_save(network_exceptions)
end
# network_exceptions_data.each do |ne|
# ne['exceptions'].each do |ex|
# BrittonWeb::NetworkLogos.create!(
# employer_id: employer.id,
# net_logo: ne['network_logo'].original_filename,
# exception_type: ex['type'].downcase,
# exception_value: ex['value'],
# default: false
# )
# end
# end
true
else
false
+55 -17
View File
@@ -2,25 +2,31 @@ class EmployerSetupPlansForm
include ActiveModel::Model
include ActiveModel::Attributes
PLAN_COLORS = ['atmosphere', 'copper', 'bluemana', 'bronze', 'cobalt', 'verdigris']
PLAN_COLORS = ['atmosphere', 'verdigris', 'cobalt', 'bluemana']
# attribute :plans, array: true, default: []
attribute :plans, array: true, default: -> { [new_plan] }
attribute :plans, array: true, default: -> { [Plan.new] }
attribute :pl_plan_key, :string
attribute :number_of_plans, :integer
attribute :benefit_descs, hash: true, default: -> { new_plan }
attribute :benefit_descs, hash: true, default: -> { Plan.new }
attr_accessor :plan_templates
attr_accessor :benefits_template
attr_accessor :employer_setup_process_id
validates :plans, presence: true
validates :benefit_descs, presence: true
def initialize(params = {})
def initialize(employer_setup_process_id, params = {})
@employer_setup_process_id = employer_setup_process_id
if params.present?
params = permitted_params(params)
form_params = permitted_params(params)
super(form_params)
else
super(params)
process_plans = EmployerSetupProcess.find(@employer_setup_process_id).plans
if process_plans.present?
self.plans = process_plans
end
end
super(params)
@plan_templates = IdCardBenefitsTemplate.where.not(title: "BLANK")
@benefits_template = IdCardBenefitsTemplate.find_by(title: "BLANK").id_card_benefits.sort_by(&:sequence)
@@ -61,6 +67,11 @@ class EmployerSetupPlansForm
plan
end
def process_params(employer_setup_process_id)
process = EmployerSetupProcess.find(employer_setup_process_id)
process.plans
end
def permitted_params(params)
params.require(:employer_setup_plans_form).permit(
:pl_plan_key,
@@ -90,27 +101,54 @@ class EmployerSetupPlansForm
end
def permited_plans_keys
(1..14).map { |i| "benefit_#{i}".to_sym }.push(:plan_id)
(1..14).map { |i| "benefit_#{i}".to_sym }.push(:plan_id, :id)
end
def save
# Implement logic to save data to models after all steps are complete
# For example, create a User record with the collected data
if valid?
plans.each do |plan|
process = EmployerSetupProcess.find(@employer_setup_process_id)
# process.plans.update(plans: plans)
planss = Array.wrap(plans)
plans.each_with_index do |plan, i|
plan_info = plan.last
plan_id = plan_info.delete(:plan_id).to_i
plan_id = plan_info[:plan_id].present? ? plan_info[:plan_id].to_i : "temp #{i}"
plan_info.delete(:plan_id)
new_plan = process.plans.create(plan_id: plan_id)
plan_info.each do |key, value|
sequence = key.delete_prefix("benefit_").to_i
Vhcs::HlEgglestonCardBenefit.create(
plan_id: plan_id,
benefit_desc: benefit_descs["#{key}"],
benefit: value,
sequence: sequence,
plan_key: pl_plan_key
benefit = new_plan.plan_benefits.find_by(sequence: sequence)
benefit.update(
benefit: value
)
# Vhcs::HlEgglestonCardBenefit.create(
# plan_id: plan_id,
# benefit_desc: benefit_descs["#{key}"],
# benefit: value,
# sequence: sequence,
# plan_key: pl_plan_key
# )
end
end
# plans.each do |plan|
# plan_info = plan.last
# plan_id = plan_info.delete(:plan_id).to_i
# plan_info.each do |key, value|
# sequence = key.delete_prefix("benefit_").to_i
# Vhcs::HlEgglestonCardBenefit.create(
# plan_id: plan_id,
# benefit_desc: benefit_descs["#{key}"],
# benefit: value,
# sequence: sequence,
# plan_key: pl_plan_key
# )
# end
# end
true
else
false