diff --git a/app/controllers/employers_controller.rb b/app/controllers/employers_controller.rb index d070121..34b18ab 100644 --- a/app/controllers/employers_controller.rb +++ b/app/controllers/employers_controller.rb @@ -1,4 +1,6 @@ class EmployersController < ApplicationController + + # View Methods def index @employers = Employer.all end @@ -12,16 +14,6 @@ class EmployersController < ApplicationController render :new end - def import - word_doc = params[:employer][:import_from_word] - if word_doc.present? && word_doc.is_a?(ActionDispatch::Http::UploadedFile) - @employer = BenefitsWordDocProcessor.new(word_doc.tempfile).call - else - @employer = Employer.new - end - render :new - end - # def import_old # word_doc = params[:employer][:import_from_word] # @plan_templates = IdCardBenefitsTemplate.where.not(title: "BLANK") @@ -74,6 +66,18 @@ class EmployersController < ApplicationController # redirect_to resources_url, notice: 'Resource was successfully destroyed.' end + # API Methods + + def import + word_doc = params[:employer][:import_from_word] + if word_doc.present? && word_doc.is_a?(ActionDispatch::Http::UploadedFile) + @employer = BenefitsWordDocProcessor.new(word_doc.tempfile).call + else + @employer = Employer.new + end + render :new + end + private # def process_logos(employer_setup_process_params) diff --git a/app/controllers/id_card/employer_logos_controller.rb b/app/controllers/id_card/employer_logos_controller.rb index 18d8f6f..43cce98 100644 --- a/app/controllers/id_card/employer_logos_controller.rb +++ b/app/controllers/id_card/employer_logos_controller.rb @@ -1,56 +1,61 @@ -class IdCard::EmployerLogosController < ApplicationController +module IdCard + class EmployerLogosController < ApplicationController - def index - end - - def show - end - - def image - logo_file = IdCard::EmployerLogo.find(params[:id]) - puts params[:id] - logo_binary = logo_file.image_data - logo_filename = logo_file.filename - - send_data logo_binary, - filename: logo_filename, - disposition: 'inline' - end - - def new - end - - def create - file = card_logo_file_params["logo_file"] - if file.present? && file.is_a?(ActionDispatch::Http::UploadedFile) - filename = file.original_filename - # binary_data = file.read - binary_data = File.binread(file) - meme_type = Marcel::MimeType.for(file) - - employerlogo = IdCard::EmployerLogo.create( - filename: filename, - image_data: binary_data, - content_type: meme_type - ) - - render json: employerlogo, only: [:id], status: :ok + # View Methods + def index end + + def show + end + + def new + end + + def create + file = logo_params["logo_file"] + if file.present? && file.is_a?(ActionDispatch::Http::UploadedFile) + filename = file.original_filename + # binary_data = file.read + binary_data = File.binread(file) + meme_type = Marcel::MimeType.for(file) + + employerlogo = IdCard::EmployerLogo.create( + filename: filename, + image_data: binary_data, + content_type: meme_type + ) + + render json: employerlogo, only: [:id], status: :ok + end + end + + def edit + end + + def update + end + + def destroy + end + + # API Methods + + def image + logo_file = IdCard::EmployerLogo.find(params[:id]) + puts params[:id] + logo_binary = logo_file.image_data + logo_filename = logo_file.filename + + send_data logo_binary, + filename: logo_filename, + disposition: 'inline' + end + + private + + def logo_params + params.require(:id_card_employer_logo).permit(:logo_file) + end + end - - def edit - end - - def update - end - - def destroy - end - - private - - def card_logo_file_params - params.require(:card_logo_file).permit(:logo_file, :logo_type) - end - end \ No newline at end of file diff --git a/app/controllers/id_card/setup_controller.rb b/app/controllers/id_card/setup_controller.rb index c611b35..c462e23 100644 --- a/app/controllers/id_card/setup_controller.rb +++ b/app/controllers/id_card/setup_controller.rb @@ -1,236 +1,242 @@ -class IdCard::SetupController < ApplicationController +module IdCard + class SetupController < ApplicationController - def new - @employer = Employer.find_by(slug: params[:employer]) - @setup = @employer.id_card_setup.new - render :new - end - - def create - employer_params = Employer.permitted_params(params) - puts "---Params---" - puts employer_params - # post_image_processing_params = process_logos(employer_setup_process_params) - @employer = Employer.new(employer_params) - if @employer.save - # update_logos_with_employer_setup_information() - redirect_to employer_path(@employer.slug), notice: 'Employer Saved' - else + # View Methods + def new + @employer = Employer.find_by(slug: params[:employer]) + @setup = @employer.create_id_card_setup render :new end - end - def edit - @employer = Employer.find_by(slug: params[:id]) - render :edit - end - - def update - puts "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" - employer_params = Employer.permitted_params(params) - @employer = Employer.find(params[:id]) - - if @employer.update(employer_params) - puts "sucess" - redirect_to employer_path(@employer.slug), notice: 'Employer was successfully updated.' - else - puts "fail" - render :edit, status: :unprocessable_entity + def create + xyz + employer_params = Employer.permitted_params(params) + puts "---Params---" + puts employer_params + # post_image_processing_params = process_logos(employer_setup_process_params) + @employer = Employer.new(employer_params) + if @employer.save + # update_logos_with_employer_setup_information() + redirect_to employer_path(@employer.slug), notice: 'Employer Saved' + else + render :new + end end + def edit + @employer = Employer.find_by(slug: params[:id]) + render :edit + end + + def update + puts "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" + employer_params = Employer.permitted_params(params) + @employer = Employer.find(params[:id]) + + if @employer.update(employer_params) + puts "sucess" + redirect_to employer_path(@employer.slug), notice: 'Employer was successfully updated.' + else + puts "fail" + render :edit, status: :unprocessable_entity + end + + end + + def destroy + # @resource = Resource.find(params[:id]) + # @resource.destroy + # redirect_to resources_url, notice: 'Resource was successfully destroyed.' + end + + # API Methods + + private + + # def process_logos(employer_setup_process_params) + # @uploaded_logos = [] + # employer_logo = employer_setup_process_params["employer_logo"] + # if employer_logo.present? && employer_logo.is_a?(ActionDispatch::Http::UploadedFile) + # filename = employer_logo.original_filename + # binary_data = employer_logo.read + # meme_type = Marcel::MimeType.for(employer_logo) + + # CardLogoFile.create( + # filename: filename, + # image_data: binary_data, + # content_type: meme_type, + # logo_type: "employer" + # ) + + # @uploaded_logos.push(filename) + # employer_setup_process_params["employer_logo"] = filename + # end + + # network_logos = employer_setup_process_params["alternate_network_logos_attributes"] + # if network_logos.present? + # network_logos.each do |alt| + + # network_logo = alt.last["network_logo"] + # if network_logo.present? && network_logo.is_a?(ActionDispatch::Http::UploadedFile) + # filename = network_logo.original_filename + # binary_data = network_logo.read + # meme_type = Marcel::MimeType.for(network_logo) + + # CardLogoFile.create( + # filename: filename, + # image_data: binary_data, + # content_type: meme_type, + # logo_type: "network" + # ) + + # @uploaded_logos.push(filename) + # end + # alt.last["network_logo"] = @uploaded_logos.last + # end + # end + # employer_setup_process_params + # end + + # def update_logos_with_employer_setup_information() + # @uploaded_logos.each do |logo| + # logo_file = CardLogoFile.find_by(filename: logo) + # if logo_file.present? && @employer.present? + # logo_file.employer_setup_process = @employer + # logo_file.save + # end + # end + + # end + + # def general_information_params + # params.require(:employer_setup_general_information_form).permit( + # :name, + # :employer_logo, + # :group_number, + # :dental, + # :pl_plan_key, + # :effect_date, + # :number_of_plans, + # :network, + # :number_of_additional_network_logos + # ) + # end + + # def plans_params + # params.require(:employer_setup_plans_form).permit( + # plans: permited_plans_keys, + # benefit_descs: benefit_sequence_keys + # ) + # end + + # def network_exceptions_params + # params.require(:employer_setup_network_exceptions_form).permit( + # network_exceptions: [:network_logo, exceptions: [:type, :value]], + # ) + # end + + # def form_for_step + # step_name = @top_form.current_step + # form_method = "EmployerSetup#{step_name.camelize}Form".constantize + # # puts "/////\\\\\\||||||" + # # puts session[:employer_setup_data] + # # puts session[:employer_setup_data]['employer_setup_process_id'] + # puts form_method + # form_method.new(session[:employer_setup_data]['employer_setup_process_id']) + # end + + # def process_step(step_name) + # @form_method = "EmployerSetup#{step_name.camelize}Form".constantize + # session_data_name = "#{step_name}_data" + # # puts "1--------------params----" + # # puts params + # # puts "8--------------session----" + # # puts session[:employer_setup_data] + # employer_setup_process_id = session[:employer_setup_data]['employer_setup_process_id'] + # # puts session[:employer_setup_data] + # puts "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" + # puts params + # @form = @form_method.new(employer_setup_process_id, params) + # if @form.pl_plan_key.blank? + # @form.pl_plan_key = session[:employer_setup_data]['pl_plan_key'] + # end + # if @form.valid? && @form.save + # pl_plan_key = @top_form.pl_plan_key || @form.pl_plan_key + # # session[:employer_setup_data].merge!({current_step: step_name, pl_plan_key: pl_plan_key}) + # # form_fields = @form.attributes.merge!(global_params(step_name)) + # # session[:employer_setup_data][session_data_name] = form_fields + # # session[:employer_setup_data].merge!(global_params(step_name)) + # # puts session[:employer_setup_data][session_data_name] + # true + # else + # false + # end + # end + + # def step_params(step_name) + # form_name_sym = "employer_setup_#{step_name}_form".to_sym + # params.require(form_name_sym).permit(@form_method.permitted_params) + # end + + # def global_params(step_name) + # form_name_sym = "employer_setup_#{step_name}_form".to_sym + # params.require(form_name_sym).permit(EmployerSetupForm.permitted_params) + # end + + # def process_step(step_name) + # form_name = "employer_setup_#{step_name}_form".camelize.constantize + # form_params_name = "#{step_name}_params".to_sym + # allowed_params = [:general_information_params, :plans_params, :network_exceptions_params] + # if allowed_params.include?(form_params_name) + # form_params = send(form_params_name) + # @form = form_name.new(form_params) + # if @form.valid? + # session[:employer_setup_data]["#{step_name}_data"] = form_params + # true + # else + # false + # end + # end + # false + # end + + # def employer_setup_params + # params.require(:employer_setup_form).permit( + # :current_step, + # :name, + # :employer_logo, + # :group_number, + # :pl_plan_key, + # :effect_date, + # :number_of_plans, + # :network, + # :number_of_additional_network_logos, + # network_exceptions: [:network_logo, exceptions: [:type, :value]], + # plans: permited_plans_keys, + # benefit_descs: benefit_sequence_keys + # ) + # end + + # def benefit_sequence_keys + # (1..14).map { |i| i.to_s.to_sym } + # end + + # def permited_plans_keys + # benefit_sequence_keys.push(:plan_id) + # end + + # def plans_params + # plans_keys = params[:plans]&.keys || [] + + # plans_keys.each_with_object({}) do |key, hash| + # if key == 'benefit_descs' || key.match?(/^plan_\d$/) + # hash[key.to_sym] = permited_plan_param_list + # end + # end + # end + + # def permited_plan_param_list + # (1..14).map { |i| i.to_s.to_sym }.push(:plan_id) + # end end - - def destroy - # @resource = Resource.find(params[:id]) - # @resource.destroy - # redirect_to resources_url, notice: 'Resource was successfully destroyed.' - end - - private - - # def process_logos(employer_setup_process_params) - # @uploaded_logos = [] - # employer_logo = employer_setup_process_params["employer_logo"] - # if employer_logo.present? && employer_logo.is_a?(ActionDispatch::Http::UploadedFile) - # filename = employer_logo.original_filename - # binary_data = employer_logo.read - # meme_type = Marcel::MimeType.for(employer_logo) - - # CardLogoFile.create( - # filename: filename, - # image_data: binary_data, - # content_type: meme_type, - # logo_type: "employer" - # ) - - # @uploaded_logos.push(filename) - # employer_setup_process_params["employer_logo"] = filename - # end - - # network_logos = employer_setup_process_params["alternate_network_logos_attributes"] - # if network_logos.present? - # network_logos.each do |alt| - - # network_logo = alt.last["network_logo"] - # if network_logo.present? && network_logo.is_a?(ActionDispatch::Http::UploadedFile) - # filename = network_logo.original_filename - # binary_data = network_logo.read - # meme_type = Marcel::MimeType.for(network_logo) - - # CardLogoFile.create( - # filename: filename, - # image_data: binary_data, - # content_type: meme_type, - # logo_type: "network" - # ) - - # @uploaded_logos.push(filename) - # end - # alt.last["network_logo"] = @uploaded_logos.last - # end - # end - # employer_setup_process_params - # end - - # def update_logos_with_employer_setup_information() - # @uploaded_logos.each do |logo| - # logo_file = CardLogoFile.find_by(filename: logo) - # if logo_file.present? && @employer.present? - # logo_file.employer_setup_process = @employer - # logo_file.save - # end - # end - - # end - - # def general_information_params - # params.require(:employer_setup_general_information_form).permit( - # :name, - # :employer_logo, - # :group_number, - # :dental, - # :pl_plan_key, - # :effect_date, - # :number_of_plans, - # :network, - # :number_of_additional_network_logos - # ) - # end - - # def plans_params - # params.require(:employer_setup_plans_form).permit( - # plans: permited_plans_keys, - # benefit_descs: benefit_sequence_keys - # ) - # end - - # def network_exceptions_params - # params.require(:employer_setup_network_exceptions_form).permit( - # network_exceptions: [:network_logo, exceptions: [:type, :value]], - # ) - # end - - # def form_for_step - # step_name = @top_form.current_step - # form_method = "EmployerSetup#{step_name.camelize}Form".constantize - # # puts "/////\\\\\\||||||" - # # puts session[:employer_setup_data] - # # puts session[:employer_setup_data]['employer_setup_process_id'] - # puts form_method - # form_method.new(session[:employer_setup_data]['employer_setup_process_id']) - # end - - # def process_step(step_name) - # @form_method = "EmployerSetup#{step_name.camelize}Form".constantize - # session_data_name = "#{step_name}_data" - # # puts "1--------------params----" - # # puts params - # # puts "8--------------session----" - # # puts session[:employer_setup_data] - # employer_setup_process_id = session[:employer_setup_data]['employer_setup_process_id'] - # # puts session[:employer_setup_data] - # puts "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" - # puts params - # @form = @form_method.new(employer_setup_process_id, params) - # if @form.pl_plan_key.blank? - # @form.pl_plan_key = session[:employer_setup_data]['pl_plan_key'] - # end - # if @form.valid? && @form.save - # pl_plan_key = @top_form.pl_plan_key || @form.pl_plan_key - # # session[:employer_setup_data].merge!({current_step: step_name, pl_plan_key: pl_plan_key}) - # # form_fields = @form.attributes.merge!(global_params(step_name)) - # # session[:employer_setup_data][session_data_name] = form_fields - # # session[:employer_setup_data].merge!(global_params(step_name)) - # # puts session[:employer_setup_data][session_data_name] - # true - # else - # false - # end - # end - - # def step_params(step_name) - # form_name_sym = "employer_setup_#{step_name}_form".to_sym - # params.require(form_name_sym).permit(@form_method.permitted_params) - # end - - # def global_params(step_name) - # form_name_sym = "employer_setup_#{step_name}_form".to_sym - # params.require(form_name_sym).permit(EmployerSetupForm.permitted_params) - # end - - # def process_step(step_name) - # form_name = "employer_setup_#{step_name}_form".camelize.constantize - # form_params_name = "#{step_name}_params".to_sym - # allowed_params = [:general_information_params, :plans_params, :network_exceptions_params] - # if allowed_params.include?(form_params_name) - # form_params = send(form_params_name) - # @form = form_name.new(form_params) - # if @form.valid? - # session[:employer_setup_data]["#{step_name}_data"] = form_params - # true - # else - # false - # end - # end - # false - # end - - # def employer_setup_params - # params.require(:employer_setup_form).permit( - # :current_step, - # :name, - # :employer_logo, - # :group_number, - # :pl_plan_key, - # :effect_date, - # :number_of_plans, - # :network, - # :number_of_additional_network_logos, - # network_exceptions: [:network_logo, exceptions: [:type, :value]], - # plans: permited_plans_keys, - # benefit_descs: benefit_sequence_keys - # ) - # end - - # def benefit_sequence_keys - # (1..14).map { |i| i.to_s.to_sym } - # end - - # def permited_plans_keys - # benefit_sequence_keys.push(:plan_id) - # end - - # def plans_params - # plans_keys = params[:plans]&.keys || [] - - # plans_keys.each_with_object({}) do |key, hash| - # if key == 'benefit_descs' || key.match?(/^plan_\d$/) - # hash[key.to_sym] = permited_plan_param_list - # end - # end - # end - - # def permited_plan_param_list - # (1..14).map { |i| i.to_s.to_sym }.push(:plan_id) - # end end diff --git a/app/javascript/controllers/general_form_controller.js b/app/javascript/controllers/general_form_controller.js index ac5b3af..28be673 100644 --- a/app/javascript/controllers/general_form_controller.js +++ b/app/javascript/controllers/general_form_controller.js @@ -1,43 +1,43 @@ -import { Controller } from "@hotwired/stimulus" - -export default class extends Controller { - static targets = ["dependentField"] - - connect() { - } - - toggleFields() { - console.log("--- in toggle --- ") - const selector = this.element.querySelector('[data-action*="change->general-form#toggleFields"]'); - if (selector) { - const selectedValue = selector.value - this.field_match = false; - this.dependentFieldTargets.forEach((field) => { - // Check a data attribute on the field to see if it matches the selected value - if (field.dataset.parentValue === selectedValue) { - if (selectedValue == "network_logo") { - field.parentElement.parentElement.classList.remove("hidden"); - } else { - field.parentElement.classList.remove("hidden"); - } - this.field_match = true; - console.log("- ", selectedValue) - console.log("-- ", this.field_match) - } else { - if (field.dataset.parentValue == "network_logo") { - field.parentElement.parentElement.classList.add("hidden"); - } else { - field.parentElement.classList.add("hidden"); - } - } - }); - if (!this.field_match) { - console.log("--- ", this.field_match) - const defaultOption = this.dependentFieldTargets.find(target => { - return target.dataset.parentValue === 'default'; - }); - defaultOption.parentElement.classList.remove("hidden"); - } - } - } +import { Controller } from "@hotwired/stimulus" + +export default class extends Controller { + static targets = ["dependentField"] + + connect() { + } + + toggleFields() { + console.log("--- in toggle --- ") + const selector = this.element.querySelector('[data-action*="change->general-form#toggleFields"]'); + if (selector) { + const selectedValue = selector.value + this.field_match = false; + this.dependentFieldTargets.forEach((field) => { + // Check a data attribute on the field to see if it matches the selected value + if (field.dataset.parentValue === selectedValue) { + if (selectedValue == "network_logo") { + field.parentElement.parentElement.classList.remove("hidden"); + } else { + field.parentElement.classList.remove("hidden"); + } + this.field_match = true; + console.log("- ", selectedValue) + console.log("-- ", this.field_match) + } else { + if (field.dataset.parentValue == "network_logo") { + field.parentElement.parentElement.classList.add("hidden"); + } else { + field.parentElement.classList.add("hidden"); + } + } + }); + if (!this.field_match) { + console.log("--- ", this.field_match) + const defaultOption = this.dependentFieldTargets.find(target => { + return target.dataset.parentValue === 'default'; + }); + defaultOption.parentElement.classList.remove("hidden"); + } + } + } } \ No newline at end of file diff --git a/app/javascript/controllers/hello_controller.js b/app/javascript/controllers/hello_controller.js index 7571df8..bf3a3db 100644 --- a/app/javascript/controllers/hello_controller.js +++ b/app/javascript/controllers/hello_controller.js @@ -1,16 +1,16 @@ -import { Controller } from "@hotwired/stimulus" - -export default class extends Controller { - static targets = [ "name", "output" ] - - connect() { - // this.element.textContent = "Hello World!" - console.log('Hello World hello_controller.js'); - } - - greet() { - console.log('greet'); - this.outputTarget.textContent = - `Hello, ${this.nameTarget.value}!` - } -} +import { Controller } from "@hotwired/stimulus" + +export default class extends Controller { + static targets = [ "name", "output" ] + + connect() { + // this.element.textContent = "Hello World!" + console.log('Hello World hello_controller.js'); + } + + greet() { + console.log('greet'); + this.outputTarget.textContent = + `Hello, ${this.nameTarget.value}!` + } +} diff --git a/app/javascript/controllers/logo_upload_controller.js b/app/javascript/controllers/logo_upload_controller.js index e6dbae4..10220c7 100644 --- a/app/javascript/controllers/logo_upload_controller.js +++ b/app/javascript/controllers/logo_upload_controller.js @@ -4,12 +4,12 @@ export default class extends Controller { static values = { logoType: String, employerName: String - } - static targets = ["preview", "previewContainer", "logoSelect", "logofield", "initialLogoFile"]; + } + static targets = ["preview", "previewContainer", "logoSelect", "logoField", "initialLogoFile"]; async connect() { console.log('in connect'); - const initValue = this.logofieldTarget.value + const initValue = this.logoFieldTarget.value console.log(initValue) if (initValue) { const response = await fetch(`/id_card/${this.logoTypeValue}_logos/${initValue}/image`); // Fetch the binary data @@ -25,41 +25,49 @@ export default class extends Controller { uploadLogo(event) { console.log('in uploadLogo'); event.preventDefault() - const file = event.target.files[0]; - if (!file) return; + let logoFile = event.target.files[0]; + if (!logoFile) return; const logoType = this.logoTypeValue - let newFileName = file.name + let newFileName = logoFile.name if (logoType == "network") { console.log("n " + newFileName); - newFileName = this.determineNetworkFilename(file) + newFileName = this.determineNetworkFilename(logoFile) this.addOptionToSelect(newFileName) + logoFile = new File([logoFile], newFileName) } else if (logoType == "employer") { - newFileName = this.determineEmployerFilename(file) - file.name = newFileName + newFileName = this.determineEmployerFilename(logoFile) + logoFile = new File([logoFile], newFileName) } - - this.previewFile(file); - this.uploadLogoToServer(file); - - this.logofieldTarget.value = newFileName; + + this.uploadLogoToServer(logoFile) + .then((result) => { + console.log(result); + const logoId = result.id + this.previewFile(logoFile); + this.logoFieldTarget.value = logoId; + }) + .catch((error) => { + // Handle any errors that occurred + console.error(error); + }); } - previewFile(file) { + previewFile(logoFile) { console.log('in previewFile'); const reader = new FileReader(); reader.onload = (e) => { this.previewTarget.src = e.target.result; this.previewContainerTarget.classList.remove("hidden"); }; - reader.readAsDataURL(file); + reader.readAsDataURL(logoFile); } - async uploadLogoToServer(file) { + async uploadLogoToServer(logoFile) { console.log('in uploadLogoToServer'); const formData = new FormData(); - formData.append(`id_card_${this.logoTypeValue}_logo[logo_file]`, file); + formData.append(`id_card_${this.logoTypeValue}_logo[logo_file]`, logoFile); const csrfToken = document.querySelector("meta[name='csrf-token']").content; @@ -74,11 +82,14 @@ export default class extends Controller { if (response.ok) { console.log('Upload successful!') + const data = await response.json(); + return data; } else { - console.error("Failed to track event."); + throw new Error(`HTTP error! status: ${response.status}`); } } catch (error) { console.error("Network error:", error); + throw new Error("Network error:", error); } } @@ -86,17 +97,17 @@ export default class extends Controller { const blankOptionIndex = 0; const newOption = new Option(name, name, true, true) - if (this.logofieldTarget.options.length > blankOptionIndex + 1) { - this.logofieldTarget.insertBefore(newOption, this.logofieldTarget.options[blankOptionIndex + 1]); + if (this.logoFieldTarget.options.length > blankOptionIndex + 1) { + this.logoFieldTarget.insertBefore(newOption, this.logoFieldTarget.options[blankOptionIndex + 1]); } else { - this.logofieldTarget.appendChild(newOption); + this.logoFieldTarget.appendChild(newOption); } - this.logofieldTarget.value = name; + this.logoFieldTarget.value = name; } - determineNetworkFilename(file) { - const fileExtension = file.name.split('.').pop(); + determineNetworkFilename(logoFile) { + const fileExtension = logoFile.name.split('.').pop(); const primaryNetworkName = prompt("Enter the name for the primary network (Usually 'Cigna' or 'MedCost':"); const secondaryNetworkName = prompt("Enter the name for the primary network (ex: Health Partners):"); const logoFilename = this.titleizeText(primaryNetworkName).concat(this.titleizeText(secondaryNetworkName)).concat("Logo.").concat(fileExtension).replaceAll(' ', ''); @@ -104,8 +115,8 @@ export default class extends Controller { return logoFilename } - determineEmployerFilename(file) { - const fileExtension = file.name.split('.').pop(); + determineEmployerFilename(logoFile) { + const fileExtension = logoFile.name.split('.').pop(); const employerName = this.employerNameValue const logoFilename = this.titleizeText(employerName).concat("Logo.").concat(fileExtension).replaceAll(' ', ''); @@ -120,3 +131,4 @@ export default class extends Controller { }); } } + diff --git a/app/models/employer.rb b/app/models/employer.rb index dd106a3..31f3eda 100644 --- a/app/models/employer.rb +++ b/app/models/employer.rb @@ -1,6 +1,6 @@ class Employer < ApplicationRecord has_many :members - has_one :id_card_setup, class_name: 'IdCard::Setup' + has_one :id_card_setup, class_name: 'IdCard::Setup', dependent: :destroy scope :active, -> { where(active: true) } scope :inactive, -> { where(active: false) } diff --git a/app/models/id_card/employer_logo.rb b/app/models/id_card/employer_logo.rb index 2a250c5..586d2c1 100644 --- a/app/models/id_card/employer_logo.rb +++ b/app/models/id_card/employer_logo.rb @@ -1,14 +1,16 @@ -class IdCard::EmployerLogo < ApplicationRecord - before_save :calculate_aspect_ratio, if: :image_data_changed? +module IdCard + class EmployerLogo < ApplicationRecord + before_save :calculate_aspect_ratio, if: :image_data_changed? - private + private - def calculate_aspect_ratio - image_io = StringIO.new(self.image_data) - width, height = FastImage.size(image_io) - image_ratio = width.to_f / height - if image_ratio - self.aspect_ratio = image_ratio.round(2) + def calculate_aspect_ratio + image_io = StringIO.new(self.image_data) + width, height = FastImage.size(image_io) + image_ratio = width.to_f / height + if image_ratio + self.aspect_ratio = image_ratio.round(2) + end end end end diff --git a/app/models/id_card/exception.rb b/app/models/id_card/exception.rb index 907b751..cfa76d0 100644 --- a/app/models/id_card/exception.rb +++ b/app/models/id_card/exception.rb @@ -1,10 +1,12 @@ -class IdCard::Exception < ApplicationRecord - belongs_to :id_card_setup - has_many :id_card_exception_items - accepts_nested_attributes_for :id_card_exception_items, allow_destroy: true, reject_if: :all_blank +module IdCard + class Exception < ApplicationRecord + belongs_to :setup + has_many :exception_items + accepts_nested_attributes_for :exception_items, allow_destroy: true, reject_if: :all_blank - VALID_TYPES = ['zipcode', 'state', 'family_id'] + VALID_TYPES = ['zipcode', 'state', 'family_id'] - validates :type, inclusion: { in: VALID_TYPES, - message: "%{value} is not a valid exception type" } + validates :type, inclusion: { in: VALID_TYPES, + message: "%{value} is not a valid exception type" } + end end diff --git a/app/models/id_card/exception_item.rb b/app/models/id_card/exception_item.rb index 3729e33..769ba46 100644 --- a/app/models/id_card/exception_item.rb +++ b/app/models/id_card/exception_item.rb @@ -1,25 +1,27 @@ -class IdCard::ExceptionItem < ApplicationRecord - belongs_to :id_card_exception - belongs_to :id_card_network_logo, optional: true - belongs_to :id_card_provider_section, optional: true +module IdCard + class ExceptionItem < ApplicationRecord + belongs_to :exception + belongs_to :network_logo, optional: true + belongs_to :provider_section, optional: true - validate :only_one_exception_field_present + validate :only_one_exception_field_present - FIELDS_TO_VALIDATE = [:field_value, :card_logo_file_id, :card_provider_id].freeze + FIELDS_TO_VALIDATE = [:field_value, :card_logo_file_id, :card_provider_id].freeze - VALID_FIELD_NAMES = ['network_logo', 'provider_section', 'effective_date'] + VALID_FIELD_NAMES = ['network_logo', 'provider_section', 'effective_date'] - validates :field_name, inclusion: { in: VALID_FIELD_NAMES, - message: "%{value} is not a valid Id Card Field Name" } + validates :field_name, inclusion: { in: VALID_FIELD_NAMES, + message: "%{value} is not a valid Id Card Field Name" } - private + private - def only_one_exception_field_present - present_fields = FIELDS_TO_VALIDATE.count { |field| self[field].present? } + def only_one_exception_field_present + present_fields = FIELDS_TO_VALIDATE.count { |field| self[field].present? } - if present_fields != 1 - errors.add(:base, "Only one exception field can be present at a time") + if present_fields != 1 + errors.add(:base, "Only one exception field can be present at a time") + end end end end diff --git a/app/models/id_card/network_logo.rb b/app/models/id_card/network_logo.rb index 1200e3a..be4c67c 100644 --- a/app/models/id_card/network_logo.rb +++ b/app/models/id_card/network_logo.rb @@ -1,11 +1,13 @@ -class IdCard::NetworkLogo < ApplicationRecord - before_save :round_aspect_ratio +module IdCard + class NetworkLogo < ApplicationRecord + before_save :round_aspect_ratio - private + private - def round_aspect_ratio - if self.aspect_ratio.present? - self.aspect_ratio = self.aspect_ratio.round(2) + def round_aspect_ratio + if self.aspect_ratio.present? + self.aspect_ratio = self.aspect_ratio.round(2) + end end end end diff --git a/app/models/id_card/plan.rb b/app/models/id_card/plan.rb index d899b34..fea15b3 100644 --- a/app/models/id_card/plan.rb +++ b/app/models/id_card/plan.rb @@ -1,33 +1,35 @@ -class IdCard::Plan < ApplicationRecord - belongs_to :id_card_setup - has_many :id_card_plan_benefits, dependent: :destroy - accepts_nested_attributes_for :id_card_plan_benefits, allow_destroy: true, reject_if: :all_blank +module IdCard + class Plan < ApplicationRecord + belongs_to :setup + has_many :plan_benefits, dependent: :destroy + accepts_nested_attributes_for :plan_benefits, allow_destroy: true, reject_if: :all_blank - # after_initialize :create_default_benefits, if: :new_record? + # after_initialize :create_default_benefits, if: :new_record? - def self.permitted_params(params) - params.require(:id_card_plan).permit( - :title, - :pb_product_key, - :pl_plan_key, - :_destroy, - id_card_plan_benefits_attributes: [ - :id, - :benefit_desc, - :benefit, - :sequence, + def self.permitted_params(params) + params.require(:id_card_plan).permit( + :title, + :pb_product_key, + :pl_plan_key, :_destroy, - ] - ) - end + id_card_plan_benefits_attributes: [ + :id, + :benefit_desc, + :benefit, + :sequence, + :_destroy, + ] + ) + end - private + private - def build_and_create_default_benefits - benefits = IdCardBenefitsTemplate.find_by(title: "BLANK").id_card_benefits.sort_by(&:sequence) - benefits.each do |ben| - id_card_plan_benefits.new(benefit_desc: ben.benefit_desc, sequence: ben.sequence) + def build_and_create_default_benefits + benefits = IdCardBenefitsTemplate.find_by(title: "BLANK").id_card_benefits.sort_by(&:sequence) + benefits.each do |ben| + id_card_plan_benefits.new(benefit_desc: ben.benefit_desc, sequence: ben.sequence) + end end end end \ No newline at end of file diff --git a/app/models/id_card/plan_benefit.rb b/app/models/id_card/plan_benefit.rb index 26b140a..1846981 100644 --- a/app/models/id_card/plan_benefit.rb +++ b/app/models/id_card/plan_benefit.rb @@ -1,3 +1,5 @@ -class IdCard::PlanBenefit < ApplicationRecord - belongs_to :id_card_plan -end +module IdCard + class PlanBenefit < ApplicationRecord + belongs_to :plan + end +end \ No newline at end of file diff --git a/app/models/id_card/print_data.rb b/app/models/id_card/print_data.rb index 8ef2659..c9c509c 100644 --- a/app/models/id_card/print_data.rb +++ b/app/models/id_card/print_data.rb @@ -1,14 +1,15 @@ -class IdCard::PrintData < ApplicationRecord +module IdCard + class PrintData < ApplicationRecord - STRING_ATTRIBUTES = %w[provider_line_1 provider_line_2 provider_line_3 provider_line_4 provider_line_5 provider_line_6 provider_line_7 provider_line_8 provider_line_9 provider_line_10 provider_line_11 claim_to_1 claim_to_2 claim_to_3 claim_to_4 claim_to_5 claim_to_6 claim_to_7 claim_to_8 claim_to_9 claim_to_10 claim_to_11 dependent_1 dependent_2 dependent_3 dependent_4 dependent_5 dependent_6 dependent_7 dependent_8] + STRING_ATTRIBUTES = %w[provider_line_1 provider_line_2 provider_line_3 provider_line_4 provider_line_5 provider_line_6 provider_line_7 provider_line_8 provider_line_9 provider_line_10 provider_line_11 claim_to_1 claim_to_2 claim_to_3 claim_to_4 claim_to_5 claim_to_6 claim_to_7 claim_to_8 claim_to_9 claim_to_10 claim_to_11 dependent_1 dependent_2 dependent_3 dependent_4 dependent_5 dependent_6 dependent_7 dependent_8] - before_validation :assign_blank_strings_to_unassigned_params + before_validation :assign_blank_strings_to_unassigned_params - def assign_blank_strings_to_unassigned_params - STRING_ATTRIBUTES.each do |attr| - # Use the blank? method which checks for nil, false, empty, or whitespace strings - self[attr] = "" if self[attr].blank? + def assign_blank_strings_to_unassigned_params + STRING_ATTRIBUTES.each do |attr| + # Use the blank? method which checks for nil, false, empty, or whitespace strings + self[attr] = "" if self[attr].blank? + end end end - end \ No newline at end of file diff --git a/app/models/id_card/provider_section.rb b/app/models/id_card/provider_section.rb index fef5856..21ebc7d 100644 --- a/app/models/id_card/provider_section.rb +++ b/app/models/id_card/provider_section.rb @@ -1,3 +1,5 @@ -class IdCard::ProviderSection < ApplicationRecord +module IdCard + class ProviderSection < ApplicationRecord -end + end +end \ No newline at end of file diff --git a/app/models/id_card/rx_section.rb b/app/models/id_card/rx_section.rb index 12c751c..deefd43 100644 --- a/app/models/id_card/rx_section.rb +++ b/app/models/id_card/rx_section.rb @@ -1,3 +1,5 @@ -class IdCard::RxSection < ApplicationRecord +module IdCard + class RxSection < ApplicationRecord -end + end +end \ No newline at end of file diff --git a/app/models/id_card/setup.rb b/app/models/id_card/setup.rb index 14f33af..fdf76dc 100644 --- a/app/models/id_card/setup.rb +++ b/app/models/id_card/setup.rb @@ -1,27 +1,31 @@ -class IdCard::Setup < ApplicationRecord - belongs_to :employer - belongs_to :id_card_employer_logo - belongs_to :id_card_network_logo - belongs_to :id_card_provider_section - belongs_to :id_card_rx_section +module IdCard + class Setup < ApplicationRecord + belongs_to :employer, class_name: 'Employer' + belongs_to :employer_logo, optional: true + belongs_to :network_logo, optional: true + belongs_to :provider_section, optional: true + belongs_to :rx_section, optional: true - has_many :card_exceptions, dependent: :destroy + has_many :plans, dependent: :destroy - # def employer_logo_filename - # self.id_card_employer_logo.filename - # end + has_many :exceptions, dependent: :destroy - # def network_logo_filename - # self.id_card_network_logo.filename - # end + # def employer_logo_filename + # self.employer_logo.filename + # end - def self.permitted_params(params) - params.require(:id_card_setup).permit( - :print_name, - :network_provider, - :card_template, - :rx_group_number, - :id_card_employer_logo_id - ) + # def network_logo_filename + # self.network_logo.filename + # end + + def self.permitted_params(params) + params.require(:id_card_setup).permit( + :print_name, + :network_provider, + :card_template, + :rx_group_number, + :id_card_employer_logo_id + ) + end end end diff --git a/app/queries/call_stored_proc.rb b/app/queries/call_stored_proc.rb index 5a8bb49..925c932 100644 --- a/app/queries/call_stored_proc.rb +++ b/app/queries/call_stored_proc.rb @@ -1,14 +1,14 @@ -class CallStoredProc - def initialize(procedure_name, args = {}) - @procedure_name = procedure_name - @args = args - end - - def call - params_sql = @args.map { |key, value| "@#{key} = :#{key}" }.join(', ') - sql_template = "EXEC #{@procedure_name} #{params_sql}" - sanitized_sql = VhcsRecord.send(:sanitize_sql_array, [sql_template, @args]) - - VhcsRecord.connection.exec_query(sanitized_sql) - end -end +class CallStoredProc + def initialize(procedure_name, args = {}) + @procedure_name = procedure_name + @args = args + end + + def call + params_sql = @args.map { |key, value| "@#{key} = :#{key}" }.join(', ') + sql_template = "EXEC #{@procedure_name} #{params_sql}" + sanitized_sql = VhcsRecord.send(:sanitize_sql_array, [sql_template, @args]) + + VhcsRecord.connection.exec_query(sanitized_sql) + end +end diff --git a/app/services/benefits_word_doc/map_plans_information.rb b/app/services/benefits_word_doc/map_plans_information.rb index 87534ea..3f9abc7 100644 --- a/app/services/benefits_word_doc/map_plans_information.rb +++ b/app/services/benefits_word_doc/map_plans_information.rb @@ -15,13 +15,17 @@ module BenefitsWordDoc plan_lines = @word_doc_section.slice(plan_index + 1, 14) plan_lines.each_with_index do |line, i| field_mapping = mapping_array[i] - field_regex = field_mapping[:doc_to_employer_regex] - if line.match(field_regex) - field_value = line.match(field_regex)[0].strip - elsif line.match(default_benefit_regex(field_mapping[:employer_benefit_desc_field])) - field_value = line.match(default_benefit_regex(field_mapping[:employer_benefit_desc_field]))[0].strip + if line.match(/:.*/) + field_value = line.match(/:.*/)[0].strip else - field_value = line + field_regex = field_mapping[:doc_to_employer_regex] + if line.match(field_regex) + field_value = line.match(field_regex)[0].strip + elsif line.match(default_benefit_regex(field_mapping[:employer_benefit_desc_field])) + field_value = line.match(default_benefit_regex(field_mapping[:employer_benefit_desc_field]))[0].strip + else + field_value = line + end end employer_benefit_desc_field = field_mapping[:employer_benefit_desc_field] new_benefit = new_plan.plan_benefits[i] diff --git a/app/services/image_processor.rb b/app/services/image_processor.rb index a14a61f..2eff15f 100644 --- a/app/services/image_processor.rb +++ b/app/services/image_processor.rb @@ -21,7 +21,7 @@ class ImageProcessor filename: filename, image_data: binary_data, content_type: meme_type, - logo_type: "network" + logo_type: "employer" ) end end \ No newline at end of file diff --git a/app/services/sample_card/data_formatter.rb b/app/services/sample_card/data_formatter.rb index 439d449..b16754f 100644 --- a/app/services/sample_card/data_formatter.rb +++ b/app/services/sample_card/data_formatter.rb @@ -23,7 +23,7 @@ module SampleCard def set_employer_fields selected_attributes = { employer_name: @employer.name, - group_number: @employer.group_number || "999999", + group_number: @employer.group_number.present? ? @employer.group_number : "999999", medical_eff_date: @employer.effective_date } @@ -49,7 +49,7 @@ module SampleCard selected_attributes = { full_name: "JANE DOE", primary_mb_member_key: "888888", - rx_group: @employer.group_number || "999999" + rx_group: @employer.group_number.present? ? @employer.group_number : "999999" } @sample_card.assign_attributes(selected_attributes) diff --git a/app/views/employers_old/_alt_network_logo_fields.html.erb b/app/views/employers_old/_alt_network_logo_fields.html.erb index 3246b9c..41f0d76 100644 --- a/app/views/employers_old/_alt_network_logo_fields.html.erb +++ b/app/views/employers_old/_alt_network_logo_fields.html.erb @@ -1,32 +1,32 @@ -
-
-
-
- <%= f.select :network_logo, options_for_select(CardLogoFile.where(logo_type: 'network').pluck(:filename).map { |fn| [fn, fn]}), { include_blank: "Select or Add Network Logo", class: "rounded-r-none" }, { data: { logo_upload_target: "logoSelect" }} %> -
-
- -
- -
-
- <%= network_fields.file_field :network_logo_file, class: "hidden", id: "file_upload_input_NEW_RECORD", data: { add_alt_network_logo_target: "networkLogo", logo_upload_type_param: "network", action: "change->logo-upload#uploadLogo" }, direct_upload: true %> -
-
-
- <%= network_fields.select :exception_type, options_for_select(["Zip","State"]), label: { text: "Exception Type" }, prompt: "Select Type", class: "w-full" %> -
-
- <%= network_fields.text_field :exception_value, label: { text: "Exception Value" }, class: "w-full" %> -
-
-
-
- <%= network_fields.hidden_field :_destroy %> - <%= button_tag "Remove", class: "cursor-pointer bg-deepcove hover:bg-brightlava text-xl font-bold text-NEXT_SECONDARY_COLOR hover:text-platinum py-1 px-2 font-semibold leading-tight rounded-lg border-3 border-NEXT_SECONDARY_COLOR w-full", data: { action: "add-alt-network-logo#remove" } %> -
+
+
+
+
+ <%= f.select :network_logo, options_for_select(CardLogoFile.where(logo_type: 'network').pluck(:filename).map { |fn| [fn, fn]}), { include_blank: "Select or Add Network Logo", class: "rounded-r-none" }, { data: { logo_upload_target: "logoSelect" }} %> +
+
+ +
+ +
+
+ <%= network_fields.file_field :network_logo_file, class: "hidden", id: "file_upload_input_NEW_RECORD", data: { add_alt_network_logo_target: "networkLogo", logo_upload_type_param: "network", action: "change->logo-upload#uploadLogo" }, direct_upload: true %> +
+
+
+ <%= network_fields.select :exception_type, options_for_select(["Zip","State"]), label: { text: "Exception Type" }, prompt: "Select Type", class: "w-full" %> +
+
+ <%= network_fields.text_field :exception_value, label: { text: "Exception Value" }, class: "w-full" %> +
+
+
+
+ <%= network_fields.hidden_field :_destroy %> + <%= button_tag "Remove", class: "cursor-pointer bg-deepcove hover:bg-brightlava text-xl font-bold text-NEXT_SECONDARY_COLOR hover:text-platinum py-1 px-2 font-semibold leading-tight rounded-lg border-3 border-NEXT_SECONDARY_COLOR w-full", data: { action: "add-alt-network-logo#remove" } %> +
\ No newline at end of file diff --git a/app/views/id_cards/setup/edit.html.erb b/app/views/id_card/setup/edit.html.erb similarity index 100% rename from app/views/id_cards/setup/edit.html.erb rename to app/views/id_card/setup/edit.html.erb diff --git a/app/views/id_cards/setup/new.html.erb b/app/views/id_card/setup/new.html.erb similarity index 78% rename from app/views/id_cards/setup/new.html.erb rename to app/views/id_card/setup/new.html.erb index 521f989..71fad9a 100644 --- a/app/views/id_cards/setup/new.html.erb +++ b/app/views/id_card/setup/new.html.erb @@ -1,9 +1,10 @@
-
+

