[freeside-commits] branch FREESIDE_3_BRANCH updated. 9fa789e54fd4cce845242895b3036a220f16cba4

Christopher Burger burgerc at freeside.biz
Thu Nov 8 13:12:47 PST 2018


The branch, FREESIDE_3_BRANCH has been updated
       via  9fa789e54fd4cce845242895b3036a220f16cba4 (commit)
       via  a3aaddd8cfc8bdc9c065e17430fbeef883fe8b17 (commit)
       via  f291087ead0c3fd5447287cf06c786515276d12b (commit)
       via  28fd597fb26a3e4064e63f0cf9a23e06a273fb6e (commit)
       via  eadb3075ac883f761c959a6dd60a358b40f1e499 (commit)
      from  782c9989fba6332e28f25187da8d623bddaab466 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
commit 9fa789e54fd4cce845242895b3036a220f16cba4
Merge: a3aaddd8c 782c9989f
Author: Christopher Burger <burgerc at freeside.biz>
Date:   Thu Nov 8 16:11:26 2018 -0500

    Merge branch 'FREESIDE_3_BRANCH' of ssh://git.freeside.biz/home/git/freeside into FREESIDE_3_BRANCH


commit a3aaddd8cfc8bdc9c065e17430fbeef883fe8b17
Author: Christopher Burger <burgerc at freeside.biz>
Date:   Thu Nov 8 16:10:09 2018 -0500

    RT# 74435 - removed excess cust_pay code not needed in V3

diff --git a/httemplate/edit/process/cust_refund.cgi b/httemplate/edit/process/cust_refund.cgi
index 2b6f9cd52..33bc886ba 100755
--- a/httemplate/edit/process/cust_refund.cgi
+++ b/httemplate/edit/process/cust_refund.cgi
@@ -66,122 +66,6 @@ if ( $cgi->param('paynum') > 0) {
   });
 }
 
