X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=httemplate%2Fmisc%2Fdownload-batch.cgi;h=57905daf9d04976a1f5137cb4a181bca4d99d0bc;hb=cd907554f4c08175c379e204e28e26483acf957a;hp=ad88092d3d8fcbd64d3a959bc853a73c21b7c2bb;hpb=6af1b1bfa25e5ececef5e0dcd38b55917121cee2;p=freeside.git diff --git a/httemplate/misc/download-batch.cgi b/httemplate/misc/download-batch.cgi index ad88092d3..57905daf9 100644 --- a/httemplate/misc/download-batch.cgi +++ b/httemplate/misc/download-batch.cgi @@ -1,35 +1,3 @@ -% -%my $conf=new FS::Conf; -% -%#http_header('Content-Type' => 'text/comma-separated-values' ); #IE chokes -%http_header('Content-Type' => 'text/plain' ); -% -%my $format; -%if ( $cgi->param('format') =~ /^([\w\- ]+)$/ ) { -% $format = $1; -%} else { -% $format = $conf->config('batch-default_format'); -%} -% -%my $oldAutoCommit = $FS::UID::AutoCommit; -%local $FS::UID::AutoCommit = 0; -%my $dbh = dbh; -% -%my $pay_batch = qsearchs('pay_batch', {'status'=>''} ); -%die "No pending batch. \n" unless $pay_batch; -% -%my %batchhash = $pay_batch->hash; -%$batchhash{'status'} = 'I'; -%my $new = new FS::pay_batch \%batchhash; -%my $error = $new->replace($pay_batch); -%die "error updating batch status: $error\n" if $error; -% -%my $batchtotal=0; -%my $batchcount=0; -% -%my (@date)=localtime(); -%my $jdate = sprintf("%03d", $date[5] % 100).sprintf("%03d", $date[7]); -% %if ($format eq "BoM") { % % my($origid,$datacenter,$typecode,$shortname,$longname,$mybank,$myacct) = @@ -39,9 +7,24 @@ sprintf( "XD%03u%06u%-15s%-30s%09u%-12s \n",$typecode,$jdate,$shortname,$longname,$mybank,$myacct ) %> % +%}elsif ($format eq "PAP"){ +% +% my($origid,$datacenter,$typecode,$shortname,$longname,$mybank,$myacct) = +% $conf->config("batchconfig-$format"); +% +<% sprintf( "H%10sD%3s%06u%-15s%09u%-12s%04u%19s\n",$origid,$typecode,$cdate,$shortname,$mybank,$myacct,$pay_batch->batchnum,"") %> +% % %}elsif ($format eq "csv-td_canada_trust-merchant_pc_batch"){ %# 1; +%}elsif ($format eq "csv-chase_canada-E-xactBatch"){ +% +% my($origid) = $conf->config("batchconfig-$format"); +<% sprintf( '$$E-xactBatchFileV1.0$$%s:%03u$$%s',$sdate,$pay_batch->batchnum, $origid) + %> +% +%}elsif ($format eq "ach-spiritone"){ +%# 1; %}else{ % die "Unknown format for batch in batchconfig. \n"; %} @@ -54,8 +37,35 @@ % % $cust_pay_batch->exp =~ /^\d{2}(\d{2})[\/\-](\d+)[\/\-]\d+$/; % my( $mon, $y ) = ( $2, $1 ); -% $mon = "0$mon" if $mon < 10; +% 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$/; % my $exp = "$mon$y"; +% +% if ( $first_download ) { +% my $balance = $cust_pay_batch->cust_main->balance; +% if ( $balance <= 0 ) { +% my $error = $cust_pay_batch->delete; +% if ( $error ) { +% $dbh->rollback or die $dbh->errstr if $oldAutoCommit; +% die $error; +% } +% next; +% } elsif ( $balance < $cust_pay_batch->amount ) { +% $cust_pay_batch->amount($balance); +% my $error = $cust_pay_batch->replace; +% if ( $error ) { +% $dbh->rollback or die $dbh->errstr if $oldAutoCommit; +% die $error; +% } +% #} elsif ( $balance > $cust_pay_batch->amount ) { +% } +% } +% % $batchcount++; % $batchtotal += $cust_pay_batch->amount; % @@ -63,7 +73,14 @@ % % my( $account, $aba ) = split( '@', $cust_pay_batch->payinfo ); % -<% sprintf( "D%010u%09u%-12s%-29s%-19s\n",$cust_pay_batch->amount*100,$aba,$account,$cust_pay_batch->payname,$cust_pay_batch->invnum %> +<% sprintf( "D%010.0f%09u%-12s%-29s%-19s\n",$cust_pay_batch->amount*100,$aba,$account,$cust_pay_batch->payname,$cust_pay_batch->paybatchnum) %> +% +% +% } elsif ($format eq "PAP"){ +% +% my( $account, $aba ) = split( '@', $cust_pay_batch->payinfo ); +% +<% sprintf( "D%-23s%06u%-19s%09u%-12s%010.0f\n",$cust_pay_batch->payname,$cdate,$cust_pay_batch->paybatchnum,$aba,$account,$cust_pay_batch->amount*100) %> % % % } elsif ($format eq "csv-td_canada_trust-merchant_pc_batch") { @@ -72,6 +89,23 @@ ,,,,<% $cust_pay_batch->payinfo %>,<% $exp %>,<% $cust_pay_batch->amount %>,<% $cust_pay_batch->paybatchnum %> % % +% } elsif ($format eq "csv-chase_canada-E-xactBatch"){ +% +% my $payname=$cust_pay_batch->payname; $payname =~ tr/",/ /; #payinfo too? :P +<% $cust_pay_batch->paybatchnum %>,<% $cust_pay_batch->custnum %>,<% $cust_pay_batch->invnum %>,"<% $payname %>",00,<% $cust_pay_batch->payinfo %>,<% $cust_pay_batch->amount %>,<% $exp %>,, +% +% +% }elsif ($format eq "ach-spiritone"){ +% +% my( $account, $aba ) = split( '@', $cust_pay_batch->payinfo ); +% my $payname=$cust_pay_batch->first. " ". $cust_pay_batch->last; +% $payname =~ tr/",/ /; #payinfo too? +% my $batchline = qq!"$payname","!.$cust_pay_batch->paybatchnum. +% qq!","$aba","$account","27","!.$cust_pay_batch->amount. +% qq!","27","0.00"!; +% push @batchlines, $batchline; +<% $batchline %> +% % } else { % die "I'm already dead, but you did not know that.\n"; % } @@ -81,18 +115,99 @@ %if ($format eq "BoM") { % % -<% sprintf( "YD%08u%014u%56s\n",$batchcount,$batchtotal*100,"" ). +<% sprintf( "YD%08u%014.0f%56s\n",$batchcount,$batchtotal*100,"" ). sprintf( "Z%014u%05u%014u%05u%41s\n",$batchtotal*100,$batchcount,"0","0","" ) %> % % +%} elsif ($format eq "PAP"){ +% +% +<% sprintf( "T%08u%014.0f%57s\n",$batchcount,$batchtotal*100,"" ) %> +% +% %} elsif ($format eq "csv-td_canada_trust-merchant_pc_batch"){ % #1; +%} elsif ($format eq "csv-chase_canada-E-xactBatch"){ +% #1; +%} elsif ($format eq "ach-spiritone"){ +% #1; %} else { % die "I'm already dead (again), but you did not know that.\n"; %} % -%$dbh->commit or die $dbh->errstr if $oldAutoCommit; -% -% +<%init> + +my $conf=new FS::Conf; + +#http_header('Content-Type' => 'text/comma-separated-values' ); #IE chokes +http_header('Content-Type' => 'text/plain' ); + +my $batchnum; +if ( $cgi->param('batchnum') =~ /^(\d+)$/ ) { + $batchnum = $1; +} else { + die "No batch number (bad URL) \n"; +} + +my $format; +if ( $cgi->param('format') =~ /^([\w\- ]+)$/ ) { + $format = $1; +} else { + $format = $conf->config('batch-default_format'); +} + +my $autopost; +if ( $format eq 'ach-spiritone' ) { + $autopost = 1; +}else{ + $autopost = 0; +} + +my $oldAutoCommit = $FS::UID::AutoCommit; +local $FS::UID::AutoCommit = 0; +my $dbh = dbh; + +my $pay_batch = qsearchs('pay_batch', {'batchnum'=>$batchnum, 'status'=>'O'} ); +my $first_download = 1; +unless ($pay_batch) { + $pay_batch = qsearchs('pay_batch', {'batchnum'=>$batchnum, 'status'=>'I'} ) + if $FS::CurrentUser::CurrentUser->access_right('Reprocess batches'); + $first_download = 0; +} +die "No pending batch. \n" unless $pay_batch; + +my $error = $pay_batch->set_status('I'); +die "error updating batch status: $error\n" if $error; + +my $batchtotal=0; +my $batchcount=0; + +my (@date)=localtime($pay_batch->download); +my $jdate = sprintf("%03d", $date[5] % 100).sprintf("%03d", $date[7] + 1); +my $cdate = sprintf("%02d", $date[3]).sprintf("%02d", $date[4] + 1). + sprintf("%02d", $date[5] % 100); +my $sdate = sprintf("%02d", $date[5] % 100).'/'.sprintf("%02d", $date[4] + 1). + '/'.sprintf("%02d", $date[3]); + +my @batchlines = (); + +<%cleanup> +if ($autopost) { + my $dir = $FS::UID::conf_dir. "/cache.". $FS::UID::datasrc; + my $fh = new File::Temp( + TEMPLATE => 'paybatch.'. $batchnum .'.XXXXXXXX', + DIR => $dir, + ) or die "can't open temp file: $!\n"; + + print $fh map{ "$_\n" } @batchlines; + seek $fh, 0, 0; + + $error = $pay_batch->import_results( 'filehandle' => $fh, + 'format' => $format, + ); + die $error if $error; +} +$dbh->commit or die $dbh->errstr if $oldAutoCommit; +