paydate option for realtime_refund_bop and UI entry for cust_pay records without...
authorjeff <jeff>
Fri, 15 Jun 2007 18:44:17 +0000 (18:44 +0000)
committerjeff <jeff>
Fri, 15 Jun 2007 18:44:17 +0000 (18:44 +0000)
FS/FS/cust_main.pm
httemplate/edit/cust_refund.cgi
httemplate/edit/process/cust_refund.cgi

index 1dc167a..ac1fba5 100644 (file)
@@ -2891,7 +2891,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>.
@@ -2900,6 +2900,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,
@@ -3100,11 +3103,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";
     }
 
index aa825af..02f65d9 100755 (executable)
 %  #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/;
 %
   <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+))?$/ ) {
index a579a02..d95ab46 100755 (executable)
@@ -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');
 %  $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 ( {