=================================================================== RCS file: /cvs/pta/pta_import.pl,v retrieving revision 1.14 retrieving revision 1.17 diff -u -p -r1.14 -r1.17 --- pta/pta_import.pl 2020/11/18 22:25:05 1.14 +++ pta/pta_import.pl 2020/11/19 23:55:50 1.17 @@ -1,4 +1,4 @@ -#!/usr/bin/perl +#!/usr/bin/perl # Copyright (c) 2020 Freda Bundchen @@ -22,20 +22,35 @@ use Getopt::Std qw(getopts); our ($opt_I); my %banks = ( + "bbva_usa" => \&import_bbva_usa, "capital_one_credit" => \&import_capital_one_credit, "chase_credit" => \&import_chase_credit, "optum_hsa" => \&import_optum_hsa, "sparkasse_camt" => \&import_sparkasse_camt, + "wellsfargo" => \&import_wellsfargo, ); # === SUBROUTINES ===================================================== +sub import_bbva_usa ($$$) { + my ($account, $csv_account, $line) = @_; + $line =~ + m#(\d+)/(\d+)/(\d+),(.*?),\S+,(\(?\d+\.\d+\)?),# or + die "parse error: $line"; + my ($month, $day, $year, $description, $amount) = + ($1, $2, $3, $4, $5); + $amount =~ s/\((\d+\.\d+)\)/-$1/; + return "$year$month$day", + get_accounts_by_amount_sign($amount, $account, $csv_account), + $description; +} + sub import_chase_credit ($$$) { my ($account, $csv_account, $line) = @_; my ($trans_date, $post_date, $description, $category, $type, $amount) = split /,/, $line; my ($debit, $credit); - $post_date =~ s#(\d+)/(\d+)/(\d+)#$3$1$2#; + $post_date =~ s#(\d+)/(\d+)/(\d+)#$3$1$2#; ($amount, $debit, $credit) = get_accounts_by_amount_sign($amount, $account, $csv_account); @@ -47,8 +62,8 @@ sub import_capital_one_credit ($$$) { my ($trans_date, $post_date, $card_num, $description, $category, $csv_debit, $csv_credit) = split /,/, $line; - $post_date =~ s/(\d+)-(\d+)-(\d+)/$1$2$3/; - my ($amount, $debit, $credit) = + $post_date =~ s/(\d+)-(\d+)-(\d+)/$1$2$3/; + my ($amount, $debit, $credit) = get_accounts_by_csv_col($account, $csv_account, $csv_debit, $csv_credit); return ($post_date, $amount, $debit, $credit, $description); @@ -82,15 +97,27 @@ sub import_sparkasse_camt ($$$) { (join ' ', $fields[11], $fields[4]); } +sub import_wellsfargo ($$$) { + my ($account, $csv_account, $line) = @_; + $line =~ + m#^"(\d+)/(\d+)/(\d+)","(-?\d+\.\d+)","\*","","(.*?)"$# or + die "parse error: $line" ; + my ($month, $day, $year, $amount, $description) = + ($1, $2, $3, $4, $5); + return "$year$month$day", + get_accounts_by_amount_sign($amount, $account, $csv_account), + $description; +} + sub get_accounts_by_amount_sign ($$$) { my ($amount, $account, $csv_account) = @_; my ($debit, $credit); if ($amount <= 0) { $amount = substr $amount, 1; - $credit = $csv_account; + $credit = $csv_account; $debit = $account; } else { - $debit = $csv_account; + $debit = $csv_account; $credit = $account; } return ($amount, $debit, $credit);