Files
Jason Jordan 5a90ea6e14 beta build
2026-06-17 23:23:36 -04:00

127 lines
3.7 KiB
Ruby

class Employer < ApplicationRecord
include EmployerAutomation
belongs_to :broker, optional: true
has_many :members, dependent: :destroy
accepts_nested_attributes_for :members, allow_destroy: true, reject_if: :all_blank
has_one :id_card_setup, class_name: 'IdCard::Setup', dependent: :destroy
has_many :plans, class_name: 'IdCard::Plan', through: :id_card_setup
has_many :print_data, class_name: 'IdCard::PrintData', dependent: :destroy
validates :name, :slug, :effective_date, presence: true
validates :group_number, :pl_plan_key, :company_pb_entity_key, :plan_id, presence: true, if: -> { initialized }
validates :name, :slug, :group_number, :pl_plan_key, :company_pb_entity_key, :plan_id, uniqueness: true, allow_blank: true
scope :active, -> { where(active: true) }
scope :inactive, -> { where(active: false) }
before_validation :create_slug, if: :will_save_change_to_name?
before_validation :active_initialized_check, if: :will_save_change_to_active?
def create_slug
self.slug = Employer.employer_trim_name(name).parameterize
end
def active_initialized_check
if active
self.initialized = true
end
if active == false
id_card_setup&.update(active: false)
end
end
def id_card_enabled?
self.id_card_setup.present?
end
def claims_check_enabled?
false
end
def employer_member_keys
{
pl_plan_key: self.pl_plan_key,
member_keys: self.members.pluck(:pb_entity_key)
}
end
def employer_member_keys_by_plan(pb_product_key)
{
pl_plan_key: self.pl_plan_key,
member_keys: self.plans.find_by(pb_product_key: pb_product_key).members.pluck(:pb_entity_key)
}
end
def name_to_logo_filename(extension)
Employer.employer_trim_name(self.name).titleize.gsub(/[^a-zA-Z]/, '').concat('Logo').concat(extension.downcase)
end
def self.employer_trim_name(employer_name)
# employer_name = name.present? ? name : self.name
regex_source = Regexp.union(["health ", "plan", "the", "inc", "llc", "group"]).source
case_insensitive_regex = Regexp.new(regex_source, "i")
employer_name.gsub(case_insensitive_regex, "").gsub(/[^[:alpha:][:space:]]/, "").squish
end
def self.permitted_params(params)
params.require(:employer).permit(
:name,
:slug,
:group_number,
:pl_plan_key,
:effective_date
)
end
def save_to_prod
VhcsRecord.transaction do
Vhcs::HlPlanCode.create!(
group_number: self.group_number,
medical_number: self.group_number,
dental_number: '',
plan_key: self.pl_plan_key,
effect_date: DateTime.strptime(self.effective_date, "%m/%d/%y")
)
rx_info = self.id_card_setup.rx_section
Vhcs::HlrxCrosRef.create!(
group_no: self.group_number,
rx_group_id: self.group_number,
help_desk: rx_info.help_desk,
customer_service: rx_info.customer_service,
web_url: rx_info.web_url,
pl_plan_key: self.pl_plan_key
)
self.id_card_setup.plans.each_with_index do |plan, i|
plan.plan_benefits.each do |bene|
Vhcs::HlEgglestonCardBenefit.create!(
plan_id: plan.pb_product_key,
benefit_desc: bene.benefit_desc,
benefit: bene.benefit,
sequence: bene.sequence,
plan_key: self.pl_plan_key
)
end
end
end
end
def build_plan_with_default_benefits(attributes = {})
plan = plans.new(attributes)
benefits = IdCardBenefitsTemplate.find_by(title: "BLANK").id_card_benefits.sort_by(&:sequence)
benefits.each do |ben|
plan.plan_benefits.new(benefit_desc: ben.benefit_desc, sequence: ben.sequence)
end
plan
end
private
end