X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=lib%2FApp%2FHomeBank2Ledger.pm;h=5a61f7d5369df135de452f8c5a44ab49876164b9;hb=0a2af7f81a0cb07cfefaf9b8595dbd302a3ca282;hp=13cb9d2f57f4837a4ec9be41d4e224ca792039de;hpb=71591e40fa4a522e41ed7283cce39780f4ef8cb5;p=chaz%2Fhomebank2ledger diff --git a/lib/App/HomeBank2Ledger.pm b/lib/App/HomeBank2Ledger.pm index 13cb9d2..5a61f7d 100644 --- a/lib/App/HomeBank2Ledger.pm +++ b/lib/App/HomeBank2Ledger.pm @@ -11,7 +11,7 @@ use File::HomeBank; use Getopt::Long 2.38 qw(GetOptionsFromArray); use Pod::Usage; -our $VERSION = '0.001'; # VERSION +our $VERSION = '0.004'; # VERSION my %ACCOUNT_TYPES = ( # map HomeBank account types to Ledger accounts bank => 'Assets:Bank', @@ -50,6 +50,10 @@ sub main { if ($opts->{manual}) { pod2usage(-exitval => 0, -verbose => 2); } + if (!$opts->{input}) { + print STDERR "Input file is required.\n"; + exit(1); + } my $homebank = File::HomeBank->new(file => $opts->{input}); @@ -89,6 +93,9 @@ sub convert_homebank_to_ledger { my $homebank = shift; my $opts = shift || {}; + my $default_account_income = 'Income:Unknown'; + my $default_account_expenses = 'Expenses:Unknown'; + my $ledger = App::HomeBank2Ledger::Ledger->new; my $transactions = $homebank->sorted_transactions; @@ -115,13 +122,17 @@ sub convert_homebank_to_ledger { $item->{excluded} = 1 if $item->{ledger_name} =~ /$re/; } } + while (my ($re, $replacement) = each %{$opts->{rename_accounts}}) { + $default_account_income =~ s/$re/$replacement/; + $default_account_expenses =~ s/$re/$replacement/; + } my $has_initial_balance = grep { $_->{initial} && !$_->{excluded} } @$accounts; if ($opts->{accounts}) { my @accounts = map { $_->{ledger_name} } grep { !$_->{excluded} } @$accounts, @$categories; - push @accounts, $opts->{default_account}; + push @accounts, $default_account_income, $default_account_expenses; push @accounts, $OPENING_BALANCES_ACCOUNT if $has_initial_balance; $ledger->add_accounts(@accounts); @@ -252,10 +263,12 @@ sub convert_homebank_to_ledger { my @categories = split(/\|\|/, $transaction->{split_category} || ''); for (my $i = 0; $amounts[$i]; ++$i) { - my $amount = -$amounts[$i]; - my $category = $homebank->find_category_by_key($categories[$i]); - my $memo = $memos[$i] || ''; - my $other_account = $category ? $category->{ledger_name} : $opts->{default_account}; + my $amount = -$amounts[$i]; + my $category = $homebank->find_category_by_key($categories[$i]); + my $memo = $memos[$i] || ''; + my $other_account = $category ? $category->{ledger_name} + : $amount < 0 ? $default_account_income + : $default_account_expenses; push @postings, { account => $other_account, @@ -269,12 +282,16 @@ sub convert_homebank_to_ledger { } } else { # with or without category - my $category = $homebank->find_category_by_key($transaction->{category}); - my $other_account = $category ? $category->{ledger_name} : $opts->{default_account}; + my $amount = -$transaction->{amount}; + my $category = $homebank->find_category_by_key($transaction->{category}); + my $other_account = $category ? $category->{ledger_name} + : $amount < 0 ? $default_account_income + : $default_account_expenses; + push @postings, { account => $other_account, commodity => $commodities{$account->{currency}}, - amount => -$transaction->{amount}, + amount => $amount, payee => $payee->{name}, memo => $memo, status => $status, @@ -331,7 +348,6 @@ sub parse_args { tags => 1, commodities => 1, opening_date => '', - default_account => 'Expenses:No Category', rename_accounts => {}, exclude_accounts => [], ); @@ -349,16 +365,11 @@ sub parse_args { 'tags!' => \$opts{tags}, 'commodities!' => \$opts{commodities}, 'opening-date=s' => \$opts{opening_date}, - 'default-account=s' => \$opts{default_account}, 'rename-account|r=s' => \%{$opts{rename_accounts}}, 'exclude-account|x=s' => \@{$opts{exclude_accounts}}, ) or pod2usage(-exitval => 1, -verbose => 99, -sections => [qw(SYNOPSIS OPTIONS)]); $opts{input} = shift @args if !$opts{input}; - if (!$opts{input}) { - print STDERR "Input file is required.\n"; - exit(1); - } return \%opts; } @@ -382,7 +393,7 @@ App::HomeBank2Ledger - A tool to convert HomeBank files to Ledger format =head1 VERSION -version 0.001 +version 0.004 =head1 SYNOPSIS