diff --git a/Gemfile b/Gemfile index 70b345d..e691ab9 100644 --- a/Gemfile +++ b/Gemfile @@ -27,6 +27,8 @@ gem "stimulus-rails" # Build JSON APIs with ease [https://github.com/rails/jbuilder] gem "jbuilder" +gem "rack-cors" + # Use Redis adapter to run Action Cable in production # gem "redis", "~> 5.3" diff --git a/Gemfile.lock b/Gemfile.lock index e902b80..c24b7f3 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -239,6 +239,9 @@ GEM activesupport (>= 3.0.0) racc (1.8.1) rack (3.2.6) + rack-cors (3.0.0) + logger + rack (>= 3.0.14) rack-mini-profiler (4.0.1) rack (>= 1.2.0) rack-session (2.1.2) @@ -437,6 +440,7 @@ DEPENDENCIES pry-rails puma (~> 6.5) pundit + rack-cors rack-mini-profiler rails (~> 7.2) rails_icons diff --git a/app/controllers/admins_controller.rb b/app/controllers/admins_controller.rb new file mode 100644 index 0000000..4709ae5 --- /dev/null +++ b/app/controllers/admins_controller.rb @@ -0,0 +1,7 @@ +class AdminsController < ApplicationController + def new_web_user + @employers = Employer.active + @brokers = Broker.all + @carrier = Carrier.all + end +end diff --git a/app/controllers/api/v1/web_id_cards_controller.rb b/app/controllers/api/v1/web_id_cards_controller.rb new file mode 100644 index 0000000..a2efb9e --- /dev/null +++ b/app/controllers/api/v1/web_id_cards_controller.rb @@ -0,0 +1,39 @@ +module Api + module V1 + class WebIdCardsController < ApplicationController + + def member_card + pb_entity_key = params[:id] + layout = params[:layout] + member = Member.find_by(pb_entity_key: pb_entity_key) + if member.present? + member_card = IdCardPrinterService::CardsGenerator.new(member.member_key, layout).call + + send_data member_card.to_pdf, + filename: "#{member.name.gsub(", ", "_")}_digital_card_#{Date.today}.pdf", + type: "application/pdf", + disposition: 'inline' + else + render json: { error: "Member not found" }, status: :not_found + end + end + + def employer_cards + pl_plan_key = params[:id] + employer = Employer.find_by(pl_plan_key: pl_plan_key) + if employer.present? + employer_cards = IdCardPrinterService::CardsGenerator.new(employer.employer_member_keys, "FullPageCard", true).call + + employer_cards.rewind + send_data employer_cards.sysread, + filename: "#{employer.name.parameterize(separator: "_")}_full_page_cards_#{Date.today}.zip", + type: 'application/zip', + disposition: 'inline' + else + render json: { error: "Employer not found" }, status: :not_found + end + end + + end + end +end \ No newline at end of file diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index 2992107..66f21f7 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -2,7 +2,7 @@ class ApplicationController < ActionController::Base include Pundit::Authorization - before_action :authenticate_user! + # before_action :authenticate_user! def after_sign_in_path_for(resource) stored_location_for(resource) || dashboard_path diff --git a/app/controllers/id_card/setup_controller.rb b/app/controllers/id_card/setup_controller.rb index 394abf4..3fc2a5e 100644 --- a/app/controllers/id_card/setup_controller.rb +++ b/app/controllers/id_card/setup_controller.rb @@ -66,6 +66,7 @@ module IdCard def update_field_exceptions field_exceptions_params = IdCard::FieldException.permitted_params(params) + puts field_exceptions_params if @setup.update(field_exceptions_params) puts "sucess" redirect_to employer_path(@setup.employer.slug), notice: 'ID Card Exceptions successfully updated.' diff --git a/app/jobs/process_member_card_data_job.rb b/app/jobs/process_member_card_data_job.rb index 5ef1bf7..e903c49 100644 --- a/app/jobs/process_member_card_data_job.rb +++ b/app/jobs/process_member_card_data_job.rb @@ -71,7 +71,7 @@ class ProcessMemberCardDataJob < ApplicationJob end if member.id_card_plan_id.present? - member_card = IdCard::PrintData.find_by(pl_plan_key: member.pl_plan_key, plan_id: member.id_card_plan_id, primary_mb_member_key: nil).dup + member_card = IdCard::PrintData.find_by(pl_plan_key: member.pl_plan_key, plan_id: member.id_card_plan_id).dup else member_card = IdCard::PrintData.where(pl_plan_key: member.pl_plan_key, primary_mb_member_key: nil).first.dup end diff --git a/app/jobs/update_member_job.rb b/app/jobs/update_member_job.rb index 72dc3ce..10c6c6e 100644 --- a/app/jobs/update_member_job.rb +++ b/app/jobs/update_member_job.rb @@ -1,7 +1,7 @@ class UpdateMemberJob < ApplicationJob queue_as :default - def perform(pb_entity_key, employer_id, has_divisions = false, has_dental = false, vw_mb_member = {}) + def perform(pb_entity_key, employer_id, has_divisions = false, has_dental = false, add_inactive = false, vw_mb_member = {}) unless vw_mb_member.present? vw_mb_member = Vhcs::VwmbMember.find_by(enrollee_type_value_id: 1, pb_entity_key: pb_entity_key).attributes.with_indifferent_access.slice(:mb_member_key, :pb_entity_key, :pl_plan_key, :family_id, :full_name_last_name_first, :social_security_number) @@ -11,6 +11,8 @@ class UpdateMemberJob < ApplicationJob INNER JOIN "PBProductAvailability" ON "PBProductAvailability"."PBProductKey" = "PBProduct"."PBProductKey" INNER JOIN "PBProductParticipation" ON "PBProductParticipation"."PBProductAvailabilityKey" = "PBProductAvailability"."PBProductAvailabilityKey" INNER JOIN "PBCoveredEntities" ON "PBProductParticipation"."PBProductParticipationKey" = "PBCoveredEntities"."PBProductParticipationKey" + ').select(' + "PBProduct".*, "PBProductParticipation"."InEffect" AS InEffectDate, "PBProductParticipation"."OutOfEffect" AS OutOfEffectDate ').where(' "PBCoveredEntities"."PBEntityKey" = ? AND "PBProductParticipation"."InEffect" <= ? @@ -18,7 +20,9 @@ class UpdateMemberJob < ApplicationJob vw_mb_member[:pb_entity_key], 3.month.from_now , 1.day.ago ) - if pb_products.present? && vw_mb_member[:social_security_number].present? + pb_products, max_in_effect, max_out_effect = get_products_with_max_dates(vw_mb_member[:pb_entity_key]) + + if add_inactive || (pb_products.exists? && max_out_effect > 1.year.ago) # && vw_mb_member[:social_security_number].present? member = Member.find_or_create_by(pb_entity_key: vw_mb_member[:pb_entity_key], employer_id: employer_id) member.name = vw_mb_member[:full_name_last_name_first].titleize member.mb_member_key = vw_mb_member[:mb_member_key] @@ -26,60 +30,62 @@ class UpdateMemberJob < ApplicationJob member.pl_plan_key = vw_mb_member[:pl_plan_key] card_display_name = Vhcs::PbEntity.find_by(pb_entity_key: member.pb_entity_key).full_name - member.id_card_display_name = card_display_name + member.id_card_display_name ||= card_display_name - if has_divisions - division = Vhcs::PbEntity.joins(' - INNER JOIN "PBAffiliation" ON "PBAffiliation"."ParentPBEntityKey" = "PBEntity"."PBEntityKey" - INNER JOIN "PBProductParticipation" ON "PBProductParticipation"."PBAffiliationKey" = "PBAffiliation"."PBAffiliationKey" - INNER JOIN "PBCoveredEntities" ON "PBProductParticipation"."PBProductParticipationKey" = "PBCoveredEntities"."PBProductParticipationKey" - ').find_by(' - "PBCoveredEntities"."PBEntityKey" = ? - AND "PBProductParticipation"."OutOfEffect" > ?', - member.pb_entity_key, 1.day.ago - ).last_name - member.division = division - end + if max_in_effect <= 3.months.from_now && max_out_effect > 1.day.ago - if has_dental - medical_pb_product_key = pb_products.where("ShortDescription LIKE ?", "%Medical%")&.first&.pb_product_key - dental_pb_product_key = pb_products.where("ShortDescription LIKE ?", "%Dental%")&.first&.pb_product_key - # dental_pb_product_key = pb_products.where(short_description: "Dental")&.first&.pb_product_key - if dental_pb_product_key - member.dental_plan_key = dental_pb_product_key - - coverage_class = Vhcs::GenLookupTables.joins(' - INNER JOIN "PBProductParticipation" ON "PBProductParticipation"."CoverageTypeCode" = "GEN_LookupTables"."RecordID" - INNER JOIN "PBCoveredEntities" ON "PBProductParticipation"."PBProductParticipationKey" = "PBCoveredEntities"."PBProductParticipationKey" - INNER JOIN "PBProductAvailability" ON "PBProductAvailability"."PBProductAvailabilityKey" = "PBProductParticipation"."PBProductAvailabilityKey" - INNER JOIN "PBProduct" ON "PBProduct"."PBProductKey" = "PBProductAvailability"."PBProductKey" - ').select(' - "GEN_LookupTables".*, "PBProductParticipation"."InEffect" AS EffDate - ').where(' - "PBCoveredEntities"."PBEntityKey" = ? - AND "PBProductParticipation"."InEffect" <= ? - AND "PBProductParticipation"."OutOfEffect" > ? - AND "PBProduct"."PBProductKey" = ?', - member.pb_entity_key, 1.month.from_now, 1.day.ago, dental_pb_product_key - ).order('EffDate DESC').first.short_desc - member.coverage_class = coverage_class - else - member.coverage_class = "NONE" + if has_divisions + division = Vhcs::PbEntity.joins(' + INNER JOIN "PBAffiliation" ON "PBAffiliation"."ParentPBEntityKey" = "PBEntity"."PBEntityKey" + INNER JOIN "PBProductParticipation" ON "PBProductParticipation"."PBAffiliationKey" = "PBAffiliation"."PBAffiliationKey" + INNER JOIN "PBCoveredEntities" ON "PBProductParticipation"."PBProductParticipationKey" = "PBCoveredEntities"."PBProductParticipationKey" + ').find_by(' + "PBCoveredEntities"."PBEntityKey" = ? + AND "PBProductParticipation"."OutOfEffect" > ?', + member.pb_entity_key, 1.day.ago + ).last_name + member.division = division end - else - medical_pb_product_key = pb_products.first.pb_product_key - end - if medical_pb_product_key && plan = IdCard::Plan.find_by(pb_product_key: medical_pb_product_key) - member.id_card_plan = plan - end - member.dependents = get_dependent_names_by_sequence(member) - # if employer_members_update - # member - # else - # end - member.save! + if has_dental + medical_pb_product_key = pb_products.where("ShortDescription LIKE ?", "%Medical%")&.first&.pb_product_key + dental_pb_product_key = pb_products.where("ShortDescription LIKE ?", "%Dental%")&.first&.pb_product_key + # dental_pb_product_key = pb_products.where(short_description: "Dental")&.first&.pb_product_key + if dental_pb_product_key + member.dental_plan_key = dental_pb_product_key + + coverage_class = Vhcs::GenLookupTables.joins(' + INNER JOIN "PBProductParticipation" ON "PBProductParticipation"."CoverageTypeCode" = "GEN_LookupTables"."RecordID" + INNER JOIN "PBCoveredEntities" ON "PBProductParticipation"."PBProductParticipationKey" = "PBCoveredEntities"."PBProductParticipationKey" + INNER JOIN "PBProductAvailability" ON "PBProductAvailability"."PBProductAvailabilityKey" = "PBProductParticipation"."PBProductAvailabilityKey" + INNER JOIN "PBProduct" ON "PBProduct"."PBProductKey" = "PBProductAvailability"."PBProductKey" + ').select(' + "GEN_LookupTables".*, "PBProductParticipation"."InEffect" AS EffDate + ').where(' + "PBCoveredEntities"."PBEntityKey" = ? + AND "PBProductParticipation"."InEffect" <= ? + AND "PBProductParticipation"."OutOfEffect" > ? + AND "PBProduct"."PBProductKey" = ?', + member.pb_entity_key, 1.month.from_now, 1.day.ago, dental_pb_product_key + ).order('EffDate DESC').first.short_desc + member.coverage_class = coverage_class + else + member.coverage_class = "NONE" + end + else + medical_pb_product_key = pb_products.first.pb_product_key + end + if medical_pb_product_key && plan = IdCard::Plan.find_by(pb_product_key: medical_pb_product_key) + member.id_card_plan = plan + end + member.dependents = get_dependent_names_by_sequence(member) + + member.active = true + else + member.active = false + end puts "---- #{member.name}" + member.save! end member.presence @@ -87,6 +93,21 @@ class UpdateMemberJob < ApplicationJob private + def get_products_with_max_dates(pb_entity_key) + pb_product_with_dates = Vhcs::PbProduct.joins(' + INNER JOIN "PBProductAvailability" ON "PBProductAvailability"."PBProductKey" = "PBProduct"."PBProductKey" + INNER JOIN "PBProductParticipation" ON "PBProductParticipation"."PBProductAvailabilityKey" = "PBProductAvailability"."PBProductAvailabilityKey" + INNER JOIN "PBCoveredEntities" ON "PBProductParticipation"."PBProductParticipationKey" = "PBCoveredEntities"."PBProductParticipationKey" + ').select(' + "PBProduct".*, "PBProductParticipation"."InEffect" AS InEffectDate, "PBProductParticipation"."OutOfEffect" AS OutOfEffectDate + ').where(' + "PBCoveredEntities"."PBEntityKey" = ?', + pb_entity_key + ) + + [pb_product_with_dates, pb_product_with_dates.map { |products| products["InEffectDate"]}.max, pb_product_with_dates.map { |products| products["OutOfEffectDate"]}.max] + end + def get_dependent_names_by_sequence(member) dependents = Vhcs::VwmbMember.joins(' INNER JOIN "PBCoveredEntities" ON "PBCoveredEntities"."PBEntityKey" = "vwMBMember"."PBEntityKey" diff --git a/app/models/id_card/field_exception.rb b/app/models/id_card/field_exception.rb index 94b26bd..9026c6b 100644 --- a/app/models/id_card/field_exception.rb +++ b/app/models/id_card/field_exception.rb @@ -25,10 +25,12 @@ module IdCard def permitted_params(params) params.require(:id_card_setup).permit( field_exceptions_attributes: [ + :id, :exception_type, :exception_values, :_destroy, field_exception_items_attributes: [ + :id, :field_name, :field_value, :network_logo_id, diff --git a/app/models/member.rb b/app/models/member.rb index 3e48f7a..fde9d19 100644 --- a/app/models/member.rb +++ b/app/models/member.rb @@ -11,16 +11,27 @@ class Member < ApplicationRecord validates :division, presence: true, if: -> { employer.id_card_setup.has_divisions } # validates :coverage_class, :dental_plan_key, presence: true, if: -> { employer.id_card_setup.has_dental } validates :mb_member_key, :pb_entity_key, uniqueness: true - validates :name, uniqueness: { scope: :employer_id } + # validates :name, uniqueness: { scope: :employer_id } before_validation :format_dependents, if: :dependents_changed? + scope :active, -> { + where(active: true) + } + def id_card_field_exception_values - address = Vhcs::PbEntityAddress.find_by(pb_entity_key: self.pb_entity_key) + address = Vhcs::PbEntityAddress.find_by(pb_entity_key: pb_entity_key) { zipcode: address.zip, state: address.state, - family_id: self.family_id + family_id: family_id + } + end + + def member_key + { + pl_plan_key: pl_plan_key, + member_keys: [pb_entity_key] } end diff --git a/app/services/automation_service/employer_members_update.rb b/app/services/automation_service/employer_members_update.rb index ecbf99d..e262992 100644 --- a/app/services/automation_service/employer_members_update.rb +++ b/app/services/automation_service/employer_members_update.rb @@ -12,17 +12,21 @@ module AutomationService vw_mb_members = Vhcs::VwmbMember.where(enrollee_type_value_id: 1, pl_plan_key: @pl_plan_key).select(:mb_member_key, :pb_entity_key, :pl_plan_key, :family_id, :full_name_last_name_first, :social_security_number) + puts "--- Total Members #{vw_mb_members.length}" + member_update_futures = vw_mb_members.map do |vw_mb_member| Concurrent::Future.execute do ActiveRecord::Base.connection_pool.with_connection do - UpdateMemberJob.perform_now(vw_mb_member.pb_entity_key, employer.id, card_setup.has_divisions, card_setup.has_dental, vw_mb_member) + UpdateMemberJob.perform_now(vw_mb_member.pb_entity_key, employer.id, card_setup.has_divisions, card_setup.has_dental, false, vw_mb_member) end end end member_updates = member_update_futures.map(&:value).compact - employer.members = member_updates - if employer.initialized && card_setup.initialized && member_updates.empty? + + puts "--- Total Web Members #{member_updates.length}" + # employer.members = member_updates + if employer.initialized && card_setup.initialized && employer.members.active.empty? employer.active = false end employer.save diff --git a/app/services/automation_service/member_update.rb b/app/services/automation_service/member_update.rb index 5bf4de8..36855f9 100644 --- a/app/services/automation_service/member_update.rb +++ b/app/services/automation_service/member_update.rb @@ -9,12 +9,12 @@ module AutomationService def call employer = Employer.includes(:id_card_setup).find_by(pl_plan_key: @pl_plan_key) card_setup = employer.id_card_setup - member = UpdateMemberJob.perform_now(@pb_entity_key, employer.id, card_setup.has_divisions, card_setup.has_dental) - if member.present? - member.save - else - Member.find_by(pb_entity_key: @pb_entity_key).destroy - end + member = UpdateMemberJob.perform_now(@pb_entity_key, employer.id, card_setup.has_divisions, card_setup.has_dental, true) + # if member.present? + # member.save + # else + # Member.find_by(pb_entity_key: @pb_entity_key).destroy + # end end end diff --git a/app/services/id_card_printer_service/card_data_formatter.rb b/app/services/id_card_printer_service/card_data_formatter.rb index 29053a1..b9f9c01 100644 --- a/app/services/id_card_printer_service/card_data_formatter.rb +++ b/app/services/id_card_printer_service/card_data_formatter.rb @@ -57,22 +57,24 @@ module IdCardPrinterService ) selected_attributes = employer_attributes.merge(rx_attributes).merge(provider_attributes) - IdCard::PrintData.new(selected_attributes) + IdCard::PrintData.create(selected_attributes) end def create_plan_base_cards(common_fields_card) needed_plans_ids = @employer.members.where(pb_entity_key: @member_keys).distinct.pluck(:id_card_plan_id) - needed_plans = @card_setup.plans.where(id: needed_plans_ids) - needed_plans.each do |plan| - selected_attributes = { plan_id: plan.id } - plan.plan_benefits.each do |bene| - selected_attributes["benefit_desc_#{bene.sequence}".to_sym] = bene.benefit_desc - selected_attributes["benefit_#{bene.sequence}".to_sym] = bene.benefit - end + if needed_plans_ids.present? + needed_plans = @card_setup.plans.where(id: needed_plans_ids) + needed_plans.each do |plan| + selected_attributes = { plan_id: plan.id } + plan.plan_benefits.each do |bene| + selected_attributes["benefit_desc_#{bene.sequence}".to_sym] = bene.benefit_desc + selected_attributes["benefit_#{bene.sequence}".to_sym] = bene.benefit + end - plan_base_card = common_fields_card.dup - plan_base_card.assign_attributes(selected_attributes) - plan_base_card.save + plan_base_card = common_fields_card.dup + plan_base_card.assign_attributes(selected_attributes) + plan_base_card.save + end end end diff --git a/app/services/id_card_queue_service/get_queued_members.rb b/app/services/id_card_queue_service/get_queued_members.rb index e5e11d3..3e710d9 100644 --- a/app/services/id_card_queue_service/get_queued_members.rb +++ b/app/services/id_card_queue_service/get_queued_members.rb @@ -3,23 +3,43 @@ module IdCardQueueService def initialize(pl_plan_keys = nil) if pl_plan_keys - @employer_pl_plan_keys = pl_plan_keys + @employer_pl_plan_keys = Array.wrap(pl_plan_keys) else - @employer_pl_plan_keys = IdCard::Setup.active.pluck(:pl_plan_key).join(',') + @employer_pl_plan_keys = IdCard::Setup.active.pluck(:pl_plan_key) end end def call - raw_employers_member_keys = CallStoredProc.new('HLGetQueuedIdCardMemberKeysTPA', { PLPlanKeys: @employer_pl_plan_keys }).call.to_ary - format_employers_member_keys(raw_employers_member_keys) + employer_member_keys = @employer_pl_plan_keys.map do |pl_plan_key| + queued_employer_members = Vhcs::VwmbMember.joins(' + INNER JOIN "CLDocument" ON "CLDocument"."RecipientKey" = "VWMBMember"."MBMemberKey" + ').select(' + "VWMBMember"."PBEntityKey" + ').where(' + "CLDocument"."DocStatus" <> ? + AND "CLDocument"."PLPlanKey" = ? + AND "CLDocument"."PrintDate" IS NULL + AND "CLDocument"."CreateDate" > ?', + "Printed", pl_plan_key, Date.new(2026, 7, 17) + ).pluck(:pb_entity_key) + + if queued_employer_members.present? + { + pl_plan_key: pl_plan_key, + member_keys: queued_employer_members + } + else + "" + end + end + + employer_member_keys.compact_blank end private def format_employers_member_keys(raw_employers_member_keys) - key_map = { "PlanKey" => :pl_plan_key, "MemberKeys" => :member_keys } - raw_employers_member_keys.map do |hash| hash["PlanKey"] = hash["PlanKey"].to_s hash["MemberKeys"] = hash["MemberKeys"].split(", ").map(&:to_i) diff --git a/app/services/image_processor_service.rb b/app/services/image_processor_service.rb old mode 100755 new mode 100644 diff --git a/app/services/reports_service/duplicate_old_cards.rb b/app/services/reports_service/duplicate_old_cards.rb index 9732d41..eabe4bf 100644 --- a/app/services/reports_service/duplicate_old_cards.rb +++ b/app/services/reports_service/duplicate_old_cards.rb @@ -49,6 +49,8 @@ module ReportsService UPDATE CLDocument SET DocStatus = 'Printed', PrintDate = GetDate() where DocStatus <> 'Printed' + and DocType = 'ID' + and CreateDate > CAST('2026-05-01' AS date) ") end diff --git a/app/views/admins/new.html.erb b/app/views/admins/new.html.erb new file mode 100644 index 0000000..77da512 --- /dev/null +++ b/app/views/admins/new.html.erb @@ -0,0 +1,63 @@ +
+
+

