summaryrefslogtreecommitdiff
path: root/FS/FS
diff options
context:
space:
mode:
authormark <mark>2010-11-30 23:44:28 +0000
committermark <mark>2010-11-30 23:44:28 +0000
commitb638e75f063e231edaf3f3859d27f3981c12c999 (patch)
tree13fe66fd830ab702d6341822d05908a85bb3c072 /FS/FS
parentc11efee177c39d3984d7b3769b50ed54c095c44f (diff)
TD EFT batch import formats, RT#10545
Diffstat (limited to 'FS/FS')
-rw-r--r--FS/FS/pay_batch/td_eft1464.pm80
-rw-r--r--FS/FS/pay_batch/td_eftack264.pm59
-rw-r--r--FS/FS/pay_batch/td_eftret80.pm46
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;
+