diff options
| -rw-r--r-- | FS/FS/pay_batch/td_eft1464.pm | 80 | ||||
| -rw-r--r-- | FS/FS/pay_batch/td_eftack264.pm | 59 | ||||
| -rw-r--r-- | FS/FS/pay_batch/td_eftret80.pm | 46 | 
3 files changed, 107 insertions, 78 deletions
diff --git a/FS/FS/pay_batch/td_eft1464.pm b/FS/FS/pay_batch/td_eft1464.pm index 1fbf2ade2..c3294d161 100644 --- a/FS/FS/pay_batch/td_eft1464.pm +++ b/FS/FS/pay_batch/td_eft1464.pm @@ -49,84 +49,8 @@ my $i;  $name = 'td_eft1464';  # TD Bank EFT 1464 Byte format -%import_info = ( -  'filetype'    => 'variable', -  'parse'       => \&parse, -  'fields' => [ qw( -    status -    paid -    paybatchnum -    ) ], -  'hook' => sub { -      my $hash = shift; -      $hash->{'_date'} = time; -      $hash->{'paid'} = sprintf('%.2f', $hash->{'paid'}); -  }, -  'approved'    => sub {  -      my $hash = shift; -      $hash->{'status'} eq 'A' -  }, -  'declined'    => sub { -      my $hash = shift; -      $hash->{'status'} eq 'D'; -  }, -  'begin_condition' => sub { -      my $hash = shift; -      $hash->{'status'} eq 'A' or $hash->{'status'} eq 'D'; -  }, -  'end_condition' => sub { -      my $hash = shift; -      $hash->{'status'} eq 'END' -  }, -  'close_condition' => sub { -      my $batch = shift; -      my @cust_pay_batch = qsearch('cust_pay_batch',  -        { batchnum => $batch->batchnum } -      ); -      return ( (grep {! length($_->status) } @cust_pay_batch) == 0 ); -  }, -); - -sub parse { -  my ($batch, $line) = @_; -  $batch->setfield('import_state','') if !$batch->import_state; -  return 'END' if $batch->import_state eq 'END'; -  if( $batch->import_state eq '212' ) { -    # APX212 fields: -    # trace number, trans type, amount, due date, routing number,  -    # account number, xref number, return routing number and account -    # The only ones we take are amount and xref number. -    if( $line =~ /CREDITS\s+DEBITS/ ) { -      $batch->setfield('import_state', 'END'); -      return 'END'; -    } -    $line =~ /^\d{22} D\d{3} (.{14})    \d{5}  \d{4}-\d{5}  .{12}    (.{19}).*$/ -      or die "can't parse: $line"; -    # strip leading zeroes/spaces from paybatchnum at this point -    return ('A', $1, sprintf('%u',$2)); -  } -  elsif( $batch->import_state eq '234' ) { -    # APX234 fields: -    # payor name, xref number, due date, routing number, account number, -    # amount, reason for return -    if( $line =~ /TOTAL NUMBER -/ ) { -      $batch->setfield('import_state', 'END'); -      return 'END'; -    } -    $line =~ /^.{22} (.{19})   \d\d\/\d\d\/\d\d  \d{9}  .{12} (.{14}).*$/ -      or die "can't parse: $line"; -    return ('D', $2, sprintf('%u',$1)); -  } -  else { -    if ( $line =~ /ITEM TRACE NUMBER/ ) { -      $batch->setfield('import_state','212'); -    } -    elsif ( $line =~ /REASON FOR RETURN/ ) { -      $batch->setfield('import_state','234'); -    } # else leave it undefined -    return 'HEADER'; -  } -} +%import_info = ( filetype => 'NONE' );  +# just to suppress warning; importing this format is a fatal error  %export_info = (    init => sub { diff --git a/FS/FS/pay_batch/td_eftack264.pm b/FS/FS/pay_batch/td_eftack264.pm new file mode 100644 index 000000000..9ab16ef2d --- /dev/null +++ b/FS/FS/pay_batch/td_eftack264.pm @@ -0,0 +1,59 @@ +package FS::pay_batch::td_eftack264; + +use strict; +use vars qw(@ISA %import_info %export_info $name); +use Date::Format 'time2str'; +use FS::Conf; +use FS::Record qw(qsearch); + +=head1 NAME + +td_eftack264 - TD Commercial Banking EFT 264 byte acknowledgement file + +=cut + +$name = 'td_eftack264'; + +%import_info = ( +  'filetype'    => 'fixed', +  'formatre'    =>  +  '^(.)(.{9})(.{10})(.{4})(.{3})(.{10})(.{6})(.{9})(.{12}).{25}(.{15})(.{30})(.{30})(.{10})(.{19})(.{9})(.{12}).{15}.{22}(..)(.{11})$', +  'fields' => [ qw( +    recordtype +    count +    origid +    fcn +    cpacode +    paid +    duedate +    bank +    payinfo +    shortname +    custname +    longname +    origid2 +    paybatchnum +    retbranch +    retacct +    usdcode +    invfield +    ) ], +  'hook' => sub { +    my $hash = shift; +    $hash->{'_date'} = time; +    $hash->{'paid'} = sprintf('%.2f', $hash->{'paid'} / 100); +    $hash->{'payinfo'} =~ s/^(\S+).*/$1/; # remove trailing spaces +    $hash->{'payinfo'} = $hash->{'payinfo'} . '@' . $hash->{'bank'}; +  }, +  'approved'    => sub { 0 }, +  'declined'    => sub { 1 }, +  'skip_condition' => sub { +    my $hash = shift; +    $hash->{'recordtype'} ne 'D'; # Debit Detail record +  }, +  'close_condition' => sub { 0 }, +); + +%export_info = ( filetype => 'NONE' ); +1; + diff --git a/FS/FS/pay_batch/td_eftret80.pm b/FS/FS/pay_batch/td_eftret80.pm new file mode 100644 index 000000000..b8c5e27dc --- /dev/null +++ b/FS/FS/pay_batch/td_eftret80.pm @@ -0,0 +1,46 @@ +package FS::pay_batch::td_eftret80; + +use strict; +use vars qw(@ISA %import_info %export_info $name); + +=head1 NAME + +td_eftret80 - TD Commercial Banking EFT 80 byte returned item file + +=cut + +$name = 'td_eftret80'; + +%import_info = ( +  'filetype'    => 'fixed', +  'formatre'    => '^(.)(.{20})(..)(.)(.{6})(.{19})(.{9})(.{12})(.{10})$', +  'fields' => [ qw( +    recordtype +    custname +    reason +    verified +    duedate +    paybatchnum +    bank +    payinfo +    amount +    ) ], +  'hook' => sub { +    my $hash = shift; +    $hash->{'_date'} = time; +    $hash->{'paid'} = sprintf('%.2f', $hash->{'paid'} / 100); +    $hash->{'payinfo'} =~ s/^(\S+).*/$1/; # these often have trailing spaces +    $hash->{'payinfo'} = $hash->{'payinfo'} . '@' . $hash->{'bank'}; +  }, +  'approved' => sub { 0 }, +  'declined' => sub { 1 }, +  'skip_condition' => sub { +      my $hash = shift; +      $hash->{'recordtype'} ne 'D'; #Detail record +  }, +  'close_condition' => sub { 0 }, # never close just from this +); + +%export_info = ( filetype => 'NONE' ); +1; +  | 