+ Add Invited Web Account +

+ <%= form_with url: create_web_employer_admins_path, method: :post, local: true do |f| %> +
+ Employers +
+
+ <%= f.label :employer %> + <%= f.collection_select :employer, @employers, :id, :name, { include_blank: "Select an Employer" }, { class: "custom-select" } %> +
+
+ <%= f.label :email %> + <%= f.email_field :email, id: "email-address", autofocus: true, autocomplete: "email", placeholder: "Email address", class: "appearance-none rounded-none relative block w-full px-3 py-2 border border-gray-300 placeholder-bluetang text-deepcove rounded-t-md focus:outline-none focus:ring-indigo-500 focus:border-indigo-500 focus:z-10 sm:text-sm" %> +
+
+
+ <%= f.submit "Create Employer Account", { class: "relative w-full flex justify-center py-2 px-4 border-4 font-bold rounded-lg text-platinum" } %> +
+
+ <% end %> + <%= form_with url: create_web_broker_admins_path, method: :post, local: true do |f| %> +
+ Brokers +
+
+ <%= f.label :broker %> + <%= f.collection_select :broker, @brokers, :id, :name, { include_blank: "Select a Broker" }, { class: "custom-select" } %> +
+
+ <%= f.label :email %> + <%= f.email_field :email, id: "email-address", autofocus: true, autocomplete: "email", placeholder: "Email address", class: "appearance-none rounded-none relative block w-full px-3 py-2 border border-gray-300 placeholder-bluetang text-deepcove rounded-t-md focus:outline-none focus:ring-indigo-500 focus:border-indigo-500 focus:z-10 sm:text-sm" %> +
+
+
+ <%= f.submit "Create Broker Account", { class: "relative w-full flex justify-center py-2 px-4 border-4 font-bold rounded-lg text-platinum" } %> +
+
+ <% end %> + <%= form_with url: create_web_carrier_admins_path, method: :post, local: true do |f| %> +
+ Carriers +
+
+ <%= f.label :carrier %> + <%= f.collection_select :carrier, @carriers, :id, :name, { include_blank: "Select a Broker" }, { class: "custom-select" } %> +
+
+ <%= f.label :email %> + <%= f.email_field :email, id: "email-address", autofocus: true, autocomplete: "email", placeholder: "Email address", class: "appearance-none rounded-none relative block w-full px-3 py-2 border border-gray-300 placeholder-bluetang text-deepcove rounded-t-md focus:outline-none focus:ring-indigo-500 focus:border-indigo-500 focus:z-10 sm:text-sm" %> +
+
+
+ <%= f.submit "Create Carrier Account", { class: "relative w-full flex justify-center py-2 px-4 border-4 font-bold rounded-lg text-platinum" } %> +
+
+ <% end %> +
+
\ No newline at end of file diff --git a/app/views/brokers/_broker.html.erb b/app/views/brokers/_broker.html.erb new file mode 100644 index 0000000..e53f282 --- /dev/null +++ b/app/views/brokers/_broker.html.erb @@ -0,0 +1,10 @@ +
+
+ Name: + <%= broker.name %> +
+
+ Carrier: + <%= broker.carrier_id %> +
+
diff --git a/app/views/brokers/_broker.json.jbuilder b/app/views/brokers/_broker.json.jbuilder new file mode 100644 index 0000000..b3b1688 --- /dev/null +++ b/app/views/brokers/_broker.json.jbuilder @@ -0,0 +1,2 @@ +json.extract! broker, :id, :name, :carrier_id, :created_at, :updated_at +json.url broker_url(broker, format: :json) diff --git a/app/views/brokers/_form.html.erb b/app/views/brokers/_form.html.erb new file mode 100644 index 0000000..b2caabd --- /dev/null +++ b/app/views/brokers/_form.html.erb @@ -0,0 +1,27 @@ +<%= form_with(model: broker, class: "contents") do |form| %> + <% if broker.errors.any? %> +
+

