diff options
| -rw-r--r-- | FS/FS/cust_main.pm | 13 | ||||
| -rwxr-xr-x | httemplate/edit/cust_refund.cgi | 18 | ||||
| -rwxr-xr-x | httemplate/edit/process/cust_refund.cgi | 6 | 
3 files changed, 32 insertions, 5 deletions
| diff --git a/FS/FS/cust_main.pm b/FS/FS/cust_main.pm index c798c4f26..e221c4228 100644 --- a/FS/FS/cust_main.pm +++ b/FS/FS/cust_main.pm @@ -2898,7 +2898,7 @@ L<http://420.am/business-onlinepayment> for supported gateways.  Available methods are: I<CC>, I<ECHECK> and I<LEC> -Available options are: I<amount>, I<reason>, I<paynum> +Available options are: I<amount>, I<reason>, I<paynum>, I<paydate>  Most gateways require a reference to an original payment transaction to refund,  so you probably need to specify a I<paynum>. @@ -2907,6 +2907,9 @@ I<amount> defaults to the original amount of the payment if not specified.  I<reason> specifies a reason for the refund. +I<paydate> specifies the expiration date for a credit card overriding the +value from the customer record or the payment record. Specified as yyyy-mm-dd +  Implementation note: If I<amount> is unspecified or equal to the amount of the  orignal payment, first an attempt is made to "void" the transaction via  the gateway (to cancel a not-yet settled transaction) and then if that fails, @@ -3107,11 +3110,13 @@ sub realtime_refund_bop {      if ( $cust_pay ) {        $content{card_number} = $payinfo = $cust_pay->payinfo; -      $cust_pay->paydate =~ /^\d{2}(\d{2})[\/\-](\d+)[\/\-]\d+$/ && -      ($content{expiration} = "$2/$1");  # where available +      (exists($options{'paydate'}) ? $options{'paydate'} : $cust_pay->paydate) +        =~ /^\d{2}(\d{2})[\/\-](\d+)[\/\-]\d+$/ && +        ($content{expiration} = "$2/$1");  # where available      } else {        $content{card_number} = $payinfo = $self->payinfo; -      $self->paydate =~ /^\d{2}(\d{2})[\/\-](\d+)[\/\-]\d+$/; +      (exists($options{'paydate'}) ? $options{'paydate'} : $self->paydate) +        =~ /^\d{2}(\d{2})[\/\-](\d+)[\/\-]\d+$/;        $content{expiration} = "$2/$1";      } diff --git a/httemplate/edit/cust_refund.cgi b/httemplate/edit/cust_refund.cgi index aa825af94..02f65d90a 100755 --- a/httemplate/edit/cust_refund.cgi +++ b/httemplate/edit/cust_refund.cgi @@ -53,6 +53,11 @@  %  #false laziness w/FS/FS/cust_pay.pm  %  my $payby = $cust_pay->payby;  %  my $paymask = $cust_pay->paymask; +%  my $paydate = $cust_pay->paydate; +%  if ( $cgi->param('error') ) {  +%    $paydate = $cgi->param('exp_year'). '-'. $cgi->param('exp_month'). '-01'; +%    $paydate = '' unless ($paydate =~ /^\d{2,4}-\d{1,2}-01$'/); +%  }  %  $payby =~ s/^BILL$/Check/ if $paymask;  %  $payby =~ s/^CHEK$/Electronic check/;  % @@ -73,6 +78,19 @@    <TR>      <TD ALIGN="right">Method</TD><TD BGCOLOR="#ffffff"><% ucfirst(lc($payby)) %> # <% $paymask %></TD>    </TR> + +% unless ( $paydate ) {  # possibly other reasons: i.e. card has since expired +  <TR> +    <TD ALIGN="right">Expiration</TD><TD BGCOLOR="#ffffff"> +      <% include( '/elements/select-month_year.html', +                  'prefix' => 'exp', +                  'selected_date' => $paydate, +                  'empty_option' => !$paydate, +                ) %> +    </TD> +  </TR> +% }  +  %  %  #false laziness w/FS/FS/cust_main::realtime_refund_bop  %  if ( $cust_pay->paybatch =~ /^(\w+):(\w+)(:(\w+))?$/ ) { diff --git a/httemplate/edit/process/cust_refund.cgi b/httemplate/edit/process/cust_refund.cgi index a579a02d8..d95ab46dc 100755 --- a/httemplate/edit/process/cust_refund.cgi +++ b/httemplate/edit/process/cust_refund.cgi @@ -5,6 +5,7 @@  %  %my $error = '';  %if ( $cgi->param('payby') =~ /^(CARD|CHEK)$/ ) {  +%  my %options = ();  %  my $bop = $FS::payby::payby2bop{$1};  %  $cgi->param('refund') =~ /^(\d*)(\.\d{2})?$/  %    or die "illegal refund amount ". $cgi->param('refund'); @@ -12,9 +13,12 @@  %  $cgi->param('paynum') =~ /^(\d*)$/ or die "Illegal paynum!";  %  my $paynum = $1;  %  my $reason = $cgi->param('reason'); +%  my $paydate = $cgi->param('exp_year'). '-'. $cgi->param('exp_month'). '-01'; +%  $options{'paydate'} = $paydate if $paydate =~ /^\d{2,4}-\d{1,2}-01$/;  %  $error = $cust_main->realtime_refund_bop( $bop, 'amount' => $refund,  %                                                  'paynum' => $paynum, -%                                                  'reason' => $reason, ); +%                                                  'reason' => $reason, +%                                                  %options );  %} else {  %  die 'unimplemented';  %  #my $new = new FS::cust_refund ( { | 
