[BACK]Return to pta_import.pl CVS log [TXT][DIR] Up to [cvsweb.bsd.lv] / pta

Diff for /pta/pta_import.pl between version 1.17 and 1.24

version 1.17, 2020/11/19 23:55:50 version 1.24, 2020/11/27 16:17:08
Line 23  our ($opt_I);
Line 23  our ($opt_I);
   
 my %banks = (  my %banks = (
     "bbva_usa"              => \&import_bbva_usa,      "bbva_usa"              => \&import_bbva_usa,
       "capital_one_360"       => \&import_capital_one_360,
     "capital_one_credit"    => \&import_capital_one_credit,      "capital_one_credit"    => \&import_capital_one_credit,
     "chase_credit"          => \&import_chase_credit,      "chase_credit"          => \&import_chase_credit,
       "etrade_ira"            => \&import_etrade_ira,
     "optum_hsa"             => \&import_optum_hsa,      "optum_hsa"             => \&import_optum_hsa,
     "sparkasse_camt"        => \&import_sparkasse_camt,      "sparkasse_camt"        => \&import_sparkasse_camt,
     "wellsfargo"            => \&import_wellsfargo,      "wellsfargo"            => \&import_wellsfargo,
Line 57  sub import_chase_credit ($$$) {
Line 59  sub import_chase_credit ($$$) {
         return ($post_date, $amount, $debit, $credit, $description);          return ($post_date, $amount, $debit, $credit, $description);
 }  }
   
   sub import_capital_one_360 ($$$) {
           my ($account, $csv_account, $line) = @_;
           my @fields = split /,/, $line;
           $fields[1] =~ s#(\d+)/(\d+)/(\d+)#20$3$1$2#;
           my ($amount, $debit, $credit) =
               get_accounts_by_amount_sign($fields[2], $account,
               $csv_account);
           return ($fields[1], $amount, $debit, $credit, $fields[4]);
   }
   
 sub import_capital_one_credit ($$$) {  sub import_capital_one_credit ($$$) {
         my ($account, $csv_account, $line) = @_;          my ($account, $csv_account, $line) = @_;
         my ($trans_date, $post_date, $card_num,          my ($trans_date, $post_date, $card_num,
Line 69  sub import_capital_one_credit ($$$) {
Line 81  sub import_capital_one_credit ($$$) {
         return ($post_date, $amount, $debit, $credit, $description);          return ($post_date, $amount, $debit, $credit, $description);
 }  }
   
   sub import_etrade_ira ($$$) {
           my ($account, $csv_account, $line) = @_;
           my @fields = split /,/, $line;
           $fields[0] =~ s#(\d+)/(\d+)/(\d+)#20$3$1$2#;
           my ($amount, $debit, $credit) =
               get_accounts_by_amount_sign($fields[5], $account,
               $csv_account);
           if ($fields[2] eq 'EQ') {
                   $fields[8] .= " [$fields[3]]";
           }
           return ($fields[0], $amount, $debit, $credit,
               join ' quantity ', $fields[8], $fields[4]);
   }
   
 sub import_optum_hsa ($$$) {  sub import_optum_hsa ($$$) {
         my ($account, $csv_account, $line) = @_;          my ($account, $csv_account, $line) = @_;
         my ($date, $description, $amount,          my ($date, $description, $amount,
Line 100  sub import_sparkasse_camt ($$$) {
Line 126  sub import_sparkasse_camt ($$$) {
 sub import_wellsfargo ($$$) {  sub import_wellsfargo ($$$) {
         my ($account, $csv_account, $line) = @_;          my ($account, $csv_account, $line) = @_;
         $line =~          $line =~
             m#^"(\d+)/(\d+)/(\d+)","(-?\d+\.\d+)","\*","","(.*?)"$# or              m#^"(\d+)/(\d+)/(\d+)","(-?\d+\.\d+)","\*",".*","(.*?)"$# or
             die "parse error: $line" ;              die "parse error: $line" ;
         my ($month, $day, $year, $amount, $description) =          my ($month, $day, $year, $amount, $description) =
             ($1, $2, $3, $4, $5);              ($1, $2, $3, $4, $5);
Line 154  my $account_name = $opt_I;
Line 180  my $account_name = $opt_I;
 $banks{$account_name} or die "unknown accountname: $account_name";  $banks{$account_name} or die "unknown accountname: $account_name";
   
 # Parse the configuration file.  # Parse the configuration file.
 my $fn = "import_" . $account_name . ".txt";  my $fn = "import/" . $account_name . ".txt";
 open my $in, '<', $fn or die "$fn: $!";  open my $in, '<', $fn or die "$fn: $!";
 my ($csv_account, $delim, $header, @compiled);  my ($csv_account, $delim, $header, $quote, @compiled, @ignored);
 while (<$in>) {  while (<$in>) {
         chomp;          chomp;
         next if /^(?:#|$)/;          next if /^(?:#|$)/;
Line 176  while (<$in>) {
Line 202  while (<$in>) {
                 $header = $1;                  $header = $1;
                 next;                  next;
         }          }
           if (/^QUOTE\s+(\S)$/) {
                   $quote and die "duplicate QUOTE line: $1";
                   $quote = $1;
                   next;
           }
           if (/^IGNORE\s+(.*)/) {
                   push @ignored, qr/$1/;
                   next;
           }
         $delim or die "no DELIM line in $fn";          $delim or die "no DELIM line in $fn";
         s/^(.*)$delim\s+(\d+)\s+(\S+)// or          s/^(.*)$delim\s+(\d+)\s+(\S+)// or
             die "$fn import parse error: $line";              die "$fn import parse error: $line";
Line 189  close $in;
Line 224  close $in;
 $csv_account or die "no ACCOUNT line in $fn";  $csv_account or die "no ACCOUNT line in $fn";
   
 # Parse the CSV file from the bank.  # Parse the CSV file from the bank.
 while (<>) {  if (@ARGV) {
           open STDIN, '<', $ARGV[0] or die "$ARGV[0]: $!";
   }
   LINE: while (<STDIN>) {
         chomp;          chomp;
         next if (/^$/);          next if (/^$/);
           foreach my $ignore (@ignored) {
                   next LINE if /$ignore/;
           }
         my $line = $_;          my $line = $_;
         if ($header) {          if ($header) {
                 $line eq $header                  $line eq $header
Line 199  while (<>) {
Line 240  while (<>) {
                 undef $header;                  undef $header;
                 next;                  next;
         }          }
         my @fields = split /$delim/, $line;          my $copy_line = $line;
           my @fields;
           if ($quote) {
                   push @fields, $1 while $copy_line =~ s/$quote([^$quote]*)$quote$delim?//;
           } else {
                   @fields = split /$delim/, $line;
           }
         my $matches = 0;          my $matches = 0;
         my ($account, $booking);          my ($account, $booking);
         foreach my $selector (@compiled) {          foreach my $selector (@compiled) {

Legend:
Removed from v.1.17  
changed lines
  Added in v.1.24

CVSweb