<%= pluralize(broker.errors.count, "error") %> prohibited this broker from being saved:

+ + +
+ <% end %> + +
+ <%= form.label :name %> + <%= form.text_field :name, class: ["block shadow-sm rounded-md border px-3 py-2 mt-2 w-full", {"border-gray-400 focus:outline-blue-600": broker.errors[:name].none?, "border-red-400 focus:outline-red-600": broker.errors[:name].any?}] %> +
+ +
+ <%= form.label :carrier_id %> + <%= form.text_field :carrier_id, class: ["block shadow-sm rounded-md border px-3 py-2 mt-2 w-full", {"border-gray-400 focus:outline-blue-600": broker.errors[:carrier_id].none?, "border-red-400 focus:outline-red-600": broker.errors[:carrier_id].any?}] %> +
+ +
+ <%= form.submit class: "w-full sm:w-auto rounded-md px-3.5 py-2.5 bg-blue-600 hover:bg-blue-500 text-white inline-block font-medium cursor-pointer" %> +
+<% end %> diff --git a/app/views/brokers/edit.html.erb b/app/views/brokers/edit.html.erb new file mode 100644 index 0000000..f7fc532 --- /dev/null +++ b/app/views/brokers/edit.html.erb @@ -0,0 +1,10 @@ +<% content_for :title, "Editing broker" %> + +
+

