diff options
Diffstat (limited to 'FS/FS/pay_batch/chase_canada.pm')
-rw-r--r-- | FS/FS/pay_batch/chase_canada.pm | 104 |
1 files changed, 104 insertions, 0 deletions
diff --git a/FS/FS/pay_batch/chase_canada.pm b/FS/FS/pay_batch/chase_canada.pm new file mode 100644 index 0000000..909e4ae --- /dev/null +++ b/FS/FS/pay_batch/chase_canada.pm @@ -0,0 +1,104 @@ +package FS::pay_batch::chase_canada; + +use strict; +use vars qw(@ISA %import_info %export_info $name); +use Time::Local 'timelocal'; +use FS::Conf; + +my $conf; +my $origid; + +$name = 'csv-chase_canada-E-xactBatch'; + +%import_info = ( + 'filetype' => 'CSV', + 'fields' => [ + '', + '', + '', + 'paid', + 'auth', + 'payinfo', + '', + '', + 'bankcode', + 'bankmess', + 'etgcode', + 'etgmess', + '', + 'paybatchnum', + '', + 'result', + ], + 'hook' => sub { + my $hash = shift; + my $cpb = shift; + $hash->{'paid'} = sprintf("%.2f", $hash->{'paid'} ); + $hash->{'_date'} = time; + $hash->{'payinfo'} = $cpb->{'payinfo'} + if( substr($hash->{'payinfo'}, -4) eq substr($cpb->{'payinfo'}, -4) ); + }, + 'approved' => sub { + my $hash = shift; + $hash->{'etgcode'} eq '00' && $hash->{'result'} eq 'Approved'; + }, + 'declined' => sub { + my $hash = shift; + $hash->{'etgcode'} ne '00' || $hash->{'result'} eq 'Declined'; + }, +); + +%export_info = ( + init => sub { + $conf = shift; + ($origid) = $conf->config("batchconfig-$name"); + }, + header => sub { + my $pay_batch = shift; + sprintf( '$$E-xactBatchFileV1.0$$%s:%03u$$%s', + sdate($pay_batch->download), + $pay_batch->batchnum, + $origid ); + }, + row => sub { + my ($cust_pay_batch, $pay_batch) = @_; + my $payname = $cust_pay_batch->payname; + $payname =~ tr/",/ /; + + join(',', + $cust_pay_batch->paybatchnum, + $cust_pay_batch->custnum, + $cust_pay_batch->invnum, + qq!"$payname"!, + '00', + $cust_pay_batch->payinfo, + $cust_pay_batch->amount, + expdate($cust_pay_batch->exp), + '', + '' + ); + }, + # no footer +); + +sub sdate { + my (@date) = localtime(shift); + sprintf('%02d/%02d/%02d', $date[5] % 100, $date[4] + 1, $date[3]); +} + +sub expdate { + my $exp = shift; + $exp =~ /^\d{2}(\d{2})[\/\-](\d+)[\/\-]\d+$/; + my ($mon, $y) = ($2, $1); + if($conf->exists('batch-increment_expiration')) { + my ($curmon, $curyear) = (localtime(time))[4,5]; + $curmon++; + $curyear -= 100; + $y++ while $y < $curyear || ($y == $curyear && $mon < $curmon); + } + $mon = "0$mon" if $mon =~ /^\d$/; + $y = "0$y" if $y =~ /^\d$/; + return "$mon$y"; +} + +1; |