86 lines
3.2 KiB
Ruby
86 lines
3.2 KiB
Ruby
module IdCard
|
|
class Plan < ApplicationRecord
|
|
belongs_to :setup, optional: true
|
|
has_many :plan_benefits, dependent: :destroy
|
|
accepts_nested_attributes_for :plan_benefits, allow_destroy: true, reject_if: :all_blank
|
|
|
|
validates :title, presence: true
|
|
validates :pb_product_key, :pl_plan_key, presence: true, if: -> { setup&.active }
|
|
validates :pb_product_key, uniqueness: true, allow_nil: true
|
|
validate :validate_plan_benefits_count, unless: -> { template }
|
|
|
|
scope :templates, -> { where(template: true) }
|
|
|
|
FARIOS_BENEFIT_FIELDS = ["Primary Visit", "Specialist Visit", "Urgent Care", "INN-Ind Ded", "INN-Family Ded", "OON-Ind Ded", "OON-Family Ded", "Co-Insurance", "INN-Ind OOP", "INN-Family OOP", "OON-Ind OOP", "OON-Family OOP", "Emergency Room", "Preventive Care"].freeze
|
|
TANDEMLOC_BENEFIT_FIELDS = ["Physician Visit", "Specialist Visit", "Urgent Care", "Deductible", "Co-Insurance", "Out-of-Pocket", "Emergency Room", "Preventive Care"].freeze
|
|
SMART_BENEFIT_FIELDS = [].freeze
|
|
|
|
after_initialize :build_plan_benefits, if: :new_record?
|
|
|
|
def build_plan_benefits
|
|
if plan_benefits.empty?
|
|
plan_benefit_fields = case setup&.card_template
|
|
when "TandemlocIDCard"
|
|
TANDEMLOC_BENEFIT_FIELDS
|
|
when "SmartIDCard"
|
|
SMART_BENEFIT_FIELDS
|
|
else
|
|
FARIOS_BENEFIT_FIELDS
|
|
end
|
|
plan_benefit_fields.each_with_index do |bene, i|
|
|
self.plan_benefits.build(benefit_desc: bene, sequence: (i + 1))
|
|
end
|
|
end
|
|
end
|
|
|
|
def format_template
|
|
formatted_title = title
|
|
if pl_plan_key.present?
|
|
employer_name = Employer.find_by(pl_plan_key: pl_plan_key).pluck(:name)
|
|
formatted_title.concat( " (#{employer_name})" )
|
|
end
|
|
{ id: id, title: formatted_title }
|
|
end
|
|
|
|
class << self
|
|
|
|
def permitted_params(params)
|
|
params.require(:id_card_setup).permit(
|
|
plans_attributes: [
|
|
:id,
|
|
:title,
|
|
:pb_product_key,
|
|
:pl_plan_key,
|
|
:_destroy,
|
|
plan_benefits_attributes: [
|
|
:id,
|
|
:benefit_desc,
|
|
:benefit,
|
|
:sequence,
|
|
:_destroy,
|
|
]
|
|
]
|
|
)
|
|
end
|
|
|
|
end
|
|
|
|
private
|
|
|
|
def validate_plan_benefits_count
|
|
plan_benefits_size = plan_benefits.size
|
|
template_benefits_size = case setup&.card_template
|
|
when "TandemlocIDCard"
|
|
TANDEMLOC_BENEFIT_FIELDS.size
|
|
when "SmartIDCard"
|
|
SMART_BENEFIT_FIELDS.size
|
|
else
|
|
FARIOS_BENEFIT_FIELDS.size
|
|
end
|
|
unless plan_benefits_size == template_benefits_size
|
|
errors.add(:base, "Plan Benefits size (#{plan_benefits_size}) does not match ID Card Template (#{template_benefits_size})")
|
|
end
|
|
end
|
|
|
|
end
|
|
end |