Editing broker

+ + <%= render "form", broker: @broker %> + + <%= link_to "Show this broker", @broker, class: "w-full sm:w-auto text-center mt-2 sm:mt-0 sm:ml-2 rounded-md px-3.5 py-2.5 bg-gray-100 hover:bg-gray-50 inline-block font-medium" %> + <%= link_to "Back to brokers", brokers_path, class: "w-full sm:w-auto text-center mt-2 sm:mt-0 sm:ml-2 rounded-md px-3.5 py-2.5 bg-gray-100 hover:bg-gray-50 inline-block font-medium" %> +
diff --git a/app/views/brokers/index.html.erb b/app/views/brokers/index.html.erb new file mode 100644 index 0000000..e9657a0 --- /dev/null +++ b/app/views/brokers/index.html.erb @@ -0,0 +1,29 @@ +<% content_for :title, "Brokers" %> + +
+ <% if notice.present? %> +

<%= notice %>

+ <% end %> + +
+

Brokers

+ <%= link_to "New broker", new_broker_path, class: "rounded-md px-3.5 py-2.5 bg-blue-600 hover:bg-blue-500 text-white block font-medium" %> +
+ +
+ <% if @brokers.any? %> + <% @brokers.each do |broker| %> +
+ <%= render broker %> +
+ <%= link_to "Show", broker, class: "w-full sm:w-auto text-center rounded-md px-3.5 py-2.5 bg-gray-100 hover:bg-gray-50 inline-block font-medium" %> + <%= link_to "Edit", edit_broker_path(broker), class: "w-full sm:w-auto text-center rounded-md px-3.5 py-2.5 bg-gray-100 hover:bg-gray-50 inline-block font-medium" %> + <%= button_to "Destroy", broker, method: :delete, class: "w-full sm:w-auto rounded-md px-3.5 py-2.5 text-white bg-red-600 hover:bg-red-500 font-medium cursor-pointer", data: { turbo_confirm: "Are you sure?" } %> +
+
+ <% end %> + <% else %> +

