From: Mark Wells Date: Fri, 19 Oct 2012 19:51:06 +0000 (-0700) Subject: recurring indicator for Paymentech batches, #19571 X-Git-Url: http://git.freeside.biz/gitweb/?p=freeside.git;a=commitdiff_plain;h=744b17e5c9a5de68ad8a24b7a35449b535f02731 recurring indicator for Paymentech batches, #19571 --- diff --git a/FS/FS/Conf.pm b/FS/FS/Conf.pm index 5c43b3ac9..d8fd54514 100644 --- a/FS/FS/Conf.pm +++ b/FS/FS/Conf.pm @@ -3601,7 +3601,7 @@ and customer address. Include units.', { 'key' => 'batchconfig-paymentech', 'section' => 'billing', - 'description' => 'Configuration for Chase Paymentech batching, five lines: 1. BIN, 2. Terminal ID, 3. Merchant ID, 4. Username, 5. Password (for batch uploads)', + 'description' => 'Configuration for Chase Paymentech batching, six lines: 1. BIN, 2. Terminal ID, 3. Merchant ID, 4. Username, 5. Password (for batch uploads), 6. Flag to send recurring indicator.', 'type' => 'textarea', }, diff --git a/FS/FS/cust_main/Billing_Realtime.pm b/FS/FS/cust_main/Billing_Realtime.pm index f9f90a7dc..c2f2ac57f 100644 --- a/FS/FS/cust_main/Billing_Realtime.pm +++ b/FS/FS/cust_main/Billing_Realtime.pm @@ -170,15 +170,8 @@ sub _bop_recurring_billing { } else { - my %hash = ( 'custnum' => $self->custnum, - 'payby' => 'CARD', - ); - - return 1 - if qsearch('cust_pay', { %hash, 'payinfo' => $opt{'payinfo'} } ) - || qsearch('cust_pay', { %hash, 'paymask' => $self->mask_payinfo('CARD', - $opt{'payinfo'} ) - } ); + # return 1 if the payinfo has been used for another payment + return $self->payinfo_used($opt{'payinfo'}); # in payinfo_Mixin } diff --git a/FS/FS/pay_batch/paymentech.pm b/FS/FS/pay_batch/paymentech.pm index 2ac5a6624..133f8f1ce 100644 --- a/FS/FS/pay_batch/paymentech.pm +++ b/FS/FS/pay_batch/paymentech.pm @@ -10,7 +10,7 @@ use Tie::IxHash; use FS::Conf; my $conf; -my ($bin, $merchantID, $terminalID, $username); +my ($bin, $merchantID, $terminalID, $username, $password, $with_recurringInd); $name = 'paymentech'; my $gateway; @@ -80,7 +80,7 @@ my %paytype = ( eval "use XML::Writer"; die $@ if $@; my $conf = shift; - ($bin, $terminalID, $merchantID, $username) = + ($bin, $terminalID, $merchantID, $username, $password, $with_recurringInd) = $conf->config('batchconfig-paymentech'); }, # Here we do all the work in the header function. @@ -99,6 +99,7 @@ my %paytype = ( foreach (@cust_pay_batch) { $xml->startTag('newOrder', BatchRequestNo => $count++); + my $status = $_->cust_main->status; tie my %order, 'Tie::IxHash', ( industryType => 'EC', transType => 'AC', @@ -124,6 +125,13 @@ my %paytype = ( orderID => $_->paybatchnum, amount => $_->amount * 100, ); + # only do this if recurringInd is enabled in config, + # and the customer has at least one non-canceled recurring package + if ( $with_recurringInd and $status =~ /^active|suspended|ordered$/ ) { + # then send RF if this is the first payment on this payinfo, + # RS otherwise. + $order{'recurringInd'} = $_->payinfo_used ? 'RS' : 'RF'; + } foreach my $key (keys %order) { $xml->dataElement($key, $order{$key}) } diff --git a/FS/FS/payinfo_Mixin.pm b/FS/FS/payinfo_Mixin.pm index d03391f68..7b713efd3 100644 --- a/FS/FS/payinfo_Mixin.pm +++ b/FS/FS/payinfo_Mixin.pm @@ -3,6 +3,7 @@ package FS::payinfo_Mixin; use strict; use Business::CreditCard; use FS::payby; +use FS::Record qw(qsearch); =head1 NAME @@ -267,6 +268,30 @@ sub payby_payinfo_pretty { } } +=item payinfo_used [ PAYINFO ] + +Returns 1 if there's an existing payment using this payinfo. This can be +used to set the 'recurring payment' flag required by some processors. + +=cut + +sub payinfo_used { + my $self = shift; + my $payinfo = shift || $self->payinfo; + my %hash = ( + 'custnum' => $self->custnum, + 'payby' => 'CARD', + ); + + return 1 + if qsearch('cust_pay', { %hash, 'payinfo' => $payinfo } ) + || qsearch('cust_pay', + { %hash, 'paymask' => $self->mask_payinfo('CARD', $payinfo) } ) + ; + + return 0; +} + =back =head1 BUGS