mirror of
https://github.com/we-promise/sure.git
synced 2026-04-18 19:44:09 +00:00
Initial enable banking implementation (#382)
* Initial enable banking implementation * Handle multiple connections * Amount fixes * Account type mapping * Add option to skip accounts * Update schema.rb * Transaction fixes * Provider fixes * FIX account identifier * FIX support unlinking * UI style fixes * FIX safe redirect and brakeman issue * FIX - pagination max fix - wrap crud in transaction logic * FIX api uid access - The Enable Banking API expects the UUID (uid from the API response) to fetch balances/transactions, not the identification_hash * FIX add new connection * FIX erb code * Alert/notice box overflow protection * Give alert/notification boxes room to grow (3 lines max) * Add "Enable Banking (beta)" to `/settings/bank_sync` * Make Enable Banking section collapsible like all others * Add callback hint to error message --------- Co-authored-by: Juan José Mata <juanjo.mata@gmail.com>
This commit is contained in:
69
app/models/enable_banking_account/processor.rb
Normal file
69
app/models/enable_banking_account/processor.rb
Normal file
@@ -0,0 +1,69 @@
|
||||
class EnableBankingAccount::Processor
|
||||
include CurrencyNormalizable
|
||||
|
||||
attr_reader :enable_banking_account
|
||||
|
||||
def initialize(enable_banking_account)
|
||||
@enable_banking_account = enable_banking_account
|
||||
end
|
||||
|
||||
def process
|
||||
unless enable_banking_account.current_account.present?
|
||||
Rails.logger.info "EnableBankingAccount::Processor - No linked account for enable_banking_account #{enable_banking_account.id}, skipping processing"
|
||||
return
|
||||
end
|
||||
|
||||
Rails.logger.info "EnableBankingAccount::Processor - Processing enable_banking_account #{enable_banking_account.id} (uid #{enable_banking_account.uid})"
|
||||
|
||||
begin
|
||||
process_account!
|
||||
rescue StandardError => e
|
||||
Rails.logger.error "EnableBankingAccount::Processor - Failed to process account #{enable_banking_account.id}: #{e.message}"
|
||||
Rails.logger.error "Backtrace: #{e.backtrace.join("\n")}"
|
||||
report_exception(e, "account")
|
||||
raise
|
||||
end
|
||||
|
||||
process_transactions
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def process_account!
|
||||
if enable_banking_account.current_account.blank?
|
||||
Rails.logger.error("Enable Banking account #{enable_banking_account.id} has no associated Account")
|
||||
return
|
||||
end
|
||||
|
||||
account = enable_banking_account.current_account
|
||||
balance = enable_banking_account.current_balance || 0
|
||||
|
||||
# For liability accounts, ensure positive balances
|
||||
if account.accountable_type == "CreditCard" || account.accountable_type == "Loan"
|
||||
balance = -balance
|
||||
end
|
||||
|
||||
currency = parse_currency(enable_banking_account.currency) || account.currency || "EUR"
|
||||
|
||||
account.update!(
|
||||
balance: balance,
|
||||
cash_balance: balance,
|
||||
currency: currency
|
||||
)
|
||||
end
|
||||
|
||||
def process_transactions
|
||||
EnableBankingAccount::Transactions::Processor.new(enable_banking_account).process
|
||||
rescue => e
|
||||
report_exception(e, "transactions")
|
||||
end
|
||||
|
||||
def report_exception(error, context)
|
||||
Sentry.capture_exception(error) do |scope|
|
||||
scope.set_tags(
|
||||
enable_banking_account_id: enable_banking_account.id,
|
||||
context: context
|
||||
)
|
||||
end
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user