No brokers found.

+ <% end %> +
+
diff --git a/app/views/brokers/index.json.jbuilder b/app/views/brokers/index.json.jbuilder new file mode 100644 index 0000000..863db18 --- /dev/null +++ b/app/views/brokers/index.json.jbuilder @@ -0,0 +1 @@ +json.array! @brokers, partial: "brokers/broker", as: :broker diff --git a/app/views/brokers/new.html.erb b/app/views/brokers/new.html.erb new file mode 100644 index 0000000..1b6841a --- /dev/null +++ b/app/views/brokers/new.html.erb @@ -0,0 +1,9 @@ +<% content_for :title, "New broker" %> + +
+

New broker

+ + <%= render "form", broker: @broker %> + + <%= link_to "Back to brokers", brokers_path, class: "w-full sm:w-auto text-center mt-2 sm:mt-0 sm:ml-2 rounded-md px-3.5 py-2.5 bg-gray-100 hover:bg-gray-50 inline-block font-medium" %> +
diff --git a/app/views/brokers/show.html.erb b/app/views/brokers/show.html.erb new file mode 100644 index 0000000..9c1f5c2 --- /dev/null +++ b/app/views/brokers/show.html.erb @@ -0,0 +1,15 @@ +<% content_for :title, "Showing broker" %> + +
+ <% if notice.present? %> +

