mirror of
https://github.com/we-promise/sure.git
synced 2026-04-19 03:54:08 +00:00
Fix linked account balance currency mismatch (#566)
* Fix linked account balance currency mismatch When linking accounts from providers (Lunchflow, SimpleFIN, Enable Banking), the initial sync was creating balances before the correct currency was known. This caused: 1. Opening anchor entry created with default currency (USD/EUR) 2. First sync created balances with wrong currency 3. Later syncs created balances with correct currency 4. Both currency balances existed, charts showed wrong (zero) values Changes: - Add `skip_initial_sync` parameter to `Account.create_and_sync` - Skip initial sync for linked accounts (provider sync handles it) - Add currency filter to ChartSeriesBuilder query to only fetch balances matching the account's current currency * Add migration script and add tests * Update schema.rb --------- Signed-off-by: soky srm <sokysrm@gmail.com> Co-authored-by: sokie <sokysrm@gmail.com>
This commit is contained in:
@@ -182,13 +182,18 @@ class LunchflowItemsController < ApplicationController
|
||||
end
|
||||
|
||||
# Create the internal Account with proper balance initialization
|
||||
# Use lunchflow_account.currency (already parsed) and skip initial sync
|
||||
# because the provider sync will set the correct currency from the balance API
|
||||
account = Account.create_and_sync(
|
||||
family: Current.family,
|
||||
name: account_data[:name],
|
||||
balance: 0, # Initial balance will be set during sync
|
||||
currency: account_data[:currency] || "USD",
|
||||
accountable_type: accountable_type,
|
||||
accountable_attributes: {}
|
||||
{
|
||||
family: Current.family,
|
||||
name: account_data[:name],
|
||||
balance: 0, # Initial balance will be set during sync
|
||||
currency: lunchflow_account.currency || "USD",
|
||||
accountable_type: accountable_type,
|
||||
accountable_attributes: {}
|
||||
},
|
||||
skip_initial_sync: true
|
||||
)
|
||||
|
||||
# Link account to lunchflow_account via account_providers join table
|
||||
@@ -605,13 +610,17 @@ class LunchflowItemsController < ApplicationController
|
||||
selected_subtype = "credit_card" if selected_type == "CreditCard" && selected_subtype.blank?
|
||||
|
||||
# Create account with user-selected type and subtype (raises on failure)
|
||||
# Skip initial sync - provider sync will handle balance creation with correct currency
|
||||
account = Account.create_and_sync(
|
||||
family: Current.family,
|
||||
name: lunchflow_account.name,
|
||||
balance: lunchflow_account.current_balance || 0,
|
||||
currency: lunchflow_account.currency || "USD",
|
||||
accountable_type: selected_type,
|
||||
accountable_attributes: selected_subtype.present? ? { subtype: selected_subtype } : {}
|
||||
{
|
||||
family: Current.family,
|
||||
name: lunchflow_account.name,
|
||||
balance: lunchflow_account.current_balance || 0,
|
||||
currency: lunchflow_account.currency || "USD",
|
||||
accountable_type: selected_type,
|
||||
accountable_attributes: selected_subtype.present? ? { subtype: selected_subtype } : {}
|
||||
},
|
||||
skip_initial_sync: true
|
||||
)
|
||||
|
||||
# Link account to lunchflow_account via account_providers join table (raises on failure)
|
||||
|
||||
Reference in New Issue
Block a user