diff --git a/app/assets/javascripts/plan_shopping.js.erb b/app/assets/javascripts/plan_shopping.js.erb index 8a9f8681ec3..0812d094e18 100644 --- a/app/assets/javascripts/plan_shopping.js.erb +++ b/app/assets/javascripts/plan_shopping.js.erb @@ -259,6 +259,74 @@ $(function() { } }); + $(document).on('change', 'input[name="elected_aptc_pct"]', function(){ + var max = parseFloat($('input#elected_aptc_value').attr('max')); + var elected_pct = $("input[name='elected_aptc_pct']").val() / 100; + var elected_amount = parseFloat($('#max_aptc').attr('value')).toFixed(2) * parseFloat(elected_pct).toFixed(2); + if (elected_amount <= 1) { + elected_amount = 1.00; + } + if (elected_amount > max) { + elected_amount = max; + $("input[name='elected_aptc_pct']").val(100); + } + $('#elected_aptc_value').val(elected_amount.toFixed(2)); + $('#elected_aptc_value').attr('value', elected_amount.toFixed(2)); + }); + + $(document).on('change', 'input#elected_aptc_value', function(){ + var elected_aptc = $(this).val(); + var max = $('input#elected_aptc_value').attr('max'); + var max_aptc = $('input#max_aptc').val(); + elected_pct = (elected_aptc/max_aptc).toFixed(2) * 100; + if (elected_pct <= 0) { + elected_amount = 0; + } + if (elected_pct > 100) { + elected_pct = 100; + $('#elected_aptc_value').val(max); + } + $("input[name='elected_aptc_pct']").val(elected_pct); + }); + + $("#updateAptc").on('click', function(){ + $(this).addClass('hidden'); + $('.aptc').removeClass('hidden'); + }); + + var USDollar = new Intl.NumberFormat('en-US', { + style: 'currency', + currency: 'USD', + }); + + $("#aptc_submit").on('click', function(){ + var elected_aptc = $("input#elected_aptc_value").val(); + var elected_pct = $("input[name='elected_aptc_pct']").val(); + var coverage_kind = $("input#coverage_kind").val(); + var market_kind = $("input#market_kind").val(); + var plan = $("input#plan").val(); + var enrollment = $("input#enrollment").val(); + $('.aptc-percentage').text(elected_pct); + $('.aptc-amount').text(USDollar.format(elected_aptc)); + $.ajax({ + type: "POST", + url: $('#set_elected_aptc_url').val(), + data: { + 'elected_aptc': elected_aptc, + 'market_kind': market_kind, + 'coverage_kind': coverage_kind, + 'plan': plan, + 'enrollment': enrollment + }, + success: function(data){ + response = JSON.parse(JSON.stringify(data)); + var amount = USDollar.format(data['responsible_amount']); + $('#resp-amount').text(amount); + }, + }); + }); + + $(document).on('click', '.all-filters-row .apply-btn', function(){ applyPlanFilters(); diff --git a/app/controllers/insured/plan_shoppings_controller.rb b/app/controllers/insured/plan_shoppings_controller.rb index 1548af2d96f..60b69f0b577 100644 --- a/app/controllers/insured/plan_shoppings_controller.rb +++ b/app/controllers/insured/plan_shoppings_controller.rb @@ -16,7 +16,7 @@ class Insured::PlanShoppingsController < ApplicationController before_action :validate_rating_address, only: [:show] before_action :check_enrollment_state, only: [:show, :thankyou] before_action :set_cache_headers, only: [:show, :thankyou] - before_action :enable_bs4_layout, only: [:show, :plans, :receipt] if EnrollRegistry.feature_enabled?(:bs4_consumer_flow) + before_action :enable_bs4_layout, only: [:show, :plans, :receipt, :thankyou] if EnrollRegistry.feature_enabled?(:bs4_consumer_flow) layout :resolve_layout @@ -240,8 +240,20 @@ def set_elected_aptc plan_comparision_obj = ::Services::CheckbookServices::PlanComparision.new(@hbx_enrollment) plan_comparision_obj.elected_aptc = session[:elected_aptc] checkbook_url = plan_comparision_obj.generate_url + + # for the thank you page will need member data returned to update table + if params[:plan].present? && params[:enrollment].present? + plan = BenefitMarkets::Products::Product.where(:id => params[:plan])&.first + enrollment = HbxEnrollment.find(params[:enrollment]) + if plan.present? && enrollment + decorated_plan = UnassistedPlanCostDecorator.new(plan, enrollment, session[:elected_aptc]) + responsible_amount = decorated_plan.total_employee_cost - enrollment.eligible_child_care_subsidy.to_f + amount = responsible_amount < 1 ? 0.00 : responsible_amount + end + end + respond_to do |format| - format.json { render json: {message: 'ok',checkbook_url: checkbook_url } } + format.json { render json: {message: 'ok',checkbook_url: checkbook_url, responsible_amount: amount } } end end diff --git a/app/javascript/css/_buttons.scss b/app/javascript/css/_buttons.scss index 9438d0fb036..35e0180d610 100644 --- a/app/javascript/css/_buttons.scss +++ b/app/javascript/css/_buttons.scss @@ -111,3 +111,7 @@ button.unstyled, button.close { color: var(--button-primary-active-color); } } + +button.short, .button.short, .btn.short { + padding: 6px 12px; +} diff --git a/app/javascript/css/colors.scss b/app/javascript/css/colors.scss index 9b09a7d97df..4809113a38f 100644 --- a/app/javascript/css/colors.scss +++ b/app/javascript/css/colors.scss @@ -31,6 +31,14 @@ --error-color: hsl(0, 69%, 38%); --error-tint: hsl(0, 80%, 86%); --body-divider: hsl(214, 16%, 80%); + --platinum-border: hsla(240, 2%, 37%, 1); + --platinum-bg: hsla(240, 1%, 84%, 1); + --gold-border: hsla(43, 96%, 54%, 1); + --gold-bg: hsla(44, 93%, 88%, 1); + --silver-border: hsla(0, 0%, 75%, 1); + --silver-bg: hsla(0, 0%, 94%, 1); + --bronze-border: hsla(30, 61%, 50%, 1); + --bronze-bg: hsla(31, 60%, 87%, 1); // May be unique colors, but used by all clients --bright-green: hsl(65, 100%, 42%); @@ -116,6 +124,11 @@ --button-error-color: var(--status-red); --button-error-hover-color: var(--status-red-hover); --button-error-active-color: var(--status-red-active); + + --badge-current-bg: hsla(206, 30%, 82%, 1); + --badge-current-border: hsla(206, 33%, 66%, 1); + --badge-standard-bg: hsla(321, 19%, 80%, 1); + --badge-standard-border: hsla(317, 33%, 38%, 1); } [data-theme='dc'] { diff --git a/app/javascript/css/main.scss b/app/javascript/css/main.scss index f2f8e92ec78..b7b00204240 100644 --- a/app/javascript/css/main.scss +++ b/app/javascript/css/main.scss @@ -209,6 +209,10 @@ ul.list-right-section { .sm-hide { display: none; } + + .sm-hide { + display: none; + } } .card { @@ -258,6 +262,47 @@ ul.list-right-section { } } +.badge-current-plan { + background-color: var(--badge-current-bg); + border: 1px solid var(--badge-current-border); + padding: 1px 8px; +} + +.badge-standard { + background-color: var(--badge-standard-bg); + border: 1px solid var(--badge-standard-border); +} + +.badge-platinum { + font-weight: 400; + background-color: var(--platinum-bg); + border: 1px solid var(--platinum-border); +} + +.badge-gold { + font-weight: 400; + background-color: var(--gold-bg); + border: 1px solid var(--gold-border); +} + +.badge-silver { + font-weight: 400; + background-color: var(--silver-bg); + border: 1px solid var(--silver-border); +} + +.badge-bronze { + font-weight: 400; + background-color: var(--bronze-bg); + border: 1px solid var(--bronze-border); +} + +.badge-catastrophic { + font-weight: 400; + background-color: var(--error-tint); + border: 1px solid var(--error-shade); +} + .float-end { float: inline-end; } @@ -545,8 +590,24 @@ a.disabled { font-weight: 600; } +.filter-input-block legend.bb, .sort-area legend { + padding-bottom: ($spacer / 2); + border-bottom: 1px solid var(--body-divider); +} .filter-input-block legend.bb, .sort-area legend { padding-bottom: ($spacer / 2); border-bottom: 1px solid var(--body-divider); } + +.plan-card { + background: var(--grey-010); + + .plan-footer { + a:not(.btn) { + text-decoration: none; + font-weight: 600; + color: var(--info-color); + } + } +} diff --git a/app/javascript/css/table.scss b/app/javascript/css/table.scss index 00522fd6e35..ea70478789c 100644 --- a/app/javascript/css/table.scss +++ b/app/javascript/css/table.scss @@ -82,3 +82,26 @@ table { font-weight: 600; } } + +.compare-table.table { + th, td { + border-top: none; + border-bottom: none; + } + tr.left-border-all td:nth-child(1n+1) { + border-right: 1px solid var(--grey-060); + } + tr:not(.left-border-all) td:nth-child(1n+1) { + border-right: 1px solid var(--grey-030); + } + tr:not(.left-border-all) td:nth-child(2n+1) { + border-right: 1px solid var(--grey-060); + } + tr.left-border-all td:last-of-type, tr:not(.left-border-all) td:last-of-type { + border-right: none; + } + th { + background: var(--grey-010); + font-weight: 600; + } +} diff --git a/app/models/benefit_coverage_period.rb b/app/models/benefit_coverage_period.rb index 9cddbef976c..551379e5b12 100644 --- a/app/models/benefit_coverage_period.rb +++ b/app/models/benefit_coverage_period.rb @@ -177,10 +177,7 @@ def elected_plans_by_enrollment_members(hbx_enrollment_members, coverage_kind, t 'csr_limited' end end - - ivl_bgs = get_benefit_packages({family_members: family_members, coverage_kind: coverage_kind, family: hbx_enrollment.family, american_indian_members: american_indian_members, - hbx_enrollment: hbx_enrollment, - effective_on: hbx_enrollment.effective_on, market: market, shopping_family_members_ids: shopping_family_member_ids, csr_kind: csr_kind }).uniq + ivl_bgs = get_benefit_packages({family_members: family_members, coverage_kind: coverage_kind, family: hbx_enrollment.family, american_indian_members: american_indian_members, hbx_enrollment: hbx_enrollment, effective_on: hbx_enrollment.effective_on, market: market, shopping_family_members_ids: shopping_family_member_ids, csr_kind: csr_kind }).uniq elected_product_ids = ivl_bgs.map(&:benefit_ids).flatten.uniq market = market.nil? || market == 'coverall' ? 'individual' : market product_entries({market: market, coverage_kind: coverage_kind, csr_kind: csr_kind, elected_product_ids: elected_product_ids, subcriber: subcriber, effective_on: hbx_enrollment.effective_on}) diff --git a/app/views/insured/family_members/index.html.erb b/app/views/insured/family_members/index.html.erb index d05ace0d636..63b7ce6486a 100644 --- a/app/views/insured/family_members/index.html.erb +++ b/app/views/insured/family_members/index.html.erb @@ -1,6 +1,5 @@ <% if @bs4 %> <%= render partial: 'shared/plan_shopping_progress', locals: { current_page: :household_info, nav_options: family_info_progress_hash } %> -
<%= l10n("insured.individual_agreement.agreement.report_changes", contact_center_name: contact_center_name, contact_center_phone_number: contact_center_phone_number) %>
+<%= l10n("insured.individual_agreement.agreement.i_am_signature") %>
+<%= l10n("insured.individual_agreement.agreement.reviewed_info") %>
+ <% if EnrollRegistry.feature_enabled?(:extended_aptc_individual_agreement_message) && @plan.total_aptc_amount > 0 %> + <% cov_year = locals[:coverage_year] %> +<%= l10n("insured.individual_agreement.agreement.aptc.on_my_behalf") %>
+<%= l10n("insured.individual_agreement.agreement.aptc.i_expect") %>
+<%= l10n("insured.individual_agreement.agreement.aptc.if_changes") %>
+<%= l10n("insured.individual_agreement.terms_conditions.cant_change_terms") %>
+<%= l10n("insured.individual_agreement.terms_conditions.limitations") %>
+<%= l10n("insured.individual_agreement.terms_conditions.collect_info", aca_state_name: aca_state_name) %>
+<%= l10n("insured.individual_agreement.terms_conditions.best_of_knowledge") %>
+<%= l10n("insured.individual_agreement.terms_conditions.contract") %>
+<%= l10n("insured.individual_agreement.terms_conditions.insurer_agreement") %>
+<%= l10n("insured.individual_agreement.terms_conditions.fraud_warning") %>
+<%= l10n("insured.individual_agreement.electronic_signature.desc") %>
+<%= member.person.full_name %> | <%= member.primary_relationship.titleize %> | <%= dob_in_words(member.person.age_on(TimeKeeper.date_of_record), member.person.dob) %> | @@ -54,7 +54,7 @@ <% end %>||||||||
<%= l10n("plans.plan_shopping.receipt.total").upcase %> | <%= number_to_currency(@plan.total_premium) %> | <% if osse_eligible %> @@ -62,13 +62,13 @@<%= number_to_currency(@enrollment.eligible_child_care_subsidy.to_f) %> | <% end %> <% if calculate %> -<%= number_to_currency(@plan.total_aptc_amount) %> | +<%= number_to_currency(@plan.total_aptc_amount) %> | <% responsible_amount = @plan.total_employee_cost - @enrollment.eligible_child_care_subsidy.to_f %> <% else %> -<%= number_to_currency(@enrollment.applied_aptc_amount.to_f) %> | +<%= number_to_currency(@enrollment.applied_aptc_amount.to_f) %> | <% responsible_amount = @plan.total_premium - @enrollment.applied_aptc_amount.to_f - @enrollment.eligible_child_care_subsidy.to_f %> <% end %> -<%= number_to_currency((responsible_amount < 1 ? 0.00 : responsible_amount)) %> | +<%= number_to_currency((responsible_amount < 1 ? 0.00 : responsible_amount)) %> |
<%= number_to_currency(shopping_group_premium(plan.total_employee_cost, plan.total_ehb_premium, plan.total_childcare_subsidy_amount, plan.can_use_aptc?)) %>
<% else %> -<%= number_to_currency(plan.total_employee_cost - plan.total_childcare_subsidy_amount) %>
<% end %> - /<%= l10n("month") %> + per <%= l10n("month") %><%= l10n("type") %> | -<%= l10n("level") %> | -<%= l10n("network") %> | -<%= l10n("deductible") %> | -
---|---|---|---|
<%= plan.product_type ? plan.product_type.upcase : "" %> | -- <% plan_level = plan.metal_level.titleize %> - | - -- <% if offers_nationwide_plans? %> - <%= plan.network %> - <% else %> - <% if plan.network_information.present? %> - Network Notes - - <% end %> - <% end %> - | -<%= deductible_display(@hbx_enrollment, plan) %> | -