2026-01-15 11:37:50 -05:00
|
|
|
class Employer < ApplicationRecord
|
2026-04-15 08:12:47 -04:00
|
|
|
include EmployerAutomation
|
|
|
|
|
has_many :members, dependent: :destroy
|
|
|
|
|
accepts_nested_attributes_for :members, allow_destroy: true, reject_if: :all_blank
|
2026-03-20 10:46:53 -04:00
|
|
|
has_one :id_card_setup, class_name: 'IdCard::Setup', dependent: :destroy
|
2026-03-03 22:53:21 -05:00
|
|
|
|
2026-04-15 08:12:47 -04:00
|
|
|
|
2026-01-15 11:37:50 -05:00
|
|
|
scope :active, -> { where(active: true) }
|
|
|
|
|
scope :inactive, -> { where(active: false) }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# before_save :process_employer_logo
|
|
|
|
|
# before_save :process_employer_logo, if: :employer_logo_filename_changed?
|
2026-04-15 08:12:47 -04:00
|
|
|
# before_save :create_slug, if: :new_record?
|
|
|
|
|
before_save :create_slug, if: :will_save_change_to_name?
|
|
|
|
|
# before_save :set_active_status, unless: :will_save_change_to_active?
|
2026-03-05 11:30:24 -05:00
|
|
|
# after_save :process_employer_logo, if: :saved_change_to_employer_logo_filename?
|
|
|
|
|
|
|
|
|
|
# def process_employer_logo
|
|
|
|
|
# # if self.employer_logo.present? && !self.employer_logo.is_a?(String)
|
|
|
|
|
# # self.card_logo_files.new(
|
|
|
|
|
# # filename: self.employer_logo.filename,
|
|
|
|
|
# # logo_type: 'employer',
|
|
|
|
|
# # image: self.employer_logo.data,
|
|
|
|
|
# # pl_plan_key: self.pl_plan_key || ""
|
|
|
|
|
# # )
|
|
|
|
|
# # end
|
|
|
|
|
# if self.employer_logo_filename.present? && self.employer_logo_filename.is_a?(String)
|
|
|
|
|
# image_file = CardLogoFile.find_by(filename: self.employer_logo_filename)
|
|
|
|
|
# if image_file.present?
|
|
|
|
|
# if self.employer_brand_logo.present?
|
|
|
|
|
# self.employer_brand_logo.update(card_logo_file: image_file)
|
|
|
|
|
# else
|
|
|
|
|
# self.create_employer_brand_logo(card_logo_file: image_file, logo_type: 'employer')
|
|
|
|
|
# end
|
|
|
|
|
# end
|
|
|
|
|
|
|
|
|
|
# end
|
|
|
|
|
# end
|
2026-01-15 11:37:50 -05:00
|
|
|
|
|
|
|
|
def create_slug
|
2026-04-15 08:12:47 -04:00
|
|
|
self.slug = Employer.employer_trim_name(self.name).parameterize
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
def set_active_status
|
|
|
|
|
self.active = (
|
|
|
|
|
self.pl_plan_key.present? &&
|
|
|
|
|
self.company_pb_entity_key.present? &&
|
|
|
|
|
self.plan_id.present? &&
|
|
|
|
|
self.group_number.present? &&
|
|
|
|
|
self.effective_date.present?
|
|
|
|
|
)
|
2026-01-15 11:37:50 -05:00
|
|
|
end
|
|
|
|
|
|
2026-03-13 08:47:13 -04:00
|
|
|
def id_card_enabled?
|
2026-03-20 10:46:53 -04:00
|
|
|
self.id_card_setup.present?
|
2026-03-13 08:47:13 -04:00
|
|
|
end
|
|
|
|
|
|
|
|
|
|
def claims_check_enabled?
|
|
|
|
|
false
|
|
|
|
|
end
|
|
|
|
|
|
2026-03-27 08:04:37 -04:00
|
|
|
def employer_member_keys
|
|
|
|
|
{
|
|
|
|
|
pl_plan_key: self.pl_plan_key,
|
|
|
|
|
member_keys: self.members.pluck(:pb_entity_key)
|
|
|
|
|
}
|
|
|
|
|
end
|
|
|
|
|
|
2026-03-19 00:42:27 -04:00
|
|
|
def name_to_logo_filename(extension)
|
2026-04-15 08:12:47 -04:00
|
|
|
Employer.employer_trim_name(self.name).titleize.gsub(/[^a-zA-Z]/, '').concat('Logo').concat(extension.downcase)
|
2026-03-19 00:42:27 -04:00
|
|
|
end
|
2026-01-15 11:37:50 -05:00
|
|
|
|
2026-04-15 08:12:47 -04:00
|
|
|
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
|
2026-01-15 11:37:50 -05:00
|
|
|
case_insensitive_regex = Regexp.new(regex_source, "i")
|
2026-03-19 00:42:27 -04:00
|
|
|
employer_name.gsub(case_insensitive_regex, "").gsub(/[^[:alpha:][:space:]]/, "").squish
|
2026-01-15 11:37:50 -05:00
|
|
|
end
|
|
|
|
|
|
|
|
|
|
def self.permitted_params(params)
|
|
|
|
|
params.require(:employer).permit(
|
|
|
|
|
:name,
|
2026-03-05 11:30:24 -05:00
|
|
|
:slug,
|
2026-01-15 11:37:50 -05:00
|
|
|
:group_number,
|
|
|
|
|
:pl_plan_key,
|
2026-03-05 11:30:24 -05:00
|
|
|
:effective_date
|
2026-01-15 11:37:50 -05:00
|
|
|
)
|
|
|
|
|
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,
|
2026-04-15 08:12:47 -04:00
|
|
|
effect_date: DateTime.strptime(self.effective_date, "%m/%d/%y")
|
2026-01-15 11:37:50 -05:00
|
|
|
)
|
|
|
|
|
|
2026-04-15 08:12:47 -04:00
|
|
|
rx_info = self.id_card_setup.rx_section
|
2026-01-15 11:37:50 -05:00
|
|
|
Vhcs::HlrxCrosRef.create!(
|
|
|
|
|
group_no: self.group_number,
|
|
|
|
|
rx_group_id: self.group_number,
|
2026-04-15 08:12:47 -04:00
|
|
|
help_desk: rx_info.help_desk,
|
|
|
|
|
customer_service: rx_info.customer_service,
|
|
|
|
|
web_url: rx_info.web_url,
|
2026-01-15 11:37:50 -05:00
|
|
|
pl_plan_key: self.pl_plan_key
|
|
|
|
|
)
|
|
|
|
|
|
2026-04-15 08:12:47 -04:00
|
|
|
self.id_card_setup.plans.each_with_index do |plan, i|
|
2026-01-15 11:37:50 -05:00
|
|
|
plan.plan_benefits.each do |bene|
|
|
|
|
|
Vhcs::HlEgglestonCardBenefit.create!(
|
2026-03-03 22:53:21 -05:00
|
|
|
plan_id: plan.pb_product_key,
|
2026-01-15 11:37:50 -05:00
|
|
|
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
|