Compare commits
10 Commits
1d9025276d
...
5a90ea6e14
| Author | SHA1 | Date | |
|---|---|---|---|
| 5a90ea6e14 | |||
| 5f04811c16 | |||
| 518522b080 | |||
| 826ef02322 | |||
| d25d5c9bba | |||
| 6c3649ad61 | |||
| f35cc99a0f | |||
| 34843e2da7 | |||
| 3bf9594842 | |||
| e0101be567 |
@@ -0,0 +1,2 @@
|
|||||||
|
/app/assets/builds/*
|
||||||
|
/app/assets/svg/*
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
PGHOST=db
|
|
||||||
PGUSER=postgres
|
|
||||||
PGPASSWORD=changeme
|
|
||||||
+9
-1
@@ -79,4 +79,12 @@ yarn-debug.log*
|
|||||||
|
|
||||||
/mssql-data
|
/mssql-data
|
||||||
/logo_files
|
/logo_files
|
||||||
/employer_word_docs
|
/employer_word_docs
|
||||||
|
# Ignore application configuration
|
||||||
|
/config/application.yml
|
||||||
|
|
||||||
|
/scratch.rb
|
||||||
|
/start_rails.bat
|
||||||
|
/web.config
|
||||||
|
|
||||||
|
/db/old
|
||||||
|
|||||||
+55
-44
@@ -1,73 +1,84 @@
|
|||||||
# syntax=docker/dockerfile:1
|
# syntax = docker/dockerfile:1
|
||||||
# check=error=true
|
|
||||||
|
|
||||||
# This Dockerfile is designed for production, not development.
|
# 1. Base Stage: Common dependencies
|
||||||
# docker build -t my-app .
|
ARG RUBY_VERSION=3.4.8
|
||||||
# docker run -d -p 80:80 -p 443:443 --name my-app -e RAILS_MASTER_KEY=<value from config/master.key> my-app
|
FROM ruby:$RUBY_VERSION-slim as base
|
||||||
|
|
||||||
# Make sure RUBY_VERSION matches the Ruby version in .ruby-version and Gemfile
|
|
||||||
ARG RUBY_VERSION=3.3.9
|
|
||||||
FROM docker.io/library/ruby:$RUBY_VERSION-slim AS base
|
|
||||||
|
|
||||||
# Rails app lives here
|
|
||||||
WORKDIR /rails
|
WORKDIR /rails
|
||||||
|
|
||||||
# Install base packages
|
|
||||||
RUN apt-get update -qq && \
|
|
||||||
apt-get install --no-install-recommends -y curl libjemalloc2 libvips postgresql-client && \
|
|
||||||
rm -rf /var/lib/apt/lists /var/cache/apt/archives
|
|
||||||
|
|
||||||
# Set production environment
|
|
||||||
ENV RAILS_ENV="production" \
|
ENV RAILS_ENV="production" \
|
||||||
BUNDLE_DEPLOYMENT="1" \
|
BUNDLE_DEPLOYMENT="1" \
|
||||||
BUNDLE_PATH="/usr/local/bundle" \
|
BUNDLE_PATH="/usr/local/bundle" \
|
||||||
BUNDLE_WITHOUT="development"
|
BUNDLE_WITHOUT="development:test"
|
||||||
|
|
||||||
# Throw-away build stage to reduce size of final image
|
# Install base packages (libvips for Active Storage, curl for healthchecks)
|
||||||
FROM base AS build
|
|
||||||
|
|
||||||
# Install packages needed to build gems
|
|
||||||
RUN apt-get update -qq && \
|
RUN apt-get update -qq && \
|
||||||
apt-get install --no-install-recommends -y build-essential git libpq-dev pkg-config libyaml-dev && \
|
apt-get install --no-install-recommends -y \
|
||||||
|
curl \
|
||||||
|
git \
|
||||||
|
libvips \
|
||||||
|
freetds-bin \
|
||||||
|
freetds-dev \
|
||||||
|
libpq-dev \
|
||||||
|
libyaml-dev \
|
||||||
|
cron \
|
||||||
|
libjemalloc2 \
|
||||||
|
dos2unix && \
|
||||||
rm -rf /var/lib/apt/lists /var/cache/apt/archives
|
rm -rf /var/lib/apt/lists /var/cache/apt/archives
|
||||||
|
|
||||||
|
# 2. Build Stage: Gems and Assets
|
||||||
|
FROM base as build
|
||||||
|
|
||||||
|
# Install packages needed to build gems and precompile assets
|
||||||
|
RUN apt-get update -qq && \
|
||||||
|
apt-get install --no-install-recommends -y build-essential pkg-config less && \
|
||||||
|
# mkdir -p /etc/apt/keyrings && \
|
||||||
|
# curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg && \
|
||||||
|
# echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_20.x nodistro main" > /etc/apt/sources.list.d/nodesource.list && \
|
||||||
|
# apt-get update && \
|
||||||
|
# apt-get install nodejs -y && \
|
||||||
|
rm -rf /var/lib/apt/lists /var/cache/apt/archives
|
||||||
|
|
||||||
|
# RUN apt-get install -y npm
|
||||||
|
# RUN npm install -g yarn
|
||||||
|
|
||||||
# Install application gems
|
# Install application gems
|
||||||
|
RUN bundle config set --local frozen false
|
||||||
COPY Gemfile Gemfile.lock ./
|
COPY Gemfile Gemfile.lock ./
|
||||||
RUN bundle install && \
|
RUN bundle install && \
|
||||||
rm -rf ~/.bundle/ "${BUNDLE_PATH}"/ruby/*/cache "${BUNDLE_PATH}"/ruby/*/bundler/gems/*/.git && \
|
rm -rf ~/.bundle/ "${BUNDLE_PATH}"/ruby/*/cache "${BUNDLE_PATH}"/ruby/*/bundler/gems/*/.git
|
||||||
bundle exec bootsnap precompile --gemfile
|
|
||||||
|
|
||||||
# Copy application code
|
# Copy application code
|
||||||
COPY . .
|
COPY . .
|
||||||
|
|
||||||
# Precompile bootsnap code for faster boot times
|
RUN ./bin/rails stimulus:manifest:update
|
||||||
RUN bundle exec bootsnap precompile app/ lib/
|
RUN ./bin/importmap pin .
|
||||||
|
|
||||||
# Precompiling assets for production without requiring secret RAILS_MASTER_KEY
|
# RUN bundle exec ./bin/rails rails_icons:sync
|
||||||
RUN SECRET_KEY_BASE_DUMMY=1 ./bin/rails assets:precompile
|
RUN ./bin/rails generate rails_icons:sync --libraries=lucide
|
||||||
|
|
||||||
|
# Precompile assets (Tailwind is triggered here via assets:precompile)
|
||||||
|
# SECRET_KEY_BASE_DUMMY allows precompilation without real secrets
|
||||||
|
# RUN bundle exec rails assets:clobber assets:precompile RAILS_ENV=production SECRET_KEY_BASE_DUMMY=1
|
||||||
|
RUN bundle exec rails assets:precompile RAILS_ENV=production SECRET_KEY_BASE_DUMMY=1
|
||||||
|
|
||||||
# Final stage for app image
|
# 3. Final Stage: Lean Runtime
|
||||||
FROM base
|
FROM base
|
||||||
|
|
||||||
# Copy built artifacts: gems, application
|
# Copy built artifacts: gems and precompiled assets
|
||||||
COPY --from=build "${BUNDLE_PATH}" "${BUNDLE_PATH}"
|
# COPY --from=build /rails/public /rails/public
|
||||||
|
# COPY --from=build /rails/app/javascript /rails/app/javascript
|
||||||
|
# COPY --from=build /rails/config/importmap.rb /rails/config/importmap.rb
|
||||||
|
COPY --from=build /usr/local/bundle /usr/local/bundle
|
||||||
COPY --from=build /rails /rails
|
COPY --from=build /rails /rails
|
||||||
|
|
||||||
# Run and own only the runtime files as a non-root user for security
|
# Run as a non-privileged user for security
|
||||||
RUN groupadd --system --gid 1000 rails && \
|
RUN useradd -ms /bin/bash rails
|
||||||
useradd rails --uid 1000 --gid 1000 --create-home --shell /bin/bash && \
|
RUN chown -R rails:rails /rails
|
||||||
chown -R rails:rails db log storage tmp
|
USER rails:rails
|
||||||
USER 1000:1000
|
|
||||||
|
|
||||||
# Entrypoint prepares the database.
|
# Entrypoint prepares the database.
|
||||||
ENTRYPOINT ["/rails/bin/docker-entrypoint"]
|
ENTRYPOINT ["/rails/bin/docker-entrypoint"]
|
||||||
|
|
||||||
HEALTHCHECK --interval=15s --timeout=3s --start-period=0s --start-interval=5s --retries=3 \
|
# Start the server
|
||||||
CMD curl -f http://localhost:3000/up || exit 1
|
EXPOSE 3002
|
||||||
# Start the server by default, this can be overwritten at runtime
|
|
||||||
EXPOSE 3000
|
|
||||||
|
|
||||||
# The default Rails Dockerfile uses `./bin/rails server`, but when using Puma,
|
|
||||||
# they recommend using bundle exec puma. ref: https://github.com/puma/puma#rails
|
|
||||||
CMD ["bundle", "exec", "puma", "-C", "config/puma.rb"]
|
CMD ["bundle", "exec", "puma", "-C", "config/puma.rb"]
|
||||||
|
|||||||
@@ -89,7 +89,11 @@ gem 'pdf-reader'
|
|||||||
gem 'rails_icons'
|
gem 'rails_icons'
|
||||||
gem 'fastimage'
|
gem 'fastimage'
|
||||||
gem 'rubyzip', require: 'zip'
|
gem 'rubyzip', require: 'zip'
|
||||||
gem "solid_queue"
|
# gem "solid_queue"
|
||||||
|
gem 'delayed_job_active_record'
|
||||||
|
gem 'daemons'
|
||||||
gem 'image_processing'
|
gem 'image_processing'
|
||||||
|
gem "ruby-vips"
|
||||||
gem 'whenever', require: false
|
gem 'whenever', require: false
|
||||||
gem 'amatch'
|
gem 'amatch'
|
||||||
|
gem 'figaro'
|
||||||
+37
-37
@@ -78,7 +78,7 @@ GEM
|
|||||||
minitest (>= 5.1)
|
minitest (>= 5.1)
|
||||||
securerandom (>= 0.3)
|
securerandom (>= 0.3)
|
||||||
tzinfo (~> 2.0, >= 2.0.5)
|
tzinfo (~> 2.0, >= 2.0.5)
|
||||||
addressable (2.8.9)
|
addressable (2.9.0)
|
||||||
public_suffix (>= 2.0.2, < 8.0)
|
public_suffix (>= 2.0.2, < 8.0)
|
||||||
afm (1.0.0)
|
afm (1.0.0)
|
||||||
amatch (0.6.0)
|
amatch (0.6.0)
|
||||||
@@ -88,9 +88,9 @@ GEM
|
|||||||
base64 (0.3.0)
|
base64 (0.3.0)
|
||||||
bcrypt (3.1.22)
|
bcrypt (3.1.22)
|
||||||
benchmark (0.5.0)
|
benchmark (0.5.0)
|
||||||
bigdecimal (4.0.1)
|
bigdecimal (4.1.2)
|
||||||
bindex (0.8.1)
|
bindex (0.8.1)
|
||||||
bootsnap (1.23.0)
|
bootsnap (1.24.3)
|
||||||
msgpack (~> 1.2)
|
msgpack (~> 1.2)
|
||||||
brakeman (8.0.4)
|
brakeman (8.0.4)
|
||||||
racc
|
racc
|
||||||
@@ -117,7 +117,15 @@ GEM
|
|||||||
connection_pool (3.0.2)
|
connection_pool (3.0.2)
|
||||||
crass (1.0.6)
|
crass (1.0.6)
|
||||||
csv (3.3.5)
|
csv (3.3.5)
|
||||||
|
daemons (1.4.1)
|
||||||
date (3.5.1)
|
date (3.5.1)
|
||||||
|
delayed_job (4.2.0)
|
||||||
|
activesupport (>= 3.0, < 9.0)
|
||||||
|
benchmark
|
||||||
|
logger
|
||||||
|
delayed_job_active_record (4.1.11)
|
||||||
|
activerecord (>= 3.0, < 9.0)
|
||||||
|
delayed_job (>= 3.0, < 5)
|
||||||
devise (5.0.3)
|
devise (5.0.3)
|
||||||
bcrypt (~> 3.0)
|
bcrypt (~> 3.0)
|
||||||
orm_adapter (~> 0.1)
|
orm_adapter (~> 0.1)
|
||||||
@@ -129,15 +137,12 @@ GEM
|
|||||||
nokogiri (~> 1.13, >= 1.13.0)
|
nokogiri (~> 1.13, >= 1.13.0)
|
||||||
rubyzip (>= 2.0, < 4)
|
rubyzip (>= 2.0, < 4)
|
||||||
drb (2.2.3)
|
drb (2.2.3)
|
||||||
erb (6.0.2)
|
erb (6.0.4)
|
||||||
erubi (1.13.1)
|
erubi (1.13.1)
|
||||||
et-orbi (1.4.0)
|
|
||||||
tzinfo
|
|
||||||
fastimage (2.4.1)
|
fastimage (2.4.1)
|
||||||
ffi (1.17.4-x86_64-linux-gnu)
|
ffi (1.17.4-x86_64-linux-gnu)
|
||||||
fugit (1.12.1)
|
figaro (1.3.0)
|
||||||
et-orbi (~> 1.4)
|
thor (>= 0.14.0, < 2)
|
||||||
raabro (~> 1.4)
|
|
||||||
globalid (1.3.0)
|
globalid (1.3.0)
|
||||||
activesupport (>= 6.1)
|
activesupport (>= 6.1)
|
||||||
hashery (2.1.2)
|
hashery (2.1.2)
|
||||||
@@ -157,7 +162,7 @@ GEM
|
|||||||
activesupport (>= 6.0.0)
|
activesupport (>= 6.0.0)
|
||||||
railties (>= 6.0.0)
|
railties (>= 6.0.0)
|
||||||
io-console (0.8.2)
|
io-console (0.8.2)
|
||||||
irb (1.17.0)
|
irb (1.18.0)
|
||||||
pp (>= 0.6.0)
|
pp (>= 0.6.0)
|
||||||
prism (>= 1.3.0)
|
prism (>= 1.3.0)
|
||||||
rdoc (>= 4.0.0)
|
rdoc (>= 4.0.0)
|
||||||
@@ -165,7 +170,7 @@ GEM
|
|||||||
jbuilder (2.14.1)
|
jbuilder (2.14.1)
|
||||||
actionview (>= 7.0.0)
|
actionview (>= 7.0.0)
|
||||||
activesupport (>= 7.0.0)
|
activesupport (>= 7.0.0)
|
||||||
json (2.19.2)
|
json (2.19.5)
|
||||||
language_server-protocol (3.17.0.5)
|
language_server-protocol (3.17.0.5)
|
||||||
lint_roller (1.1.0)
|
lint_roller (1.1.0)
|
||||||
logger (1.7.0)
|
logger (1.7.0)
|
||||||
@@ -184,14 +189,14 @@ GEM
|
|||||||
mini_magick (5.3.1)
|
mini_magick (5.3.1)
|
||||||
logger
|
logger
|
||||||
mini_mime (1.1.5)
|
mini_mime (1.1.5)
|
||||||
minitest (6.0.2)
|
minitest (6.0.6)
|
||||||
drb (~> 2.0)
|
drb (~> 2.0)
|
||||||
prism (~> 1.5)
|
prism (~> 1.5)
|
||||||
mize (0.6.1)
|
mize (0.6.1)
|
||||||
msgpack (1.8.0)
|
msgpack (1.8.0)
|
||||||
multi_xml (0.8.1)
|
multi_xml (0.9.1)
|
||||||
bigdecimal (>= 3.1, < 5)
|
bigdecimal (>= 3.1, < 5)
|
||||||
net-imap (0.6.3)
|
net-imap (0.6.4)
|
||||||
date
|
date
|
||||||
net-protocol
|
net-protocol
|
||||||
net-pop (0.1.2)
|
net-pop (0.1.2)
|
||||||
@@ -201,11 +206,11 @@ GEM
|
|||||||
net-smtp (0.5.1)
|
net-smtp (0.5.1)
|
||||||
net-protocol
|
net-protocol
|
||||||
nio4r (2.7.5)
|
nio4r (2.7.5)
|
||||||
nokogiri (1.19.2-x86_64-linux-gnu)
|
nokogiri (1.19.3-x86_64-linux-gnu)
|
||||||
racc (~> 1.4)
|
racc (~> 1.4)
|
||||||
orm_adapter (0.5.0)
|
orm_adapter (0.5.0)
|
||||||
parallel (1.27.0)
|
parallel (2.1.0)
|
||||||
parser (3.3.10.2)
|
parser (3.3.11.1)
|
||||||
ast (~> 2.4.1)
|
ast (~> 2.4.1)
|
||||||
racc
|
racc
|
||||||
pdf-reader (2.15.1)
|
pdf-reader (2.15.1)
|
||||||
@@ -232,12 +237,11 @@ GEM
|
|||||||
nio4r (~> 2.0)
|
nio4r (~> 2.0)
|
||||||
pundit (2.5.2)
|
pundit (2.5.2)
|
||||||
activesupport (>= 3.0.0)
|
activesupport (>= 3.0.0)
|
||||||
raabro (1.4.0)
|
|
||||||
racc (1.8.1)
|
racc (1.8.1)
|
||||||
rack (3.2.5)
|
rack (3.2.6)
|
||||||
rack-mini-profiler (4.0.1)
|
rack-mini-profiler (4.0.1)
|
||||||
rack (>= 1.2.0)
|
rack (>= 1.2.0)
|
||||||
rack-session (2.1.1)
|
rack-session (2.1.2)
|
||||||
base64 (>= 0.1.0)
|
base64 (>= 0.1.0)
|
||||||
rack (>= 3.0.0)
|
rack (>= 3.0.0)
|
||||||
rack-test (2.2.0)
|
rack-test (2.2.0)
|
||||||
@@ -265,7 +269,7 @@ GEM
|
|||||||
rails-html-sanitizer (1.7.0)
|
rails-html-sanitizer (1.7.0)
|
||||||
loofah (~> 2.25)
|
loofah (~> 2.25)
|
||||||
nokogiri (>= 1.15.7, != 1.16.7, != 1.16.6, != 1.16.5, != 1.16.4, != 1.16.3, != 1.16.2, != 1.16.1, != 1.16.0.rc1, != 1.16.0)
|
nokogiri (>= 1.15.7, != 1.16.7, != 1.16.6, != 1.16.5, != 1.16.4, != 1.16.3, != 1.16.2, != 1.16.1, != 1.16.0.rc1, != 1.16.0)
|
||||||
rails_icons (1.7.1)
|
rails_icons (1.8.0)
|
||||||
icons (~> 0.8.1)
|
icons (~> 0.8.1)
|
||||||
rails (>= 7.0)
|
rails (>= 7.0)
|
||||||
railties (7.2.3)
|
railties (7.2.3)
|
||||||
@@ -279,14 +283,14 @@ GEM
|
|||||||
tsort (>= 0.2)
|
tsort (>= 0.2)
|
||||||
zeitwerk (~> 2.6)
|
zeitwerk (~> 2.6)
|
||||||
rainbow (3.1.1)
|
rainbow (3.1.1)
|
||||||
rake (13.3.1)
|
rake (13.4.2)
|
||||||
rdoc (7.2.0)
|
rdoc (7.2.0)
|
||||||
erb
|
erb
|
||||||
psych (>= 4.0.0)
|
psych (>= 4.0.0)
|
||||||
tsort
|
tsort
|
||||||
readline (0.0.4)
|
readline (0.0.4)
|
||||||
reline
|
reline
|
||||||
regexp_parser (2.11.3)
|
regexp_parser (2.12.0)
|
||||||
reline (0.6.3)
|
reline (0.6.3)
|
||||||
io-console (~> 0.5)
|
io-console (~> 0.5)
|
||||||
responders (3.2.0)
|
responders (3.2.0)
|
||||||
@@ -310,11 +314,11 @@ GEM
|
|||||||
rspec-mocks (>= 3.13.0, < 5.0.0)
|
rspec-mocks (>= 3.13.0, < 5.0.0)
|
||||||
rspec-support (>= 3.13.0, < 5.0.0)
|
rspec-support (>= 3.13.0, < 5.0.0)
|
||||||
rspec-support (3.13.7)
|
rspec-support (3.13.7)
|
||||||
rubocop (1.86.0)
|
rubocop (1.86.1)
|
||||||
json (~> 2.3)
|
json (~> 2.3)
|
||||||
language_server-protocol (~> 3.17.0.2)
|
language_server-protocol (~> 3.17.0.2)
|
||||||
lint_roller (~> 1.1.0)
|
lint_roller (~> 1.1.0)
|
||||||
parallel (~> 1.10)
|
parallel (>= 1.10)
|
||||||
parser (>= 3.3.0.2)
|
parser (>= 3.3.0.2)
|
||||||
rainbow (>= 2.2.2, < 4.0)
|
rainbow (>= 2.2.2, < 4.0)
|
||||||
regexp_parser (>= 2.9.3, < 3.0)
|
regexp_parser (>= 2.9.3, < 3.0)
|
||||||
@@ -346,21 +350,14 @@ GEM
|
|||||||
ruby-vips (2.3.0)
|
ruby-vips (2.3.0)
|
||||||
ffi (~> 1.12)
|
ffi (~> 1.12)
|
||||||
logger
|
logger
|
||||||
rubyzip (3.2.2)
|
rubyzip (3.3.0)
|
||||||
securerandom (0.4.1)
|
securerandom (0.4.1)
|
||||||
selenium-webdriver (4.41.0)
|
selenium-webdriver (4.43.0)
|
||||||
base64 (~> 0.2)
|
base64 (~> 0.2)
|
||||||
logger (~> 1.4)
|
logger (~> 1.4)
|
||||||
rexml (~> 3.2, >= 3.2.5)
|
rexml (~> 3.2, >= 3.2.5)
|
||||||
rubyzip (>= 1.2.2, < 4.0)
|
rubyzip (>= 1.2.2, < 4.0)
|
||||||
websocket (~> 1.0)
|
websocket (~> 1.0)
|
||||||
solid_queue (1.4.0)
|
|
||||||
activejob (>= 7.1)
|
|
||||||
activerecord (>= 7.1)
|
|
||||||
concurrent-ruby (>= 1.3.1)
|
|
||||||
fugit (~> 1.11)
|
|
||||||
railties (>= 7.1)
|
|
||||||
thor (>= 1.3.1)
|
|
||||||
sprockets (4.2.2)
|
sprockets (4.2.2)
|
||||||
concurrent-ruby (~> 1.0)
|
concurrent-ruby (~> 1.0)
|
||||||
logger
|
logger
|
||||||
@@ -376,10 +373,10 @@ GEM
|
|||||||
tailwindcss-rails (4.4.0)
|
tailwindcss-rails (4.4.0)
|
||||||
railties (>= 7.0.0)
|
railties (>= 7.0.0)
|
||||||
tailwindcss-ruby (~> 4.0)
|
tailwindcss-ruby (~> 4.0)
|
||||||
tailwindcss-ruby (4.2.1-x86_64-linux-gnu)
|
tailwindcss-ruby (4.2.4-x86_64-linux-gnu)
|
||||||
thor (1.5.0)
|
thor (1.5.0)
|
||||||
timeout (0.6.1)
|
timeout (0.6.1)
|
||||||
tins (1.52.0)
|
tins (1.53.0)
|
||||||
bigdecimal
|
bigdecimal
|
||||||
mize (~> 0.6)
|
mize (~> 0.6)
|
||||||
readline
|
readline
|
||||||
@@ -426,9 +423,12 @@ DEPENDENCIES
|
|||||||
bundler-audit
|
bundler-audit
|
||||||
capybara
|
capybara
|
||||||
combine_pdf
|
combine_pdf
|
||||||
|
daemons
|
||||||
|
delayed_job_active_record
|
||||||
devise
|
devise
|
||||||
docx
|
docx
|
||||||
fastimage
|
fastimage
|
||||||
|
figaro
|
||||||
httparty
|
httparty
|
||||||
image_processing
|
image_processing
|
||||||
importmap-rails
|
importmap-rails
|
||||||
@@ -444,9 +444,9 @@ DEPENDENCIES
|
|||||||
rubocop-rails
|
rubocop-rails
|
||||||
rubocop-rails-omakase
|
rubocop-rails-omakase
|
||||||
rubocop-rspec
|
rubocop-rspec
|
||||||
|
ruby-vips
|
||||||
rubyzip
|
rubyzip
|
||||||
selenium-webdriver
|
selenium-webdriver
|
||||||
solid_queue
|
|
||||||
sprockets-rails
|
sprockets-rails
|
||||||
stimulus-rails
|
stimulus-rails
|
||||||
tailwindcss-rails
|
tailwindcss-rails
|
||||||
|
|||||||
@@ -21,6 +21,7 @@
|
|||||||
--color-cobalt-tinted: #003B8F;
|
--color-cobalt-tinted: #003B8F;
|
||||||
/* cobalt blue */
|
/* cobalt blue */
|
||||||
--color-cobalt-vivid: #005DE0;
|
--color-cobalt-vivid: #005DE0;
|
||||||
|
/* #3388FF */
|
||||||
/* platinum */
|
/* platinum */
|
||||||
--color-platinum: #E0E0E0;
|
--color-platinum: #E0E0E0;
|
||||||
/* copper */
|
/* copper */
|
||||||
|
|||||||
@@ -1,4 +1,15 @@
|
|||||||
# frozen_string_literal: true
|
# frozen_string_literal: true
|
||||||
|
|
||||||
class ApplicationController < ActionController::Base
|
class ApplicationController < ActionController::Base
|
||||||
|
include Pundit::Authorization
|
||||||
|
before_action :authenticate_user!
|
||||||
|
|
||||||
|
def after_sign_in_path_for(resource)
|
||||||
|
stored_location_for(resource) || dashboard_path
|
||||||
|
end
|
||||||
|
|
||||||
|
def after_sign_out_path_for(resource_or_scope)
|
||||||
|
root_path
|
||||||
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -1,69 +0,0 @@
|
|||||||
class ArticlesController < ApplicationController
|
|
||||||
before_action :set_article, only: %i[ show edit update destroy ]
|
|
||||||
|
|
||||||
# GET /articles or /articles.json
|
|
||||||
def index
|
|
||||||
@articles = Article.all
|
|
||||||
end
|
|
||||||
|
|
||||||
# GET /articles/1 or /articles/1.json
|
|
||||||
def show
|
|
||||||
end
|
|
||||||
|
|
||||||
# GET /articles/new
|
|
||||||
def new
|
|
||||||
@article = Article.new
|
|
||||||
end
|
|
||||||
|
|
||||||
# GET /articles/1/edit
|
|
||||||
def edit
|
|
||||||
end
|
|
||||||
|
|
||||||
# POST /articles or /articles.json
|
|
||||||
def create
|
|
||||||
@article = Article.new(article_params)
|
|
||||||
|
|
||||||
respond_to do |format|
|
|
||||||
if @article.save
|
|
||||||
format.html { redirect_to @article, notice: "Article was successfully created." }
|
|
||||||
format.json { render :show, status: :created, location: @article }
|
|
||||||
else
|
|
||||||
format.html { render :new, status: :unprocessable_entity }
|
|
||||||
format.json { render json: @article.errors, status: :unprocessable_entity }
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
# PATCH/PUT /articles/1 or /articles/1.json
|
|
||||||
def update
|
|
||||||
respond_to do |format|
|
|
||||||
if @article.update(article_params)
|
|
||||||
format.html { redirect_to @article, notice: "Article was successfully updated." }
|
|
||||||
format.json { render :show, status: :ok, location: @article }
|
|
||||||
else
|
|
||||||
format.html { render :edit, status: :unprocessable_entity }
|
|
||||||
format.json { render json: @article.errors, status: :unprocessable_entity }
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
# DELETE /articles/1 or /articles/1.json
|
|
||||||
def destroy
|
|
||||||
@article.destroy
|
|
||||||
respond_to do |format|
|
|
||||||
format.html { redirect_to articles_url, notice: "Article was successfully destroyed." }
|
|
||||||
format.json { head :no_content }
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
private
|
|
||||||
# Use callbacks to share common setup or constraints between actions.
|
|
||||||
def set_article
|
|
||||||
@article = Article.find(params[:id])
|
|
||||||
end
|
|
||||||
|
|
||||||
# Only allow a list of trusted parameters through.
|
|
||||||
def article_params
|
|
||||||
params.require(:article).permit(:title, :content)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
@@ -0,0 +1,70 @@
|
|||||||
|
class BrokersController < ApplicationController
|
||||||
|
before_action :set_broker, only: %i[ show edit update destroy ]
|
||||||
|
|
||||||
|
# GET /brokers or /brokers.json
|
||||||
|
def index
|
||||||
|
@brokers = Broker.all
|
||||||
|
end
|
||||||
|
|
||||||
|
# GET /brokers/1 or /brokers/1.json
|
||||||
|
def show
|
||||||
|
end
|
||||||
|
|
||||||
|
# GET /brokers/new
|
||||||
|
def new
|
||||||
|
@broker = Broker.new
|
||||||
|
end
|
||||||
|
|
||||||
|
# GET /brokers/1/edit
|
||||||
|
def edit
|
||||||
|
end
|
||||||
|
|
||||||
|
# POST /brokers or /brokers.json
|
||||||
|
def create
|
||||||
|
@broker = Broker.new(broker_params)
|
||||||
|
|
||||||
|
respond_to do |format|
|
||||||
|
if @broker.save
|
||||||
|
format.html { redirect_to @broker, notice: "Broker was successfully created." }
|
||||||
|
format.json { render :show, status: :created, location: @broker }
|
||||||
|
else
|
||||||
|
format.html { render :new, status: :unprocessable_entity }
|
||||||
|
format.json { render json: @broker.errors, status: :unprocessable_entity }
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
# PATCH/PUT /brokers/1 or /brokers/1.json
|
||||||
|
def update
|
||||||
|
respond_to do |format|
|
||||||
|
if @broker.update(broker_params)
|
||||||
|
format.html { redirect_to @broker, notice: "Broker was successfully updated.", status: :see_other }
|
||||||
|
format.json { render :show, status: :ok, location: @broker }
|
||||||
|
else
|
||||||
|
format.html { render :edit, status: :unprocessable_entity }
|
||||||
|
format.json { render json: @broker.errors, status: :unprocessable_entity }
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
# DELETE /brokers/1 or /brokers/1.json
|
||||||
|
def destroy
|
||||||
|
@broker.destroy!
|
||||||
|
|
||||||
|
respond_to do |format|
|
||||||
|
format.html { redirect_to brokers_path, notice: "Broker was successfully destroyed.", status: :see_other }
|
||||||
|
format.json { head :no_content }
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
# Use callbacks to share common setup or constraints between actions.
|
||||||
|
def set_broker
|
||||||
|
@broker = Broker.find(params[:id])
|
||||||
|
end
|
||||||
|
|
||||||
|
# Only allow a list of trusted parameters through.
|
||||||
|
def broker_params
|
||||||
|
params.require(:broker).permit(:name, :carrier_id)
|
||||||
|
end
|
||||||
|
end
|
||||||
@@ -1,57 +0,0 @@
|
|||||||
class CardLogoFilesController < ApplicationController
|
|
||||||
|
|
||||||
def index
|
|
||||||
end
|
|
||||||
|
|
||||||
def show
|
|
||||||
end
|
|
||||||
|
|
||||||
def image
|
|
||||||
logo_file = CardLogoFile.find_by(filename: params[:id])
|
|
||||||
puts params[:id]
|
|
||||||
logo_binary = logo_file.image_data
|
|
||||||
logo_filename = logo_file.filename
|
|
||||||
logo_file_type = logo_file.content_type
|
|
||||||
|
|
||||||
send_data logo_binary,
|
|
||||||
filename: logo_filename,
|
|
||||||
# type: logo_file_type,
|
|
||||||
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)
|
|
||||||
|
|
||||||
CardLogoFile.create(
|
|
||||||
filename: filename,
|
|
||||||
image_data: binary_data,
|
|
||||||
content_type: meme_type,
|
|
||||||
logo_type: card_logo_file_params["logo_type"]
|
|
||||||
)
|
|
||||||
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
|
|
||||||
@@ -1,70 +0,0 @@
|
|||||||
class CardProvidersController < ApplicationController
|
|
||||||
before_action :set_card_provider, only: %i[ show edit update destroy ]
|
|
||||||
|
|
||||||
# GET /card_providers or /card_providers.json
|
|
||||||
def index
|
|
||||||
@card_providers = CardProvider.all
|
|
||||||
end
|
|
||||||
|
|
||||||
# GET /card_providers/1 or /card_providers/1.json
|
|
||||||
def show
|
|
||||||
end
|
|
||||||
|
|
||||||
# GET /card_providers/new
|
|
||||||
def new
|
|
||||||
@card_provider = CardProvider.new
|
|
||||||
end
|
|
||||||
|
|
||||||
# GET /card_providers/1/edit
|
|
||||||
def edit
|
|
||||||
end
|
|
||||||
|
|
||||||
# POST /card_providers or /card_providers.json
|
|
||||||
def create
|
|
||||||
@card_provider = CardProvider.new(card_provider_params)
|
|
||||||
|
|
||||||
respond_to do |format|
|
|
||||||
if @card_provider.save
|
|
||||||
format.html { redirect_to @card_provider, notice: "Card provider was successfully created." }
|
|
||||||
format.json { render :show, status: :created, location: @card_provider }
|
|
||||||
else
|
|
||||||
format.html { render :new, status: :unprocessable_entity }
|
|
||||||
format.json { render json: @card_provider.errors, status: :unprocessable_entity }
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
# PATCH/PUT /card_providers/1 or /card_providers/1.json
|
|
||||||
def update
|
|
||||||
respond_to do |format|
|
|
||||||
if @card_provider.update(card_provider_params)
|
|
||||||
format.html { redirect_to @card_provider, notice: "Card provider was successfully updated.", status: :see_other }
|
|
||||||
format.json { render :show, status: :ok, location: @card_provider }
|
|
||||||
else
|
|
||||||
format.html { render :edit, status: :unprocessable_entity }
|
|
||||||
format.json { render json: @card_provider.errors, status: :unprocessable_entity }
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
# DELETE /card_providers/1 or /card_providers/1.json
|
|
||||||
def destroy
|
|
||||||
@card_provider.destroy!
|
|
||||||
|
|
||||||
respond_to do |format|
|
|
||||||
format.html { redirect_to card_providers_path, notice: "Card provider was successfully destroyed.", status: :see_other }
|
|
||||||
format.json { head :no_content }
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
private
|
|
||||||
# Use callbacks to share common setup or constraints between actions.
|
|
||||||
def set_card_provider
|
|
||||||
@card_provider = CardProvider.find(params[:id])
|
|
||||||
end
|
|
||||||
|
|
||||||
# Only allow a list of trusted parameters through.
|
|
||||||
def card_provider_params
|
|
||||||
params.require(:card_provider).permit(:provider_code, :provider_line_1, :provider_line_2, :provider_line_3, :provider_line_4, :provider_line_5, :mail_to, :mail_to_2, :contact_line_1, :contact_line_2, :contact_line_3, :group_number, :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, :provider_line_6, :provider_line_7, :provider_line_8, :provider_line_9, :provider_line_10, :provider_line_11, :rx_group_id, :rx_contact, :provider_lookup_1, :provider_lookup_2, :precert_1, :precert_2, :precert_3, :precert_4, :precert_5, :precert_6, :provider_line_12, :claim_to_12)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
@@ -1,70 +0,0 @@
|
|||||||
class CardRxesController < ApplicationController
|
|
||||||
before_action :set_card_rx, only: %i[ show edit update destroy ]
|
|
||||||
|
|
||||||
# GET /card_rxes or /card_rxes.json
|
|
||||||
def index
|
|
||||||
@card_rxes = CardRx.all
|
|
||||||
end
|
|
||||||
|
|
||||||
# GET /card_rxes/1 or /card_rxes/1.json
|
|
||||||
def show
|
|
||||||
end
|
|
||||||
|
|
||||||
# GET /card_rxes/new
|
|
||||||
def new
|
|
||||||
@card_rx = CardRx.new
|
|
||||||
end
|
|
||||||
|
|
||||||
# GET /card_rxes/1/edit
|
|
||||||
def edit
|
|
||||||
end
|
|
||||||
|
|
||||||
# POST /card_rxes or /card_rxes.json
|
|
||||||
def create
|
|
||||||
@card_rx = CardRx.new(card_rx_params)
|
|
||||||
|
|
||||||
respond_to do |format|
|
|
||||||
if @card_rx.save
|
|
||||||
format.html { redirect_to @card_rx, notice: "Card rx was successfully created." }
|
|
||||||
format.json { render :show, status: :created, location: @card_rx }
|
|
||||||
else
|
|
||||||
format.html { render :new, status: :unprocessable_entity }
|
|
||||||
format.json { render json: @card_rx.errors, status: :unprocessable_entity }
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
# PATCH/PUT /card_rxes/1 or /card_rxes/1.json
|
|
||||||
def update
|
|
||||||
respond_to do |format|
|
|
||||||
if @card_rx.update(card_rx_params)
|
|
||||||
format.html { redirect_to @card_rx, notice: "Card rx was successfully updated.", status: :see_other }
|
|
||||||
format.json { render :show, status: :ok, location: @card_rx }
|
|
||||||
else
|
|
||||||
format.html { render :edit, status: :unprocessable_entity }
|
|
||||||
format.json { render json: @card_rx.errors, status: :unprocessable_entity }
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
# DELETE /card_rxes/1 or /card_rxes/1.json
|
|
||||||
def destroy
|
|
||||||
@card_rx.destroy!
|
|
||||||
|
|
||||||
respond_to do |format|
|
|
||||||
format.html { redirect_to card_rxes_path, notice: "Card rx was successfully destroyed.", status: :see_other }
|
|
||||||
format.json { head :no_content }
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
private
|
|
||||||
# Use callbacks to share common setup or constraints between actions.
|
|
||||||
def set_card_rx
|
|
||||||
@card_rx = CardRx.find(params[:id])
|
|
||||||
end
|
|
||||||
|
|
||||||
# Only allow a list of trusted parameters through.
|
|
||||||
def card_rx_params
|
|
||||||
params.require(:card_rx).permit(:help_desk, :customer_service, :web_url)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
@@ -0,0 +1,70 @@
|
|||||||
|
class CarriersController < ApplicationController
|
||||||
|
before_action :set_carrier, only: %i[ show edit update destroy ]
|
||||||
|
|
||||||
|
# GET /carriers or /carriers.json
|
||||||
|
def index
|
||||||
|
@carriers = Carrier.all
|
||||||
|
end
|
||||||
|
|
||||||
|
# GET /carriers/1 or /carriers/1.json
|
||||||
|
def show
|
||||||
|
end
|
||||||
|
|
||||||
|
# GET /carriers/new
|
||||||
|
def new
|
||||||
|
@carrier = Carrier.new
|
||||||
|
end
|
||||||
|
|
||||||
|
# GET /carriers/1/edit
|
||||||
|
def edit
|
||||||
|
end
|
||||||
|
|
||||||
|
# POST /carriers or /carriers.json
|
||||||
|
def create
|
||||||
|
@carrier = Carrier.new(carrier_params)
|
||||||
|
|
||||||
|
respond_to do |format|
|
||||||
|
if @carrier.save
|
||||||
|
format.html { redirect_to @carrier, notice: "Carrier was successfully created." }
|
||||||
|
format.json { render :show, status: :created, location: @carrier }
|
||||||
|
else
|
||||||
|
format.html { render :new, status: :unprocessable_entity }
|
||||||
|
format.json { render json: @carrier.errors, status: :unprocessable_entity }
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
# PATCH/PUT /carriers/1 or /carriers/1.json
|
||||||
|
def update
|
||||||
|
respond_to do |format|
|
||||||
|
if @carrier.update(carrier_params)
|
||||||
|
format.html { redirect_to @carrier, notice: "Carrier was successfully updated.", status: :see_other }
|
||||||
|
format.json { render :show, status: :ok, location: @carrier }
|
||||||
|
else
|
||||||
|
format.html { render :edit, status: :unprocessable_entity }
|
||||||
|
format.json { render json: @carrier.errors, status: :unprocessable_entity }
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
# DELETE /carriers/1 or /carriers/1.json
|
||||||
|
def destroy
|
||||||
|
@carrier.destroy!
|
||||||
|
|
||||||
|
respond_to do |format|
|
||||||
|
format.html { redirect_to carriers_path, notice: "Carrier was successfully destroyed.", status: :see_other }
|
||||||
|
format.json { head :no_content }
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
# Use callbacks to share common setup or constraints between actions.
|
||||||
|
def set_carrier
|
||||||
|
@carrier = Carrier.find(params[:id])
|
||||||
|
end
|
||||||
|
|
||||||
|
# Only allow a list of trusted parameters through.
|
||||||
|
def carrier_params
|
||||||
|
params.require(:carrier).permit(:name)
|
||||||
|
end
|
||||||
|
end
|
||||||
@@ -1,13 +0,0 @@
|
|||||||
class CommentsController < ApplicationController
|
|
||||||
before_action :set_article
|
|
||||||
|
|
||||||
def create
|
|
||||||
@article.comments.create! params.required(:comment).permit(:content)
|
|
||||||
redirect_to @article
|
|
||||||
end
|
|
||||||
|
|
||||||
private
|
|
||||||
def set_article
|
|
||||||
@article = Article.find(params[:article_id])
|
|
||||||
end
|
|
||||||
end
|
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
class DashboardController < ApplicationController
|
||||||
|
def index
|
||||||
|
end
|
||||||
|
end
|
||||||
@@ -1,257 +0,0 @@
|
|||||||
class EmployerSetupController < ApplicationController
|
|
||||||
def index
|
|
||||||
@employer_setups = EmployerSetupProcess.all
|
|
||||||
end
|
|
||||||
|
|
||||||
def show
|
|
||||||
|
|
||||||
end
|
|
||||||
|
|
||||||
def new
|
|
||||||
@employer_setup = EmployerSetupProcess.new
|
|
||||||
@employer_setup.plans.build
|
|
||||||
@plan_templates = IdCardBenefitsTemplate.where.not(title: "BLANK")
|
|
||||||
render :new
|
|
||||||
end
|
|
||||||
|
|
||||||
def import
|
|
||||||
word_doc = params[:employer_setup_process][:import_from_word]
|
|
||||||
@plan_templates = IdCardBenefitsTemplate.where.not(title: "BLANK")
|
|
||||||
if word_doc.present? && word_doc.is_a?(ActionDispatch::Http::UploadedFile)
|
|
||||||
@employer_setup = WordDocProcessor.new(word_doc.tempfile).call
|
|
||||||
render :edit
|
|
||||||
else
|
|
||||||
@employer_setup = EmployerSetupProcess.new
|
|
||||||
@employer_setup.plans.build
|
|
||||||
render :new
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def create
|
|
||||||
employer_setup_process_params = EmployerSetupProcess.permitted_params(params)
|
|
||||||
puts "---Params---"
|
|
||||||
puts employer_setup_process_params
|
|
||||||
# post_image_processing_params = process_logos(employer_setup_process_params)
|
|
||||||
@employer_setup = EmployerSetupProcess.new(employer_setup_process_params)
|
|
||||||
if @employer_setup.save
|
|
||||||
# update_logos_with_employer_setup_information()
|
|
||||||
redirect_to @employer_setup, notice: 'Employer Setup Process initiated'
|
|
||||||
else
|
|
||||||
@plan_templates = IdCardBenefitsTemplate.where.not(title: "BLANK")
|
|
||||||
render :new
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def edit
|
|
||||||
@employer_setup = EmployerSetupProcess.find_by(slug: params[:id])
|
|
||||||
@plan_templates = IdCardBenefitsTemplate.where.not(title: "BLANK")
|
|
||||||
render :edit
|
|
||||||
# @resource = Resource.find(params[:id])
|
|
||||||
end
|
|
||||||
|
|
||||||
def update
|
|
||||||
@form = RegistrationForm.new(registration_params)
|
|
||||||
|
|
||||||
if params[:back_button]
|
|
||||||
@form.current_step = @form.previous_step
|
|
||||||
elsif params[:skip_newsletter]
|
|
||||||
@form.current_step = @form.next_step # Skip newsletter step
|
|
||||||
end
|
|
||||||
|
|
||||||
render :new
|
|
||||||
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_setup.present?
|
|
||||||
logo_file.employer_setup_process = @employer_setup
|
|
||||||
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
|
|
||||||
@@ -1,244 +0,0 @@
|
|||||||
class EmployerSetupController < ApplicationController
|
|
||||||
def new
|
|
||||||
# session.delete(:employer_setup_data)
|
|
||||||
# session.clear()
|
|
||||||
# puts "Start"
|
|
||||||
# puts session[:employer_setup_data]
|
|
||||||
if session[:employer_setup_data].blank?
|
|
||||||
@process = EmployerSetupProcess.create(status: "form")
|
|
||||||
session[:employer_setup_data] = { "employer_setup_process_id" => @process.id }
|
|
||||||
|
|
||||||
end
|
|
||||||
puts "-S--------------------------------------"
|
|
||||||
puts session[:employer_setup_data]
|
|
||||||
# session[:employer_setup_data]['current_step'] = 'plans'
|
|
||||||
|
|
||||||
@top_form = EmployerSetupForm.new(session[:employer_setup_data])
|
|
||||||
if @top_form.current_step != 'summary'
|
|
||||||
@form = form_for_step
|
|
||||||
else
|
|
||||||
@form = @top_form
|
|
||||||
end
|
|
||||||
|
|
||||||
# case @top_form.current_step
|
|
||||||
# when 'general_information'
|
|
||||||
# @form = EmployerSetupGeneralInformationForm.new(session[:employer_setup_data]&.dig('general_information_data'))
|
|
||||||
# when 'plans'
|
|
||||||
# @form = EmployerSetupPlansForm.new(session[:employer_setup_data]&.dig('plans_data'))
|
|
||||||
# when 'network_exceptions'
|
|
||||||
# @form = EmployerSetupNetworkExceptionsForm.new(session[:employer_setup_data]&.dig('network_exceptions_data'))
|
|
||||||
# when 'summary'
|
|
||||||
# @form = @top_form
|
|
||||||
# end
|
|
||||||
render @top_form.current_step_view
|
|
||||||
end
|
|
||||||
|
|
||||||
def create
|
|
||||||
# puts session[:employer_setup_data]
|
|
||||||
@top_form = EmployerSetupForm.new(session[:employer_setup_data])
|
|
||||||
if @top_form.current_step != 'summary'
|
|
||||||
if process_step(@top_form.current_step)
|
|
||||||
session[:employer_setup_data]['current_step'] = @top_form.next_step
|
|
||||||
puts "---------------------------------------"
|
|
||||||
puts "pass"
|
|
||||||
puts "next - #{@top_form.next_step}"
|
|
||||||
puts session[:employer_setup_data]
|
|
||||||
puts "---------------------------------------"
|
|
||||||
redirect_to new_employer_setup_path
|
|
||||||
else
|
|
||||||
puts "fail"
|
|
||||||
render @top_form.current_step_view
|
|
||||||
end
|
|
||||||
else
|
|
||||||
if @top_form.save
|
|
||||||
session.delete(:employer_setup_data)
|
|
||||||
redirect_to root_path, notice: "Employer setup successfully!"
|
|
||||||
else
|
|
||||||
render @top_form.current_step_view
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
# case @top_form.current_step
|
|
||||||
# when 'general_information'
|
|
||||||
# @form = EmployerSetupGeneralInformationForm.new(general_information_params)
|
|
||||||
# if @form.valid?
|
|
||||||
# session[:employer_setup_data]['general_information_data'] = general_information_params
|
|
||||||
# session[:employer_setup_data]['current_step'] = @top_form.next_step
|
|
||||||
# redirect_to new_employer_setup_path
|
|
||||||
# else
|
|
||||||
# render @top_form.current_step_view
|
|
||||||
# end
|
|
||||||
# when 'plans'
|
|
||||||
# @form = EmployerSetupPlansForm.new(plans_params)
|
|
||||||
# if @form.valid?
|
|
||||||
# session[:employer_setup_data]['plans_data'] = plans_params
|
|
||||||
# session[:employer_setup_data]['current_step'] = @top_form.next_step
|
|
||||||
# redirect_to new_employer_setup_path
|
|
||||||
# else
|
|
||||||
# render @top_form.current_step_view
|
|
||||||
# end
|
|
||||||
# when 'network_exceptions'
|
|
||||||
# @form = EmployerSetupNetworkExceptionsForm.new(network_exceptions_params)
|
|
||||||
# if @form.valid?
|
|
||||||
# session[:employer_setup_data]['network_exceptions_data'] = network_exceptions_params
|
|
||||||
# session[:employer_setup_data]['current_step'] = @top_form.next_step
|
|
||||||
# redirect_to new_employer_setup_path
|
|
||||||
# else
|
|
||||||
# render @top_form.current_step_view
|
|
||||||
# end
|
|
||||||
# when 'summary'
|
|
||||||
# @form = EmployerSetupForm.new(session[:employer_setup_data])
|
|
||||||
# if @form.save
|
|
||||||
# session.delete(:employer_setup_data)
|
|
||||||
# redirect_to root_path, notice: "Employer setup successfully!"
|
|
||||||
# else
|
|
||||||
# render @top_form.current_step_view
|
|
||||||
# end
|
|
||||||
# end
|
|
||||||
end
|
|
||||||
|
|
||||||
def update
|
|
||||||
@form = RegistrationForm.new(registration_params)
|
|
||||||
|
|
||||||
if params[:back_button]
|
|
||||||
@form.current_step = @form.previous_step
|
|
||||||
elsif params[:skip_newsletter]
|
|
||||||
@form.current_step = @form.next_step # Skip newsletter step
|
|
||||||
end
|
|
||||||
|
|
||||||
render :new
|
|
||||||
end
|
|
||||||
|
|
||||||
private
|
|
||||||
|
|
||||||
# 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
|
|
||||||
@@ -1,109 +0,0 @@
|
|||||||
class EmployerSetupController < ApplicationController
|
|
||||||
def new
|
|
||||||
@employer_data = session[:employer_data] || {}
|
|
||||||
# @id_card_templates = IdCardTemplate.where.not(title: "BLANK")
|
|
||||||
# @id_card_template_benefits = IdCardTemplate.find_by(title: "BLANK").id_card_template_benefits.sort_by(&:sequence)
|
|
||||||
end
|
|
||||||
|
|
||||||
def create_employer
|
|
||||||
@employer_data = {employer: {}}
|
|
||||||
@employer_data[:employer].merge!(params.require(:employer).permit(
|
|
||||||
:name,
|
|
||||||
:group_number,
|
|
||||||
:pl_plan_key,
|
|
||||||
:effective_date
|
|
||||||
))
|
|
||||||
@employer_data[:employer].merge!(params.permit(:number_of_plans))
|
|
||||||
|
|
||||||
session[:employer_data] = @employer_data
|
|
||||||
puts session[:employer_data]
|
|
||||||
redirect_to action: :plans
|
|
||||||
end
|
|
||||||
|
|
||||||
def plans
|
|
||||||
@employer_data = session[:employer_data] || {}
|
|
||||||
@id_card_templates = IdCardBenefitsTemplate.where.not(title: "BLANK")
|
|
||||||
@id_card_template_benefits = IdCardBenefitsTemplate.find_by(title: "BLANK").id_card_benefits.sort_by(&:sequence)
|
|
||||||
end
|
|
||||||
|
|
||||||
def create_plans
|
|
||||||
@employer_data = session[:employer_data] || {}
|
|
||||||
@employer_data.merge!(params.require(:plans).permit(plans_params))
|
|
||||||
session[:employer_data] = @employer_data
|
|
||||||
redirect_to action: :networks
|
|
||||||
end
|
|
||||||
|
|
||||||
def networks
|
|
||||||
@employer_data = session[:employer_data] || {}
|
|
||||||
|
|
||||||
end
|
|
||||||
|
|
||||||
def create_provider_networks
|
|
||||||
@employer_data = session[:employer_data] || {}
|
|
||||||
@employer_data.merge!(params.require(:plans).permit(plans_params))
|
|
||||||
session[:employer_data] = @employer_data
|
|
||||||
redirect_to action: :networks
|
|
||||||
end
|
|
||||||
|
|
||||||
|
|
||||||
def process_bad_name
|
|
||||||
@final_data = session[:employer_data]
|
|
||||||
|
|
||||||
# Vhcs::HlPlanCode.create(
|
|
||||||
# group_number: @final_data['employer']['name'],
|
|
||||||
# medical_number: @final_data['employer']['group_number'],
|
|
||||||
# dental_number: ' ',
|
|
||||||
# plan_key: @final_data['employer']['pl_plan_key'],
|
|
||||||
# effective_date: @final_data['employer']['effective_date']
|
|
||||||
# )
|
|
||||||
|
|
||||||
# default = Vhcs::HLRXCrosRef.find_by(pl_plan_key: 52)
|
|
||||||
|
|
||||||
# Vhcs::HLRXCrosRef.create(
|
|
||||||
# group_no: @final_data['employer']['group_number'],
|
|
||||||
# rx_group_id: @final_data['employer']['group_number'],
|
|
||||||
# help_desk: default.help_desk,
|
|
||||||
# customer_service: default.customer_service,
|
|
||||||
# web_url: default.web_url,
|
|
||||||
# pl_plan_key: @final_data['employer']['pl_plan_key']
|
|
||||||
# )
|
|
||||||
|
|
||||||
# plans_data = @final_data['plans']
|
|
||||||
# benefit_descs = plans_data.delete('benefit_descs')
|
|
||||||
|
|
||||||
# plans_data.each do |key, value|
|
|
||||||
# plan_id = value.delete('plan_id')
|
|
||||||
# value.each do |key2, value2|
|
|
||||||
# Vhcs::HLEgglestonCardBenefit.create(
|
|
||||||
# plan_id: plan_id,
|
|
||||||
# benefit_desc: benefit_descs[key2],
|
|
||||||
# benefit: value2,
|
|
||||||
# sequence: key2,
|
|
||||||
# plan_key: @final_data['employer']['pl_plan_key']
|
|
||||||
# )
|
|
||||||
# end
|
|
||||||
|
|
||||||
# end
|
|
||||||
|
|
||||||
# Create or update your model with @final_data
|
|
||||||
# Clear the session data after successful save
|
|
||||||
session[:employer_data] = nil
|
|
||||||
# Redirect to a success page
|
|
||||||
end
|
|
||||||
|
|
||||||
private
|
|
||||||
|
|
||||||
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
|
|
||||||
@@ -1,89 +0,0 @@
|
|||||||
class EmployerSetupController < ApplicationController
|
|
||||||
def new
|
|
||||||
# session.delete(:employer_setup_data)
|
|
||||||
@form = EmployerSetupForm.new(session[:employer_setup_data])
|
|
||||||
if @form.current_step == "plans"
|
|
||||||
@id_card_templates = IdCardBenefitsTemplate.where.not(title: "BLANK")
|
|
||||||
@id_card_template_benefits = IdCardBenefitsTemplate.find_by(title: "BLANK").id_card_benefits.sort_by(&:sequence)
|
|
||||||
end
|
|
||||||
puts session[:employer_setup_data]
|
|
||||||
render "employer_setup/#{@form.current_step}" # Renders the view for the current step
|
|
||||||
end
|
|
||||||
|
|
||||||
def create
|
|
||||||
filtered_params = employer_setup_params.except(:validation_context)
|
|
||||||
@form = EmployerSetupForm.new(filtered_params)
|
|
||||||
|
|
||||||
if @form.current_step == "general" && @form.valid?(:general_info)
|
|
||||||
# @form.current_step = "plans"
|
|
||||||
@form.current_step = "networks" # TESTING, Change Back
|
|
||||||
session[:employer_setup_data] = @form.attributes.slice("current_step", "name", "employer_logo", "group_number", "pl_plan_key", "effect_date", "number_of_plans", "network", "number_of_additional_network_logos")
|
|
||||||
redirect_to new_employer_setup_path # Redirect to the next step
|
|
||||||
elsif @form.current_step == "plans" && @form.valid?(:plan_info)
|
|
||||||
if @form.number_of_additional_network_logos == 0
|
|
||||||
next_step = "summary"
|
|
||||||
else
|
|
||||||
next_step = "networks"
|
|
||||||
end
|
|
||||||
@form.current_step = next_step
|
|
||||||
session[:employer_setup_data].merge!(@form.attributes.slice("current_step", "plans", "benefit_descs"))
|
|
||||||
redirect_to new_employer_setup_path
|
|
||||||
# @form = UserOnboardingForm.new(session[:employer_setup_data]) # Re-initialize with all data
|
|
||||||
elsif @form.current_step == "networks" && @form.valid?(:network_info)
|
|
||||||
@form.current_step = "summary"
|
|
||||||
session[:employer_setup_data].merge!(@form.attributes.slice("current_step", "network_exceptions"))
|
|
||||||
redirect_to new_employer_setup_path
|
|
||||||
elsif @form.current_step == "summary"
|
|
||||||
puts @form.attributes
|
|
||||||
if @form.save
|
|
||||||
session.delete(:employer_setup_data) # Clear session data after successful save
|
|
||||||
redirect_to root_path, notice: "Employer setup successfully!"
|
|
||||||
else
|
|
||||||
render "employer_setup/summary" # Render step two again with errors
|
|
||||||
end
|
|
||||||
else
|
|
||||||
render "employer_setup/#{@form.current_step}" # Render the current step again with errors
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
private
|
|
||||||
|
|
||||||
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
|
|
||||||
@@ -3,7 +3,10 @@ class EmployersController < ApplicationController
|
|||||||
# View Methods
|
# View Methods
|
||||||
def index
|
def index
|
||||||
@uninitialized = Employer.in_automation_initilization
|
@uninitialized = Employer.in_automation_initilization
|
||||||
@with_active_id_card_setup = Employer.with_active_id_card_setup
|
@with_active_id_card_setup = Employer.active
|
||||||
|
current_group_numbers = @with_active_id_card_setup.pluck(:group_number)
|
||||||
|
valid_group_numbers = ["62210","61986","42018","41283","0230643","43190","0230642","0230644","0230646","0233955","600102","0249127","0257902","0257947","600112","600114","0261611","600117","0261684","0261685","0261826","600121","0265450","600123","0267470","0268540","0268599"]
|
||||||
|
@beta_unassigned_group_numbers = valid_group_numbers - current_group_numbers
|
||||||
@deactivated = Employer.deactivated
|
@deactivated = Employer.deactivated
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -16,29 +19,13 @@ class EmployersController < ApplicationController
|
|||||||
render :new
|
render :new
|
||||||
end
|
end
|
||||||
|
|
||||||
# def import_old
|
|
||||||
# word_doc = params[:employer][:import_from_word]
|
|
||||||
# @plan_templates = IdCardBenefitsTemplate.where.not(title: "BLANK")
|
|
||||||
# if word_doc.present? && word_doc.is_a?(ActionDispatch::Http::UploadedFile)
|
|
||||||
# @employer = WordDocProcessor.new(word_doc.tempfile).call
|
|
||||||
# else
|
|
||||||
# @employer = Employer.new
|
|
||||||
# @employer.build_plan_with_default_benefits
|
|
||||||
# end
|
|
||||||
# render :new
|
|
||||||
# end
|
|
||||||
|
|
||||||
def create
|
def create
|
||||||
employer_params = Employer.permitted_params(params)
|
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)
|
@employer = Employer.new(employer_params)
|
||||||
if @employer.save
|
if @employer.save
|
||||||
# update_logos_with_employer_setup_information()
|
|
||||||
redirect_to employer_path(@employer.slug), notice: 'Employer Saved'
|
redirect_to employer_path(@employer.slug), notice: 'Employer Saved'
|
||||||
else
|
else
|
||||||
render :new
|
render :new, status: :unprocessable_entity
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -48,7 +35,6 @@ class EmployersController < ApplicationController
|
|||||||
end
|
end
|
||||||
|
|
||||||
def update
|
def update
|
||||||
puts "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"
|
|
||||||
employer_params = Employer.permitted_params(params)
|
employer_params = Employer.permitted_params(params)
|
||||||
@employer = Employer.find(params[:id])
|
@employer = Employer.find(params[:id])
|
||||||
|
|
||||||
@@ -63,9 +49,9 @@ class EmployersController < ApplicationController
|
|||||||
end
|
end
|
||||||
|
|
||||||
def destroy
|
def destroy
|
||||||
# @resource = Resource.find(params[:id])
|
@employer = Employer.find(params[:id])
|
||||||
# @resource.destroy
|
@employer.destroy
|
||||||
# redirect_to resources_url, notice: 'Resource was successfully destroyed.'
|
redirect_to employers_path, notice: "#{@employer.name} was successfully deleted."
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
@@ -83,6 +69,11 @@ class EmployersController < ApplicationController
|
|||||||
redirect_to employer_path(@employer.slug)
|
redirect_to employer_path(@employer.slug)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def beta_automation_simulation
|
||||||
|
BetaAutomationSimulationService.new().call
|
||||||
|
redirect_to employers_path
|
||||||
|
end
|
||||||
|
|
||||||
def import
|
def import
|
||||||
word_doc = params[:employer][:import_from_word]
|
word_doc = params[:employer][:import_from_word]
|
||||||
if word_doc.present? && word_doc.is_a?(ActionDispatch::Http::UploadedFile)
|
if word_doc.present? && word_doc.is_a?(ActionDispatch::Http::UploadedFile)
|
||||||
@@ -97,189 +88,4 @@ class EmployersController < ApplicationController
|
|||||||
|
|
||||||
private
|
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
|
end
|
||||||
|
|||||||
@@ -13,19 +13,19 @@ module IdCard
|
|||||||
|
|
||||||
def create
|
def create
|
||||||
file = logo_params["logo_file"]
|
file = logo_params["logo_file"]
|
||||||
if file.present? && file.is_a?(ActionDispatch::Http::UploadedFile)
|
employer_id = logo_params["employer_id"]
|
||||||
|
employer = Employer.find(employer_id)
|
||||||
|
setup = employer.id_card_setup
|
||||||
|
if setup.present? && file.present? && file.is_a?(ActionDispatch::Http::UploadedFile)
|
||||||
filename = file.original_filename
|
filename = file.original_filename
|
||||||
# binary_data = file.read
|
# binary_data = file.read
|
||||||
binary_data = File.binread(file)
|
binary_data = File.binread(file)
|
||||||
meme_type = Marcel::MimeType.for(file)
|
meme_type = Marcel::MimeType.for(file)
|
||||||
|
|
||||||
employerlogo = IdCard::EmployerLogo.create(
|
employer_logo = IdCard::EmployerLogo.find_or_create_by(filename: filename, setup_id: setup.id)
|
||||||
filename: filename,
|
employer_logo.update(image_data: binary_data)
|
||||||
image_data: binary_data,
|
|
||||||
content_type: meme_type
|
|
||||||
)
|
|
||||||
|
|
||||||
render json: employerlogo, only: [:id], status: :ok
|
render json: employer_logo, only: [:id], status: :ok
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -54,7 +54,7 @@ module IdCard
|
|||||||
private
|
private
|
||||||
|
|
||||||
def logo_params
|
def logo_params
|
||||||
params.require(:id_card_employer_logo).permit(:logo_file)
|
params.require(:id_card_employer_logo).permit(:logo_file, :employer_id)
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ module IdCard
|
|||||||
def index
|
def index
|
||||||
@employer_setups = IdCard::Setup.active.to_a
|
@employer_setups = IdCard::Setup.active.to_a
|
||||||
@queue_members = IdCardQueueService::GetQueuedMembers.new().call
|
@queue_members = IdCardQueueService::GetQueuedMembers.new().call
|
||||||
|
update_missing_members(@queue_members)
|
||||||
add_queued_count_to_employer_setup(@queue_members)
|
add_queued_count_to_employer_setup(@queue_members)
|
||||||
@queued = @employer_setups.select { |setup| setup.queued_card_count > 0 }.sort_by { |setup| setup.print_name }
|
@queued = @employer_setups.select { |setup| setup.queued_card_count > 0 }.sort_by { |setup| setup.print_name }
|
||||||
@not_queued = @employer_setups.select { |setup| setup.queued_card_count == 0 }.sort_by { |setup| setup.print_name }
|
@not_queued = @employer_setups.select { |setup| setup.queued_card_count == 0 }.sort_by { |setup| setup.print_name }
|
||||||
@@ -15,6 +16,9 @@ module IdCard
|
|||||||
|
|
||||||
def print_all_queued
|
def print_all_queued
|
||||||
@queue_members = IdCardQueueService::GetQueuedMembers.new().call
|
@queue_members = IdCardQueueService::GetQueuedMembers.new().call
|
||||||
|
# @queue_members.delete_if { |em| ["2", "19", "16", "54"].include?(em[:pl_plan_key])}
|
||||||
|
# @queue_members.push({pl_plan_key: "54", member_keys: [383840]})
|
||||||
|
|
||||||
cards_pdf = IdCardPrinterService::CardsGenerator.new(@queue_members, "PrintCard").call
|
cards_pdf = IdCardPrinterService::CardsGenerator.new(@queue_members, "PrintCard").call
|
||||||
|
|
||||||
send_data cards_pdf.to_pdf,
|
send_data cards_pdf.to_pdf,
|
||||||
@@ -28,6 +32,7 @@ module IdCard
|
|||||||
pl_plan_key = params[:id].to_s
|
pl_plan_key = params[:id].to_s
|
||||||
@employer = Employer.find_by(pl_plan_key: pl_plan_key)
|
@employer = Employer.find_by(pl_plan_key: pl_plan_key)
|
||||||
@queue_members = IdCardQueueService::GetQueuedMembers.new(pl_plan_key).call
|
@queue_members = IdCardQueueService::GetQueuedMembers.new(pl_plan_key).call
|
||||||
|
# @queue_members.first[:member_keys].delete(379590) && @queue_members.first[:member_keys].push(379610)
|
||||||
cards_pdf = IdCardPrinterService::CardsGenerator.new(@queue_members, "PrintCard").call
|
cards_pdf = IdCardPrinterService::CardsGenerator.new(@queue_members, "PrintCard").call
|
||||||
|
|
||||||
send_data cards_pdf.to_pdf,
|
send_data cards_pdf.to_pdf,
|
||||||
@@ -38,14 +43,9 @@ module IdCard
|
|||||||
end
|
end
|
||||||
|
|
||||||
def generate_sample
|
def generate_sample
|
||||||
if Integer(params[:id], exception: false).is_a?(Integer)
|
employer_id = params[:id]
|
||||||
pl_plan_key = params[:id].to_s
|
@employer = Employer.find(employer_id)
|
||||||
@employer = Employer.find_by(pl_plan_key: pl_plan_key)
|
sample_cards_pdf = IdCardPrinterService::SampleCardsGenerator.new(@employer.id).call
|
||||||
else
|
|
||||||
slug = params[:id]
|
|
||||||
@employer = Employer.find_by(slug: slug)
|
|
||||||
end
|
|
||||||
sample_cards_pdf = IdCardPrinterService::SampleCardsGenerator.new(@employer).call
|
|
||||||
|
|
||||||
send_data sample_cards_pdf.to_pdf,
|
send_data sample_cards_pdf.to_pdf,
|
||||||
filename: "#{@employer.name.parameterize(separator: "_")}_sample_cards_#{Date.today}.pdf",
|
filename: "#{@employer.name.parameterize(separator: "_")}_sample_cards_#{Date.today}.pdf",
|
||||||
@@ -108,6 +108,16 @@ module IdCard
|
|||||||
end
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
|
def update_missing_members(queued_employer_members)
|
||||||
|
queued_employer_members.each do |queued_employer|
|
||||||
|
existing_members = Member.where(pb_entity_key: queued_employer[:member_keys]).pluck(:pb_entity_key)
|
||||||
|
missing_members = queued_employer[:member_keys] - existing_members
|
||||||
|
missing_members.each do |pb_entity_key|
|
||||||
|
AutomationService::MemberUpdate.new(queued_employer[:pl_plan_key], pb_entity_key).call
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
def add_queued_count_to_employer_setup(queued_employer_members)
|
def add_queued_count_to_employer_setup(queued_employer_members)
|
||||||
|
|||||||
@@ -1,49 +1,49 @@
|
|||||||
module IdCard
|
module IdCard
|
||||||
class PrintDataController < ApplicationController
|
class PrintDataController < ApplicationController
|
||||||
|
|
||||||
def generate_sample
|
# def generate_sample
|
||||||
@employer = Employer.find_by(slug: params[:employer_slug])
|
# @employer = Employer.find_by(slug: params[:employer_slug])
|
||||||
sample_cards_pdf = IdCardPrinterService::SampleCardsGenerator.new(@employer).call
|
# sample_cards_pdf = IdCardPrinterService::SampleCardsGenerator.new(@employer).call
|
||||||
|
|
||||||
send_data sample_cards_pdf.to_pdf,
|
# send_data sample_cards_pdf.to_pdf,
|
||||||
filename: "#{@employer.name.parameterize(separator: "_")}_sample_cards_#{Date.today}.pdf",
|
# filename: "#{@employer.name.parameterize(separator: "_")}_sample_cards_#{Date.today}.pdf",
|
||||||
type: "application/pdf",
|
# type: "application/pdf",
|
||||||
disposition: 'attachment'
|
# disposition: 'attachment'
|
||||||
|
|
||||||
end
|
# end
|
||||||
|
|
||||||
def generate_print
|
# def generate_print
|
||||||
@employer = Employer.find_by(slug: params[:employer_slug])
|
# @employer = Employer.find_by(slug: params[:employer_slug])
|
||||||
cards_pdf = IdCardPrinterService::EmployerCardsGenerator.new(@employer, "PrintCard").call
|
# cards_pdf = IdCardPrinterService::EmployerCardsGenerator.new(@employer, "PrintCard").call
|
||||||
|
|
||||||
send_data cards_pdf.to_pdf,
|
# send_data cards_pdf.to_pdf,
|
||||||
filename: "#{@employer.name.parameterize(separator: "_")}_print_cards_#{Date.today}.pdf",
|
# filename: "#{@employer.name.parameterize(separator: "_")}_print_cards_#{Date.today}.pdf",
|
||||||
type: "application/pdf",
|
# type: "application/pdf",
|
||||||
disposition: 'attachment'
|
# disposition: 'attachment'
|
||||||
|
|
||||||
end
|
# end
|
||||||
|
|
||||||
def generate_mobile_display
|
# def generate_mobile_display
|
||||||
@employer = Employer.find_by(slug: params[:employer_slug])
|
# @employer = Employer.find_by(slug: params[:employer_slug])
|
||||||
cards_pdf = IdCardPrinterService::EmployerCardsGenerator.new(@employer, "MobileDisplayCard").call
|
# cards_pdf = IdCardPrinterService::EmployerCardsGenerator.new(@employer, "MobileDisplayCard").call
|
||||||
|
|
||||||
send_data cards_pdf.to_pdf,
|
# send_data cards_pdf.to_pdf,
|
||||||
filename: "#{@employer.name.parameterize(separator: "_")}_mobile_display_cards_#{Date.today}.pdf",
|
# filename: "#{@employer.name.parameterize(separator: "_")}_mobile_display_cards_#{Date.today}.pdf",
|
||||||
type: "application/pdf",
|
# type: "application/pdf",
|
||||||
disposition: 'attachment'
|
# disposition: 'attachment'
|
||||||
|
|
||||||
end
|
# end
|
||||||
|
|
||||||
def generate_full_page
|
# def generate_full_page
|
||||||
@employer = Employer.find_by(slug: params[:employer_slug])
|
# @employer = Employer.find_by(slug: params[:employer_slug])
|
||||||
cards_pdf = IdCardPrinterService::EmployerCardsGenerator.new(@employer, "FullPageCard", true).call
|
# cards_pdf = IdCardPrinterService::EmployerCardsGenerator.new(@employer, "FullPageCard", true).call
|
||||||
|
|
||||||
cards_pdf.rewind
|
# cards_pdf.rewind
|
||||||
send_data cards_pdf.sysread,
|
# send_data cards_pdf.sysread,
|
||||||
filename: "#{@employer.name.parameterize(separator: "_")}_full_page_cards_#{Date.today}.zip",
|
# filename: "#{@employer.name.parameterize(separator: "_")}_full_page_cards_#{Date.today}.zip",
|
||||||
type: 'application/zip',
|
# type: 'application/zip',
|
||||||
disposition: 'attachment'
|
# disposition: 'attachment'
|
||||||
|
|
||||||
end
|
# end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@@ -3,38 +3,17 @@ module IdCard
|
|||||||
before_action :set_employer_and_setup
|
before_action :set_employer_and_setup
|
||||||
|
|
||||||
# View Methods
|
# View Methods
|
||||||
# def edit
|
|
||||||
# @employer = Employer.find_by(slug: params[:employer_id])
|
|
||||||
# if @employer.id_card_enabled?
|
|
||||||
# @setup = @employer.id_card_setup
|
|
||||||
# else
|
|
||||||
# @setup = @employer.create_id_card_setup
|
|
||||||
# end
|
|
||||||
# render :edit
|
|
||||||
# end
|
|
||||||
|
|
||||||
# def update
|
|
||||||
# setup_params = IdCard::Setup.permitted_params(params)
|
|
||||||
# @setup = IdCard::Setup.find(params[:id])
|
|
||||||
|
|
||||||
# if @setup.update(setup_params)
|
|
||||||
# puts "sucess"
|
|
||||||
# redirect_to employer_path(@setup.employer.slug), notice: 'ID Card Setup was successfully updated.'
|
|
||||||
# else
|
|
||||||
# puts "fail"
|
|
||||||
# render :edit, status: :unprocessable_entity
|
|
||||||
# end
|
|
||||||
|
|
||||||
# end
|
|
||||||
|
|
||||||
def index
|
def index
|
||||||
provider_defaults = IdCard::ProviderSection.defaults
|
if @setup.provider_section.present? && !@setup.provider_section.default
|
||||||
@provider_options = provider_defaults.map { |p| ["Default #{p.title}", p.id] }.concat(provider_defaults.map { |p| ["New #{p.title}", "new|#{p.id}"] })
|
employer_custom_options = @setup.provider_section
|
||||||
if @setup.provider_section_id.present? && provider_defaults.map(&:id).exclude?(@setup.provider_section_id)
|
else
|
||||||
@provider_options.insert(0, ["#{@employer.name} Custom", @setup.provider_section_id])
|
employer_custom_options = IdCard::ProviderSection.new(title: "#{@employer.name} Custom")
|
||||||
end
|
end
|
||||||
@rx_options = IdCard::RxSection.all
|
@provider_options = (IdCard::ProviderSection.where(default: true) + [employer_custom_options])
|
||||||
@fairos_rx_id = IdCard::RxSection.find_by(title: "FairosRx").id
|
.compact.uniq.map { |option| [option.display_title, option.id || "99"] }
|
||||||
|
@rx_options = IdCard::RxSection.where.not(title: nil)
|
||||||
|
@rx_default = IdCard::RxSection.find_by(title: "FairosRx")
|
||||||
render :index
|
render :index
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -50,6 +29,15 @@ module IdCard
|
|||||||
redirect_to employer_path(@employer.slug), notice: 'ID Card Setup was successfully updated.'
|
redirect_to employer_path(@employer.slug), notice: 'ID Card Setup was successfully updated.'
|
||||||
else
|
else
|
||||||
puts "fail"
|
puts "fail"
|
||||||
|
if @setup.provider_section.present? && !@setup.provider_section.default
|
||||||
|
employer_custom_options = @setup.provider_section
|
||||||
|
else
|
||||||
|
employer_custom_options = IdCard::ProviderSection.new(title: "#{@employer.name} Custom")
|
||||||
|
end
|
||||||
|
@provider_options = (IdCard::ProviderSection.where(default: true) + [employer_custom_options])
|
||||||
|
.compact.uniq.map { |option| [option.display_title, option.id || "99"] }
|
||||||
|
@rx_options = IdCard::RxSection.all
|
||||||
|
@rx_default = IdCard::RxSection.find_by(title: "FairosRx")
|
||||||
render :index, status: :unprocessable_entity
|
render :index, status: :unprocessable_entity
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@@ -66,6 +54,7 @@ module IdCard
|
|||||||
redirect_to employer_path(@setup.employer.slug), notice: 'ID Card Plans successfully updated.'
|
redirect_to employer_path(@setup.employer.slug), notice: 'ID Card Plans successfully updated.'
|
||||||
else
|
else
|
||||||
puts "fail"
|
puts "fail"
|
||||||
|
@plan_templates = IdCard::Plan.templates
|
||||||
render :plans, status: :unprocessable_entity
|
render :plans, status: :unprocessable_entity
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -99,9 +88,6 @@ module IdCard
|
|||||||
end
|
end
|
||||||
|
|
||||||
def destroy
|
def destroy
|
||||||
# @resource = Resource.find(params[:id])
|
|
||||||
# @resource.destroy
|
|
||||||
# redirect_to resources_url, notice: 'Resource was successfully destroyed.'
|
|
||||||
end
|
end
|
||||||
|
|
||||||
# API Methods
|
# API Methods
|
||||||
@@ -117,190 +103,5 @@ module IdCard
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
# 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_field_exceptions_params
|
|
||||||
# params.require(:employer_setup_network_field_exceptions_form).permit(
|
|
||||||
# network_field_exceptions: [:network_logo, field_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_field_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_field_exceptions: [:network_logo, field_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
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -1,89 +0,0 @@
|
|||||||
class IdCardBenefitsTemplatesController < ApplicationController
|
|
||||||
skip_before_action :verify_authenticity_token
|
|
||||||
|
|
||||||
def new_id_card_template
|
|
||||||
@id_card_templates = IdCardTemplate.where.not(title: "BLANK")
|
|
||||||
@id_card_template_benefits = IdCardTemplate.find_by(title: "BLANK").id_card_template_benefits.sort_by(&:sequence)
|
|
||||||
end
|
|
||||||
|
|
||||||
def create_id_card_template
|
|
||||||
@id_card_template = IdCardTemplate.create(title: params[:title])
|
|
||||||
|
|
||||||
params[:benefits].each do |key, value|
|
|
||||||
IdCardTemplateBenefit.create(
|
|
||||||
sequence: key,
|
|
||||||
benefit_desc: value["desc"],
|
|
||||||
benefit: value["value"],
|
|
||||||
id_card_template: @id_card_template
|
|
||||||
)
|
|
||||||
|
|
||||||
end
|
|
||||||
|
|
||||||
respond_to do |format|
|
|
||||||
if @id_card_template.save && @id_card_template.id_card_template_benefits.length == 14
|
|
||||||
format.html { redirect_to '/dev_tools/new_id_card_setup', notice: "Template was successfully created." }
|
|
||||||
# format.json { render :show, status: :created, location: @employer }
|
|
||||||
else
|
|
||||||
format.html { render :new_id_card_template, status: :unprocessable_entity }
|
|
||||||
# format.json { render json: @employer.errors, status: :unprocessable_entity }
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def new_id_card_setup
|
|
||||||
@id_card_templates = IdCardTemplate.where.not(title: "BLANK")
|
|
||||||
@id_card_template_benefits = IdCardTemplate.find_by(title: "BLANK").id_card_template_benefits
|
|
||||||
end
|
|
||||||
|
|
||||||
def get_template_benefits
|
|
||||||
@id_card_benefits = IdCardBenefitsTemplate.find(params[:id]).id_card_benefits
|
|
||||||
render json: @id_card_benefits.as_json
|
|
||||||
end
|
|
||||||
|
|
||||||
def create_id_card_setup
|
|
||||||
employer_general = params['general']
|
|
||||||
hl_plan_code = Vhcs::HlPlanCode.new(
|
|
||||||
group_number: employer_general['group_number'],
|
|
||||||
medical_number: employer_general['group_number'],
|
|
||||||
dental_number: '',
|
|
||||||
plan_key: employer_general['pl_plan_key'],
|
|
||||||
effect_date: employer_general['effect_date']
|
|
||||||
)
|
|
||||||
|
|
||||||
# Replace fairos_info with template like for benefits
|
|
||||||
fairos_info = Vhcs::HLRXCrosRef.where(pl_plan_key: 52).first
|
|
||||||
hlrx_cros_ref = Vhcs::HLRXCrosRef.new(
|
|
||||||
group_no: employer_general['group_number'],
|
|
||||||
rx_group_id: employer_general['group_number'],
|
|
||||||
help_desk: fairos_info.help_desk,
|
|
||||||
customer_service: fairos_info.customer_service,
|
|
||||||
web_url: fairos_info.web_url,
|
|
||||||
pl_plan_key: employer_general['pl_plan_key']
|
|
||||||
)
|
|
||||||
|
|
||||||
number_of_plans = params[:number_of_plans].to_i
|
|
||||||
|
|
||||||
number_of_plans.each do |i|
|
|
||||||
value['benefits'].each do |ben_key, ben_value|
|
|
||||||
Vhcs::HLEgglestonCardBenefit.create(
|
|
||||||
plan_id: value['plan_id'],
|
|
||||||
benefit_desc: ben_value["desc"],
|
|
||||||
benefit: ben_value["value"],
|
|
||||||
sequence: ben_key,
|
|
||||||
plan_key: employer_general['pl_plan_key']
|
|
||||||
)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
respond_to do |format|
|
|
||||||
if hl_plan_code.save && hlrx_cros_ref.save
|
|
||||||
format.html { redirect_to '/dev_tools/new_id_card_setup', notice: "Card setup was successfully created." }
|
|
||||||
# format.json { render :show, status: :created, location: @employer }
|
|
||||||
else
|
|
||||||
format.html { render :new_id_card_setup, status: :unprocessable_entity }
|
|
||||||
# format.json { render json: @employer.errors, status: :unprocessable_entity }
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
end
|
|
||||||
@@ -1,57 +0,0 @@
|
|||||||
class IdCardEmployerLogoController < ApplicationController
|
|
||||||
|
|
||||||
def index
|
|
||||||
end
|
|
||||||
|
|
||||||
def show
|
|
||||||
end
|
|
||||||
|
|
||||||
def image
|
|
||||||
logo_file = IdCard::EmployerLogo.find_by(filename: params[:id])
|
|
||||||
puts params[:id]
|
|
||||||
if logo_file
|
|
||||||
logo_binary = logo_file.image_data
|
|
||||||
logo_filename = logo_file.filename
|
|
||||||
|
|
||||||
send_data logo_binary,
|
|
||||||
filename: logo_filename,
|
|
||||||
disposition: 'inline'
|
|
||||||
end
|
|
||||||
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)
|
|
||||||
|
|
||||||
CardLogoFile.create(
|
|
||||||
filename: filename,
|
|
||||||
image_data: binary_data,
|
|
||||||
content_type: meme_type,
|
|
||||||
logo_type: card_logo_file_params["logo_type"]
|
|
||||||
)
|
|
||||||
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
|
|
||||||
@@ -0,0 +1,70 @@
|
|||||||
|
class ProviderGroupsController < ApplicationController
|
||||||
|
before_action :set_provider_group, only: %i[ show edit update destroy ]
|
||||||
|
|
||||||
|
# GET /provider_groups or /provider_groups.json
|
||||||
|
def index
|
||||||
|
@provider_groups = ProviderGroup.all
|
||||||
|
end
|
||||||
|
|
||||||
|
# GET /provider_groups/1 or /provider_groups/1.json
|
||||||
|
def show
|
||||||
|
end
|
||||||
|
|
||||||
|
# GET /provider_groups/new
|
||||||
|
def new
|
||||||
|
@provider_group = ProviderGroup.new
|
||||||
|
end
|
||||||
|
|
||||||
|
# GET /provider_groups/1/edit
|
||||||
|
def edit
|
||||||
|
end
|
||||||
|
|
||||||
|
# POST /provider_groups or /provider_groups.json
|
||||||
|
def create
|
||||||
|
@provider_group = ProviderGroup.new(provider_group_params)
|
||||||
|
|
||||||
|
respond_to do |format|
|
||||||
|
if @provider_group.save
|
||||||
|
format.html { redirect_to @provider_group, notice: "Provider group was successfully created." }
|
||||||
|
format.json { render :show, status: :created, location: @provider_group }
|
||||||
|
else
|
||||||
|
format.html { render :new, status: :unprocessable_entity }
|
||||||
|
format.json { render json: @provider_group.errors, status: :unprocessable_entity }
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
# PATCH/PUT /provider_groups/1 or /provider_groups/1.json
|
||||||
|
def update
|
||||||
|
respond_to do |format|
|
||||||
|
if @provider_group.update(provider_group_params)
|
||||||
|
format.html { redirect_to @provider_group, notice: "Provider group was successfully updated.", status: :see_other }
|
||||||
|
format.json { render :show, status: :ok, location: @provider_group }
|
||||||
|
else
|
||||||
|
format.html { render :edit, status: :unprocessable_entity }
|
||||||
|
format.json { render json: @provider_group.errors, status: :unprocessable_entity }
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
# DELETE /provider_groups/1 or /provider_groups/1.json
|
||||||
|
def destroy
|
||||||
|
@provider_group.destroy!
|
||||||
|
|
||||||
|
respond_to do |format|
|
||||||
|
format.html { redirect_to provider_groups_path, notice: "Provider group was successfully destroyed.", status: :see_other }
|
||||||
|
format.json { head :no_content }
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
# Use callbacks to share common setup or constraints between actions.
|
||||||
|
def set_provider_group
|
||||||
|
@provider_group = ProviderGroup.find(params[:id])
|
||||||
|
end
|
||||||
|
|
||||||
|
# Only allow a list of trusted parameters through.
|
||||||
|
def provider_group_params
|
||||||
|
params.require(:provider_group).permit(:name)
|
||||||
|
end
|
||||||
|
end
|
||||||
@@ -0,0 +1,70 @@
|
|||||||
|
class ProvidersController < ApplicationController
|
||||||
|
before_action :set_provider, only: %i[ show edit update destroy ]
|
||||||
|
|
||||||
|
# GET /providers or /providers.json
|
||||||
|
def index
|
||||||
|
@providers = Provider.all
|
||||||
|
end
|
||||||
|
|
||||||
|
# GET /providers/1 or /providers/1.json
|
||||||
|
def show
|
||||||
|
end
|
||||||
|
|
||||||
|
# GET /providers/new
|
||||||
|
def new
|
||||||
|
@provider = Provider.new
|
||||||
|
end
|
||||||
|
|
||||||
|
# GET /providers/1/edit
|
||||||
|
def edit
|
||||||
|
end
|
||||||
|
|
||||||
|
# POST /providers or /providers.json
|
||||||
|
def create
|
||||||
|
@provider = Provider.new(provider_params)
|
||||||
|
|
||||||
|
respond_to do |format|
|
||||||
|
if @provider.save
|
||||||
|
format.html { redirect_to @provider, notice: "Provider was successfully created." }
|
||||||
|
format.json { render :show, status: :created, location: @provider }
|
||||||
|
else
|
||||||
|
format.html { render :new, status: :unprocessable_entity }
|
||||||
|
format.json { render json: @provider.errors, status: :unprocessable_entity }
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
# PATCH/PUT /providers/1 or /providers/1.json
|
||||||
|
def update
|
||||||
|
respond_to do |format|
|
||||||
|
if @provider.update(provider_params)
|
||||||
|
format.html { redirect_to @provider, notice: "Provider was successfully updated.", status: :see_other }
|
||||||
|
format.json { render :show, status: :ok, location: @provider }
|
||||||
|
else
|
||||||
|
format.html { render :edit, status: :unprocessable_entity }
|
||||||
|
format.json { render json: @provider.errors, status: :unprocessable_entity }
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
# DELETE /providers/1 or /providers/1.json
|
||||||
|
def destroy
|
||||||
|
@provider.destroy!
|
||||||
|
|
||||||
|
respond_to do |format|
|
||||||
|
format.html { redirect_to providers_path, notice: "Provider was successfully destroyed.", status: :see_other }
|
||||||
|
format.json { head :no_content }
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
# Use callbacks to share common setup or constraints between actions.
|
||||||
|
def set_provider
|
||||||
|
@provider = Provider.find(params[:id])
|
||||||
|
end
|
||||||
|
|
||||||
|
# Only allow a list of trusted parameters through.
|
||||||
|
def provider_params
|
||||||
|
params.fetch(:provider, {})
|
||||||
|
end
|
||||||
|
end
|
||||||
@@ -1,4 +0,0 @@
|
|||||||
class WelcomeController < ApplicationController
|
|
||||||
def index
|
|
||||||
end
|
|
||||||
end
|
|
||||||
@@ -3,9 +3,9 @@ class TailwindFormBuilder < ActionView::Helpers::FormBuilder
|
|||||||
# leans on the FormBuilder class_attribute `field_helpers`
|
# leans on the FormBuilder class_attribute `field_helpers`
|
||||||
# you'll want to add a method for each of the specific helpers listed here if you want to style them
|
# you'll want to add a method for each of the specific helpers listed here if you want to style them
|
||||||
|
|
||||||
TEXT_FIELD_STYLE = "bg-gray-200 rounded py-2 px-4 text-bluetang font-semibold leading-tight focus:outline-none focus:bg-white".freeze
|
TEXT_FIELD_STYLE = "flex bg-gray-200 rounded py-2 px-4 text-bluetang font-semibold leading-tight focus:outline-none focus:bg-white border border-platinum".freeze
|
||||||
SELECT_FIELD_STYLE = "block bg-gray-200 text-gray-700 py-2 px-4 rounded leading-tight focus:outline-none focus:bg-white".freeze
|
SELECT_FIELD_STYLE = "block bg-gray-200 text-bluetang py-2 px-4 font-semibold rounded leading-tight focus:outline-none focus:bg-white border border-platinum".freeze
|
||||||
SUBMIT_BUTTON_STYLE = "cursor-pointer shadow bg-bronze focus:shadow-outline focus:outline-none text-white font-bold py-2 px-4 rounded hover:bg-copper".freeze
|
SUBMIT_BUTTON_STYLE = "cursor-pointer font-bold text-lg text-platinum hover:text-bronze bg-cobalt-vivid hover:bg-deepcove border-2 border-cobalt-vivid py-2 px-4 rounded".freeze
|
||||||
|
|
||||||
text_field_helpers.each do |field_method|
|
text_field_helpers.each do |field_method|
|
||||||
class_eval <<-RUBY_EVAL, __FILE__, __LINE__ + 1
|
class_eval <<-RUBY_EVAL, __FILE__, __LINE__ + 1
|
||||||
@@ -48,6 +48,7 @@ class TailwindFormBuilder < ActionView::Helpers::FormBuilder
|
|||||||
custom_opts, opts = partition_custom_opts(options)
|
custom_opts, opts = partition_custom_opts(options)
|
||||||
|
|
||||||
classes = apply_style_classes(TEXT_FIELD_STYLE, custom_opts, object_method)
|
classes = apply_style_classes(TEXT_FIELD_STYLE, custom_opts, object_method)
|
||||||
|
puts "classes: #{classes}"
|
||||||
|
|
||||||
field = send(field_method, object_method, {
|
field = send(field_method, object_method, {
|
||||||
class: classes,
|
class: classes,
|
||||||
@@ -63,7 +64,7 @@ class TailwindFormBuilder < ActionView::Helpers::FormBuilder
|
|||||||
label = tailwind_label(object_method, label_options, field_options)
|
label = tailwind_label(object_method, label_options, field_options)
|
||||||
error_label = error_label(object_method, field_options)
|
error_label = error_label(object_method, field_options)
|
||||||
|
|
||||||
@template.content_tag("div", label + error_label, {class: "flex flex-col items-start"})
|
@template.content_tag("div", label + error_label, {class: "flex justify-between"})
|
||||||
end
|
end
|
||||||
|
|
||||||
def tailwind_label(object_method, label_options, field_options)
|
def tailwind_label(object_method, label_options, field_options)
|
||||||
@@ -73,8 +74,8 @@ class TailwindFormBuilder < ActionView::Helpers::FormBuilder
|
|||||||
[object_method.to_s.titleize, {}]
|
[object_method.to_s.titleize, {}]
|
||||||
end
|
end
|
||||||
|
|
||||||
label_classes = label_opts[:class] || "block text-platinum font-bold md:text-right mb-1 md:mb-0 pr-4"
|
label_classes = label_opts[:class] || "block shrink-0 text-platinum font-bold md:text-right mb-1 md:mb-0 pr-4"
|
||||||
label_classes += " text-yellow-800 dark:text-yellow-400" if field_options[:disabled]
|
label_classes += " dark:text-brightlava" if field_options[:disabled]
|
||||||
label(object_method, text, {
|
label(object_method, text, {
|
||||||
class: label_classes
|
class: label_classes
|
||||||
}.merge(label_opts.except(:class)))
|
}.merge(label_opts.except(:class)))
|
||||||
@@ -83,15 +84,16 @@ class TailwindFormBuilder < ActionView::Helpers::FormBuilder
|
|||||||
def error_label(object_method, options)
|
def error_label(object_method, options)
|
||||||
if errors_for(object_method).present?
|
if errors_for(object_method).present?
|
||||||
error_message = @object.errors[object_method].collect(&:titleize).join(", ")
|
error_message = @object.errors[object_method].collect(&:titleize).join(", ")
|
||||||
tailwind_label(object_method, {text: error_message, class: " font-bold text-red-500"}, options)
|
tailwind_label(object_method, {text: error_message, class: " font-bold text-right text-bronze"}, options)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def border_color_classes(object_method)
|
def border_color_classes(object_method)
|
||||||
if errors_for(object_method).present?
|
if errors_for(object_method).present?
|
||||||
" border-2 border-red-400 focus:border-rose-200"
|
" border-4 dark:border-bronze focus:border-atmosphere"
|
||||||
else
|
else
|
||||||
" border border-platinum focus:border-yellow-700"
|
""
|
||||||
|
# " border border-platinum focus:border-yellow-700"
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@@ -1,85 +0,0 @@
|
|||||||
class EmployerSetupForm
|
|
||||||
include ActiveModel::Model
|
|
||||||
include ActiveModel::Attributes
|
|
||||||
|
|
||||||
FIRST_STEP = "general_information"
|
|
||||||
|
|
||||||
attribute :current_step, :string, default: FIRST_STEP
|
|
||||||
attribute :pl_plan_key, :string
|
|
||||||
attribute :employer_setup_process_id, :integer
|
|
||||||
|
|
||||||
def initialize(params = {})
|
|
||||||
# if params.present?
|
|
||||||
# params = permitted_params(params)
|
|
||||||
# end
|
|
||||||
# @current_step = params["current_step"]
|
|
||||||
# @employer_setup_process_id = params["employer_setup_process_id"]
|
|
||||||
super(params)
|
|
||||||
|
|
||||||
unless self.steps.first == FIRST_STEP
|
|
||||||
raise StepMisalignmentError, "FIRST_STEP does not match first entry in steps"
|
|
||||||
end
|
|
||||||
# @general_information_data = EmployerSetupGeneralInformationForm.new(attributes[:general_information_data])
|
|
||||||
# @plans_data = EmployerSetupPlansForm.new(attributes[:plans_data])
|
|
||||||
# @network_exceptions_data = EmployerSetupNetworkExceptionsForm.new(attributes[:network_exceptions_data])
|
|
||||||
end
|
|
||||||
|
|
||||||
# def self.form_session_init
|
|
||||||
# {
|
|
||||||
# general_information_data: {},
|
|
||||||
# plans_data: {},
|
|
||||||
# network_exceptions_data: {}
|
|
||||||
# }
|
|
||||||
# end
|
|
||||||
|
|
||||||
# def steps
|
|
||||||
# %w[general_information plans network_exceptions summary]
|
|
||||||
# end
|
|
||||||
|
|
||||||
def steps
|
|
||||||
%w[general_information plans network_exceptions summary]
|
|
||||||
end
|
|
||||||
|
|
||||||
def current_step_view
|
|
||||||
"employer_setup/#{self.current_step}"
|
|
||||||
end
|
|
||||||
|
|
||||||
def next_step
|
|
||||||
index = steps.index(current_step)
|
|
||||||
if index && index < steps.length - 1
|
|
||||||
steps[index + 1]
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def previous_step
|
|
||||||
index = steps.index(current_step)
|
|
||||||
steps[index - 1] if index && index > 0
|
|
||||||
end
|
|
||||||
|
|
||||||
def permitted_params(params)
|
|
||||||
params.permit(
|
|
||||||
:pl_plan_key,
|
|
||||||
:current_step
|
|
||||||
)
|
|
||||||
end
|
|
||||||
|
|
||||||
def self.permitted_params
|
|
||||||
[
|
|
||||||
:pl_plan_key,
|
|
||||||
:current_step
|
|
||||||
]
|
|
||||||
end
|
|
||||||
|
|
||||||
def save
|
|
||||||
if valid?
|
|
||||||
process = EmployerSetupProcess.find(@employer_setup_process_id)
|
|
||||||
process.update(
|
|
||||||
status: "entered"
|
|
||||||
)
|
|
||||||
true
|
|
||||||
else
|
|
||||||
false
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
end
|
|
||||||
@@ -1,62 +0,0 @@
|
|||||||
class EmployerSetupForm
|
|
||||||
include ActiveModel::Model
|
|
||||||
include ActiveModel::Attributes
|
|
||||||
|
|
||||||
attribute :current_step, :string, default: "general"
|
|
||||||
attribute :name, :string
|
|
||||||
attribute :employer_logo
|
|
||||||
attribute :group_number, :string
|
|
||||||
attribute :pl_plan_key, :string
|
|
||||||
attribute :effect_date, :string
|
|
||||||
attribute :number_of_plans, :integer
|
|
||||||
attribute :network, :string
|
|
||||||
attribute :number_of_additional_network_logos, :integer
|
|
||||||
attribute :plans, array: true, default: -> { [] }
|
|
||||||
# attribute :benefit_descs, :hash, default: -> { {} }
|
|
||||||
attribute :network_exceptions, array: true, default: -> { [] }
|
|
||||||
|
|
||||||
attr_accessor :benefit_descs
|
|
||||||
|
|
||||||
# Define validations based on the current step
|
|
||||||
with_options on: :general_info do
|
|
||||||
validates :name, presence: true
|
|
||||||
validates :employer_logo, presence: true
|
|
||||||
validates :group_number, presence: true
|
|
||||||
validates :pl_plan_key, presence: true
|
|
||||||
validates :effect_date, presence: true
|
|
||||||
validates :number_of_plans, presence: true
|
|
||||||
validates :network, presence: true
|
|
||||||
# validates :number_of_additional_network_logos, presence: true if network = "cigna+"
|
|
||||||
end
|
|
||||||
|
|
||||||
with_options on: :plan_info do
|
|
||||||
validates :plans, presence: true
|
|
||||||
# validates :benefit_descs, presence: true
|
|
||||||
end
|
|
||||||
|
|
||||||
with_options on: :network_info do
|
|
||||||
# validates :network_exceptions, presence: true if number_of_additional_network_logos > 0
|
|
||||||
end
|
|
||||||
|
|
||||||
# def initialize(params = {})
|
|
||||||
# super(params)
|
|
||||||
# # Ensure the attribute is a hash after initialization
|
|
||||||
# @benefit_descs = params[:benefit_descs].to_h if params[:benefit_descs]
|
|
||||||
# end
|
|
||||||
|
|
||||||
def benefit_descs
|
|
||||||
@benefit_descs ||= {}
|
|
||||||
end
|
|
||||||
|
|
||||||
def save
|
|
||||||
# Implement logic to save data to models after all steps are complete
|
|
||||||
# For example, create a User record with the collected data
|
|
||||||
if valid? && step == total_steps
|
|
||||||
# User.create!(name: name, email: email, password: password)
|
|
||||||
true
|
|
||||||
else
|
|
||||||
false
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
end
|
|
||||||
@@ -1,130 +0,0 @@
|
|||||||
class EmployerSetupGeneralInformationForm
|
|
||||||
include ActiveModel::Model
|
|
||||||
include ActiveModel::Attributes
|
|
||||||
|
|
||||||
attribute :name, :string
|
|
||||||
attribute :employer_logo
|
|
||||||
attribute :group_number, :string
|
|
||||||
attribute :dental, :boolean, default: false
|
|
||||||
attribute :pl_plan_key, :string
|
|
||||||
attribute :effective_date, :string
|
|
||||||
# attribute :number_of_plans, :integer
|
|
||||||
attribute :network, :string
|
|
||||||
# attribute :number_of_additional_network_logos, :integer
|
|
||||||
|
|
||||||
attr_accessor :employer_setup_process_id
|
|
||||||
|
|
||||||
validates :name, presence: true
|
|
||||||
validates :employer_logo, presence: true
|
|
||||||
validates :group_number, presence: true
|
|
||||||
validates :effective_date, presence: true
|
|
||||||
# validates :number_of_plans, presence: true
|
|
||||||
validates :network, presence: true
|
|
||||||
# validates :number_of_additional_network_logos, presence: true if network = "cigna+"
|
|
||||||
|
|
||||||
# def initialize(attributes = {})
|
|
||||||
# if attributes
|
|
||||||
# permitted_attributes = form_strong_params(attributes)
|
|
||||||
# super(permitted_attributes)
|
|
||||||
# end
|
|
||||||
|
|
||||||
def initialize(employer_setup_process_id, params = {})
|
|
||||||
@employer_setup_process_id = employer_setup_process_id
|
|
||||||
if params.present?
|
|
||||||
form_params = permitted_params(params)
|
|
||||||
super(form_params)
|
|
||||||
else
|
|
||||||
super(params)
|
|
||||||
load_from_process
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def load_from_process
|
|
||||||
process = EmployerSetupProcess.find(@employer_setup_process_id)
|
|
||||||
|
|
||||||
self.name = process.employer_name
|
|
||||||
# self.employer_logo = process.
|
|
||||||
self.group_number = process.group_number
|
|
||||||
self.dental = false
|
|
||||||
self.pl_plan_key = process.pl_plan_key
|
|
||||||
self.effective_date = process.effective_date
|
|
||||||
self.network = process.network_provider
|
|
||||||
end
|
|
||||||
|
|
||||||
def permitted_params(params)
|
|
||||||
params.require(:employer_setup_general_information_form).permit(
|
|
||||||
:name,
|
|
||||||
:employer_logo,
|
|
||||||
:group_number,
|
|
||||||
:dental,
|
|
||||||
:pl_plan_key,
|
|
||||||
:effective_date,
|
|
||||||
:number_of_plans,
|
|
||||||
:network,
|
|
||||||
:number_of_additional_network_logos
|
|
||||||
)
|
|
||||||
end
|
|
||||||
|
|
||||||
def save
|
|
||||||
# Implement logic to save data to models after all steps are complete
|
|
||||||
# For example, create a User record with the collected data
|
|
||||||
if valid?
|
|
||||||
process = EmployerSetupProcess.find(@employer_setup_process_id)
|
|
||||||
process.update(
|
|
||||||
employer_name: name,
|
|
||||||
group_number: group_number,
|
|
||||||
pl_plan_key: pl_plan_key,
|
|
||||||
effective_date: effective_date,
|
|
||||||
network_provider: network
|
|
||||||
)
|
|
||||||
|
|
||||||
# hl_plan_code = Vhcs::HlPlanCode.create!(
|
|
||||||
# group_number: group_number,
|
|
||||||
# medical_number: group_number,
|
|
||||||
# dental_number: '',
|
|
||||||
# plan_key: pl_plan_key,
|
|
||||||
# effect_date: effective_date
|
|
||||||
# )
|
|
||||||
|
|
||||||
# # Replace fairos_info with template like for benefits
|
|
||||||
# fairos_info = Vhcs::HlrxCrosRef.where(pl_plan_key: 52).first
|
|
||||||
# hlrx_cros_ref = Vhcs::HlrxCrosRef.create!(
|
|
||||||
# group_no: group_number,
|
|
||||||
# rx_group_id: group_number,
|
|
||||||
# help_desk: fairos_info.help_desk,
|
|
||||||
# customer_service: fairos_info.customer_service,
|
|
||||||
# web_url: fairos_info.web_url,
|
|
||||||
# pl_plan_key: pl_plan_key
|
|
||||||
# )
|
|
||||||
|
|
||||||
# web_employer = BrittonWeb::Employers.create!(
|
|
||||||
# name: name,
|
|
||||||
# pl_plan_key: pl_plan_key,
|
|
||||||
# dental_plan: dental,
|
|
||||||
# single_card_template: 'FairosRxIDCard',
|
|
||||||
# logo: employer_logo.original_filename
|
|
||||||
# )
|
|
||||||
|
|
||||||
# default_network_logo =
|
|
||||||
# case
|
|
||||||
# when network.include?("cig")
|
|
||||||
# "CignaLogo.png"
|
|
||||||
# when network.include?("med")
|
|
||||||
# "Logo_MC_PMS.png"
|
|
||||||
# else
|
|
||||||
# "CignaLogo.png"
|
|
||||||
# end
|
|
||||||
|
|
||||||
# BrittonWeb::NetworkLogos.create!(
|
|
||||||
# employer_id: web_employer.id,
|
|
||||||
# net_logo: default_network_logo,
|
|
||||||
# default: true
|
|
||||||
# )
|
|
||||||
|
|
||||||
true
|
|
||||||
else
|
|
||||||
false
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
end
|
|
||||||
@@ -1,107 +0,0 @@
|
|||||||
class EmployerSetupNetworkExceptionsForm
|
|
||||||
include ActiveModel::Model
|
|
||||||
include ActiveModel::Attributes
|
|
||||||
|
|
||||||
Network_exception = Struct.new(:network_logo, :exceptions)
|
|
||||||
attribute :network_exceptions, :array_of_items, default: -> { [] }
|
|
||||||
attribute :pl_plan_key, :string
|
|
||||||
|
|
||||||
attr_accessor :employer_setup_process_id
|
|
||||||
|
|
||||||
# validates :network_exceptions, presence: true if number_of_additional_network_logos > 0
|
|
||||||
|
|
||||||
def initialize(employer_setup_process_id, params = {})
|
|
||||||
@employer_setup_process_id = employer_setup_process_id
|
|
||||||
if params.present?
|
|
||||||
form_params = permitted_params(params)
|
|
||||||
super(form_params)
|
|
||||||
else
|
|
||||||
super(params)
|
|
||||||
end
|
|
||||||
|
|
||||||
end
|
|
||||||
|
|
||||||
def permitted_params(params)
|
|
||||||
params.require(:employer_setup_network_exceptions_form).permit(
|
|
||||||
network_exceptions: [
|
|
||||||
:network_logo,
|
|
||||||
exceptions: [
|
|
||||||
:type,
|
|
||||||
:value
|
|
||||||
]
|
|
||||||
]
|
|
||||||
)
|
|
||||||
end
|
|
||||||
|
|
||||||
# def self.permitted_params
|
|
||||||
# [
|
|
||||||
# network_exceptions: [
|
|
||||||
# :network_logo,
|
|
||||||
# exceptions: [
|
|
||||||
# :type,
|
|
||||||
# :value
|
|
||||||
# ]
|
|
||||||
# ]
|
|
||||||
# ]
|
|
||||||
# end
|
|
||||||
|
|
||||||
def pull_from_employer_setup_form(attributes = {})
|
|
||||||
if attributes['pl_plan_key']
|
|
||||||
self.pl_plan_key = attributes['pl_plan_key']
|
|
||||||
end
|
|
||||||
if attributes['number_of_additional_network_logos']
|
|
||||||
self.number_of_additional_network_logos = attributes['number_of_additional_network_logos']
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def process_for_save(network_exceptions)
|
|
||||||
ne_array = []
|
|
||||||
network_exceptions.first.each do |ne|
|
|
||||||
processed_ne = ne.last
|
|
||||||
exceptions_array = []
|
|
||||||
processed_ne['exceptions'].each do |e|
|
|
||||||
exceptions_array.push(e.last)
|
|
||||||
end
|
|
||||||
processed_ne['exceptions'] = exceptions_array
|
|
||||||
ne_array.push(processed_ne)
|
|
||||||
end
|
|
||||||
ne_array
|
|
||||||
end
|
|
||||||
|
|
||||||
def save
|
|
||||||
# Implement logic to save data to models after all steps are complete
|
|
||||||
# For example, create a User record with the collected data
|
|
||||||
if valid?
|
|
||||||
process = EmployerSetupProcess.find(@employer_setup_process_id)
|
|
||||||
# employer = BrittonWeb::Employers.find_by(pl_plan_key: pl_plan_key)
|
|
||||||
if network_exceptions
|
|
||||||
network_exceptions_data = process_for_save(network_exceptions)
|
|
||||||
end
|
|
||||||
# network_exceptions_data.each do |ne|
|
|
||||||
# ne['exceptions'].each do |ex|
|
|
||||||
# BrittonWeb::NetworkLogos.create!(
|
|
||||||
# employer_id: employer.id,
|
|
||||||
# net_logo: ne['network_logo'].original_filename,
|
|
||||||
# exception_type: ex['type'].downcase,
|
|
||||||
# exception_value: ex['value'],
|
|
||||||
# default: false
|
|
||||||
# )
|
|
||||||
# end
|
|
||||||
# end
|
|
||||||
|
|
||||||
true
|
|
||||||
else
|
|
||||||
false
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
end
|
|
||||||
|
|
||||||
|
|
||||||
class NetworkException
|
|
||||||
include ActiveModel::Model
|
|
||||||
include ActiveModel::Attributes
|
|
||||||
|
|
||||||
attribute :network_logo
|
|
||||||
attribute :exceptions, array: true, default: -> { [] }
|
|
||||||
end
|
|
||||||
@@ -1,186 +0,0 @@
|
|||||||
class EmployerSetupPlansForm
|
|
||||||
include ActiveModel::Model
|
|
||||||
include ActiveModel::Attributes
|
|
||||||
|
|
||||||
PLAN_COLORS = ['atmosphere', 'verdigris', 'bluemana', 'cobalt']
|
|
||||||
|
|
||||||
attribute :plans, array: true, default: -> { [Plan.new] }
|
|
||||||
attribute :pl_plan_key, :string
|
|
||||||
attribute :benefit_descs, hash: true, default: -> { Plan.new }
|
|
||||||
|
|
||||||
attr_accessor :plan_templates
|
|
||||||
attr_accessor :benefits_template
|
|
||||||
attr_accessor :employer_setup_process_id
|
|
||||||
|
|
||||||
validates :plans, presence: true
|
|
||||||
validates :benefit_descs, presence: true
|
|
||||||
|
|
||||||
def initialize(employer_setup_process_id, params = {})
|
|
||||||
@employer_setup_process_id = employer_setup_process_id
|
|
||||||
if params.present?
|
|
||||||
form_params = permitted_params(params)
|
|
||||||
super(form_params)
|
|
||||||
else
|
|
||||||
super(params)
|
|
||||||
process_plans = EmployerSetupProcess.find(@employer_setup_process_id).plans
|
|
||||||
if process_plans.present?
|
|
||||||
self.plans = process_plans
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
@plan_templates = IdCardBenefitsTemplate.where.not(title: "BLANK")
|
|
||||||
@benefits_template = IdCardBenefitsTemplate.find_by(title: "BLANK").id_card_benefits.sort_by(&:sequence)
|
|
||||||
|
|
||||||
# if attributes.present? && attributes[:plans].present?
|
|
||||||
# self.plans = Array(attributes[:plans])
|
|
||||||
# else
|
|
||||||
# self.plans = [new_plan]
|
|
||||||
# end
|
|
||||||
end
|
|
||||||
|
|
||||||
# def plans_attributes=(attributes)
|
|
||||||
# self.plans = attributes.values.map { |plan_attrs| Plan.new(plan_attrs) }
|
|
||||||
# end
|
|
||||||
|
|
||||||
def persisted?
|
|
||||||
false
|
|
||||||
end
|
|
||||||
|
|
||||||
|
|
||||||
# The core method to initialize the array with a single blank item.
|
|
||||||
def ensure_one_plan_exists
|
|
||||||
if plans.empty?
|
|
||||||
self.plans << PlanForm.new
|
|
||||||
self.plans << PlanForm.new
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def bulild_descs_plan
|
|
||||||
self.benefit_descs = IdCardBenefitsTemplate.find_by(title: "BLANK").id_card_benefits.sort_by(&:sequence)
|
|
||||||
end
|
|
||||||
|
|
||||||
def self.new_plan
|
|
||||||
plan = {}
|
|
||||||
self.permited_plans_keys.each do |key|
|
|
||||||
plan[key] = ""
|
|
||||||
end
|
|
||||||
plan
|
|
||||||
end
|
|
||||||
|
|
||||||
def process_params(employer_setup_process_id)
|
|
||||||
process = EmployerSetupProcess.find(employer_setup_process_id)
|
|
||||||
process.plans
|
|
||||||
end
|
|
||||||
|
|
||||||
def permitted_params(params)
|
|
||||||
params.require(:employer_setup_plans_form).permit(
|
|
||||||
:pl_plan_key,
|
|
||||||
plans: self.permited_plans_keys,
|
|
||||||
benefit_descs: self.permited_plans_keys
|
|
||||||
)
|
|
||||||
end
|
|
||||||
|
|
||||||
def pull_from_employer_setup_form(attributes = {})
|
|
||||||
if attributes['pl_plan_key']
|
|
||||||
self.pl_plan_key = attributes['pl_plan_key']
|
|
||||||
end
|
|
||||||
if attributes['number_of_plans']
|
|
||||||
self.number_of_plans = attributes['number_of_plans']
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
# def form_strong_params(attributes)
|
|
||||||
# attributes.require(:employer_setup_plans_form).permit(
|
|
||||||
# plans: permited_plans_keys,
|
|
||||||
# benefit_descs: benefit_sequence_keys
|
|
||||||
# )
|
|
||||||
# end
|
|
||||||
|
|
||||||
def self.permited_plans_keys
|
|
||||||
(1..14).map { |i| "benefit_#{i}".to_sym }.push(:plan_id)
|
|
||||||
end
|
|
||||||
|
|
||||||
def permited_plans_keys
|
|
||||||
(1..14).map { |i| "benefit_#{i}".to_sym }.push(:plan_id, :id)
|
|
||||||
end
|
|
||||||
|
|
||||||
def save
|
|
||||||
# Implement logic to save data to models after all steps are complete
|
|
||||||
# For example, create a User record with the collected data
|
|
||||||
if valid?
|
|
||||||
process = EmployerSetupProcess.find(@employer_setup_process_id)
|
|
||||||
# process.plans.update(plans: plans)
|
|
||||||
|
|
||||||
planss = Array.wrap(plans)
|
|
||||||
|
|
||||||
plans.each_with_index do |plan, i|
|
|
||||||
plan_info = plan.last
|
|
||||||
plan_id = plan_info[:plan_id].present? ? plan_info[:plan_id].to_i : "temp #{i}"
|
|
||||||
plan_info.delete(:plan_id)
|
|
||||||
new_plan = process.plans.create(plan_id: plan_id)
|
|
||||||
plan_info.each do |key, value|
|
|
||||||
sequence = key.delete_prefix("benefit_").to_i
|
|
||||||
benefit = new_plan.plan_benefits.find_by(sequence: sequence)
|
|
||||||
benefit.update(
|
|
||||||
benefit: value
|
|
||||||
)
|
|
||||||
# Vhcs::HlEgglestonCardBenefit.create(
|
|
||||||
# plan_id: plan_id,
|
|
||||||
# benefit_desc: benefit_descs["#{key}"],
|
|
||||||
# benefit: value,
|
|
||||||
# sequence: sequence,
|
|
||||||
# plan_key: pl_plan_key
|
|
||||||
# )
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
|
|
||||||
# plans.each do |plan|
|
|
||||||
# plan_info = plan.last
|
|
||||||
# plan_id = plan_info.delete(:plan_id).to_i
|
|
||||||
# plan_info.each do |key, value|
|
|
||||||
# sequence = key.delete_prefix("benefit_").to_i
|
|
||||||
# Vhcs::HlEgglestonCardBenefit.create(
|
|
||||||
# plan_id: plan_id,
|
|
||||||
# benefit_desc: benefit_descs["#{key}"],
|
|
||||||
# benefit: value,
|
|
||||||
# sequence: sequence,
|
|
||||||
# plan_key: pl_plan_key
|
|
||||||
# )
|
|
||||||
# end
|
|
||||||
# end
|
|
||||||
true
|
|
||||||
else
|
|
||||||
false
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
end
|
|
||||||
|
|
||||||
class PlanForm
|
|
||||||
include ActiveModel::Model
|
|
||||||
include ActiveModel::Attributes
|
|
||||||
|
|
||||||
attribute :plan_id, :string
|
|
||||||
|
|
||||||
def initialize(attributes = {})
|
|
||||||
self.generate_attributes(14, "benefit_")
|
|
||||||
super(attributes)
|
|
||||||
end
|
|
||||||
|
|
||||||
def persisted?
|
|
||||||
false
|
|
||||||
end
|
|
||||||
|
|
||||||
def generate_attributes(count, prefix)
|
|
||||||
count.times do |i|
|
|
||||||
# attr_accessor :"#{prefix}#{i + 1}"
|
|
||||||
self.class.attribute "#{prefix}#{i + 1}".to_sym, :string
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
# dynamic_attribute_names.each do |attr_name|
|
|
||||||
# # Define each attribute as a String type (you can customize the type)
|
|
||||||
# self.class.attribute attr_name.to_sym, :string
|
|
||||||
# end
|
|
||||||
@@ -1,2 +0,0 @@
|
|||||||
module ArticlesHelper
|
|
||||||
end
|
|
||||||
@@ -0,0 +1,2 @@
|
|||||||
|
module BrokersHelper
|
||||||
|
end
|
||||||
@@ -1,2 +0,0 @@
|
|||||||
module CardProvidersHelper
|
|
||||||
end
|
|
||||||
@@ -1,2 +0,0 @@
|
|||||||
module CardRxesHelper
|
|
||||||
end
|
|
||||||
@@ -0,0 +1,2 @@
|
|||||||
|
module CarriersHelper
|
||||||
|
end
|
||||||
@@ -1,2 +0,0 @@
|
|||||||
module CommentsHelper
|
|
||||||
end
|
|
||||||
@@ -1,2 +0,0 @@
|
|||||||
module IdCardEmployersHelper
|
|
||||||
end
|
|
||||||
@@ -0,0 +1,2 @@
|
|||||||
|
module ProviderGroupsHelper
|
||||||
|
end
|
||||||
@@ -0,0 +1,2 @@
|
|||||||
|
module ProvidersHelper
|
||||||
|
end
|
||||||
@@ -1,2 +0,0 @@
|
|||||||
module WelcomeHelper
|
|
||||||
end
|
|
||||||
@@ -2,8 +2,15 @@
|
|||||||
import "@hotwired/turbo-rails"
|
import "@hotwired/turbo-rails"
|
||||||
import "trix"
|
import "trix"
|
||||||
import "@rails/actiontext"
|
import "@rails/actiontext"
|
||||||
import { Application } from "@hotwired/stimulus"
|
// import { Application } from "@hotwired/stimulus"
|
||||||
import { eagerLoadControllersFrom } from "@hotwired/stimulus-loading"
|
// import { eagerLoadControllersFrom } from "@hotwired/stimulus-loading"
|
||||||
|
import "controllers"
|
||||||
|
// import { createIcons, icons } from "lucide-static";
|
||||||
|
|
||||||
|
// document.addEventListener("turbo:load", () => {
|
||||||
|
// createIcons({ icons });
|
||||||
|
// });
|
||||||
|
|
||||||
|
// const application = Application.start()
|
||||||
|
// eagerLoadControllersFrom("controllers", application)
|
||||||
|
|
||||||
const application = Application.start()
|
|
||||||
eagerLoadControllersFrom("controllers", application)
|
|
||||||
|
|||||||
@@ -26,7 +26,9 @@ export default class extends Controller {
|
|||||||
|
|
||||||
async #updateFields(templatePlanData) {
|
async #updateFields(templatePlanData) {
|
||||||
const titleElement = this.titleTarget
|
const titleElement = this.titleTarget
|
||||||
titleElement.value = templatePlanData.title.match(/^(.*\d)k(?=\d)/i)[0].replace(/(\d)/, ' $1')
|
if (!titleElement.value) {
|
||||||
|
titleElement.value = templatePlanData.title.match(/^(.*\d)k(?=\d)/i)[0].replace(/(\d)/, ' $1')
|
||||||
|
}
|
||||||
const benefitTargetsList = this.benefitTargets
|
const benefitTargetsList = this.benefitTargets
|
||||||
templatePlanData.plan_benefits.forEach(function(bene) {
|
templatePlanData.plan_benefits.forEach(function(bene) {
|
||||||
const targetElement = benefitTargetsList.find(
|
const targetElement = benefitTargetsList.find(
|
||||||
|
|||||||
@@ -0,0 +1,35 @@
|
|||||||
|
// app/javascript/controllers/font_validator_controller.js
|
||||||
|
import { Controller } from "@hotwired/stimulus"
|
||||||
|
|
||||||
|
export default class extends Controller {
|
||||||
|
static targets = ["textField", "hiddenField", "countDisplayField"]
|
||||||
|
|
||||||
|
connect() {
|
||||||
|
this.measure()
|
||||||
|
}
|
||||||
|
|
||||||
|
measure() {
|
||||||
|
const text = this.textFieldTarget.value
|
||||||
|
const pixelWidth = this.getTextWidth(text, "bold 6px sans-serif")
|
||||||
|
|
||||||
|
// Do something with the pixel width (e.g., store in a hidden field for Rails to read)
|
||||||
|
if (this.hasHiddenFieldTarget) {
|
||||||
|
this.hiddenFieldTarget.value = pixelWidth
|
||||||
|
this.countDisplayFieldTarget.textContent = `${pixelWidth}`
|
||||||
|
if (pixelWidth > 100) {
|
||||||
|
this.countDisplayFieldTarget.classList.add("text-brightlava")
|
||||||
|
} else {
|
||||||
|
this.countDisplayFieldTarget.classList.remove("text-brightlava")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Canvas measurement trick
|
||||||
|
getTextWidth(text, font) {
|
||||||
|
const canvas = document.createElement("canvas")
|
||||||
|
const context = canvas.getContext("2d")
|
||||||
|
context.font = font
|
||||||
|
const metrics = context.measureText(text)
|
||||||
|
return Math.ceil(metrics.width)
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,16 +0,0 @@
|
|||||||
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}!`
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,11 +1,8 @@
|
|||||||
// Import and register all your controllers from the importmap under controllers/*
|
// This file is auto-generated by ./bin/rails stimulus:manifest:update
|
||||||
|
// Run that command whenever you add a new controller or create them with
|
||||||
|
// ./bin/rails generate stimulus controllerName
|
||||||
import { application } from "controllers/application"
|
import { application } from "controllers/application"
|
||||||
|
|
||||||
// Eager load all controllers defined in the import map under controllers/**/*_controller
|
// Eager load all controllers defined in the import map under controllers/**/*_controller
|
||||||
import { eagerLoadControllersFrom } from "@hotwired/stimulus-loading"
|
import { eagerLoadControllersFrom } from "@hotwired/stimulus-loading"
|
||||||
eagerLoadControllersFrom("controllers", application)
|
eagerLoadControllersFrom("controllers", application)
|
||||||
|
|
||||||
// Lazy load controllers as they appear in the DOM (remember not to preload controllers in import map!)
|
|
||||||
// import { lazyLoadControllersFrom } from "@hotwired/stimulus-loading"
|
|
||||||
// lazyLoadControllersFrom("controllers", application)
|
|
||||||
|
|||||||
@@ -3,7 +3,8 @@ import { Controller } from "@hotwired/stimulus";
|
|||||||
export default class extends Controller {
|
export default class extends Controller {
|
||||||
static values = {
|
static values = {
|
||||||
logoType: String,
|
logoType: String,
|
||||||
employerName: String
|
employerName: String,
|
||||||
|
employerId: Number
|
||||||
}
|
}
|
||||||
static targets = ["preview", "previewContainer", "logoSelect", "logoIdField", "logoNameField", "initialLogoFile"];
|
static targets = ["preview", "previewContainer", "logoSelect", "logoIdField", "logoNameField", "initialLogoFile"];
|
||||||
|
|
||||||
@@ -89,8 +90,13 @@ export default class extends Controller {
|
|||||||
|
|
||||||
async uploadLogoToServer(logoFile) {
|
async uploadLogoToServer(logoFile) {
|
||||||
console.log('in uploadLogoToServer');
|
console.log('in uploadLogoToServer');
|
||||||
|
const employerId = this.employerIdValue
|
||||||
|
|
||||||
const formData = new FormData();
|
const formData = new FormData();
|
||||||
formData.append(`id_card_${this.logoTypeValue}_logo[logo_file]`, logoFile);
|
formData.append(`id_card_${this.logoTypeValue}_logo[logo_file]`, logoFile);
|
||||||
|
if (employerId) {
|
||||||
|
formData.append(`id_card_${this.logoTypeValue}_logo[employer_id]`, employerId);
|
||||||
|
}
|
||||||
|
|
||||||
const csrfToken = document.querySelector("meta[name='csrf-token']").content;
|
const csrfToken = document.querySelector("meta[name='csrf-token']").content;
|
||||||
|
|
||||||
|
|||||||
@@ -10,11 +10,11 @@ export default class extends Controller {
|
|||||||
syncDefaults() {
|
syncDefaults() {
|
||||||
const pnValue = this.providerNetworkFieldTarget.value
|
const pnValue = this.providerNetworkFieldTarget.value
|
||||||
if (pnValue == "Cigna") {
|
if (pnValue == "Cigna") {
|
||||||
this.networkLogoFieldTarget.value = 1
|
this.networkLogoFieldTarget.value = 9
|
||||||
this.providerSectionFieldTarget.value = 30
|
this.providerSectionFieldTarget.value = 5
|
||||||
} else if (pnValue == "Medcost") {
|
} else if (pnValue == "MedCost") {
|
||||||
this.networkLogoFieldTarget.value = 2
|
this.networkLogoFieldTarget.value = 7
|
||||||
this.providerSectionFieldTarget.value = 26
|
this.providerSectionFieldTarget.value = 4
|
||||||
} else {
|
} else {
|
||||||
this.networkLogoFieldTarget.value = ""
|
this.networkLogoFieldTarget.value = ""
|
||||||
this.providerSectionFieldTarget.value = ""
|
this.providerSectionFieldTarget.value = ""
|
||||||
|
|||||||
@@ -56,14 +56,12 @@ class ProcessMemberCardDataJob < ApplicationJob
|
|||||||
end
|
end
|
||||||
|
|
||||||
if has_dental
|
if has_dental
|
||||||
if member.dental_plan_key
|
member_attributes.merge!({dental_coverage: member.coverage_class.upcase})
|
||||||
member_attributes.merge!({dental_coverage: member.coverage_class.upcase})
|
if member.dental_plan_key && member.id_card_plan_id.blank?
|
||||||
unless member.id_card_plan_id
|
member_attributes.merge!({group_number: "", medical_eff_date: ""})
|
||||||
member_attributes.merge!({group_number: "", medical_eff_date: ""})
|
# dental_plan = IdCard::Plan.find_by(pb_product_key: 1025)
|
||||||
# dental_plan = IdCard::Plan.find_by(pb_product_key: 1025)
|
if IdCard::Plan.find_by(pb_product_key: member.dental_plan_key).blank?
|
||||||
if IdCard::Plan.find_by(pb_product_key: member.dental_plan_key).blank?
|
member_attributes.merge!({employer_name: 'COBRA'})
|
||||||
member_attributes.merge!({employer_name: 'COBRA'})
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -24,8 +24,8 @@ class UpdateEmployerJob < ApplicationJob
|
|||||||
|
|
||||||
plan_code = Vhcs::HlPlanCode.find_by(plan_key: pl_plan_key)
|
plan_code = Vhcs::HlPlanCode.find_by(plan_key: pl_plan_key)
|
||||||
pb_company_plan = Vhcs::PbCompanyPlans.find_by(pl_plan_key: pl_plan_key)
|
pb_company_plan = Vhcs::PbCompanyPlans.find_by(pl_plan_key: pl_plan_key)
|
||||||
employer = Employer.find_or_create_by!(employer_identifier)
|
employer = Employer.find_or_create_by(employer_identifier)
|
||||||
id_card_setup = employer.id_card_setup || employer.create_id_card_setup!(pl_plan_key: employer.pl_plan_key)
|
id_card_setup = employer.id_card_setup || employer.build_id_card_setup(pl_plan_key: employer.pl_plan_key)
|
||||||
full_sync = employer.previously_new_record? || full_sync
|
full_sync = employer.previously_new_record? || full_sync
|
||||||
unless group_number.present?
|
unless group_number.present?
|
||||||
group_number = Vhcs::PlPlanGroupCode.find_by(pl_plan_key: pl_plan_key).group_code
|
group_number = Vhcs::PlPlanGroupCode.find_by(pl_plan_key: pl_plan_key).group_code
|
||||||
@@ -51,9 +51,12 @@ class UpdateEmployerJob < ApplicationJob
|
|||||||
})
|
})
|
||||||
end
|
end
|
||||||
|
|
||||||
employer.update(employer_update_attrs)
|
employer.assign_attributes(employer_update_attrs)
|
||||||
|
if !employer.save && full_sync
|
||||||
|
employer.save(validate: false)
|
||||||
|
end
|
||||||
|
|
||||||
if [employer.pl_plan_key, employer.group_number, employer.company_pb_entity_key, employer.plan_id].all?(&:present?)
|
if !employer.initialized && [employer.pl_plan_key, employer.group_number, employer.company_pb_entity_key, employer.plan_id].all?(&:present?)
|
||||||
employer.update(active: true)
|
employer.update(active: true)
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -64,13 +67,22 @@ class UpdateEmployerJob < ApplicationJob
|
|||||||
})
|
})
|
||||||
end
|
end
|
||||||
|
|
||||||
if full_sync
|
if full_sync || id_card_setup.print_name.blank?
|
||||||
setup_update_attrs.merge!({
|
setup_update_attrs.merge!({
|
||||||
print_name: determine_card_print_name(pb_company_plan.company_pb_entity_key, pl_plan_key)
|
print_name: determine_card_print_name(pb_company_plan.company_pb_entity_key, pl_plan_key)
|
||||||
})
|
})
|
||||||
end
|
end
|
||||||
|
|
||||||
id_card_setup.update(setup_update_attrs)
|
if id_card_setup.pl_plan_key.blank? && employer.pl_plan_key.present?
|
||||||
|
setup_update_attrs.merge!({
|
||||||
|
pl_plan_key: employer.pl_plan_key
|
||||||
|
})
|
||||||
|
end
|
||||||
|
|
||||||
|
id_card_setup.assign_attributes(setup_update_attrs)
|
||||||
|
if !id_card_setup.save && full_sync
|
||||||
|
id_card_setup.save(validate: false)
|
||||||
|
end
|
||||||
|
|
||||||
# plan_code = Vhcs::HlPlanCode.find_by(plan_key: employer.pl_plan_key)
|
# plan_code = Vhcs::HlPlanCode.find_by(plan_key: employer.pl_plan_key)
|
||||||
# employer.group_number = plan_code.group_number
|
# employer.group_number = plan_code.group_number
|
||||||
|
|||||||
@@ -15,11 +15,11 @@ class UpdateMemberJob < ApplicationJob
|
|||||||
"PBCoveredEntities"."PBEntityKey" = ?
|
"PBCoveredEntities"."PBEntityKey" = ?
|
||||||
AND "PBProductParticipation"."InEffect" <= ?
|
AND "PBProductParticipation"."InEffect" <= ?
|
||||||
AND "PBProductParticipation"."OutOfEffect" > ?',
|
AND "PBProductParticipation"."OutOfEffect" > ?',
|
||||||
vw_mb_member[:pb_entity_key], 2.month.from_now , 1.day.ago
|
vw_mb_member[:pb_entity_key], 3.month.from_now , 1.day.ago
|
||||||
)
|
)
|
||||||
|
|
||||||
if pb_products.present? && vw_mb_member[:social_security_number].present?
|
if pb_products.present? && 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 = 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.name = vw_mb_member[:full_name_last_name_first].titleize
|
||||||
member.mb_member_key = vw_mb_member[:mb_member_key]
|
member.mb_member_key = vw_mb_member[:mb_member_key]
|
||||||
member.family_id = vw_mb_member[:family_id]
|
member.family_id = vw_mb_member[:family_id]
|
||||||
@@ -53,14 +53,18 @@ class UpdateMemberJob < ApplicationJob
|
|||||||
INNER JOIN "PBCoveredEntities" ON "PBProductParticipation"."PBProductParticipationKey" = "PBCoveredEntities"."PBProductParticipationKey"
|
INNER JOIN "PBCoveredEntities" ON "PBProductParticipation"."PBProductParticipationKey" = "PBCoveredEntities"."PBProductParticipationKey"
|
||||||
INNER JOIN "PBProductAvailability" ON "PBProductAvailability"."PBProductAvailabilityKey" = "PBProductParticipation"."PBProductAvailabilityKey"
|
INNER JOIN "PBProductAvailability" ON "PBProductAvailability"."PBProductAvailabilityKey" = "PBProductParticipation"."PBProductAvailabilityKey"
|
||||||
INNER JOIN "PBProduct" ON "PBProduct"."PBProductKey" = "PBProductAvailability"."PBProductKey"
|
INNER JOIN "PBProduct" ON "PBProduct"."PBProductKey" = "PBProductAvailability"."PBProductKey"
|
||||||
').find_by('
|
').select('
|
||||||
|
"GEN_LookupTables".*, "PBProductParticipation"."InEffect" AS EffDate
|
||||||
|
').where('
|
||||||
"PBCoveredEntities"."PBEntityKey" = ?
|
"PBCoveredEntities"."PBEntityKey" = ?
|
||||||
AND "PBProductParticipation"."InEffect" <= ?
|
AND "PBProductParticipation"."InEffect" <= ?
|
||||||
AND "PBProductParticipation"."OutOfEffect" > ?
|
AND "PBProductParticipation"."OutOfEffect" > ?
|
||||||
AND "PBProduct"."PBProductKey" = ?',
|
AND "PBProduct"."PBProductKey" = ?',
|
||||||
member.pb_entity_key, 1.month.from_now, 1.day.ago, dental_pb_product_key
|
member.pb_entity_key, 1.month.from_now, 1.day.ago, dental_pb_product_key
|
||||||
).short_desc
|
).order('EffDate DESC').first.short_desc
|
||||||
member.coverage_class = coverage_class
|
member.coverage_class = coverage_class
|
||||||
|
else
|
||||||
|
member.coverage_class = "NONE"
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
medical_pb_product_key = pb_products.first.pb_product_key
|
medical_pb_product_key = pb_products.first.pb_product_key
|
||||||
@@ -74,6 +78,7 @@ class UpdateMemberJob < ApplicationJob
|
|||||||
# else
|
# else
|
||||||
|
|
||||||
# end
|
# end
|
||||||
|
member.save!
|
||||||
puts "---- #{member.name}"
|
puts "---- #{member.name}"
|
||||||
end
|
end
|
||||||
member.presence
|
member.presence
|
||||||
|
|||||||
@@ -3,5 +3,5 @@
|
|||||||
class ApplicationRecord < ActiveRecord::Base
|
class ApplicationRecord < ActiveRecord::Base
|
||||||
primary_abstract_class
|
primary_abstract_class
|
||||||
|
|
||||||
establish_connection :baclight
|
establish_connection :primary
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -1,21 +0,0 @@
|
|||||||
module BrittonWeb
|
|
||||||
class Employers < BrittonWebRecord
|
|
||||||
|
|
||||||
# self.table_name = 'employers'
|
|
||||||
|
|
||||||
alias_attribute :id, :id
|
|
||||||
alias_attribute :name, :name
|
|
||||||
alias_attribute :pl_plan_key, :pl_plan_key
|
|
||||||
alias_attribute :plan_id, :plan_id
|
|
||||||
alias_attribute :dental_plan, :dental_plan
|
|
||||||
alias_attribute :single_card_template, :single_card_template
|
|
||||||
alias_attribute :multiple_card_template, :multiple_card_template
|
|
||||||
alias_attribute :logo, :logo
|
|
||||||
alias_attribute :active, :active
|
|
||||||
alias_attribute :broker_id, :broker_id
|
|
||||||
alias_attribute :created_at, :created_at
|
|
||||||
alias_attribute :updated_at, :updated_at
|
|
||||||
|
|
||||||
|
|
||||||
end
|
|
||||||
end
|
|
||||||
@@ -1,17 +0,0 @@
|
|||||||
module BrittonWeb
|
|
||||||
class NetworkLogos < BrittonWebRecord
|
|
||||||
|
|
||||||
self.table_name = 'network_logos'
|
|
||||||
|
|
||||||
alias_attribute :id, :id
|
|
||||||
alias_attribute :net_logo, :net_logo
|
|
||||||
alias_attribute :exception_type, :exception_type
|
|
||||||
alias_attribute :exception_value, :exception_value
|
|
||||||
alias_attribute :default, :default
|
|
||||||
alias_attribute :employer_id, :employer_id
|
|
||||||
alias_attribute :created_at, :created_at
|
|
||||||
alias_attribute :updated_at, :updated_at
|
|
||||||
|
|
||||||
|
|
||||||
end
|
|
||||||
end
|
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
class Broker < ApplicationRecord
|
||||||
|
belongs_to :carrier
|
||||||
|
has_many :employers
|
||||||
|
end
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
class Carrier < ApplicationRecord
|
||||||
|
has_many :brokers
|
||||||
|
end
|
||||||
@@ -20,55 +20,56 @@ module EmployerAutomation
|
|||||||
}
|
}
|
||||||
|
|
||||||
scope :in_automation_initilization, -> {
|
scope :in_automation_initilization, -> {
|
||||||
joins(:id_card_setup)
|
left_outer_joins(:id_card_setup)
|
||||||
.where(initialized: false)
|
.where(initialized: false)
|
||||||
.or(
|
.or(
|
||||||
where(id_card_setup: {initialized: false})
|
where(id_card_setup: {initialized: false})
|
||||||
)
|
).distinct
|
||||||
}
|
}
|
||||||
|
|
||||||
# scope :missing_keychain_values, -> {
|
|
||||||
# where(company_pb_entity_key: [nil, ''])
|
|
||||||
# .or(where(plan_id: [nil, '']))
|
|
||||||
# .or(where(group_number: [nil, '']))
|
|
||||||
# .or(where(pl_plan_key: [nil, '']))
|
|
||||||
# }
|
|
||||||
|
|
||||||
scope :missing_keychain_initialization, -> {
|
scope :missing_keychain_initialization, -> {
|
||||||
uninitialized.automation_ready
|
uninitialized.automation_ready
|
||||||
}
|
}
|
||||||
|
|
||||||
scope :uninitialized_id_card_setup, -> {
|
scope :uninitialized_id_card_setup, -> {
|
||||||
joins(:id_card_setup)
|
left_outer_joins(:id_card_setup)
|
||||||
.where(id_card_setup: {initialized: false})
|
.where(id_card_setup: {initialized: false})
|
||||||
}
|
}
|
||||||
|
|
||||||
scope :missing_plans, -> {
|
scope :missing_plans, -> {
|
||||||
where.missing(:plans)
|
left_outer_joins(:plans)
|
||||||
.or(
|
.where(id_card_plans: { pb_product_key: [nil, ""] })
|
||||||
where(
|
.distinct
|
||||||
id: joins(:plans)
|
|
||||||
.where(plans: { pb_product_key: [nil, ''] })
|
|
||||||
.select(:id)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
scope :has_plans, -> {
|
scope :has_plans, -> {
|
||||||
where.associated(:plans)
|
left_outer_joins(:plans)
|
||||||
.where.not(
|
.where("id_card_plans.pb_product_key IS NOT NULL AND id_card_plans.pb_product_key != ''")
|
||||||
id: joins(:plans)
|
.distinct
|
||||||
.where(plans: { pb_product_key: [nil, ''] })
|
}
|
||||||
.select(:id)
|
|
||||||
).distinct
|
scope :missing_members, -> {
|
||||||
|
left_outer_joins(:members)
|
||||||
|
.where(members: { id: nil })
|
||||||
|
.distinct
|
||||||
|
}
|
||||||
|
|
||||||
|
scope :has_members, -> {
|
||||||
|
left_outer_joins(:members)
|
||||||
|
.where.not(members: { id: nil })
|
||||||
|
.distinct
|
||||||
}
|
}
|
||||||
|
|
||||||
scope :missing_plans_initialization, -> {
|
scope :missing_plans_initialization, -> {
|
||||||
uninitialized_id_card_setup.missing_plans
|
initialized.uninitialized_id_card_setup.missing_plans
|
||||||
}
|
}
|
||||||
|
|
||||||
scope :missing_members_initialization, -> {
|
scope :missing_members_initialization, -> {
|
||||||
uninitialized_id_card_setup.has_plans
|
initialized.uninitialized_id_card_setup.has_plans.missing_members
|
||||||
|
}
|
||||||
|
|
||||||
|
scope :ready_for_id_card_activation, -> {
|
||||||
|
initialized.uninitialized_id_card_setup.has_members
|
||||||
}
|
}
|
||||||
|
|
||||||
scope :with_active_id_card_setup, -> {
|
scope :with_active_id_card_setup, -> {
|
||||||
@@ -76,62 +77,11 @@ module EmployerAutomation
|
|||||||
.where(id_card_setup: {active: true})
|
.where(id_card_setup: {active: true})
|
||||||
}
|
}
|
||||||
|
|
||||||
# scope :with_keychain_values, -> {
|
|
||||||
# where.not(
|
|
||||||
# pl_plan_key: [nil, ''],
|
|
||||||
# group_number: [nil, ''],
|
|
||||||
# company_pb_entity_key: [nil, ''],
|
|
||||||
# plan_id: [nil, '']
|
|
||||||
# )
|
|
||||||
# }
|
|
||||||
|
|
||||||
scope :deactivated, -> {
|
scope :deactivated, -> {
|
||||||
inactive.initialized
|
inactive.initialized
|
||||||
}
|
}
|
||||||
# Employer.joins(:id_card_setup)
|
|
||||||
# .left_outer_joins(:plans)
|
|
||||||
# .where(plans: { pb_product_key: [nil, ''] })
|
|
||||||
|
|
||||||
# .group('users.id') # Group by user ID
|
|
||||||
# .having('COUNT(posts.id) = 0')
|
|
||||||
|
|
||||||
# Employer.left_outer_joins(:plans)
|
|
||||||
# .where(plans: { id: nil })
|
|
||||||
# .or(Employer.where(plans: { pb_product_key: [nil, ''] }))
|
|
||||||
|
|
||||||
# Employer.where.missing(:plans)
|
|
||||||
# .or(Employer.joins(:plans).where(plans: { pb_product_key: [nil, ''] }))
|
|
||||||
|
|
||||||
# Employer.joins(id_card_setup: :plans).where.not("plans.id_card_setup_id = id_card_setup.id").or
|
|
||||||
# (where(plans: { pb_product_key: [nil, ''] }))
|
|
||||||
|
|
||||||
# scope :with_survey_and_no_questions, -> {
|
|
||||||
# joins(:survey) # join has_one
|
|
||||||
# .left_joins(survey: :questions) # join has_many through has_one
|
|
||||||
# .where(questions: { id: nil }) # filter where has_many is empty
|
|
||||||
# }
|
|
||||||
|
|
||||||
# scope :missing_initial_members, -> {
|
|
||||||
# new_groups.with_plans
|
|
||||||
# }
|
|
||||||
end
|
end
|
||||||
|
|
||||||
# class_methods do
|
|
||||||
# # Methods in this block become class methods of the including class.
|
|
||||||
# def count_all_visible
|
|
||||||
# visible.count
|
|
||||||
# end
|
|
||||||
# end
|
|
||||||
|
|
||||||
# Any other methods defined here become instance methods automatically.
|
|
||||||
# def up_to_date?
|
|
||||||
# self.pl_plan_key.present? &&
|
|
||||||
# self.company_pb_entity_key.present? &&
|
|
||||||
# self.plan_id.present? &&
|
|
||||||
# self.group_number.present? &&
|
|
||||||
# self.effective_date.present?
|
|
||||||
# end
|
|
||||||
|
|
||||||
def sync_members_with_vhcs
|
def sync_members_with_vhcs
|
||||||
AutomationService::EmployerMembersUpdate.new(pl_plan_key).call
|
AutomationService::EmployerMembersUpdate.new(pl_plan_key).call
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -1,29 +1,6 @@
|
|||||||
module MemberAutomation
|
module MemberAutomation
|
||||||
extend ActiveSupport::Concern
|
extend ActiveSupport::Concern
|
||||||
|
|
||||||
# included do
|
|
||||||
# # Code in this block becomes instance methods or class macros (like scopes, validations, associations) in the including class.
|
|
||||||
# scope :visible, -> { where(visible: true) }
|
|
||||||
# scope :invisible, -> { where(visible: false) }
|
|
||||||
# validates :status, inclusion: { in: %w(visible invisible), message: "%{value} is not a valid status" }
|
|
||||||
# end
|
|
||||||
|
|
||||||
# class_methods do
|
|
||||||
# # Methods in this block become class methods of the including class.
|
|
||||||
# def count_all_visible
|
|
||||||
# visible.count
|
|
||||||
# end
|
|
||||||
# end
|
|
||||||
|
|
||||||
# Any other methods defined here become instance methods automatically.
|
|
||||||
# def up_to_date?
|
|
||||||
# self.pl_plan_key.present? &&
|
|
||||||
# self.company_pb_entity_key.present? &&
|
|
||||||
# self.plan_id.present? &&
|
|
||||||
# self.group_number.present? &&
|
|
||||||
# self.effective_date.present?
|
|
||||||
# end
|
|
||||||
|
|
||||||
def sync_with_vhcs
|
def sync_with_vhcs
|
||||||
AutomationService::MemberUpdate.new(self.employer.pl_plan_key, self.pb_entity_key).call
|
AutomationService::MemberUpdate.new(self.employer.pl_plan_key, self.pb_entity_key).call
|
||||||
end
|
end
|
||||||
|
|||||||
+16
-2
@@ -1,15 +1,22 @@
|
|||||||
class Employer < ApplicationRecord
|
class Employer < ApplicationRecord
|
||||||
include EmployerAutomation
|
include EmployerAutomation
|
||||||
|
belongs_to :broker, optional: true
|
||||||
has_many :members, dependent: :destroy
|
has_many :members, dependent: :destroy
|
||||||
accepts_nested_attributes_for :members, allow_destroy: true, reject_if: :all_blank
|
accepts_nested_attributes_for :members, allow_destroy: true, reject_if: :all_blank
|
||||||
has_one :id_card_setup, class_name: 'IdCard::Setup', dependent: :destroy
|
has_one :id_card_setup, class_name: 'IdCard::Setup', dependent: :destroy
|
||||||
has_many :plans, class_name: 'IdCard::Plan', through: :id_card_setup
|
has_many :plans, class_name: 'IdCard::Plan', through: :id_card_setup
|
||||||
|
has_many :print_data, class_name: 'IdCard::PrintData', dependent: :destroy
|
||||||
|
|
||||||
|
validates :name, :slug, :effective_date, presence: true
|
||||||
|
validates :group_number, :pl_plan_key, :company_pb_entity_key, :plan_id, presence: true, if: -> { initialized }
|
||||||
|
|
||||||
|
validates :name, :slug, :group_number, :pl_plan_key, :company_pb_entity_key, :plan_id, uniqueness: true, allow_blank: true
|
||||||
|
|
||||||
scope :active, -> { where(active: true) }
|
scope :active, -> { where(active: true) }
|
||||||
scope :inactive, -> { where(active: false) }
|
scope :inactive, -> { where(active: false) }
|
||||||
|
|
||||||
before_save :create_slug, if: :will_save_change_to_name?
|
before_validation :create_slug, if: :will_save_change_to_name?
|
||||||
before_save :active_initialized_check, if: :will_save_change_to_active?
|
before_validation :active_initialized_check, if: :will_save_change_to_active?
|
||||||
|
|
||||||
|
|
||||||
def create_slug
|
def create_slug
|
||||||
@@ -40,6 +47,13 @@ class Employer < ApplicationRecord
|
|||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def employer_member_keys_by_plan(pb_product_key)
|
||||||
|
{
|
||||||
|
pl_plan_key: self.pl_plan_key,
|
||||||
|
member_keys: self.plans.find_by(pb_product_key: pb_product_key).members.pluck(:pb_entity_key)
|
||||||
|
}
|
||||||
|
end
|
||||||
|
|
||||||
def name_to_logo_filename(extension)
|
def name_to_logo_filename(extension)
|
||||||
Employer.employer_trim_name(self.name).titleize.gsub(/[^a-zA-Z]/, '').concat('Logo').concat(extension.downcase)
|
Employer.employer_trim_name(self.name).titleize.gsub(/[^a-zA-Z]/, '').concat('Logo').concat(extension.downcase)
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -0,0 +1,14 @@
|
|||||||
|
module HebWeb
|
||||||
|
class BrokerXRef < HebWebRecord
|
||||||
|
|
||||||
|
self.table_name = 'BrokerXRef'
|
||||||
|
|
||||||
|
alias_attribute :id, :Id
|
||||||
|
alias_attribute :pl_plan_key, :PLPlanKey
|
||||||
|
alias_attribute :pb_entity_key, :PBEntityKey
|
||||||
|
alias_attribute :plan_name, :PlanName
|
||||||
|
alias_attribute :employer_pl_plan_key, :EmployerPLPlanKey
|
||||||
|
|
||||||
|
|
||||||
|
end
|
||||||
|
end
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
class HebWebRecord < ActiveRecord::Base
|
||||||
|
self.abstract_class = true
|
||||||
|
connects_to database: { writing: :heb_web, reading: :heb_web }
|
||||||
|
end
|
||||||
@@ -1,7 +1,9 @@
|
|||||||
module IdCard
|
module IdCard
|
||||||
class EmployerLogo < ApplicationRecord
|
class EmployerLogo < ApplicationRecord
|
||||||
# before_validation :resize_logo, if: :image_data_changed?
|
belongs_to :setup, optional: true
|
||||||
# before_validation :calculate_aspect_ratio, if: :image_data_changed?
|
validates :filename, :image_data, :content_type, :aspect_ratio, presence: true
|
||||||
|
validates :filename, uniqueness: true
|
||||||
|
|
||||||
before_validation :process_image, if: :image_data_changed?
|
before_validation :process_image, if: :image_data_changed?
|
||||||
|
|
||||||
private
|
private
|
||||||
@@ -27,24 +29,5 @@ module IdCard
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
# def resize_logo
|
|
||||||
# image = Vips::Image.new_from_buffer(self.image_data, "")
|
|
||||||
|
|
||||||
# processed_image = ImageProcessing::Vips
|
|
||||||
# .source(image)
|
|
||||||
# .resize_to_limit(nil, 200)
|
|
||||||
# .call
|
|
||||||
|
|
||||||
# self.image_data = processed_image.read
|
|
||||||
# end
|
|
||||||
|
|
||||||
# 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
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -6,6 +6,8 @@ module IdCard
|
|||||||
|
|
||||||
serialize :exception_values, coder: JSON
|
serialize :exception_values, coder: JSON
|
||||||
|
|
||||||
|
validates :exception_type, :exception_values, presence: true
|
||||||
|
|
||||||
VALID_TYPES = ['family_id', 'zipcode', 'state'].freeze
|
VALID_TYPES = ['family_id', 'zipcode', 'state'].freeze
|
||||||
|
|
||||||
before_validation :format_exception_values, if: :exception_values_changed?
|
before_validation :format_exception_values, if: :exception_values_changed?
|
||||||
|
|||||||
@@ -5,6 +5,8 @@ module IdCard
|
|||||||
belongs_to :provider_section, optional: true
|
belongs_to :provider_section, optional: true
|
||||||
|
|
||||||
validate :only_one_exception_field_present
|
validate :only_one_exception_field_present
|
||||||
|
validates :field_name, presence: true
|
||||||
|
validates :field_name, uniqueness: { scope: :field_exception_id }
|
||||||
|
|
||||||
FIELDS_TO_VALIDATE = [:field_value, :network_logo_id, :provider_section_id].freeze
|
FIELDS_TO_VALIDATE = [:field_value, :network_logo_id, :provider_section_id].freeze
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,8 @@
|
|||||||
module IdCard
|
module IdCard
|
||||||
class NetworkLogo < ApplicationRecord
|
class NetworkLogo < ApplicationRecord
|
||||||
# before_validation :resize_logo, if: :image_data_changed?
|
validates :filename, :image_data, :content_type, :aspect_ratio, presence: true
|
||||||
# before_validation :calculate_aspect_ratio, if: :image_data_changed?
|
validates :filename, uniqueness: true
|
||||||
|
|
||||||
before_validation :process_image, if: :image_data_changed?
|
before_validation :process_image, if: :image_data_changed?
|
||||||
|
|
||||||
scope :defaults, -> { where(default: true) }
|
scope :defaults, -> { where(default: true) }
|
||||||
@@ -41,25 +42,5 @@ module IdCard
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
# def resize_logo
|
|
||||||
# image = Vips::Image.new_from_buffer(self.image_data, "")
|
|
||||||
|
|
||||||
# processed_image = ImageProcessing::Vips
|
|
||||||
# .source(image)
|
|
||||||
# .resize_to_limit(nil, 400)
|
|
||||||
# .call
|
|
||||||
|
|
||||||
# self.image_data = processed_image.read
|
|
||||||
# end
|
|
||||||
|
|
||||||
# def calculate_aspect_ratio
|
|
||||||
# image_io = StringIO.new(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
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -3,6 +3,12 @@ module IdCard
|
|||||||
belongs_to :setup, optional: true
|
belongs_to :setup, optional: true
|
||||||
has_many :plan_benefits, dependent: :destroy
|
has_many :plan_benefits, dependent: :destroy
|
||||||
accepts_nested_attributes_for :plan_benefits, allow_destroy: true, reject_if: :all_blank
|
accepts_nested_attributes_for :plan_benefits, allow_destroy: true, reject_if: :all_blank
|
||||||
|
has_many :members, class_name: 'Member', foreign_key: :id_card_plan_id
|
||||||
|
|
||||||
|
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) }
|
scope :templates, -> { where(template: true) }
|
||||||
|
|
||||||
@@ -39,10 +45,6 @@ module IdCard
|
|||||||
|
|
||||||
class << self
|
class << self
|
||||||
|
|
||||||
# def templates
|
|
||||||
# active_templates.map(&:format_template)
|
|
||||||
# end
|
|
||||||
|
|
||||||
def permitted_params(params)
|
def permitted_params(params)
|
||||||
params.require(:id_card_setup).permit(
|
params.require(:id_card_setup).permit(
|
||||||
plans_attributes: [
|
plans_attributes: [
|
||||||
@@ -66,11 +68,20 @@ module IdCard
|
|||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
def build_and_create_default_benefits
|
def validate_plan_benefits_count
|
||||||
benefits = IdCardBenefitsTemplate.find_by(title: "BLANK").id_card_benefits.sort_by(&:sequence)
|
plan_benefits_size = plan_benefits.size
|
||||||
benefits.each do |ben|
|
template_benefits_size = case setup&.card_template
|
||||||
id_card_plan_benefits.new(benefit_desc: ben.benefit_desc, sequence: ben.sequence)
|
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
|
||||||
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@@ -1,5 +1,8 @@
|
|||||||
module IdCard
|
module IdCard
|
||||||
class PlanBenefit < ApplicationRecord
|
class PlanBenefit < ApplicationRecord
|
||||||
belongs_to :plan
|
belongs_to :plan
|
||||||
|
|
||||||
|
validates :benefit_desc, :sequence, presence: true
|
||||||
|
validates :benefit, presence: true, unless: :new_record?
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@@ -1,14 +1,25 @@
|
|||||||
module IdCard
|
module IdCard
|
||||||
class PrintData < ApplicationRecord
|
class PrintData < ApplicationRecord
|
||||||
|
belongs_to :employer, class_name: 'Employer'
|
||||||
|
|
||||||
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 provider_line_12 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 claim_to_12 dependent_1 dependent_2 dependent_3 dependent_4 dependent_5 dependent_6 dependent_7 dependent_8 dental_coverage]
|
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 provider_line_12 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 claim_to_12 dependent_1 dependent_2 dependent_3 dependent_4 dependent_5 dependent_6 dependent_7 dependent_8 dental_coverage]
|
||||||
|
|
||||||
before_validation :assign_blank_strings_to_unassigned_params
|
before_validation :assign_blank_strings_to_unassigned_params
|
||||||
|
|
||||||
|
private
|
||||||
|
|
||||||
|
def has_jasper_sorting_fields
|
||||||
|
missing_sample_card_fields = sample_plan_title.blank?
|
||||||
|
missing_member_card_fields = employer_name.blank? || full_name_last_name_first.blank?
|
||||||
|
|
||||||
|
if missing_sample_card_fields || missing_member_card_fields
|
||||||
|
errors.add(:base, "Required field for Jasper Server is missing")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
def assign_blank_strings_to_unassigned_params
|
def assign_blank_strings_to_unassigned_params
|
||||||
STRING_ATTRIBUTES.each do |attr|
|
STRING_ATTRIBUTES.each do |attr|
|
||||||
# Use the blank? method which checks for nil, false, empty, or whitespace strings
|
self[attr] = "" if self[attr].blank?
|
||||||
self[attr] = "" if self[attr].blank?
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ module IdCard
|
|||||||
|
|
||||||
def self.permitted_params(params)
|
def self.permitted_params(params)
|
||||||
params.require(:id_card_setup).require(:provider_section).permit(
|
params.require(:id_card_setup).require(:provider_section).permit(
|
||||||
|
:title,
|
||||||
:provider_line_1,
|
:provider_line_1,
|
||||||
:provider_line_2,
|
:provider_line_2,
|
||||||
:provider_line_3,
|
:provider_line_3,
|
||||||
@@ -30,7 +31,15 @@ module IdCard
|
|||||||
:claim_to_11,
|
:claim_to_11,
|
||||||
:claim_to_12
|
:claim_to_12
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def display_title
|
||||||
|
if self.default
|
||||||
|
"Default #{self.title}"
|
||||||
|
else
|
||||||
|
self.title
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
+40
-23
@@ -1,14 +1,21 @@
|
|||||||
module IdCard
|
module IdCard
|
||||||
class Setup < ApplicationRecord
|
class Setup < ApplicationRecord
|
||||||
belongs_to :employer, class_name: 'Employer'
|
belongs_to :employer, class_name: 'Employer'
|
||||||
belongs_to :employer_logo, optional: true
|
|
||||||
belongs_to :network_logo, optional: true
|
belongs_to :network_logo, optional: true
|
||||||
belongs_to :provider_section, optional: true
|
belongs_to :provider_section, optional: true
|
||||||
belongs_to :rx_section, optional: true
|
belongs_to :rx_section, optional: true
|
||||||
|
has_one :employer_logo, dependent: :destroy
|
||||||
|
|
||||||
has_many :plans, dependent: :destroy
|
has_many :plans, dependent: :destroy
|
||||||
has_many :field_exceptions, dependent: :destroy
|
has_many :field_exceptions, dependent: :destroy
|
||||||
|
|
||||||
|
validates :print_name, :network_provider, :card_template, :employer_logo, :network_logo_id,
|
||||||
|
:provider_section_id, :rx_section_id, presence: true, unless: :new_record?
|
||||||
|
validates :pl_plan_key, :rx_group_number, presence: true, if: -> { initialized }
|
||||||
|
validate :validate_print_name_fits_on_card
|
||||||
|
|
||||||
|
attr_accessor :print_name_pixel_width
|
||||||
|
|
||||||
accepts_nested_attributes_for :plans, allow_destroy: true, reject_if: :all_blank
|
accepts_nested_attributes_for :plans, allow_destroy: true, reject_if: :all_blank
|
||||||
accepts_nested_attributes_for :field_exceptions, allow_destroy: true, reject_if: :all_blank
|
accepts_nested_attributes_for :field_exceptions, allow_destroy: true, reject_if: :all_blank
|
||||||
|
|
||||||
@@ -16,7 +23,7 @@ module IdCard
|
|||||||
|
|
||||||
scope :active, -> { where(active: true) }
|
scope :active, -> { where(active: true) }
|
||||||
|
|
||||||
FORM_COLORS = ['atmosphere', 'verdigris', 'bluemana', 'cobalt']
|
FORM_COLORS = ['atmosphere', 'verdigris-vivid', 'cobalt-vivid', 'bluemana']
|
||||||
MODULE_COLOR = 'atmosphere'
|
MODULE_COLOR = 'atmosphere'
|
||||||
|
|
||||||
before_save :active_initialized_check, if: :will_save_change_to_active?
|
before_save :active_initialized_check, if: :will_save_change_to_active?
|
||||||
@@ -27,14 +34,6 @@ module IdCard
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
# def employer_logo_filename
|
|
||||||
# self.employer_logo.filename
|
|
||||||
# end
|
|
||||||
|
|
||||||
# def network_logo_filename
|
|
||||||
# self.network_logo.filename
|
|
||||||
# end
|
|
||||||
|
|
||||||
def build_plan_with_default_benefits(attributes = {})
|
def build_plan_with_default_benefits(attributes = {})
|
||||||
plan = plans.new(attributes)
|
plan = plans.new(attributes)
|
||||||
benefits = IdCardBenefitsTemplate.find_by(title: "BLANK").id_card_benefits.sort_by(&:sequence)
|
benefits = IdCardBenefitsTemplate.find_by(title: "BLANK").id_card_benefits.sort_by(&:sequence)
|
||||||
@@ -45,7 +44,28 @@ module IdCard
|
|||||||
end
|
end
|
||||||
|
|
||||||
def has_field_exceptions?
|
def has_field_exceptions?
|
||||||
self.field_exceptions.present?
|
field_exceptions.present?
|
||||||
|
end
|
||||||
|
|
||||||
|
def sample_card_print_ready?
|
||||||
|
print_name.present? &&
|
||||||
|
card_template.present? &&
|
||||||
|
employer_logo.present? &&
|
||||||
|
network_logo_id.present? &&
|
||||||
|
provider_section_id.present? &&
|
||||||
|
rx_section_id.present? &&
|
||||||
|
plans.present?
|
||||||
|
end
|
||||||
|
|
||||||
|
def member_cards_print_ready?
|
||||||
|
sample_card_print_ready? &&
|
||||||
|
plans.present? &&
|
||||||
|
plans.all? { |plan| plan.pb_product_key.present? } &&
|
||||||
|
employer.members.present?
|
||||||
|
end
|
||||||
|
|
||||||
|
def activation_ready?
|
||||||
|
member_cards_print_ready? && !active
|
||||||
end
|
end
|
||||||
|
|
||||||
def field_exceptions_card_attributes_by_member_id(member_array = nil)
|
def field_exceptions_card_attributes_by_member_id(member_array = nil)
|
||||||
@@ -54,17 +74,6 @@ module IdCard
|
|||||||
end
|
end
|
||||||
|
|
||||||
card_fes = self.field_exceptions.includes(:field_exception_items).in_order_of(:exception_type, IdCard::FieldException::VALID_TYPES)
|
card_fes = self.field_exceptions.includes(:field_exception_items).in_order_of(:exception_type, IdCard::FieldException::VALID_TYPES)
|
||||||
# fe_by_value = card_fes.in_order_of(:exception_type, IdCard::FieldException::VALID_TYPES).group_by(&:exception_type)
|
|
||||||
# .transform_values { |fes| fes.map { |fe| [fe.id, fe.exception_values] }.to_h }
|
|
||||||
# .compact_blank
|
|
||||||
|
|
||||||
# field_exception_types = card_fes.pluck(:exception_type).uniq
|
|
||||||
# if field_exception_types.include?("family_id")
|
|
||||||
# members = Member.where(pb_entity_key: member_array)
|
|
||||||
# end
|
|
||||||
# if field_exception_types.intersect?(["state", "zipcode"])
|
|
||||||
# member_addresses = Vhcs::PbEntityAddress.where(pb_entity_key: member_array)
|
|
||||||
# end
|
|
||||||
card_exceptions_map = {}
|
card_exceptions_map = {}
|
||||||
card_fes.each do |fe|
|
card_fes.each do |fe|
|
||||||
if fe.exception_type == "family_id"
|
if fe.exception_type == "family_id"
|
||||||
@@ -90,14 +99,22 @@ module IdCard
|
|||||||
def self.permitted_params(params)
|
def self.permitted_params(params)
|
||||||
params.require(:id_card_setup).permit(
|
params.require(:id_card_setup).permit(
|
||||||
:print_name,
|
:print_name,
|
||||||
|
:print_name_pixel_width,
|
||||||
:network_provider,
|
:network_provider,
|
||||||
:card_template,
|
:card_template,
|
||||||
:rx_group_number,
|
:rx_group_number,
|
||||||
:employer_logo_id,
|
|
||||||
:network_logo_id,
|
:network_logo_id,
|
||||||
:rx_section_id,
|
:rx_section_id,
|
||||||
:provider_section_id
|
:provider_section_id
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
|
||||||
|
def validate_print_name_fits_on_card
|
||||||
|
if print_name_pixel_width.to_i > 100
|
||||||
|
errors.add(:print_name, "Too Long For Card")
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -4,6 +4,15 @@ class Member < ApplicationRecord
|
|||||||
belongs_to :employer
|
belongs_to :employer
|
||||||
|
|
||||||
serialize :dependents, coder: JSON
|
serialize :dependents, coder: JSON
|
||||||
|
|
||||||
|
validates :pb_entity_key, presence: true
|
||||||
|
validates :name, :family_id, :mb_member_key, :pl_plan_key,
|
||||||
|
:id_card_display_name, presence: true, unless: :new_record?
|
||||||
|
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 }
|
||||||
|
|
||||||
before_validation :format_dependents, if: :dependents_changed?
|
before_validation :format_dependents, if: :dependents_changed?
|
||||||
|
|
||||||
def id_card_field_exception_values
|
def id_card_field_exception_values
|
||||||
@@ -23,7 +32,4 @@ class Member < ApplicationRecord
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -1,16 +0,0 @@
|
|||||||
class AlternateNetworkLogo < ApplicationRecord
|
|
||||||
belongs_to :employer
|
|
||||||
|
|
||||||
# before_save :process_network_logo
|
|
||||||
|
|
||||||
def process_network_logo
|
|
||||||
if self.network_logo.present? && !self.network_logo.is_a?(String)
|
|
||||||
self.employer_setup_process.card_logo_files.new(
|
|
||||||
filename: self.network_logo.filename,
|
|
||||||
logo_type: 'network',
|
|
||||||
image: self.network_logo.data,
|
|
||||||
pl_plan_key: self.employer_setup_process.pl_plan_key || ""
|
|
||||||
)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
@@ -1,14 +0,0 @@
|
|||||||
class CardLogoFile < ApplicationRecord
|
|
||||||
has_many :employer_card_logos, dependent: :destroy
|
|
||||||
has_many :employers, through: :employer_card_logos
|
|
||||||
|
|
||||||
before_save :round_aspect_ratio
|
|
||||||
|
|
||||||
private
|
|
||||||
|
|
||||||
def round_aspect_ratio
|
|
||||||
if self.aspect_ratio.present?
|
|
||||||
self.aspect_ratio = self.aspect_ratio.round(2)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
class EmployerCardLogo < ApplicationRecord
|
|
||||||
belongs_to :employer
|
|
||||||
belongs_to :card_logo_file
|
|
||||||
|
|
||||||
end
|
|
||||||
@@ -1,106 +0,0 @@
|
|||||||
class EmployerSetupProcess < ApplicationRecord
|
|
||||||
has_many :plans, dependent: :destroy
|
|
||||||
accepts_nested_attributes_for :plans, allow_destroy: true, reject_if: :all_blank
|
|
||||||
|
|
||||||
has_many :alternate_network_logos, dependent: :destroy
|
|
||||||
accepts_nested_attributes_for :alternate_network_logos, allow_destroy: true, reject_if: :all_blank
|
|
||||||
|
|
||||||
has_many :card_logo_files
|
|
||||||
|
|
||||||
# before_save :process_employer_logo
|
|
||||||
before_save :create_slug, if: :new_record?
|
|
||||||
|
|
||||||
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
|
|
||||||
end
|
|
||||||
|
|
||||||
def create_slug
|
|
||||||
self.slug = employer_trimmed_name.parameterize
|
|
||||||
end
|
|
||||||
|
|
||||||
def employer_name_to_logo_filename(extension)
|
|
||||||
self.employer_trimmed_name.titleize.gsub(/\s+/, '').concat('Logo').concat(extension.downcase)
|
|
||||||
end
|
|
||||||
|
|
||||||
def employer_trimmed_name
|
|
||||||
regex_source = Regexp.union(["health", "plan", "the", "inc", "llc"]).source
|
|
||||||
case_insensitive_regex = Regexp.new(regex_source, "i")
|
|
||||||
self.employer_name.gsub(case_insensitive_regex, "").squish
|
|
||||||
end
|
|
||||||
|
|
||||||
def self.permitted_params(params)
|
|
||||||
params.require(:employer_setup_process).permit(
|
|
||||||
:employer_name,
|
|
||||||
:group_number,
|
|
||||||
:pl_plan_key,
|
|
||||||
:effective_date,
|
|
||||||
:employer_logo,
|
|
||||||
:network_provider,
|
|
||||||
plans_attributes: [
|
|
||||||
:id,
|
|
||||||
:title,
|
|
||||||
:plan_id,
|
|
||||||
:_destroy,
|
|
||||||
plan_benefits_attributes: [
|
|
||||||
:id,
|
|
||||||
:benefit_desc,
|
|
||||||
:benefit,
|
|
||||||
:sequence,
|
|
||||||
:_destroy,
|
|
||||||
]
|
|
||||||
],
|
|
||||||
alternate_network_logos_attributes: [
|
|
||||||
:id,
|
|
||||||
:network_logo,
|
|
||||||
:exception_type,
|
|
||||||
:exception_value,
|
|
||||||
:_destroy
|
|
||||||
]
|
|
||||||
)
|
|
||||||
end
|
|
||||||
|
|
||||||
def save_to_prod
|
|
||||||
|
|
||||||
VhcsRecord.transaction do
|
|
||||||
Vhcs::HlPlanCode.create!(
|
|
||||||
group_number: self.group_number,
|
|
||||||
medical_number: self.group_number,
|
|
||||||
dental_number: '',
|
|
||||||
plan_key: self.pl_plan_key,
|
|
||||||
effect_date: self.effective_date
|
|
||||||
)
|
|
||||||
|
|
||||||
# Replace fairos_info with template like for benefits
|
|
||||||
fairos_info = Vhcs::HlrxCrosRef.where(pl_plan_key: 52).first
|
|
||||||
Vhcs::HlrxCrosRef.cdarreate!(
|
|
||||||
group_no: self.group_number,
|
|
||||||
rx_group_id: self.group_number,
|
|
||||||
help_desk: fairos_info.help_desk,
|
|
||||||
customer_service: fairos_info.customer_service,
|
|
||||||
web_url: fairos_info.web_url,
|
|
||||||
pl_plan_key: self.pl_plan_key
|
|
||||||
)
|
|
||||||
|
|
||||||
self.plans.each_with_index do |plan, i|
|
|
||||||
plan.plan_benefits.each do |bene|
|
|
||||||
Vhcs::HlEgglestonCardBenefit.create!(
|
|
||||||
plan_id: plan.plan_id,
|
|
||||||
benefit_desc: bene.benefit_desc,
|
|
||||||
benefit: bene.benefit,
|
|
||||||
sequence: bene.sequence,
|
|
||||||
plan_key: self.pl_plan_key
|
|
||||||
)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
end
|
|
||||||
|
|
||||||
end
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
class IdCardBenefit < ApplicationRecord
|
|
||||||
belongs_to :id_card_benefits_template
|
|
||||||
end
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
class IdCardBenefitsTemplate < ApplicationRecord
|
|
||||||
|
|
||||||
has_many :id_card_benefits, dependent: :destroy
|
|
||||||
|
|
||||||
end
|
|
||||||
@@ -0,0 +1,2 @@
|
|||||||
|
class Provider < ApplicationRecord
|
||||||
|
end
|
||||||
@@ -0,0 +1,2 @@
|
|||||||
|
class ProviderGroup < ApplicationRecord
|
||||||
|
end
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
class User < ApplicationRecord
|
||||||
|
# Include default devise modules. Others available are:
|
||||||
|
# :confirmable, :lockable, :timeoutable, :trackable and :omniauthable
|
||||||
|
devise :database_authenticatable, :registerable,
|
||||||
|
:recoverable, :rememberable, :validatable,
|
||||||
|
:lockable, :trackable
|
||||||
|
|
||||||
|
enum role: { user: 0, admin: 1, dev: 2 }
|
||||||
|
end
|
||||||
@@ -148,7 +148,6 @@ module Vhcs
|
|||||||
contact_line_1: self.contact_line_1,
|
contact_line_1: self.contact_line_1,
|
||||||
contact_line_2: self.contact_line_2,
|
contact_line_2: self.contact_line_2,
|
||||||
contact_line_3: self.contact_line_3,
|
contact_line_3: self.contact_line_3,
|
||||||
group_number: self.group_number,
|
|
||||||
family_id: self.family_id,
|
family_id: self.family_id,
|
||||||
group_no: self.group_no,
|
group_no: self.group_no,
|
||||||
rx_group: self.rx_group,
|
rx_group: self.rx_group,
|
||||||
|
|||||||
@@ -1,48 +0,0 @@
|
|||||||
module Vhcs
|
|
||||||
class HlidCardProvider < VhcsRecord
|
|
||||||
|
|
||||||
self.table_name = 'HLIDCardProvider'
|
|
||||||
|
|
||||||
alias_attribute :provider_code, :ProviderCode
|
|
||||||
alias_attribute :provider_line_1, :ProviderLine1
|
|
||||||
alias_attribute :provider_line_2, :ProviderLine2
|
|
||||||
alias_attribute :provider_line_3, :ProviderLine3
|
|
||||||
alias_attribute :provider_line_4, :ProviderLine4
|
|
||||||
alias_attribute :provider_line_5, :ProviderLine5
|
|
||||||
alias_attribute :mail_to, :MailTo
|
|
||||||
alias_attribute :mail_to_2, :MailTo2
|
|
||||||
alias_attribute :contact_line_1, :ContactLine1
|
|
||||||
alias_attribute :contact_line_2, :ContactLine2
|
|
||||||
alias_attribute :contact_line_3, :ContactLine3
|
|
||||||
alias_attribute :group_number, :GroupNumber
|
|
||||||
alias_attribute :claim_to_1, :ClaimTo1
|
|
||||||
alias_attribute :claim_to_2, :ClaimTo2
|
|
||||||
alias_attribute :claim_to_3, :ClaimTo3
|
|
||||||
alias_attribute :claim_to_4, :ClaimTo4
|
|
||||||
alias_attribute :claim_to_5, :ClaimTo5
|
|
||||||
alias_attribute :claim_to_6, :ClaimTo6
|
|
||||||
alias_attribute :claim_to_7, :ClaimTo7
|
|
||||||
alias_attribute :claim_to_8, :ClaimTo8
|
|
||||||
alias_attribute :claim_to_9, :ClaimTo9
|
|
||||||
alias_attribute :claim_to_10, :ClaimTo10
|
|
||||||
alias_attribute :claim_to_11, :ClaimTo11
|
|
||||||
alias_attribute :provider_line_6, :ProviderLine6
|
|
||||||
alias_attribute :provider_line_7, :ProviderLine7
|
|
||||||
alias_attribute :provider_line_8, :ProviderLine8
|
|
||||||
alias_attribute :provider_line_9, :ProviderLine9
|
|
||||||
alias_attribute :provider_line_10, :ProviderLine10
|
|
||||||
alias_attribute :provider_line_11, :ProviderLine11
|
|
||||||
alias_attribute :rx_group_id, :RXGroupId
|
|
||||||
alias_attribute :rx_contact, :RXContact
|
|
||||||
alias_attribute :provider_lookup_1, :ProviderLookup1
|
|
||||||
alias_attribute :provider_lookup_2, :ProviderLookup2
|
|
||||||
alias_attribute :precert1, :Precert1
|
|
||||||
alias_attribute :precert2, :Precert2
|
|
||||||
alias_attribute :precert3, :Precert3
|
|
||||||
alias_attribute :precert4, :Precert4
|
|
||||||
alias_attribute :precert5, :Precert5
|
|
||||||
alias_attribute :precert6, :Precert6
|
|
||||||
|
|
||||||
|
|
||||||
end
|
|
||||||
end
|
|
||||||
@@ -1,15 +0,0 @@
|
|||||||
module Vhcs
|
|
||||||
class HlrxCrosRef < VhcsRecord
|
|
||||||
|
|
||||||
self.table_name = 'HLRXCrosRef'
|
|
||||||
|
|
||||||
alias_attribute :group_no, :GroupNo
|
|
||||||
alias_attribute :rx_group_id, :RXGroupID
|
|
||||||
alias_attribute :help_desk, :HelpDesk
|
|
||||||
alias_attribute :customer_service, :CustomerService
|
|
||||||
alias_attribute :web_url, :WebUrl
|
|
||||||
alias_attribute :pl_plan_key, :PLPlanKey
|
|
||||||
|
|
||||||
|
|
||||||
end
|
|
||||||
end
|
|
||||||
@@ -0,0 +1,53 @@
|
|||||||
|
# frozen_string_literal: true
|
||||||
|
|
||||||
|
class ApplicationPolicy
|
||||||
|
attr_reader :user, :record
|
||||||
|
|
||||||
|
def initialize(user, record)
|
||||||
|
@user = user
|
||||||
|
@record = record
|
||||||
|
end
|
||||||
|
|
||||||
|
def index?
|
||||||
|
false
|
||||||
|
end
|
||||||
|
|
||||||
|
def show?
|
||||||
|
false
|
||||||
|
end
|
||||||
|
|
||||||
|
def create?
|
||||||
|
false
|
||||||
|
end
|
||||||
|
|
||||||
|
def new?
|
||||||
|
create?
|
||||||
|
end
|
||||||
|
|
||||||
|
def update?
|
||||||
|
false
|
||||||
|
end
|
||||||
|
|
||||||
|
def edit?
|
||||||
|
update?
|
||||||
|
end
|
||||||
|
|
||||||
|
def destroy?
|
||||||
|
false
|
||||||
|
end
|
||||||
|
|
||||||
|
class Scope
|
||||||
|
def initialize(user, scope)
|
||||||
|
@user = user
|
||||||
|
@scope = scope
|
||||||
|
end
|
||||||
|
|
||||||
|
def resolve
|
||||||
|
raise NoMethodError, "You must define #resolve in #{self.class}"
|
||||||
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
|
||||||
|
attr_reader :user, :scope
|
||||||
|
end
|
||||||
|
end
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
class GetAllIDCardDataByPlanTPAQuery
|
class GetAllIdCardDataByPlanTpaQuery
|
||||||
|
|
||||||
def initialize(pl_plan_key)
|
def initialize(pl_plan_key)
|
||||||
@pl_plan_key = ActiveRecord::Base.connection.quote(pl_plan_key)
|
@pl_plan_key = ActiveRecord::Base.connection.quote(pl_plan_key)
|
||||||
|
|||||||
@@ -1,8 +1,9 @@
|
|||||||
module AutomationService
|
module AutomationService
|
||||||
class BatchEmployerUpdate
|
class BatchEmployerUpdate
|
||||||
|
|
||||||
def initialize(pl_plan_keys = nil)
|
def initialize(pl_plan_keys = nil, full_sync = false)
|
||||||
@pl_plan_keys = pl_plan_keys
|
@pl_plan_keys = pl_plan_keys
|
||||||
|
@full_sync = full_sync
|
||||||
end
|
end
|
||||||
|
|
||||||
def call
|
def call
|
||||||
@@ -16,7 +17,7 @@ module AutomationService
|
|||||||
employer_update_futures = employer_plan_headers.map do |employer_plan_header|
|
employer_update_futures = employer_plan_headers.map do |employer_plan_header|
|
||||||
Concurrent::Future.execute do
|
Concurrent::Future.execute do
|
||||||
ActiveRecord::Base.connection_pool.with_connection do
|
ActiveRecord::Base.connection_pool.with_connection do
|
||||||
UpdateEmployerJob.perform_later(employer_plan_header: employer_plan_header)
|
UpdateEmployerJob.perform_later(employer_plan_header: employer_plan_header, full_sync: @full_sync)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -10,13 +10,7 @@ module AutomationService
|
|||||||
card_setup = employer.id_card_setup
|
card_setup = employer.id_card_setup
|
||||||
puts "-- #{employer.name}"
|
puts "-- #{employer.name}"
|
||||||
|
|
||||||
# employer_members =[]
|
|
||||||
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)
|
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)
|
||||||
# vw_mb_members.each do |vw_mb_member|
|
|
||||||
# member = UpdateMemberJob.perform_now(@pb_entity_key, employer.id, card_setup.has_divisions, card_setup.has_dental, true, vw_mb_member)
|
|
||||||
# end
|
|
||||||
# employer.members = employer_members
|
|
||||||
# employer.save
|
|
||||||
|
|
||||||
member_update_futures = vw_mb_members.map do |vw_mb_member|
|
member_update_futures = vw_mb_members.map do |vw_mb_member|
|
||||||
Concurrent::Future.execute do
|
Concurrent::Future.execute do
|
||||||
@@ -28,7 +22,7 @@ module AutomationService
|
|||||||
|
|
||||||
member_updates = member_update_futures.map(&:value).compact
|
member_updates = member_update_futures.map(&:value).compact
|
||||||
employer.members = member_updates
|
employer.members = member_updates
|
||||||
if member_updates.empty? && employer.id_card_setup.active
|
if employer.initialized && card_setup.initialized && member_updates.empty?
|
||||||
employer.active = false
|
employer.active = false
|
||||||
end
|
end
|
||||||
employer.save
|
employer.save
|
||||||
|
|||||||
@@ -6,14 +6,7 @@ module AutomationService
|
|||||||
end
|
end
|
||||||
|
|
||||||
def call
|
def call
|
||||||
# employer = Employer.includes(:id_card_setup).find_by(pl_plan_key: @pl_plan_key)
|
|
||||||
# card_setup = employer.id_card_setup
|
|
||||||
UpdateEmployerPlansJob.new.perform(@pl_plan_key)
|
UpdateEmployerPlansJob.new.perform(@pl_plan_key)
|
||||||
# if employer.present?
|
|
||||||
# employer.save
|
|
||||||
# else
|
|
||||||
# Member.find_by(pb_entity_key: vw_mb_member[:pb_entity_key]).destroy
|
|
||||||
# end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -7,17 +7,8 @@ module AutomationService
|
|||||||
end
|
end
|
||||||
|
|
||||||
def call
|
def call
|
||||||
# employer = Employer.includes(:id_card_setup).find_by(employer_identifier: @employer_identifier)
|
|
||||||
# card_setup = employer.id_card_setup
|
|
||||||
UpdateEmployerJob.new.perform(employer_identifier: @employer_identifier, full_sync: @full_sync)
|
UpdateEmployerJob.new.perform(employer_identifier: @employer_identifier, full_sync: @full_sync)
|
||||||
# if employer.present?
|
|
||||||
# employer.save
|
|
||||||
# else
|
|
||||||
# Member.find_by(pb_entity_key: vw_mb_member[:pb_entity_key]).destroy
|
|
||||||
# end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
# AutomationService::MemberUpdate('13', 337710)
|
|
||||||
@@ -13,11 +13,9 @@ module AutomationService
|
|||||||
if member.present?
|
if member.present?
|
||||||
member.save
|
member.save
|
||||||
else
|
else
|
||||||
Member.find_by(pb_entity_key: vw_mb_member[:pb_entity_key]).destroy
|
Member.find_by(pb_entity_key: @pb_entity_key).destroy
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
# AutomationService::MemberUpdate('13', 337710)
|
|
||||||
@@ -1,163 +0,0 @@
|
|||||||
class WordDocProcessorOld
|
|
||||||
|
|
||||||
def initialize(word_doc, process=nil)
|
|
||||||
@word_doc = word_doc
|
|
||||||
if process
|
|
||||||
@process = process
|
|
||||||
else
|
|
||||||
@process = EmployerSetupProcess.new
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def call
|
|
||||||
doc = Docx::Document.open(@word_doc)
|
|
||||||
|
|
||||||
index = 40
|
|
||||||
|
|
||||||
general_information = doc.paragraphs.slice(0, index)
|
|
||||||
plan_information = doc.paragraphs.slice(index + 1..)
|
|
||||||
|
|
||||||
|
|
||||||
general_fields(general_information)
|
|
||||||
plans(plan_information)
|
|
||||||
employer_logo()
|
|
||||||
|
|
||||||
@process
|
|
||||||
|
|
||||||
end
|
|
||||||
|
|
||||||
private
|
|
||||||
|
|
||||||
def general_fields(general_information)
|
|
||||||
fields = ['Group Number:', 'Employer Name:', 'Group Effective Date:']
|
|
||||||
general_information.each do |gi|
|
|
||||||
field_string = gi.to_s
|
|
||||||
if field_string.include?('Group Number:')
|
|
||||||
value = field_string.delete_prefix('Group Number:').strip
|
|
||||||
if is_number?(value)
|
|
||||||
@process.group_number = value
|
|
||||||
end
|
|
||||||
elsif field_string.include?('Employer Name:')
|
|
||||||
value = field_string.delete_prefix('Employer Name:').strip
|
|
||||||
@process.name = value
|
|
||||||
elsif field_string.include?('Group Effective Date:')
|
|
||||||
value = field_string.delete_prefix('Group Effective Date:').strip
|
|
||||||
@process.effective_date = value
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def employer_logo
|
|
||||||
extracted_images = []
|
|
||||||
Zip::File.open(@word_doc) do |zip_file|
|
|
||||||
zip_file.each do |entry|
|
|
||||||
if entry.name.start_with?('word/media/') && !entry.directory?
|
|
||||||
filename = File.basename(entry.name)
|
|
||||||
image_data = entry.get_input_stream.read
|
|
||||||
extracted_images << { filename: filename, data: image_data }
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
if extracted_images.length > 1
|
|
||||||
@process.employer_logo = @process.name.titleize.gsub(/\s+/, '').concat("Logo.png")
|
|
||||||
# same file logic
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def plans(plan_information)
|
|
||||||
plans_array = []
|
|
||||||
plan_information.each_with_index do |pin, i|
|
|
||||||
if pin.to_s.match?(/\d*\.?\d+k/i)
|
|
||||||
new_plan = {title: pin.to_s.strip, start_index: i, benefits: []}
|
|
||||||
plans_array.push(new_plan)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
plans_array.each do |pl|
|
|
||||||
new_plan = Plan.create(title: pl[:title], employer_setup_process: @process)
|
|
||||||
plan_fields = plan_information.slice(pl[:start_index] + 1, 14)
|
|
||||||
plan_fields.each_with_index do |pf, i|
|
|
||||||
field_string = pf.to_s
|
|
||||||
if field_string.strip.length > 1
|
|
||||||
case field_string
|
|
||||||
when ->(string) { string.include?("Physician Visit") }
|
|
||||||
value = field_string.delete_prefix("Physician Visit")
|
|
||||||
new_benefit = new_plan.plan_benefits.find_by(benefit_desc: "Primary Visit")
|
|
||||||
new_benefit.benefit = value
|
|
||||||
new_benefit.save
|
|
||||||
when ->(string) { string.include?("Specialist Visit") }
|
|
||||||
value = field_string.delete_prefix("Specialist Visit")
|
|
||||||
new_benefit = new_plan.plan_benefits.find_by(benefit_desc: "Specialist Visit")
|
|
||||||
new_benefit.benefit = value
|
|
||||||
new_benefit.save
|
|
||||||
when ->(string) { string.include?("Urgent Care") }
|
|
||||||
value = field_string.delete_prefix("Urgent Care")
|
|
||||||
new_benefit = new_plan.plan_benefits.find_by(benefit_desc: "Urgent Care")
|
|
||||||
new_benefit.benefit = value
|
|
||||||
new_benefit.save
|
|
||||||
when ->(string) { string.include?("Individual Deductible (in network )") }
|
|
||||||
value = field_string.delete_prefix("Individual Deductible (in network )")
|
|
||||||
new_benefit = new_plan.plan_benefits.find_by(benefit_desc: "INN–Ind Ded")
|
|
||||||
new_benefit.benefit = value
|
|
||||||
new_benefit.save
|
|
||||||
when ->(string) { string.include?("Family Deductible(in network )") }
|
|
||||||
value = field_string.delete_prefix("Family Deductible(in network )")
|
|
||||||
new_benefit = new_plan.plan_benefits.find_by(benefit_desc: "INN–Family Ded")
|
|
||||||
new_benefit.benefit = value
|
|
||||||
new_benefit.save
|
|
||||||
when ->(string) { string.include?("Individual Deductible (out of network)") }
|
|
||||||
value = field_string.delete_prefix("Individual Deductible (out of network)")
|
|
||||||
new_benefit = new_plan.plan_benefits.find_by(benefit_desc: "OON–Ind Ded")
|
|
||||||
new_benefit.benefit = value
|
|
||||||
new_benefit.save
|
|
||||||
when ->(string) { string.include?("Family Deductible (out of network) ") }
|
|
||||||
value = field_string.delete_prefix("Family Deductible (out of network) ")
|
|
||||||
new_benefit = new_plan.plan_benefits.find_by(benefit_desc: "OON–Family Ded")
|
|
||||||
new_benefit.benefit = value
|
|
||||||
new_benefit.save
|
|
||||||
when ->(string) { string.include?("Co-Insurance") }
|
|
||||||
value = field_string.delete_prefix("Co-Insurance")
|
|
||||||
new_benefit = new_plan.plan_benefits.find_by(benefit_desc: "Co-Insurance")
|
|
||||||
new_benefit.benefit = value
|
|
||||||
new_benefit.save
|
|
||||||
when ->(string) { string.include?("Out-of-Pocket(in network) ") }
|
|
||||||
value = field_string.delete_prefix("Out-of-Pocket(in network) ")
|
|
||||||
new_benefit = new_plan.plan_benefits.find_by(benefit_desc: "INN–Ind OOP")
|
|
||||||
new_benefit.benefit = value
|
|
||||||
new_benefit.save
|
|
||||||
when ->(string) { string.include?("Out-of-Pocket Family(in network) ") }
|
|
||||||
value = field_string.delete_prefix("Out-of-Pocket Family(in network) ")
|
|
||||||
new_benefit = new_plan.plan_benefits.find_by(benefit_desc: "INN–Family OOP")
|
|
||||||
new_benefit.benefit = value
|
|
||||||
new_benefit.save
|
|
||||||
when ->(string) { string.include?("Out-of-Pocket(out of network) ") }
|
|
||||||
value = field_string.delete_prefix("Out-of-Pocket(out of network) ")
|
|
||||||
new_benefit = new_plan.plan_benefits.find_by(benefit_desc: "OON–Ind OOP")
|
|
||||||
new_benefit.benefit = value
|
|
||||||
new_benefit.save
|
|
||||||
when ->(string) { string.include?("Out-of-Pocket Family (out of network) ") }
|
|
||||||
value = field_string.delete_prefix("Out-of-Pocket Family (out of network) ")
|
|
||||||
new_benefit = new_plan.plan_benefits.find_by(benefit_desc: "OON–Family OOP")
|
|
||||||
new_benefit.benefit = value
|
|
||||||
new_benefit.save
|
|
||||||
when ->(string) { string.include?("Emergency Room ") }
|
|
||||||
value = field_string.delete_prefix("Emergency Room ")
|
|
||||||
new_benefit = new_plan.plan_benefits.find_by(benefit_desc: "Emergency Room")
|
|
||||||
new_benefit.benefit = value
|
|
||||||
new_benefit.save
|
|
||||||
when ->(string) { string.include?("Preventive Care") }
|
|
||||||
value = field_string.delete_prefix("Preventive Care")
|
|
||||||
new_benefit = new_plan.plan_benefits.find_by(benefit_desc: "Preventive Care")
|
|
||||||
new_benefit.benefit = value
|
|
||||||
new_benefit.save
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def is_number?(string)
|
|
||||||
true if Float(string) rescue false
|
|
||||||
end
|
|
||||||
|
|
||||||
end
|
|
||||||
@@ -1,76 +0,0 @@
|
|||||||
module BenefitsWordDocService
|
|
||||||
class MapEmployerInformation
|
|
||||||
|
|
||||||
def initialize(employer, word_doc_section)
|
|
||||||
@employer = employer
|
|
||||||
@card_setup = @employer.id_card_setup
|
|
||||||
@word_doc_section = word_doc_section
|
|
||||||
end
|
|
||||||
|
|
||||||
def call
|
|
||||||
search_fields = mapping_hash.keys.to_set
|
|
||||||
|
|
||||||
@word_doc_section.each do |line|
|
|
||||||
matching_field = search_fields.detect { |field| line.include?(field) }
|
|
||||||
if matching_field
|
|
||||||
field_mapping = mapping_hash[matching_field]
|
|
||||||
field_regex = field_mapping[:doc_to_employer_regex]
|
|
||||||
field_value = line.match(field_regex)[1].strip
|
|
||||||
employer_field = field_mapping[:employer_field]
|
|
||||||
|
|
||||||
if field_mapping[:validation].present?
|
|
||||||
validation_type = field_mapping[:validation]
|
|
||||||
if send("is_#{validation_type}?".to_sym, field_value)
|
|
||||||
@employer[employer_field] = field_value
|
|
||||||
end
|
|
||||||
else
|
|
||||||
@employer[employer_field] = field_value
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
@card_setup.print_name = @employer.name
|
|
||||||
@employer.name = @employer.name.titleize
|
|
||||||
@card_setup.rx_group_number = @employer.group_number
|
|
||||||
@employer
|
|
||||||
end
|
|
||||||
|
|
||||||
private
|
|
||||||
|
|
||||||
def mapping_hash
|
|
||||||
{
|
|
||||||
'Employer Name' => {
|
|
||||||
employer_field: :name,
|
|
||||||
doc_field: 'Employer Name',
|
|
||||||
doc_field_desc: 'Follows pattern - Employer Name:New Employer',
|
|
||||||
doc_to_employer_regex: /.*:(.*)/,
|
|
||||||
regex_desc: 'Grabs everything after colon'
|
|
||||||
},
|
|
||||||
'Group Number' => {
|
|
||||||
employer_field: :group_number,
|
|
||||||
doc_field: 'Group Number',
|
|
||||||
doc_field_desc: 'Follows pattern - Group Number:099999',
|
|
||||||
doc_to_employer_regex: /.*:(.*)/,
|
|
||||||
regex_desc: 'Grabs everything after colon',
|
|
||||||
validation: 'number'
|
|
||||||
},
|
|
||||||
'Group Effective Date' => {
|
|
||||||
employer_field: :effective_date,
|
|
||||||
doc_field: 'Group Effective Date',
|
|
||||||
doc_field_desc: 'Follows pattern - Group Effective Date:12/1/2025',
|
|
||||||
doc_to_employer_regex: /.*:(.*)/,
|
|
||||||
regex_desc: 'Grabs everything after colon',
|
|
||||||
validation: 'date'
|
|
||||||
}
|
|
||||||
}
|
|
||||||
end
|
|
||||||
|
|
||||||
def is_number?(string)
|
|
||||||
true if Float(string) rescue false
|
|
||||||
end
|
|
||||||
|
|
||||||
def is_date?(string)
|
|
||||||
true if Date.parse rescue false
|
|
||||||
end
|
|
||||||
|
|
||||||
end
|
|
||||||
end
|
|
||||||
@@ -1,78 +0,0 @@
|
|||||||
module BenefitsWordDocService
|
|
||||||
class MapEmployerLogo
|
|
||||||
|
|
||||||
def initialize(employer, word_doc)
|
|
||||||
@employer = employer
|
|
||||||
@card_setup = @employer.id_card_setup
|
|
||||||
@word_doc = word_doc
|
|
||||||
end
|
|
||||||
|
|
||||||
def call
|
|
||||||
Zip::File.open(@word_doc) do |zip_file|
|
|
||||||
media_files = zip_file.select { |entry| entry.name.start_with?('word/media/') && !entry.directory? }
|
|
||||||
|
|
||||||
if media_files.length > 1
|
|
||||||
logo = media_files.last
|
|
||||||
file_extension = File.extname(logo.name)
|
|
||||||
meme_type = Marcel::MimeType.for(logo.get_input_stream)
|
|
||||||
image_binary = logo.get_input_stream.read
|
|
||||||
# image_binary = File.binread(logo.get_input_stream.read)
|
|
||||||
|
|
||||||
filename = @employer.name_to_logo_filename(file_extension)
|
|
||||||
|
|
||||||
logo = IdCard::EmployerLogo.find_or_create_by(filename: filename) do |clf|
|
|
||||||
clf.image_data = image_binary
|
|
||||||
clf.content_type = meme_type
|
|
||||||
end
|
|
||||||
|
|
||||||
# new_logo = CardLogoFile.create!(
|
|
||||||
# filename: filename,
|
|
||||||
# image_data: image_binary,
|
|
||||||
# content_type: meme_type,
|
|
||||||
# logo_type: "employer"
|
|
||||||
# )
|
|
||||||
|
|
||||||
# image_io = StringIO.new(image_binary)
|
|
||||||
# width, height = FastImage.size(image_io)
|
|
||||||
# image_ratio = width.to_f / height
|
|
||||||
# if (0.8..1.2).cover?(image_ratio)
|
|
||||||
# @employer.single_card_template = "FairosRxIDCard-Half"
|
|
||||||
# else
|
|
||||||
# @employer.single_card_template = "FairosRxIDCard"
|
|
||||||
# end
|
|
||||||
|
|
||||||
@card_setup.employer_logo = logo
|
|
||||||
end
|
|
||||||
end
|
|
||||||
@employer
|
|
||||||
end
|
|
||||||
|
|
||||||
# def call
|
|
||||||
# extracted_images = []
|
|
||||||
# Zip::File.open(@word_doc) do |zip_file|
|
|
||||||
# zip_file.each do |entry|
|
|
||||||
# if entry.name.start_with?('word/media/') && !entry.directory?
|
|
||||||
# file_extension = File.extname(entry.name)
|
|
||||||
# image_data = entry.get_input_stream.read
|
|
||||||
# extracted_images << { file_extension: file_extension, data: image_data }
|
|
||||||
# end
|
|
||||||
# end
|
|
||||||
# end
|
|
||||||
# if extracted_images.length > 1
|
|
||||||
# logo = extracted_images.last
|
|
||||||
# filename = @employer.employer_name_to_logo_filename(logo[:file_extension])
|
|
||||||
# employer_logo_binary = logo[:data]
|
|
||||||
|
|
||||||
# new_logo = @employer.card_logo_files.create(
|
|
||||||
# filename: filename,
|
|
||||||
# image: employer_logo_binary,
|
|
||||||
# logo_type: "employer"
|
|
||||||
# )
|
|
||||||
|
|
||||||
# @employer.employer_logo = new_logo.filename
|
|
||||||
# # same file logic
|
|
||||||
# end
|
|
||||||
# @employer.save
|
|
||||||
# end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
@@ -1,44 +0,0 @@
|
|||||||
module BenefitsWordDocService
|
|
||||||
class MapNetworkInformation
|
|
||||||
|
|
||||||
def initialize(employer, word_doc_section)
|
|
||||||
@employer = employer
|
|
||||||
@card_setup = @employer.id_card_setup
|
|
||||||
@word_doc_section = word_doc_section
|
|
||||||
end
|
|
||||||
|
|
||||||
def call
|
|
||||||
# network = @word_doc_section.each do |line|
|
|
||||||
# if line.match?(/cigna/i)
|
|
||||||
# return "Cigna"
|
|
||||||
# elsif line.match?(/medcost/i)
|
|
||||||
# return "Medcost"
|
|
||||||
# end
|
|
||||||
# end
|
|
||||||
|
|
||||||
network = @word_doc_section.find do |line|
|
|
||||||
if line.match?(/cigna/i)
|
|
||||||
break "Cigna"
|
|
||||||
elsif line.match?(/medcost/i)
|
|
||||||
break "MedCost"
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
# yellow_fruit_names_filtered = @word_doc_section.filter_map do |line|
|
|
||||||
# item[:name] if item[:color] == 'yellow'
|
|
||||||
# end
|
|
||||||
|
|
||||||
if network
|
|
||||||
@card_setup.network_provider = network
|
|
||||||
logo_name = "#{network}Logo.png"
|
|
||||||
@card_setup.network_logo = IdCard::NetworkLogo.find_by(filename: logo_name)
|
|
||||||
@card_setup.provider_section = IdCard::ProviderSection.find_by(title: network)
|
|
||||||
@card_setup.rx_section = IdCard::RxSection.find_by(title: "FairosRx")
|
|
||||||
end
|
|
||||||
|
|
||||||
|
|
||||||
@employer
|
|
||||||
end
|
|
||||||
|
|
||||||
end
|
|
||||||
end
|
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user