<%= notice %>

+ <% end %> + +

Showing broker

+ + <%= render @broker %> + + <%= link_to "Edit this broker", edit_broker_path(@broker), class: "w-full sm:w-auto text-center rounded-md px-3.5 py-2.5 bg-gray-100 hover:bg-gray-50 inline-block font-medium" %> + <%= link_to "Back to brokers", brokers_path, class: "w-full sm:w-auto text-center mt-2 sm:mt-0 sm:ml-2 rounded-md px-3.5 py-2.5 bg-gray-100 hover:bg-gray-50 inline-block font-medium" %> + <%= button_to "Destroy this broker", @broker, method: :delete, form_class: "sm:inline-block mt-2 sm:mt-0 sm:ml-2", class: "w-full rounded-md px-3.5 py-2.5 text-white bg-red-600 hover:bg-red-500 font-medium cursor-pointer", data: { turbo_confirm: "Are you sure?" } %> +
diff --git a/app/views/brokers/show.json.jbuilder b/app/views/brokers/show.json.jbuilder new file mode 100644 index 0000000..68688d9 --- /dev/null +++ b/app/views/brokers/show.json.jbuilder @@ -0,0 +1 @@ +json.partial! "brokers/broker", broker: @broker diff --git a/app/views/carriers/_carrier.html.erb b/app/views/carriers/_carrier.html.erb new file mode 100644 index 0000000..9d450c7 --- /dev/null +++ b/app/views/carriers/_carrier.html.erb @@ -0,0 +1,6 @@ +
+
+ Name: + <%= carrier.name %> +
+
diff --git a/app/views/carriers/_carrier.json.jbuilder b/app/views/carriers/_carrier.json.jbuilder new file mode 100644 index 0000000..7e22449 --- /dev/null +++ b/app/views/carriers/_carrier.json.jbuilder @@ -0,0 +1,2 @@ +json.extract! carrier, :id, :name, :created_at, :updated_at +json.url carrier_url(carrier, format: :json) diff --git a/app/views/carriers/_form.html.erb b/app/views/carriers/_form.html.erb new file mode 100644 index 0000000..6d91f3d --- /dev/null +++ b/app/views/carriers/_form.html.erb @@ -0,0 +1,22 @@ +<%= form_with(model: carrier, class: "contents") do |form| %> + <% if carrier.errors.any? %> +
+

