RT#38363: use cust_payby when saving cards during payments [editing from cust_main]
authorJonathan Prykop <jonathan@freeside.biz>
Tue, 19 Jan 2016 21:07:15 +0000 (15:07 -0600)
committerJonathan Prykop <jonathan@freeside.biz>
Tue, 19 Jan 2016 21:07:15 +0000 (15:07 -0600)
FS/FS/cust_payby.pm
FS/FS/o2m_Common.pm
httemplate/edit/cust_main.cgi
httemplate/edit/cust_main/billing.html
httemplate/elements/cust_payby.html

index b9e79a2..83b951e 100644 (file)
@@ -577,15 +577,20 @@ sub cgi_cust_payby_fields {
        payinfo1 payinfo2 payinfo3 paytype paystate payname_CHEK )];
 }
 
-=item cgi_hash_callback HASHREF
+=item cgi_hash_callback HASHREF OLD
 
 Subroutine (not a class or object method).  Processes a hash reference
 of web interface contet (transfers the data from pseudo-fields to real fields).
 
+If OLD object is passed, also preserves locationnum, paystart_month, paystart_year,
+payissue and payip.  If the new field is blank but the old is not, the old field 
+will be preserved.
+
 =cut
 
 sub cgi_hash_callback {
   my $hashref = shift;
+  my $old = shift;
 
   my %noauto = (
     'CARD' => 'DCRD',
@@ -619,6 +624,14 @@ sub cgi_hash_callback {
 
   $hashref->{paydate}= $hashref->{paydate_month}. '-'. $hashref->{paydate_year};
 
+  if ($old) {
+    foreach my $field ( qw(locationnum paystart_month paystart_year payissue payip) ) {
+      next if $hashref->{$field};
+      next unless $old->get($field);
+      $hashref->{$field} = $old->get($field);
+    }
+  }
+
 }
 
 =item search_sql
index 430f00b..915393a 100644 (file)
@@ -111,7 +111,7 @@ sub process_o2m {
                  map { $_ => $opt{'params'}->{$add_param."_$_"} }
                      @{ $opt{'fields'} }
                );
-    &{ $opt{'hash_callback'} }( \%hash ) if $opt{'hash_callback'};
+    &{ $opt{'hash_callback'} }( \%hash, $old_obj ) if $opt{'hash_callback'};
     #next unless grep { $_ =~ /\S/ } values %hash;
 
     my $new_obj = "FS::$table"->new( { %$hashref, %hash } );
index bdf3431..39cddc0 100755 (executable)
@@ -115,7 +115,6 @@ function samechanged(what) {
 
 %# billing info
 <& cust_main/billing.html, $cust_main,
-               'payinfo'        => $payinfo,
                'invoicing_list' => \@invoicing_list,
 &>
 
@@ -186,7 +185,7 @@ my $conf = new FS::Conf;
 
 #get record
 
-my($custnum, $cust_main, $ss, $stateid, $payinfo, @invoicing_list);
+my($custnum, $cust_main, $ss, $stateid, @invoicing_list);
 my $pkgpart_svcpart = ''; #first_pkg
 my($username, $password, $popnum, $saved_domsvc) = ( '', '', 0, 0 ); #svc_acct
 my %svc_phone = ();
@@ -234,7 +233,6 @@ if ( $cgi->param('error') ) {
   $cust_main->setfield('paid' => $cgi->param('paid')) if $cgi->param('paid');
   $ss = $cust_main->ss;           # don't mask an entered value on errors
   $stateid = $cust_main->stateid; # don't mask an entered value on errors
-  $payinfo = $cust_main->payinfo; # don't mask an entered value on errors
 
   $cust_main->national_id( $cgi->param('national_id1') || $cgi->param('national_id2') );
 
@@ -282,7 +280,6 @@ if ( $cgi->param('error') ) {
   @invoicing_list = $cust_main->invoicing_list;
   $ss = $conf->exists('unmask_ss') ? $cust_main->ss : $cust_main->masked('ss');
   $stateid = $cust_main->masked('stateid');
-  $payinfo = $cust_main->paymask;
 
 } else { #new customer
 
@@ -298,7 +295,6 @@ if ( $cgi->param('error') ) {
     unless $conf->exists('disablepostalinvoicedefault');
   $ss = '';
   $stateid = '';
-  $payinfo = '';
 
   $cgi->param('tagnum', FS::part_tag->default_tags);
 
index 7bca17b..fbe3e48 100644 (file)
@@ -326,7 +326,6 @@ function toggle(obj) {
 
 my( $cust_main, %options ) = @_;
 my @invoicing_list = @{ $options{'invoicing_list'} };
-my $payinfo = $options{'payinfo'};
 my $conf = new FS::Conf;
 
 my $money_char = $conf->config('money_char') || '$';
index 6e2610b..5e0f09d 100644 (file)
@@ -11,7 +11,8 @@
 
       <TD>
         <SELECT NAME="<%$name%>_payby"
-                onChange="<%$name%>_payby_changed(this)"
+                ID="<%$id%>_payby"
+                onChange="payby_changed(this)"
         >
 %         foreach my $payby (@payby) {
             <OPTION VALUE="<% $payby %>"
 % unless ( $opt{'html_only'} ) {
   <SCRIPT TYPE="text/javascript">
 
-    function <%$name%>_payby_changed(what) {
+    function payby_changed(what) {
+      var field_match = what.id.match(/(.*)_payby$/);
+      var field_id = field_match[1];
       var payby = what.options[what.selectedIndex].value;
       if ( payby == 'CARD' ) {
-        document.getElementById('<%$id%>_td_payinfo').style.display = '';
-        document.getElementById('<%$id%>_td_paydate').style.display = '';
-        document.getElementById('<%$id%>_td_paycvv').style.display = '';
-        document.getElementById('<%$id%>_td_payname').style.display = '';
-        document.getElementById('<%$id%>_td_payinfo1').style.display = 'none';
-        document.getElementById('<%$id%>_td_payinfo2').style.display = 'none';
-        document.getElementById('<%$id%>_td_paytype').style.display = 'none';
-        document.getElementById('<%$id%>_td_payname_CHEK').style.display = 'none';
-        var td_payinfo3 = document.getElementById('<%$id%>_td_payinfo3');
+        document.getElementById(field_id+'_td_payinfo').style.display = '';
+        document.getElementById(field_id+'_td_paydate').style.display = '';
+        document.getElementById(field_id+'_td_paycvv').style.display = '';
+        document.getElementById(field_id+'_td_payname').style.display = '';
+        document.getElementById(field_id+'_td_payinfo1').style.display = 'none';
+        document.getElementById(field_id+'_td_payinfo2').style.display = 'none';
+        document.getElementById(field_id+'_td_paytype').style.display = 'none';
+        document.getElementById(field_id+'_td_payname_CHEK').style.display = 'none';
+        var td_payinfo3 = document.getElementById(field_id+'_td_payinfo3');
         if ( td_payinfo3 ) {
           td_payinfo3.style.display = 'none';
         }
-        var td_paystate = document.getElementById('<%$id%>_td_paystate');
+        var td_paystate = document.getElementById(field_id+'_td_paystate');
         if ( td_paystate ) {
           td_paystate.style.display = 'none';
         }
       } else if ( payby == 'CHEK' ) {
-        document.getElementById('<%$id%>_td_payinfo').style.display = 'none';
-        document.getElementById('<%$id%>_td_paydate').style.display = 'none';
-        document.getElementById('<%$id%>_td_paycvv').style.display = 'none';
-        document.getElementById('<%$id%>_td_payname').style.display = 'none';
-        document.getElementById('<%$id%>_td_payinfo1').style.display = '';
-        document.getElementById('<%$id%>_td_payinfo2').style.display = '';
-        document.getElementById('<%$id%>_td_paytype').style.display = '';
-        document.getElementById('<%$id%>_td_payname_CHEK').style.display = '';
-        var td_payinfo3 = document.getElementById('<%$id%>_td_payinfo3');
+        document.getElementById(field_id+'_td_payinfo').style.display = 'none';
+        document.getElementById(field_id+'_td_paydate').style.display = 'none';
+        document.getElementById(field_id+'_td_paycvv').style.display = 'none';
+        document.getElementById(field_id+'_td_payname').style.display = 'none';
+        document.getElementById(field_id+'_td_payinfo1').style.display = '';
+        document.getElementById(field_id+'_td_payinfo2').style.display = '';
+        document.getElementById(field_id+'_td_paytype').style.display = '';
+        document.getElementById(field_id+'_td_payname_CHEK').style.display = '';
+        var td_payinfo3 = document.getElementById(field_id+'_td_payinfo3');
         if ( td_payinfo3 ) {
           td_payinfo3.style.display = '';
         }
-        var td_paystate = document.getElementById('<%$id%>_td_paystate');
+        var td_paystate = document.getElementById(field_id+'_td_paystate');
         if ( td_paystate ) {
           td_paystate.style.display = '';
         }
       } else {
         alert( 'unknown payby ' + payby );
       }
+      spawn_custpaybynum(what);
     }
 
   </SCRIPT>