-if ( $cgi->param('paynum') > 0) {
-
-  $payinfo = $cust_pay->payinfo;
-  $payname = $cust_pay->payname;
-
-} else {
-
-  ##
-  # use new info
-  ##
-
-  $cgi->param('year') =~ /^(\d+)$/
-    or errorpage("illegal year ". $cgi->param('year'));
-  $year = $1;
-
-  $cgi->param('month') =~ /^(\d+)$/
-    or errorpage("illegal month ". $cgi->param('month'));
-  $month = $1;
-
-  $cgi->param('payname') =~ /^([\w \,\.\-\']+)$/
-    or errorpage(gettext('illegal_name'). " payname: ". $cgi->param('payname'));
-  $payname = $1;
-
-  if ( $payby eq 'CHEK' ) {
-
-    $cgi->param('payinfo1') =~ /^(\d+)$/
-      or errorpage("Illegal account number ". $cgi->param('payinfo1'));
-    my $payinfo1 = $1;
-    $cgi->param('payinfo2') =~ /^(\d+)$/
-      or errorpage("Illegal ABA/routing number ". $cgi->param('payinfo2'));
-    my $payinfo2 = $1;
-    if ( $conf->config('echeck-country') eq 'CA' ) {
-      $cgi->param('payinfo3') =~ /^(\d{5})$/
-        or errorpage("Illegal branch number ". $cgi->param('payinfo2'));
-      $payinfo2 = "$1.$payinfo2";
-    }
-    $payinfo = $payinfo1 . '@'. $payinfo2;
-
-  } elsif ( $payby eq 'CARD' ) {
-
-    $payinfo = $cgi->param('payinfo');
-
-    $payinfo =~ s/\D//g;
-    $payinfo =~ /^(\d{13,19}|\d{8,9})$/
-      or errorpage(gettext('invalid_card'));
-    $payinfo = $1;
-    validate($payinfo)
-      or errorpage(gettext('invalid_card'));
-
-    unless ( $cust_main->tokenized($payinfo) ) { #token
-
-      my $cardtype = cardtype($payinfo);
-
-      errorpage(gettext('unknown_card_type'))
-        if $cardtype eq "Unknown";
-
-      my %bop_card_types = map { $_=>1 } values %{ card_types() };
-      errorpage("$cardtype not accepted") unless $bop_card_types{$cardtype};
-
-    }
-
-    if ( length($cgi->param('paycvv') ) ) {
-      if ( cardtype($payinfo) eq 'American Express card' ) {
-        $cgi->param('paycvv') =~ /^(\d{4})$/
-          or errorpage("CVV2 (CID) for American Express cards is four digits.");
-        $paycvv = $1;
-      } else {
-        $cgi->param('paycvv') =~ /^(\d{3})$/
-          or errorpage("CVV2 (CVC2/CID) is three digits.");
-        $paycvv = $1;
-      }
-    } elsif ( $conf->exists('backoffice-require_cvv') ){
-      errorpage("CVV2 is required");
-    }
-
-  } else {
-    die "unknown payby $payby";
-  }
-
-  # save first, for proper tokenization
-  if ( $cgi->param('save') ) {
-
-    my %saveopt;
-    if ( $payby eq 'CARD' ) {
-      my $bill_location = FS::cust_location->new;
-      $bill_location->set( $_ => scalar($cgi->param($_)) )
-        foreach @{$payby2fields{$payby}};
-      $saveopt{'bill_location'} = $bill_location;
-      $saveopt{'paycvv'} = $paycvv; # save_cust_payby contains conf logic for when to use this
-      $saveopt{'paydate'} = "$year-$month-01";
-    } else {
-      # ss/stateid/stateid_state won't be saved, but should be harmless to pass
-      %saveopt = map { $_ => scalar($cgi->param($_)) } @{$payby2fields{$payby}};
-    }
-
-    my $error = $cust_main->save_cust_payby(
-      'saved_cust_payby' => \$cust_payby,
-      'payment_payby' => $payby,
-      'auto'          => scalar($cgi->param('auto')),
-      'weight'        => scalar($cgi->param('weight')),
-      'payinfo'       => $payinfo,
-      'payname'       => $payname,
-      %saveopt
-    );
-
-    errorpage("error saving info, payment not processed: $error")
-      if $error;
-
-  } elsif ( $payby eq 'CARD' ) { # not saving
-
-    $paymask = FS::payinfo_Mixin->mask_payinfo('CARD',$payinfo); # for untokenized but tokenizable payinfo
-
-  }
-
-}
-
 ##
 # now run the refund
 ##

commit f291087ead0c3fd5447287cf06c786515276d12b
Author: Christopher Burger <burgerc at freeside.biz>
Date:   Thu Nov 8 15:58:16 2018 -0500

    RT# 74435 - v3 display clean up to show refund account

diff --git a/httemplate/edit/cust_refund.cgi b/httemplate/edit/cust_refund.cgi
index c79c39a80..d3ce167f0 100755
--- a/httemplate/edit/cust_refund.cgi
+++ b/httemplate/edit/cust_refund.cgi
@@ -33,7 +33,7 @@
 %    $paydate = '' unless ($paydate =~ /^\d{2,4}-\d{1,2}-01$'/);
 %  }
 
-  <BR>Payment
+  <BR><B>Payment</B>
   <% ntable("#cccccc", 2) %>
 
     <TR>
@@ -84,7 +84,7 @@
 % }  #if $cust_pay
 
 
-<BR>Refund
+<BR><B>Refund</B>
 <% ntable("#cccccc", 2) %>
 
   <TR>
@@ -94,21 +94,26 @@
 
   <TR>
     <TD ALIGN="right">Amount</TD>
-    <TD BGCOLOR="#ffffff">$<INPUT TYPE="text" NAME="refund" VALUE="<% $refund %>" SIZE=8 MAXLENGTH=9> by <B><% FS::payby->payname($payby) %></B></TD>
+    <TD BGCOLOR="#ffffff">$<INPUT TYPE="text" NAME="refund" VALUE="<% $refund %>" SIZE=8 MAXLENGTH=9></TD>
   </TR>
 
 % if ( $payby eq 'BILL' ) { 
     <TR>
-      <TD ALIGN="right">Check #</TD>
-      <TD COLSPAN=2><INPUT TYPE="text" NAME="payinfo" VALUE="<% $payinfo %>" SIZE=10></TD>
+      <TD ALIGN="right">Check </TD>
+      <TD><INPUT TYPE="text" NAME="payinfo" VALUE="<% $payinfo %>" SIZE=10></TD>
     </TR>
 % }
 % elsif ($payby eq 'CHEK' || $payby eq 'CARD') {
 
+  <TR>
+    <TD ALIGN="right">Method</TD>
+    <TD BGCOLOR="#ffffff"><% FS::payby->payname($real_payby) %> # <% $real_paymask %></TD>
+  </TR>
+
 %  if ( $conf->exists("batch-enable")
-%      || grep $payby eq $_, $conf->config('batch-enable_payby')
+%      || grep $real_payby eq $_, $conf->config('batch-enable_payby')
 %  ) {
-%     if ( grep $payby eq $_, $conf->config('realtime-disable_payby') ) {
+%     if ( grep $real_payby eq $_, $conf->config('realtime-disable_payby') ) {
           <INPUT TYPE="hidden" NAME="batch" VALUE="1">
 %     } else {
         <TR>
@@ -175,6 +180,12 @@ if ( $cgi->param('paynum') =~ /^(\d+)$/ ) {
 }
 die "no custnum or paynum specified!" unless $custnum;
 
+my $cust_main = qsearchs( 'cust_main', { 'custnum'=>$custnum } );
+die "unknown custnum $custnum" unless $cust_main;
+
+my $real_payby = $cust_main->payby;
+my $real_paymask = $cust_main->paymask;
+
 my $_date = time;
 
 my $p1 = popurl(1);

commit 28fd597fb26a3e4064e63f0cf9a23e06a273fb6e
Author: Christopher Burger <burgerc at freeside.biz>
Date:   Thu Nov 8 08:48:24 2018 -0500

    RT# 74453 - V3 fixes for backport

diff --git a/httemplate/edit/cust_refund.cgi b/httemplate/edit/cust_refund.cgi
index 39584c8eb..c79c39a80 100755
--- a/httemplate/edit/cust_refund.cgi
+++ b/httemplate/edit/cust_refund.cgi
@@ -46,7 +46,6 @@
 
   <TR>
     <TD ALIGN="right">Method</TD><TD BGCOLOR="#ffffff"><% $payby %> # <% $paymask %></TD>
-    <INPUT TYPE="hidden" NAME="custpaybynum" VALUE="<% $cust_payby->custpaybynum %>">
   </TR>
 
 % unless ( $paydate || $cust_pay->payby ne 'CARD' ) {  # possibly other reasons: i.e. card has since expired
@@ -160,7 +159,7 @@ my $batch   = $cgi->param('batch');
 die "access denied"
   unless $FS::CurrentUser::CurrentUser->refund_access_right($payby);
 
-my( $paynum, $cust_pay, $batchnum, $cust_payby ) = ( '', '', '', '' );
+my( $paynum, $cust_pay, $batchnum ) = ( '', '', '' );
 if ( $cgi->param('paynum') =~ /^(\d+)$/ ) {
   $paynum = $1;
   $cust_pay = qsearchs('cust_pay', { paynum=>$paynum } )
@@ -173,12 +172,6 @@ if ( $cgi->param('paynum') =~ /^(\d+)$/ ) {
   } else {
     $custnum = $cust_pay->custnum;
   }
-  # get custpayby
-  die "Can not find payby record!"
-  unless $cust_payby = qsearchs(
-    'cust_payby', { paymask => $cust_pay->paymask, custnum => $custnum }
-  );
-
 }
 die "no custnum or paynum specified!" unless $custnum;
 
diff --git a/httemplate/edit/process/cust_refund.cgi b/httemplate/edit/process/cust_refund.cgi
index 2b5f308c1..2b6f9cd52 100755
--- a/httemplate/edit/process/cust_refund.cgi
+++ b/httemplate/edit/process/cust_refund.cgi
@@ -21,6 +21,8 @@ die "access denied"
   unless $FS::CurrentUser::CurrentUser->access_right('Refund payment')
       || $FS::CurrentUser::CurrentUser->access_right('Post refund');
 
+my $conf = new FS::Conf;
+
 $cgi->param('custnum') =~ /^(\d*)$/ or die "Illegal custnum!";
 my $custnum = $1;
 my $cust_main = qsearchs('cust_main', { 'custnum' => $custnum } )
@@ -64,25 +66,7 @@ if ( $cgi->param('paynum') > 0) {
   });
 }
 
-if ( (my $custpaybynum = scalar($cgi->param('custpaybynum'))) > 0 ) {
-
-  ##
-  # use stored cust_payby info
-  ##
-
-  $cust_payby = qsearchs('cust_payby', { custnum      => $custnum,
-                                            custpaybynum => $custpaybynum, } )
-    or die "unknown custpaybynum $custpaybynum";
-
-  # not needed for realtime_bop, but still needed for batch_card
-  $payinfo = $cust_payby->payinfo;
-  $paymask = $cust_payby->paymask;
-  $paycvv = $cust_payby->paycvv; # pass it if we got it, running a transaction will clear it
-  ( $month, $year ) = $cust_payby->paydate_mon_year;
-  $payname = $cust_payby->payname;
-  $cgi->param(-name=>"paytype", -value=>$cust_payby->paytype) unless $cgi->param("paytype");
-
-} elsif ( $cgi->param('paynum') > 0) {
+if ( $cgi->param('paynum') > 0) {
 
   $payinfo = $cust_pay->payinfo;
   $payname = $cust_pay->payname;

commit eadb3075ac883f761c959a6dd60a358b40f1e499
Author: Christopher Burger <burgerc at freeside.biz>
Date:   Wed Nov 7 11:32:05 2018 -0500

    RT# 74435 - fixed so payment would auto unapply when doing a batch refund
    
    Conflicts:
            httemplate/edit/process/cust_refund.cgi

diff --git a/httemplate/edit/cust_refund.cgi b/httemplate/edit/cust_refund.cgi
index c79c39a80..39584c8eb 100755
--- a/httemplate/edit/cust_refund.cgi
+++ b/httemplate/edit/cust_refund.cgi
@@ -46,6 +46,7 @@
 
   <TR>
     <TD ALIGN="right">Method</TD><TD BGCOLOR="#ffffff"><% $payby %> # <% $paymask %></TD>
+    <INPUT TYPE="hidden" NAME="custpaybynum" VALUE="<% $cust_payby->custpaybynum %>">
   </TR>
 
 % unless ( $paydate || $cust_pay->payby ne 'CARD' ) {  # possibly other reasons: i.e. card has since expired
@@ -159,7 +160,7 @@ my $batch   = $cgi->param('batch');
 die "access denied"
   unless $FS::CurrentUser::CurrentUser->refund_access_right($payby);
 
-my( $paynum, $cust_pay, $batchnum ) = ( '', '', '' );
+my( $paynum, $cust_pay, $batchnum, $cust_payby ) = ( '', '', '', '' );
 if ( $cgi->param('paynum') =~ /^(\d+)$/ ) {
   $paynum = $1;
   $cust_pay = qsearchs('cust_pay', { paynum=>$paynum } )
@@ -172,6 +173,12 @@ if ( $cgi->param('paynum') =~ /^(\d+)$/ ) {
   } else {
     $custnum = $cust_pay->custnum;
   }
+  # get custpayby
+  die "Can not find payby record!"
+  unless $cust_payby = qsearchs(
+    'cust_payby', { paymask => $cust_pay->paymask, custnum => $custnum }
+  );
+
 }
 die "no custnum or paynum specified!" unless $custnum;
 
diff --git a/httemplate/edit/process/cust_refund.cgi b/httemplate/edit/process/cust_refund.cgi
index 44605bf42..2b5f308c1 100755
--- a/httemplate/edit/process/cust_refund.cgi
+++ b/httemplate/edit/process/cust_refund.cgi
@@ -51,6 +51,153 @@ if ( $error ) {
              'CHEK' => 'electronic check (ACH)',
              );
 
+my( $cust_pay, $cust_payby, $payinfo, $paycvv, $month, $year, $payname );
+my $paymask = '';
+
+## get cust pay info if paynum exists
+if ( $cgi->param('paynum') > 0) {
+  $cust_pay = qsearchs({
+    'table'     => 'cust_pay',
+    'hashref'   => { 'paynum' => $cgi->param('paynum') },
+    'select'    => 'cust_pay.*, cust_pay_batch.payname ',
+    'addl_from' => "left join cust_pay_batch on cust_pay_batch.batchnum = cust_pay.batchnum and cust_pay_batch.custnum = $custnum ",
+  });
+}
+
+if ( (my $custpaybynum = scalar($cgi->param('custpaybynum'))) > 0 ) {
+
+  ##
+  # use stored cust_payby info
+  ##
+
+  $cust_payby = qsearchs('cust_payby', { custnum      => $custnum,
+                                            custpaybynum => $custpaybynum, } )
+    or die "unknown custpaybynum $custpaybynum";
+
+  # not needed for realtime_bop, but still needed for batch_card
+  $payinfo = $cust_payby->payinfo;
+  $paymask = $cust_payby->paymask;
+  $paycvv = $cust_payby->paycvv; # pass it if we got it, running a transaction will clear it
+  ( $month, $year ) = $cust_payby->paydate_mon_year;
+  $payname = $cust_payby->payname;
+  $cgi->param(-name=>"paytype", -value=>$cust_payby->paytype) unless $cgi->param("paytype");
+
+} elsif ( $cgi->param('paynum') > 0) {
+
+  $payinfo = $cust_pay->payinfo;
+  $payname = $cust_pay->payname;
+
+} else {
+
+  ##
+  # use new info
+  ##
+
+  $cgi->param('year') =~ /^(\d+)$/
+    or errorpage("illegal year ". $cgi->param('year'));
+  $year = $1;
+
+  $cgi->param('month') =~ /^(\d+)$/
+    or errorpage("illegal month ". $cgi->param('month'));
+  $month = $1;
+
+  $cgi->param('payname') =~ /^([\w \,\.\-\']+)$/
+    or errorpage(gettext('illegal_name'). " payname: ". $cgi->param('payname'));
+  $payname = $1;
+
+  if ( $payby eq 'CHEK' ) {
+
+    $cgi->param('payinfo1') =~ /^(\d+)$/
+      or errorpage("Illegal account number ". $cgi->param('payinfo1'));
+    my $payinfo1 = $1;
+    $cgi->param('payinfo2') =~ /^(\d+)$/
+      or errorpage("Illegal ABA/routing number ". $cgi->param('payinfo2'));
+    my $payinfo2 = $1;
+    if ( $conf->config('echeck-country') eq 'CA' ) {
+      $cgi->param('payinfo3') =~ /^(\d{5})$/
+        or errorpage("Illegal branch number ". $cgi->param('payinfo2'));
+      $payinfo2 = "$1.$payinfo2";
+    }
+    $payinfo = $payinfo1 . '@'. $payinfo2;
+
+  } elsif ( $payby eq 'CARD' ) {
+
+    $payinfo = $cgi->param('payinfo');
+
+    $payinfo =~ s/\D//g;
+    $payinfo =~ /^(\d{13,19}|\d{8,9})$/
+      or errorpage(gettext('invalid_card'));
+    $payinfo = $1;
+    validate($payinfo)
+      or errorpage(gettext('invalid_card'));
+
+    unless ( $cust_main->tokenized($payinfo) ) { #token
+
+      my $cardtype = cardtype($payinfo);
+
+      errorpage(gettext('unknown_card_type'))
+        if $cardtype eq "Unknown";
+
+      my %bop_card_types = map { $_=>1 } values %{ card_types() };
+      errorpage("$cardtype not accepted") unless $bop_card_types{$cardtype};
+
+    }
+
+    if ( length($cgi->param('paycvv') ) ) {
+      if ( cardtype($payinfo) eq 'American Express card' ) {
+        $cgi->param('paycvv') =~ /^(\d{4})$/
+          or errorpage("CVV2 (CID) for American Express cards is four digits.");
+        $paycvv = $1;
+      } else {
+        $cgi->param('paycvv') =~ /^(\d{3})$/
+          or errorpage("CVV2 (CVC2/CID) is three digits.");
+        $paycvv = $1;
+      }
+    } elsif ( $conf->exists('backoffice-require_cvv') ){
+      errorpage("CVV2 is required");
+    }
+
+  } else {
+    die "unknown payby $payby";
+  }
+
+  # save first, for proper tokenization
+  if ( $cgi->param('save') ) {
+
+    my %saveopt;
+    if ( $payby eq 'CARD' ) {
+      my $bill_location = FS::cust_location->new;
+      $bill_location->set( $_ => scalar($cgi->param($_)) )
+        foreach @{$payby2fields{$payby}};
+      $saveopt{'bill_location'} = $bill_location;
+      $saveopt{'paycvv'} = $paycvv; # save_cust_payby contains conf logic for when to use this
+      $saveopt{'paydate'} = "$year-$month-01";
+    } else {
+      # ss/stateid/stateid_state won't be saved, but should be harmless to pass
+      %saveopt = map { $_ => scalar($cgi->param($_)) } @{$payby2fields{$payby}};
+    }
+
+    my $error = $cust_main->save_cust_payby(
+      'saved_cust_payby' => \$cust_payby,
+      'payment_payby' => $payby,
+      'auto'          => scalar($cgi->param('auto')),
+      'weight'        => scalar($cgi->param('weight')),
+      'payinfo'       => $payinfo,
+      'payname'       => $payname,
+      %saveopt
+    );
+
+    errorpage("error saving info, payment not processed: $error")
+      if $error;
+
+  } elsif ( $payby eq 'CARD' ) { # not saving
+
+    $paymask = FS::payinfo_Mixin->mask_payinfo('CARD',$payinfo); # for untokenized but tokenizable payinfo
+
+  }
+
+}
+
 ##
 # now run the refund
 ##
@@ -80,6 +227,15 @@ if ( $error ) {
       $_, scalar($cgi->param($_))
     } fields('cust_refund');
 
+    ## unapply payment before creating refund.
+    while ( $cust_pay && $cust_pay->unapplied < $refund ) {
+      my @cust_bill_pay = $cust_pay->cust_bill_pay;
+      last unless @cust_bill_pay;
+      my $cust_bill_pay = pop @cust_bill_pay;
+      my $error = $cust_bill_pay->delete;
+      last if $error;
+    }
+
     my $new = new FS::cust_refund ( { 'paynum' => $paynum,
                                       %hash,
                                   } );

-----------------------------------------------------------------------

Summary of changes:
 httemplate/edit/cust_refund.cgi         | 25 ++++++++++++++++++-------
 httemplate/edit/process/cust_refund.cgi | 24 ++++++++++++++++++++++++
 2 files changed, 42 insertions(+), 7 deletions(-)




More information about the freeside-commits mailing list