mirror of
https://github.com/we-promise/sure.git
synced 2026-04-21 04:54:11 +00:00
feat: Support optional balance date column in account CSV imports (#736)
* Initial plan * Add ability to specify balance date in AccountImport CSV Co-authored-by: jjmata <187772+jjmata@users.noreply.github.com> * Restore original Ruby version * Fix linting issues - remove trailing whitespace Co-authored-by: jjmata <187772+jjmata@users.noreply.github.com> * Add error handling for date parsing in AccountImport Co-authored-by: jjmata <187772+jjmata@users.noreply.github.com> * Revert unintended Gemfile.lock changes Co-authored-by: jjmata <187772+jjmata@users.noreply.github.com> --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: jjmata <187772+jjmata@users.noreply.github.com>
This commit is contained in:
@@ -18,7 +18,19 @@ class AccountImport < Import
|
||||
account.save!
|
||||
|
||||
manager = Account::OpeningBalanceManager.new(account)
|
||||
result = manager.set_opening_balance(balance: row.amount.to_d)
|
||||
|
||||
# Parse date if provided, otherwise use default
|
||||
balance_date = if row.date.present?
|
||||
begin
|
||||
Date.strptime(row.date, date_format)
|
||||
rescue ArgumentError => e
|
||||
raise OpeningBalanceError, "Invalid date format for '#{row.date}': #{e.message}"
|
||||
end
|
||||
else
|
||||
nil
|
||||
end
|
||||
|
||||
result = manager.set_opening_balance(balance: row.amount.to_d, date: balance_date)
|
||||
|
||||
# Re-raise since we should never have an error here
|
||||
if result.error
|
||||
@@ -37,7 +49,7 @@ class AccountImport < Import
|
||||
end
|
||||
|
||||
def column_keys
|
||||
%i[entity_type name amount currency]
|
||||
%i[entity_type name amount currency date]
|
||||
end
|
||||
|
||||
def dry_run
|
||||
@@ -48,10 +60,10 @@ class AccountImport < Import
|
||||
|
||||
def csv_template
|
||||
template = <<-CSV
|
||||
Account type*,Name*,Balance*,Currency
|
||||
Checking,Main Checking Account,1000.00,USD
|
||||
Savings,Emergency Fund,5000.00,USD
|
||||
Credit Card,Rewards Card,-500.00,USD
|
||||
Account type*,Name*,Balance*,Currency,Balance Date
|
||||
Checking,Main Checking Account,1000.00,USD,01/01/2024
|
||||
Savings,Emergency Fund,5000.00,USD,01/15/2024
|
||||
Credit Card,Rewards Card,-500.00,USD,02/01/2024
|
||||
CSV
|
||||
|
||||
CSV.parse(template, headers: true)
|
||||
|
||||
@@ -6,5 +6,13 @@
|
||||
<%= form.select :amount_col_label, import.csv_headers, { include_blank: "Leave empty", label: "Balance" }, required: true %>
|
||||
<%= form.select :currency_col_label, import.csv_headers, { include_blank: "Default", label: "Currency" } %>
|
||||
|
||||
<div class="flex items-center gap-4">
|
||||
<%= form.select :date_col_label, import.csv_headers, { include_blank: "Leave empty", label: "Balance Date" } %>
|
||||
<%= form.select :date_format,
|
||||
Family::DATE_FORMATS,
|
||||
{ label: "Date Format", prompt: "Select format" },
|
||||
required: @import.date_col_label.present? %>
|
||||
</div>
|
||||
|
||||
<%= form.submit "Apply configuration", disabled: import.complete? %>
|
||||
<% end %>
|
||||
|
||||
Reference in New Issue
Block a user