<%= pluralize(carrier.errors.count, "error") %> prohibited this carrier from being saved:

+ + +
+ <% end %> + +
+ <%= form.label :name %> + <%= form.text_field :name, class: ["block shadow-sm rounded-md border px-3 py-2 mt-2 w-full", {"border-gray-400 focus:outline-blue-600": carrier.errors[:name].none?, "border-red-400 focus:outline-red-600": carrier.errors[:name].any?}] %> +
+ +
+ <%= form.submit class: "w-full sm:w-auto rounded-md px-3.5 py-2.5 bg-blue-600 hover:bg-blue-500 text-white inline-block font-medium cursor-pointer" %> +
+<% end %> diff --git a/app/views/carriers/edit.html.erb b/app/views/carriers/edit.html.erb new file mode 100644 index 0000000..09bea75 --- /dev/null +++ b/app/views/carriers/edit.html.erb @@ -0,0 +1,10 @@ +<% content_for :title, "Editing carrier" %> + +
+

Editing carrier

+ + <%= render "form", carrier: @carrier %> + + <%= link_to "Show this carrier", @carrier, class: "w-full sm:w-auto text-center mt-2 sm:mt-0 sm:ml-2 rounded-md px-3.5 py-2.5 bg-gray-100 hover:bg-gray-50 inline-block font-medium" %> + <%= link_to "Back to carriers", carriers_path, class: "w-full sm:w-auto text-center mt-2 sm:mt-0 sm:ml-2 rounded-md px-3.5 py-2.5 bg-gray-100 hover:bg-gray-50 inline-block font-medium" %> +
diff --git a/app/views/carriers/index.html.erb b/app/views/carriers/index.html.erb new file mode 100644 index 0000000..d84368c --- /dev/null +++ b/app/views/carriers/index.html.erb @@ -0,0 +1,29 @@ +<% content_for :title, "Carriers" %> + +
+ <% if notice.present? %> +

