X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=FS%2FFS%2Fpay_batch%2FRBC.pm;h=691e2a2af2ff822eed23942a3c5f0356dd08aa90;hb=c2dbe36096332d1e09bc58d7d9903e05247f0c9b;hp=dea89cde1e9d50f75412053aa4045c6dd8e1b9b5;hpb=ddcfe66496c323f1f52fdbd00e8babd43249a609;p=freeside.git diff --git a/FS/FS/pay_batch/RBC.pm b/FS/FS/pay_batch/RBC.pm index dea89cde1..691e2a2af 100644 --- a/FS/FS/pay_batch/RBC.pm +++ b/FS/FS/pay_batch/RBC.pm @@ -3,6 +3,7 @@ package FS::pay_batch::RBC; use strict; use vars qw(@ISA %import_info %export_info $name); use Date::Format 'time2str'; +use Date::Parse; use FS::Conf; use Encode 'encode'; use feature 'state'; @@ -31,7 +32,7 @@ $name = 'RBC'; 'filetype' => 'fixed', #this only really applies to Debit Detail, but we otherwise only need first char 'formatre' => - '^(.).{3}(.{10}).{5}(.{4}).{3}(.).{11}(.{19}).{6}(.{30}).{17}(.{9})(.{18}).{6}(.{14}).{23}(.).{9}\r?$', + '^(.).{3}(.{10}).{5}(.{4}).{3}(.).{11}(.{19}).{6}(.{30})(.{2})(.{2})(.{4}).{9}(.{9})(.{18}).{6}(.{14}).{23}(.).{9}\r?$', 'fields' => [ qw( recordtype clientnum @@ -39,6 +40,9 @@ $name = 'RBC'; subtype paybatchnum custname + paydate_month + paydate_day + paydate_year bank payinfo paid @@ -54,7 +58,8 @@ $name = 'RBC'; my $hash = shift; $hash->{'paid'} = sprintf("%.2f", $hash->{'paid'} / 100 ); - $hash->{'_date'} = time; + my $paydate = $hash->{'paydate_year'} . $hash->{'paydate_month'} . $hash->{'paydate_day'}; + $hash->{'_date'} = str2time($paydate, 'local'); $hash->{'payinfo'} =~ s/^(\S+).*/$1/; # these often have trailing spaces $hash->{'payinfo'} = $hash->{'payinfo'} . '@' . $hash->{'bank'}; @@ -89,22 +94,17 @@ $name = 'RBC'; }, 'begin_condition' => sub { my $hash = shift; - # Debit Detail Record - if ($hash->{recordtype} eq '1') { + # Detail Record + if ($hash->{recordtype} eq '1' || $hash->{recordtype} eq '2') { $declined = {}; $totaloffset = 0; return 1; - # Credit Detail Record, will immediately trigger end condition & error - } elsif ($hash->{recordtype} eq '2') { - return 1; } else { return 0; } }, 'end_hook' => sub { my( $hash, $total, $line ) = @_; - return "Can't process Credit Detail Record, aborting import" - if ($hash->{'recordtype'} eq '2'); $total += $totaloffset; $total = sprintf("%.2f", $total); # We assume here that this is an 'All Records' or 'Input Records' report. @@ -115,8 +115,7 @@ $name = 'RBC'; }, 'end_condition' => sub { my $hash = shift; - return ($hash->{recordtype} eq '4') # Client Trailer Record - || ($hash->{recordtype} eq '2'); # Credit Detail Record, will throw error in end_hook + return ($hash->{recordtype} eq '4'); # Client Trailer Record }, 'skip_condition' => sub { my $hash = shift; @@ -149,7 +148,8 @@ $name = 'RBC'; my $pay_batch = shift; my $mode = $testmode ? 'TEST' : 'PROD'; my $filenum = $testmode ? 'TEST' : sprintf("%04u", $pay_batch->batchnum); - '$$AAPASTD0152['.$mode.'[NL$$'."\n". + my $qualifier = $pay_batch->type eq 'CREDIT' ? 'D' : 'A'; + '$$AAP'.$qualifier.'STD0152['.$mode.'[NL$$'."\n". '000001'. 'A'. 'HDR'. @@ -214,13 +214,15 @@ $name = 'RBC'; }, footer => sub { my ($pay_batch, $batchcount, $batchtotal) = @_; + + my $batch_info = '0' x 20 . sprintf("%06u", $batchcount) . sprintf("%014.0f", $batchtotal*100); + $batch_info = sprintf("%06u", $batchcount) . sprintf("%014.0f", $batchtotal*100) . '0' x 20 if ($pay_batch->type eq 'CREDIT'); + sprintf("%06u", $i + 1). 'Z'. 'TRL'. sprintf("%10s", $client_num). - '0' x 20 . - sprintf("%06u", $batchcount). - sprintf("%014.0f", $batchtotal*100). + $batch_info. '00' . '000000' . # total number of customer information records ' ' x 84 @@ -228,5 +230,10 @@ $name = 'RBC'; }, ); +## this format can handle credit transactions +sub can_handle_credits { + 1; +} + 1;