diff options
Diffstat (limited to 'FS/FS/pay_batch/PAP.pm')
-rw-r--r-- | FS/FS/pay_batch/PAP.pm | 103 |
1 files changed, 103 insertions, 0 deletions
diff --git a/FS/FS/pay_batch/PAP.pm b/FS/FS/pay_batch/PAP.pm new file mode 100644 index 0000000..432ef07 --- /dev/null +++ b/FS/FS/pay_batch/PAP.pm @@ -0,0 +1,103 @@ +package FS::pay_batch::PAP; + +use strict; +use vars qw(@ISA %import_info %export_info $name); +use Time::Local 'timelocal'; +use FS::Conf; + +my $conf; +my ($origid, $datacenter, $typecode, $shortname, $longname, $mybank, $myacct); + +$name = 'PAP'; + +%import_info = ( + 'filetype' => 'fixed', + 'formatre' => '^(.).{19}(.{4})(.{3})(.{10})(.{6})(.{9})(.{12}).{110}(.{19}).{71}$', + 'fields' => [ + 'recordtype', + 'batchnum', + 'datacenter', + 'paid', + '_date', + 'bank', + 'payinfo', + 'paybatchnum', + ], + 'hook' => sub { + my $hash = shift; + $hash->{'paid'} = sprintf("%.2f", $hash->{'paid'} / 100 ); + my $tmpdate = timelocal( 0,0,1,1,0,substr($hash->{'_date'}, 0, 3)+2000); + $tmpdate += 86400*(substr($hash->{'_date'}, 3, 3)-1) ; + $hash->{'_date'} = $tmpdate; + $hash->{'payinfo'} = $hash->{'payinfo'} . '@' . $hash->{'bank'}; + }, + 'approved' => sub { 1 }, + 'declined' => sub { 0 }, +# Why does pay_batch.pm have approved_condition and declined_condition? +# It doesn't even try to handle the case of neither condition being met. + 'end_hook' => sub { + my( $hash, $total) = @_; + $total = sprintf("%.2f", $total); + my $batch_total = $hash->{'datacenter'}.$hash->{'paid'}. + substr($hash->{'_date'},0,1); # YUCK! + $batch_total = sprintf("%.2f", $batch_total / 100 ); + return "Our total $total does not match bank total $batch_total!" + if $total != $batch_total; + ''; + }, + 'end_condition' => sub { + my $hash = shift; + $hash->{recordtype} eq 'W'; + }, +); + +%export_info = ( + init => sub { + $conf = shift; + ($origid, + $datacenter, + $typecode, + $shortname, + $longname, + $mybank, + $myacct) = $conf->config("batchconfig-PAP"); + }, + header => sub { + my $pay_batch = shift; + sprintf( "H%10sD%3s%06u%-15s%09u%-12s%04u%19s\n", + $origid, + $typecode, + cdate($pay_batch->download), + $shortname, + $mybank, + $myacct, + $pay_batch->batchnum, + "" ) + }, + row => sub { + my ($cust_pay_batch, $pay_batch) = @_; + my ($account, $aba) = split('@', $cust_pay_batch->payinfo); + sprintf( "D%-23s%06u%-19s%09u%-12s%010.0f\n", + $cust_pay_batch->payname, + cdate($pay_batch->download), + $cust_pay_batch->paybatchnum, + $aba, + $account, + $cust_pay_batch->amount*100 ); + }, + footer => sub { + my ($pay_batch, $batchcount, $batchtotal) = @_; + sprintf( "T%08u%014.0f%57s\n", + $batchcount, + $batchtotal*100, + "" ); + }, +); + +sub cdate { + my (@date) = localtime(shift); + sprintf("%02d%02d%02d", $date[3], $date[4] + 1, $date[5] % 100); +} + +1; + |