mirror of
https://github.com/we-promise/sure.git
synced 2026-07-27 20:22:16 +00:00
* feat(sync): allow EnableBanking credit card balances to be parsed as available credit * feat(ui): expose Enable Banking balance interpretation toggle on credit card form Adds a toggle to the credit card edit dialog, shown only when the account is linked to an Enable Banking provider account. Toggling persists treat_balance_as_available_credit and enqueues an item sync so the balance is reinterpreted immediately. * fix(sync): keep existing balance when credit limit is missing for available-credit cards When treat_balance_as_available_credit is on and the API omits credit_limit, the reported balance is known to be available credit, so recording it as debt fabricates a liability. Skip the balance write in that case and only update the available credit metadata. Also extract the credit card branching into a helper and include provider_key, account_provider and metadata in the debug log entries so support can filter /settings/debug by the affected connection. * refactor(ui): move provider lookup to Account and label the toggle for assistive tech Adds Account#provider_account_for so the view no longer queries account_providers directly, and wires aria-labelledby from the toggle to its visible label. * fix(ui): apply Enable Banking setting only after a successful account update Runs the provider flag update after super and only on the redirect path, so a failed account save no longer persists the flag or enqueues a sync. Also permits the enable_banking params so malformed input is filtered instead of raising. * test(sync): extract relink helper in Enable Banking processor test * feat(sync): fall back to manually set available credit as the credit limit When the toggle is on, the accountable's available_credit field now holds the credit limit (API-provided, or user-entered when the API omits it) and is never overwritten with the reported balance. This lets users whose bank reports available credit without a credit limit compute the outstanding debt by entering their limit in the Available credit field, while keeping the field stable across syncs so a stale reported balance can never be mistaken for a limit. --------- Signed-off-by: Juan José Mata <juanjo.mata@gmail.com> Co-authored-by: Juan José Mata <juanjo.mata@gmail.com>
39 lines
1.2 KiB
Ruby
39 lines
1.2 KiB
Ruby
class CreditCardsController < ApplicationController
|
|
include AccountableResource
|
|
|
|
permitted_accountable_attributes(
|
|
:id,
|
|
:available_credit,
|
|
:minimum_payment,
|
|
:apr,
|
|
:annual_fee,
|
|
:expiration_date
|
|
)
|
|
|
|
def update
|
|
super
|
|
# Only apply provider settings once the account update succeeded (redirect);
|
|
# a failed update renders :edit and must not persist the flag.
|
|
update_enable_banking_settings if response.redirect?
|
|
end
|
|
|
|
private
|
|
def update_enable_banking_settings
|
|
eb_params = params.permit(account: { enable_banking: [ :treat_balance_as_available_credit ] })
|
|
.dig(:account, :enable_banking)
|
|
return if eb_params.blank?
|
|
|
|
provider_account = @account.provider_account_for("EnableBankingAccount")
|
|
return unless provider_account.present?
|
|
|
|
provider_account.update!(
|
|
treat_balance_as_available_credit: ActiveModel::Type::Boolean.new.cast(eb_params[:treat_balance_as_available_credit])
|
|
)
|
|
|
|
# Re-sync so the balance is reinterpreted right away instead of on the next scheduled sync
|
|
if provider_account.saved_change_to_treat_balance_as_available_credit?
|
|
provider_account.enable_banking_item.sync_later
|
|
end
|
|
end
|
|
end
|