<%= notice %>

+ <% end %> + +
+

Carriers

+ <%= link_to "New carrier", new_carrier_path, class: "rounded-md px-3.5 py-2.5 bg-blue-600 hover:bg-blue-500 text-white block font-medium" %> +
+ +
+ <% if @carriers.any? %> + <% @carriers.each do |carrier| %> +
+ <%= render carrier %> +
+ <%= link_to "Show", carrier, class: "w-full sm:w-auto text-center rounded-md px-3.5 py-2.5 bg-gray-100 hover:bg-gray-50 inline-block font-medium" %> + <%= link_to "Edit", edit_carrier_path(carrier), class: "w-full sm:w-auto text-center rounded-md px-3.5 py-2.5 bg-gray-100 hover:bg-gray-50 inline-block font-medium" %> + <%= button_to "Destroy", carrier, method: :delete, class: "w-full sm:w-auto rounded-md px-3.5 py-2.5 text-white bg-red-600 hover:bg-red-500 font-medium cursor-pointer", data: { turbo_confirm: "Are you sure?" } %> +
+
+ <% end %> + <% else %> +

No carriers found.

+ <% end %> +
+
diff --git a/app/views/carriers/index.json.jbuilder b/app/views/carriers/index.json.jbuilder new file mode 100644 index 0000000..0a8b135 --- /dev/null +++ b/app/views/carriers/index.json.jbuilder @@ -0,0 +1 @@ +json.array! @carriers, partial: "carriers/carrier", as: :carrier diff --git a/app/views/carriers/new.html.erb b/app/views/carriers/new.html.erb new file mode 100644 index 0000000..5a59062 --- /dev/null +++ b/app/views/carriers/new.html.erb @@ -0,0 +1,9 @@ +<% content_for :title, "New carrier" %> + +
+

New carrier

+ + <%= render "form", carrier: @carrier %> + + <%= link_to "Back to carriers", carriers_path, class: "w-full sm:w-auto text-center mt-2 sm:mt-0 sm:ml-2 rounded-md px-3.5 py-2.5 bg-gray-100 hover:bg-gray-50 inline-block font-medium" %> +
diff --git a/app/views/carriers/show.html.erb b/app/views/carriers/show.html.erb new file mode 100644 index 0000000..6aee7ab --- /dev/null +++ b/app/views/carriers/show.html.erb @@ -0,0 +1,15 @@ +<% content_for :title, "Showing carrier" %> + +
+ <% if notice.present? %> +

<%= notice %>

+ <% end %> + +

Showing carrier

+ + <%= render @carrier %> + + <%= link_to "Edit this carrier", edit_carrier_path(@carrier), class: "w-full sm:w-auto text-center rounded-md px-3.5 py-2.5 bg-gray-100 hover:bg-gray-50 inline-block font-medium" %> + <%= link_to "Back to carriers", carriers_path, class: "w-full sm:w-auto text-center mt-2 sm:mt-0 sm:ml-2 rounded-md px-3.5 py-2.5 bg-gray-100 hover:bg-gray-50 inline-block font-medium" %> + <%= button_to "Destroy this carrier", @carrier, method: :delete, form_class: "sm:inline-block mt-2 sm:mt-0 sm:ml-2", class: "w-full rounded-md px-3.5 py-2.5 text-white bg-red-600 hover:bg-red-500 font-medium cursor-pointer", data: { turbo_confirm: "Are you sure?" } %> +
diff --git a/app/views/carriers/show.json.jbuilder b/app/views/carriers/show.json.jbuilder new file mode 100644 index 0000000..26694ba --- /dev/null +++ b/app/views/carriers/show.json.jbuilder @@ -0,0 +1 @@ +json.partial! "carriers/carrier", carrier: @carrier diff --git a/app/views/id_card/setup/field_exceptions.html.erb b/app/views/id_card/setup/field_exceptions.html.erb index 95fc3f6..db15bbe 100644 --- a/app/views/id_card/setup/field_exceptions.html.erb +++ b/app/views/id_card/setup/field_exceptions.html.erb @@ -57,7 +57,7 @@ <% end %> - <%= button_tag "Add Another Alternate ID Card Change Item", class: "cursor-pointer bg-#{IdCard::Setup::FORM_COLORS[index]} hover:bg-deepcove text-xl font-bold text-platinum my-3 py-1 font-semibold leading-tight rounded border-3 border-#{IdCard::Setup::FORM_COLORS[index]} w-full", data: { action: "add-exception-item#addExemptionItem", add_exception_item_target: "exceptionItemButton" } %> + <%= button_tag "Add Alternate ID Card Change Item", class: "cursor-pointer bg-#{IdCard::Setup::FORM_COLORS[index]} hover:bg-deepcove text-xl font-bold text-platinum my-3 py-1 font-semibold leading-tight rounded border-3 border-#{IdCard::Setup::FORM_COLORS[index]} w-full", data: { action: "add-exception-item#addExemptionItem", add_exception_item_target: "exceptionItemButton" } %>