New ID Card Setup:

(<%= @employer.name %>)

<%= form_with model: @setup, local: true, multipart: true do |f| %> + <%= form_with model: @employer, url: import_employers_path, data: { turbo: false }, local: true, multipart: true do |form| %>
>
@@ -25,7 +26,7 @@
-
Employer Logo
+
Employer Logo
- <%= f.submit "Create New Employer" %> + <%= f.submit "Create ID Card Setup" %>
<% end %> diff --git a/compose.yaml b/compose.yaml index 5d5e73e..eae5076 100644 --- a/compose.yaml +++ b/compose.yaml @@ -15,6 +15,8 @@ services: - HISTFILE=/usr/src/app/log/.bash_history - RAILS_ENV=development - TAILWIND_POLLING=true + - PUID=1000 + - PGID=100 tty: true stdin_open: true depends_on: diff --git a/db/migrate/20251204041154_create_id_card_setups.rb b/db/migrate/20251204041154_create_id_card_setups.rb index adcca2a..3683d5f 100644 --- a/db/migrate/20251204041154_create_id_card_setups.rb +++ b/db/migrate/20251204041154_create_id_card_setups.rb @@ -7,10 +7,10 @@ class CreateIdCardSetups < ActiveRecord::Migration[7.2] t.string :rx_group_number t.boolean :active, default: false t.belongs_to :employer, null: false, foreign_key: true - t.belongs_to :id_card_employer_logo, null: true, foreign_key: true - t.belongs_to :id_card_network_logo, null: true, foreign_key: true - t.belongs_to :id_card_provider_section, null: false, foreign_key: true - t.belongs_to :id_card_rx_section, null: false, foreign_key: true + t.belongs_to :employer_logo, null: true, foreign_key: { to_table: :id_card_employer_logos } + t.belongs_to :network_logo, null: true, foreign_key: { to_table: :id_card_network_logos } + t.belongs_to :provider_section, null: true, foreign_key: { to_table: :id_card_provider_sections } + t.belongs_to :rx_section, null: true, foreign_key: { to_table: :id_card_rx_sections } t.timestamps end diff --git a/db/migrate/20251204142443_create_id_card_plans.rb b/db/migrate/20251204142443_create_id_card_plans.rb index 209d452..79d10c1 100644 --- a/db/migrate/20251204142443_create_id_card_plans.rb +++ b/db/migrate/20251204142443_create_id_card_plans.rb @@ -4,7 +4,8 @@ class CreateIdCardPlans < ActiveRecord::Migration[7.2] t.string :title t.integer :pb_product_key t.string :pl_plan_key - t.belongs_to :id_card_setup, null: true, foreign_key: true + t.boolean :template + t.belongs_to :setup, null: true, foreign_key: { to_table: :id_card_setups } t.timestamps end diff --git a/db/migrate/20251204142512_create_id_card_plan_benefits.rb b/db/migrate/20251204142512_create_id_card_plan_benefits.rb index 418d47d..c0cdcdc 100644 --- a/db/migrate/20251204142512_create_id_card_plan_benefits.rb +++ b/db/migrate/20251204142512_create_id_card_plan_benefits.rb @@ -4,7 +4,7 @@ class CreateIdCardPlanBenefits < ActiveRecord::Migration[7.2] t.string :benefit_desc t.string :benefit t.integer :sequence - t.belongs_to :id_card_plan, null: false, foreign_key: true + t.belongs_to :plan, null: false, foreign_key: { to_table: :id_card_plans } t.timestamps end diff --git a/db/migrate/20260116181849_create_id_card_exceptions.rb b/db/migrate/20260116181849_create_id_card_exceptions.rb index 0f508f9..98d7540 100644 --- a/db/migrate/20260116181849_create_id_card_exceptions.rb +++ b/db/migrate/20260116181849_create_id_card_exceptions.rb @@ -3,7 +3,7 @@ class CreateIdCardExceptions < ActiveRecord::Migration[7.2] create_table :id_card_exceptions do |t| t.string :type t.string :value - t.belongs_to :id_card_setup, null: false, foreign_key: true + t.belongs_to :setup, null: false, foreign_key: { to_table: :id_card_setups } t.timestamps end diff --git a/db/migrate/20260116182836_create_id_card_exception_items.rb b/db/migrate/20260116182836_create_id_card_exception_items.rb index 39e233e..ed71b2c 100644 --- a/db/migrate/20260116182836_create_id_card_exception_items.rb +++ b/db/migrate/20260116182836_create_id_card_exception_items.rb @@ -3,9 +3,9 @@ class CreateIdCardExceptionItems < ActiveRecord::Migration[7.2] create_table :id_card_exception_items do |t| t.string :field_name t.string :field_value - t.belongs_to :id_card_exception, null: false, foreign_key: true - t.belongs_to :id_card_network_logo, null: true, foreign_key: true - t.belongs_to :id_card_provider_section, null: true, foreign_key: true + t.belongs_to :exception, null: false, foreign_key: { to_table: :id_card_exceptions } + t.belongs_to :network_logo, null: true, foreign_key: { to_table: :id_card_network_logos } + t.belongs_to :provider_section, null: true, foreign_key: { to_table: :id_card_provider_sections } t.timestamps end diff --git a/db/schema.rb b/db/schema.rb index 0d7dea3..b9ba7d8 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -37,23 +37,23 @@ ActiveRecord::Schema[7.2].define(version: 2026_01_16_182836) do create_table "id_card_exception_items", force: :cascade do |t| t.string "field_name" t.string "field_value" - t.bigint "id_card_exception_id", null: false - t.bigint "id_card_network_logo_id" - t.bigint "id_card_provider_section_id" + t.bigint "exception_id", null: false + t.bigint "network_logo_id" + t.bigint "provider_section_id" t.datetime "created_at", null: false t.datetime "updated_at", null: false - t.index ["id_card_exception_id"], name: "index_id_card_exception_items_on_id_card_exception_id" - t.index ["id_card_network_logo_id"], name: "index_id_card_exception_items_on_id_card_network_logo_id" - t.index ["id_card_provider_section_id"], name: "index_id_card_exception_items_on_id_card_provider_section_id" + t.index ["exception_id"], name: "index_id_card_exception_items_on_exception_id" + t.index ["network_logo_id"], name: "index_id_card_exception_items_on_network_logo_id" + t.index ["provider_section_id"], name: "index_id_card_exception_items_on_provider_section_id" end create_table "id_card_exceptions", force: :cascade do |t| t.string "type" t.string "value" - t.bigint "id_card_setup_id", null: false + t.bigint "setup_id", null: false t.datetime "created_at", null: false t.datetime "updated_at", null: false - t.index ["id_card_setup_id"], name: "index_id_card_exceptions_on_id_card_setup_id" + t.index ["setup_id"], name: "index_id_card_exceptions_on_setup_id" end create_table "id_card_network_logos", force: :cascade do |t| @@ -70,20 +70,21 @@ ActiveRecord::Schema[7.2].define(version: 2026_01_16_182836) do t.string "benefit_desc" t.string "benefit" t.integer "sequence" - t.bigint "id_card_plan_id", null: false + t.bigint "plan_id", null: false t.datetime "created_at", null: false t.datetime "updated_at", null: false - t.index ["id_card_plan_id"], name: "index_id_card_plan_benefits_on_id_card_plan_id" + t.index ["plan_id"], name: "index_id_card_plan_benefits_on_plan_id" end create_table "id_card_plans", force: :cascade do |t| t.string "title" t.integer "pb_product_key" t.string "pl_plan_key" - t.bigint "id_card_setup_id" + t.boolean "template" + t.bigint "setup_id" t.datetime "created_at", null: false t.datetime "updated_at", null: false - t.index ["id_card_setup_id"], name: "index_id_card_plans_on_id_card_setup_id" + t.index ["setup_id"], name: "index_id_card_plans_on_setup_id" end create_table "id_card_print_data", force: :cascade do |t| @@ -226,17 +227,17 @@ ActiveRecord::Schema[7.2].define(version: 2026_01_16_182836) do t.string "rx_group_number" t.boolean "active", default: false t.bigint "employer_id", null: false - t.bigint "id_card_employer_logo_id" - t.bigint "id_card_network_logo_id" - t.bigint "id_card_provider_section_id", null: false - t.bigint "id_card_rx_section_id", null: false + t.bigint "employer_logo_id" + t.bigint "network_logo_id" + t.bigint "provider_section_id" + t.bigint "rx_section_id" t.datetime "created_at", null: false t.datetime "updated_at", null: false t.index ["employer_id"], name: "index_id_card_setups_on_employer_id" - t.index ["id_card_employer_logo_id"], name: "index_id_card_setups_on_id_card_employer_logo_id" - t.index ["id_card_network_logo_id"], name: "index_id_card_setups_on_id_card_network_logo_id" - t.index ["id_card_provider_section_id"], name: "index_id_card_setups_on_id_card_provider_section_id" - t.index ["id_card_rx_section_id"], name: "index_id_card_setups_on_id_card_rx_section_id" + t.index ["employer_logo_id"], name: "index_id_card_setups_on_employer_logo_id" + t.index ["network_logo_id"], name: "index_id_card_setups_on_network_logo_id" + t.index ["provider_section_id"], name: "index_id_card_setups_on_provider_section_id" + t.index ["rx_section_id"], name: "index_id_card_setups_on_rx_section_id" end create_table "members", force: :cascade do |t| @@ -254,17 +255,17 @@ ActiveRecord::Schema[7.2].define(version: 2026_01_16_182836) do t.index ["id_card_plan_id"], name: "index_members_on_id_card_plan_id" end - add_foreign_key "id_card_exception_items", "id_card_exceptions" - add_foreign_key "id_card_exception_items", "id_card_network_logos" - add_foreign_key "id_card_exception_items", "id_card_provider_sections" - add_foreign_key "id_card_exceptions", "id_card_setups" - add_foreign_key "id_card_plan_benefits", "id_card_plans" - add_foreign_key "id_card_plans", "id_card_setups" + add_foreign_key "id_card_exception_items", "id_card_exceptions", column: "exception_id" + add_foreign_key "id_card_exception_items", "id_card_network_logos", column: "network_logo_id" + add_foreign_key "id_card_exception_items", "id_card_provider_sections", column: "provider_section_id" + add_foreign_key "id_card_exceptions", "id_card_setups", column: "setup_id" + add_foreign_key "id_card_plan_benefits", "id_card_plans", column: "plan_id" + add_foreign_key "id_card_plans", "id_card_setups", column: "setup_id" add_foreign_key "id_card_setups", "employers" - add_foreign_key "id_card_setups", "id_card_employer_logos" - add_foreign_key "id_card_setups", "id_card_network_logos" - add_foreign_key "id_card_setups", "id_card_provider_sections" - add_foreign_key "id_card_setups", "id_card_rx_sections" + add_foreign_key "id_card_setups", "id_card_employer_logos", column: "employer_logo_id" + add_foreign_key "id_card_setups", "id_card_network_logos", column: "network_logo_id" + add_foreign_key "id_card_setups", "id_card_provider_sections", column: "provider_section_id" + add_foreign_key "id_card_setups", "id_card_rx_sections", column: "rx_section_id" add_foreign_key "members", "employers" add_foreign_key "members", "id_card_plans" end