[freeside-commits] branch master updated. eb8fe191d66b2b6bf7e113049047968c8147fb66

Christopher Burger burgerc at 420.am
Mon Jul 10 07:04:08 PDT 2017


The branch, master has been updated
       via  eb8fe191d66b2b6bf7e113049047968c8147fb66 (commit)
      from  c1e554f22e4a4cb4a88461ad1542786b6f949f07 (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 eb8fe191d66b2b6bf7e113049047968c8147fb66
Author: Christopher Burger <burgerc at freeside.biz>
Date:   Mon Jul 10 09:52:54 2017 -0400

    RT# 74537 - Added new selfservice config option to make ECHECK readonly on selfservice, updated selfservice and NGselfservice to look for this option

diff --git a/FS/FS/ClientAPI/MyAccount.pm b/FS/FS/ClientAPI/MyAccount.pm
index 505111e..49e61ab 100644
--- a/FS/FS/ClientAPI/MyAccount.pm
+++ b/FS/FS/ClientAPI/MyAccount.pm
@@ -840,6 +840,7 @@ sub payment_info {
       'show_paystate' => $conf->exists('show_bankstate'),
 
       'save_unchecked' => $conf->exists('selfservice-save_unchecked'),
+      'ach_read_only' => $conf->exists('selfservice-ACH_info_readonly'),
 
     };
 
diff --git a/FS/FS/Conf.pm b/FS/FS/Conf.pm
index 086448c..d41cc74 100644
--- a/FS/FS/Conf.pm
+++ b/FS/FS/Conf.pm
@@ -5773,6 +5773,13 @@ and customer address. Include units.',
   },
 
   {
+    'key'         => 'selfservice-ACH_info_readonly',
+    'section'     => 'self-service',
+    'description' => 'make ACH on self service portal read only',
+    'type'        => 'checkbox',
+  },
+
+  {
     'key'         => 'selfservice-announcement',
     'section'     => 'self-service',
     'description' => 'HTML announcement to display to all authenticated users on account overview page',
diff --git a/fs_selfservice/FS-SelfService/cgi/change_pay.html b/fs_selfservice/FS-SelfService/cgi/change_pay.html
index 6898dc7..e38ba76 100644
--- a/fs_selfservice/FS-SelfService/cgi/change_pay.html
+++ b/fs_selfservice/FS-SelfService/cgi/change_pay.html
@@ -37,6 +37,11 @@
                       'PREP'   => qq/Prepaid Card/,
                       'PREPAY' => qq/Prepaid Card/,
                     );
+
+  ## Don't show CHEK or DCHK option if ACH is read only
+  delete( $payby_index{'CHEK'} ) unless !$ach_read_only;
+  delete( $payby_index{'DCHK'} ) unless !$ach_read_only;
+
   tie my %options, 'Tie::IxHash', ();
   foreach my $payby_option ( grep { exists( $payby_index{$_} ) } @paybys ) {
     $options{$payby_option} = $payby_index{$payby_option};
@@ -55,6 +60,9 @@
   delete $options{'DCRD'} unless $payby eq 'DCRD' || ! exists $options{'CARD'};
   delete $options{'DCHK'} unless $payby eq 'DCHK' || ! exists $options{'CHEK'};
 
+  ## setting payby to default to layer if only one.  should we always display first layer?
+  if (keys %options == 1) { @p = keys %options; $payby = $p[0]; }
+
   HTML::Widgets::SelectLayers->new(
     options => \%options,
     selected_layer => $payby,
diff --git a/fs_selfservice/FS-SelfService/cgi/check.html b/fs_selfservice/FS-SelfService/cgi/check.html
index 68753fe..17635c3 100644
--- a/fs_selfservice/FS-SelfService/cgi/check.html
+++ b/fs_selfservice/FS-SelfService/cgi/check.html
@@ -1,54 +1,97 @@
 <TR>
   <TD ALIGN="right">Account type</TD>
-  <TD>
-    <SELECT NAME="paytype">
-      <%= foreach ( @paytypes ) {
-            $selected = $paytype eq $_ ? ' SELECTED' : '';
-            $OUT .= qq(<OPTION$selected VALUE="$_">$_\n);
-      } %>
-    </SELECT>
+  <TD <%= ($ach_read_only ? ' BGCOLOR="#ffffff"' : '') %> >
+  <%=
+    if ($ach_read_only) {
+      $OUT = $paytype . '<INPUT TYPE="hidden" NAME="paytype" VALUE="' . $paytype . '">';
+    } else {
+      $OUT .= '<SELECT NAME="paytype">';
+      foreach ( @paytypes ) {
+        $selected = $paytype eq $_ ? ' SELECTED' : '';
+        $OUT .= qq(<OPTION$selected VALUE="$_">$_\n);
+      }
+      $OUT .= '</SELECT>';
+    }
+  %>
   </TD>
-</TD><TR>
+</TR><TR>
   <TD ALIGN="right">Account number</TD>
-  <TD><INPUT TYPE="text" NAME="payinfo1" SIZE=10 MAXLENGTH=20 VALUE="<%=$payinfo1%>"></TD>
-</TD><TR>
+  <TD <%= ($ach_read_only ? ' BGCOLOR="#ffffff"' : '') %> >
+  <%= if ($ach_read_only) {
+      $OUT = qq! $payinfo1 <INPUT TYPE="hidden" NAME="payinfo1" VALUE="$payinfo1"> !;
+    } else {
+      $OUT = qq! <INPUT TYPE="text" NAME="payinfo1" SIZE=10 MAXLENGTH=20 VALUE="$payinfo1"> !;
+    }
+  %>
+  </TD>
+</TR><TR>
   <TD ALIGN="right">ABA/Routing number</TD>
-  <TD><INPUT TYPE="text" NAME="payinfo2" SIZE=10 MAXLENGTH=9 VALUE="<%=$payinfo2%>"></TD>
+  <TD <%= ($ach_read_only ? ' BGCOLOR="#ffffff"' : '') %> >
+  <%=
+    if ($ach_read_only) {
+      $OUT = qq! $payinfo2 <INPUT TYPE="hidden" NAME="payinfo2" VALUE="$payinfo2"> !;
+    } else {
+      $OUT = qq! <INPUT TYPE="text" NAME="payinfo2" SIZE=10 MAXLENGTH=20 VALUE="$payinfo2"> !;
+    }
+  %>
+  </TD>
 </TR><TR>
   <TD ALIGN="right">Bank name</TD>
-  <TD><INPUT TYPE="text" SIZE=32 MAXLENGTH=80 NAME="payname" VALUE="<%=$payname%>"></TD>
-</TR><TR>
+  <TD <%= ($ach_read_only ? ' BGCOLOR="#ffffff"' : '') %> >
+  <%=
+    if ($ach_read_only) {
+      $OUT = qq! $payname <INPUT TYPE="hidden" NAME="payname" VALUE="$payname"> !;
+    } else {
+      $OUT = qq! <INPUT TYPE="text" NAME="payname" SIZE=10 MAXLENGTH=20 VALUE="$payname"> !;
+    }
+  %>
+  </TD>
+</TR>
   <%=
     $OUT = '';
     if ($show_paystate) {
-      $OUT .= qq!<TD ALIGN="right">Bank state</TD><TD><SELECT NAME="paystate">!;
-      for ( @states ) {
-        $OUT .= '<OPTION'. ($_ eq $paystate ? ' SELECTED' : '' ). ">$_\n";
+      $OUT .= '<TR><TD ALIGN="right">Bank state</TD><TD' . ($ach_read_only ? ' BGCOLOR="#ffffff"' : '') . '>';
+      if ($ach_read_only) {
+        $OUT .= qq! $paystate <INPUT TYPE="hidden" NAME="paystate" VALUE="$paystate"> !;
+      } else {
+        $OUT .= '<SELECT NAME="paystate">';
+        for ( @states ) {
+          $OUT .= '<OPTION'. ($_ eq $paystate ? ' SELECTED' : '' ). ">$_\n";
+        }
+        $OUT .= '</SELECT>';
       }
-      $OUT .= '</SELECT></TD></TR><TR>';
+      $OUT .= '</TD></TR>';
     }
   %>
   <%=
     $OUT = '';
     if ($show_ss) {
-      $OUT .= '<TD ALIGN="right">Account holder<BR>Social ';
-      $OUT .= 'security or tax ID #</TD><TD>';
-      $OUT .= qq!<INPUT TYPE="text" SIZE=32 MAXLENGTH=80 NAME="ss" VALUE="$ss">!;
-      $OUT .= '</TD></TR><TR>';
+      $OUT .= '<TR><TD ALIGN="right">Account holder<BR>Social ';
+      $OUT .= 'security or tax ID #</TD><TD' . ($ach_read_only ? ' BGCOLOR="#ffffff"' : '') . '>';
+      if ($ach_read_only) {
+        $OUT .= qq! $ss <INPUT TYPE="hidden" NAME="ss" VALUE="$ss">!;
+      } else {
+        $OUT .= qq!<INPUT TYPE="text" SIZE=32 MAXLENGTH=80 NAME="ss" VALUE="$ss">!;
+      }
+      $OUT .= '</TD></TR>';
     }
   %>
   <%=
     $OUT = '';
     if ($show_stateid) {
-      $OUT .= '<TD ALIGN="right">';
-      $OUT .= qq!Account holder<BR>$stateid_label</TD><TD>!;
-      $OUT .= qq!<INPUT TYPE="text" SIZE=32 MAXLENGTH=80 NAME="stateid" VALUE="$stateid"></TD>!;
-      $OUT .= qq!<TD ALIGN="right">$stateid_state_label</TD>!;
-      $OUT .= '<TD><SELECT NAME="stateid_state">';
-      for ( @states ) {
-        $OUT .= '<OPTION'. ($_ eq $stateid_state ? ' SELECTED' : '' ). ">$_\n";
+      $OUT .= qq!<TR><TD ALIGN="right">Account holder<BR>$stateid_label</TD>!;
+      $OUT .= '<TD' . ($ach_read_only ? ' BGCOLOR="#ffffff"' : '') . '>';
+      if ($ach_read_only) {
+        $OUT .= qq! $stateid <INPUT TYPE="hidden" NAME="stateid" VALUE="$stateid">!;
+      } else {
+        $OUT .= qq!<INPUT TYPE="text" SIZE=32 MAXLENGTH=80 NAME="stateid" VALUE="$stateid"></TD>!;
+        $OUT .= qq!<TD ALIGN="right">$stateid_state_label</TD>!;
+        $OUT .= '<TD><SELECT NAME="stateid_state">';
+        for ( @states ) {
+          $OUT .= '<OPTION'. ($_ eq $stateid_state ? ' SELECTED' : '' ). ">$_\n";
+        }
+        $OUT .='</SELECT>';
       }
-      $OUT .='</SELECT></TD></TR><TR>';
+      $OUT .='</TD></TR>';
     }
   %>
-</TR>
diff --git a/fs_selfservice/FS-SelfService/cgi/make_ach_payment.html b/fs_selfservice/FS-SelfService/cgi/make_ach_payment.html
index 8c2dfe3..37fd464 100644
--- a/fs_selfservice/FS-SelfService/cgi/make_ach_payment.html
+++ b/fs_selfservice/FS-SelfService/cgi/make_ach_payment.html
@@ -20,24 +20,28 @@ EOF
 <TR>
   <TD ALIGN="right">Payment amount</TD>
   <TD>
-    <TABLE><TR><TD BGCOLOR="#ffffff">
+    <TABLE><TR><TD>
       <%= $money_char %><INPUT TYPE="text" NAME="amount" SIZE=8 VALUE="<%= ($balance > 0) ? $balance : '' %>">
     </TD></TR></TABLE>
   </TD>
 </TR>
 <%= include('discount_term') %>
 <%= include('check') %>
-<TR>
-  <TD COLSPAN=2>
-    <INPUT TYPE="checkbox" <%= $save_unchecked ? '' : 'CHECKED' %> NAME="save" VALUE="1">
-    Remember this information
-  </TD>
-</TR><TR>
-  <TD COLSPAN=2>
-    <INPUT TYPE="checkbox"<%= $payby eq 'CHEK' ? ' CHECKED' : '' %> NAME="auto" VALUE="1" onClick="if (this.checked) { document.OneTrueForm.save.checked=true; }">
-    Charge future payments to this account automatically
-  </TD>
-</TR>
+
+<%=
+  $OUT = '';
+  if ($ach_read_only) {
+    if ($payby == 'CHEK') {
+      $OUT .= '<TR><TD COLSPAN=2><INPUT TYPE="hidden" NAME="auto" VALUE="1"></TD></TR>';
+    }
+  } else {
+    $OUT .= '<TR><TD COLSPAN=2><INPUT TYPE="checkbox"' . ($save_unchecked ? '' : 'CHECKED ') . 'NAME="save" VALUE="1">';
+    $OUT .= 'Remember this information</TD></TR>';
+    $OUT .= '<TR><TD COLSPAN=2><INPUT TYPE="checkbox"' . ($payby eq 'CHEK' ? ' CHECKED' : '') . 'NAME="auto" VALUE="1"  onClick="if (this.checked) { document.OneTrueForm.save.checked=true; }">';
+    $OUT .= 'Charge future payments to this account automatically</TD></TR>';
+  }
+%>
+
 </TABLE>
 <BR>
 <INPUT TYPE="hidden" NAME="paybatch" VALUE="<%=$paybatch%>">
diff --git a/ng_selfservice/elements/check.php b/ng_selfservice/elements/check.php
index b026c92..fd0cd6d 100644
--- a/ng_selfservice/elements/check.php
+++ b/ng_selfservice/elements/check.php
@@ -1,50 +1,88 @@
+<? if ($ach_read_only) { $bgShade = 'BGCOLOR="#ffffff"';  } ?>
 <TR>
   <TD ALIGN="right">Account type</TD>
-  <TD>
-    <SELECT NAME="paytype">
+  <TD <? echo $bgShade; ?>>
+    <? if ($ach_read_only) { echo htmlspecialchars($paytype); ?>
+      <INPUT TYPE="hidden" NAME="paytype" VALUE="<? echo $paytype; ?>">
+    <? } else { ?>
+     <SELECT NAME="paytype">
       <? foreach ( $paytypes AS $pt ) { ?>
            <OPTION <? if ($pt == $paytype ) { echo 'SELECTED'; } ?> VALUE="<? echo $pt; ?>"><? echo $pt; ?>
       <? } ?>
-    </SELECT>
+     </SELECT>
+    <? } ?>
   </TD>
 </TR><TR>
   <TD ALIGN="right">Account number</TD>
-  <TD><INPUT TYPE="text" NAME="payinfo1" SIZE=10 MAXLENGTH=20 VALUE="<? echo $payinfo1; ?>"></TD>
-</TD><TR>
+  <TD <? echo $bgShade; ?>>
+    <? if ($ach_read_only) { echo htmlspecialchars($payinfo1); ?>
+      <INPUT TYPE="hidden" NAME="payinfo1" VALUE="<? echo $payinfo1; ?>">
+    <? } else { ?>
+      <INPUT TYPE="text" NAME="payinfo1" SIZE=10 MAXLENGTH=20 VALUE="<? echo $payinfo1; ?>">
+    <? } ?>
+  </TD>
+</TR><TR>
   <TD ALIGN="right">ABA/Routing number</TD>
-  <TD><INPUT TYPE="text" NAME="payinfo2" SIZE=10 MAXLENGTH=9 VALUE="<? echo $payinfo2; ?>"></TD>
+  <TD <? echo $bgShade; ?>>
+    <? if ($ach_read_only) { echo htmlspecialchars($payinfo2); ?>
+      <INPUT TYPE="hidden" NAME="payinfo2" VALUE="<? echo $payinfo2; ?>">
+    <? } else { ?>
+      <INPUT TYPE="text" NAME="payinfo2" SIZE=10 MAXLENGTH=9 VALUE="<? echo $payinfo2; ?>"></TD>
+    <? } ?>
 </TR><TR>
   <TD ALIGN="right">Bank name</TD>
-  <TD><INPUT TYPE="text" SIZE=32 MAXLENGTH=80 NAME="payname" VALUE="<? echo $payname; ?>"></TD>
+  <TD <? echo $bgShade; ?>>
+    <? if ($ach_read_only) { echo htmlspecialchars($payname); ?>
+      <INPUT TYPE="hidden" NAME="payname" VALUE="<? echo $payname; ?>"></TD>
+    <? } else { ?>
+      <INPUT TYPE="text" SIZE=32 MAXLENGTH=80 NAME="payname" VALUE="<? echo $payname; ?>"></TD>
+    <? } ?>
 </TR><TR>
 
   <? if ($show_paystate) { ?>
-       <TD ALIGN="right">Bank state</TD>
-       <TD>
-         <SELECT NAME="paystate">
-           <? foreach ( $states AS $s ) { ?>
-              <OPTION <? if ($s == $paystate ) { echo 'SELECTED'; } ?>><? echo $s; ?>
-           <? } ?>
-         </SELECT>
-       </TD>
-       </TR><TR>
+    <TR>
+      <TD ALIGN="right">Bank state</TD>
+      <TD <? echo $bgShade; ?>>
+      <? if ($ach_read_only) { echo htmlspecialchars($paystate); ?>
+        <INPUT TYPE="hidden" NAME="paystate" VALUE="<? echo $paystate; ?>"></TD>
+      <? } else { ?>
+        <SELECT NAME="paystate">
+          <? foreach ( $states AS $s ) { ?>
+            <OPTION <? if ($s == $paystate ) { echo 'SELECTED'; } ?>><? echo $s; ?>
+          <? } ?>
+        </SELECT></TD>
+      <? } ?>
+    </TR>
   <? } ?>
 
   <? if ($show_ss) { ?>
-      <TD ALIGN="right">Account holder<BR>Social security or tax ID #</TD><TD>
-      <INPUT TYPE="text" SIZE=32 MAXLENGTH=80 NAME="ss" VALUE="<? echo $ss; ?>">
-      </TD></TR><TR>
+    <TR>
+      <TD ALIGN="right">Account holder<BR>Social security or tax ID #</TD>
+      <TD <? echo $bgShade; ?>>
+      <? if ($ach_read_only) { echo htmlspecialchars($ss); ?>
+        <INPUT TYPE="hidden" NAME="ss" VALUE="<? echo $ss; ?>"></TD>
+      <? } else { ?>
+        <INPUT TYPE="text" SIZE=32 MAXLENGTH=80 NAME="ss" VALUE="<? echo $ss; ?>"></TD>
+      <? } ?>
+    </TR>
   <? } ?>
 
   <? if ($show_stateid) { ?>
-      <TD ALIGN="right">
-      Account holder<BR><? echo $stateid_label; ?></TD><TD>
-      <INPUT TYPE="text" SIZE=32 MAXLENGTH=80 NAME="stateid" VALUE="<? echo $stateid; ?>"></TD>
-      <TD ALIGN="right"><? echo $stateid_state_label; ?></TD>
-      <TD><SELECT NAME="stateid_state">
-      <? foreach ( $states AS $s ) { ?>
-           <OPTION <? if ($s == $stateid_state ) { echo 'SELECTED'; } ?>><? echo $s; ?>
+    <TR>
+      <TD ALIGN="right">Account holder<BR><? echo $stateid_label; ?></TD>
+      <TD <? echo $bgShade; ?>>
+      <? if ($ach_read_only) { echo htmlspecialchars($stateid); ?>
+        <INPUT TYPE="hidden" NAME="stateid" VALUE="<? echo $stateid; ?>"></TD>
+        <TD <? echo $bgShade; ?>> <? echo $stateid_state; ?>
+          <INPUT TYPE="hidden" NAME="stateid_state" VALUE="<? echo $stateid_state; ?>"></TD>
+      <? } else { ?>
+        <INPUT TYPE="text" SIZE=32 MAXLENGTH=80 NAME="stateid" VALUE="<? echo $stateid; ?>"></TD>
+        <TD ALIGN="right"><? echo $stateid_state_label; ?></TD>
+        <TD><SELECT NAME="stateid_state">
+          <? foreach ( $states AS $s ) { ?>
+            <OPTION <? if ($s == $stateid_state ) { echo 'SELECTED'; } ?>><? echo $s; ?>
+          <? } ?>
+        </SELECT></TD>
       <? } ?>
-      </SELECT></TD></TR><TR>
+    </TR>
   <? } ?>
-</TR>
diff --git a/ng_selfservice/payment_ach.php b/ng_selfservice/payment_ach.php
index ecbd9c7..a3dce76 100644
--- a/ng_selfservice/payment_ach.php
+++ b/ng_selfservice/payment_ach.php
@@ -54,7 +54,7 @@ if ( $receipt_html ) { ?>
 
   $error = $payment_error;
 
-  ?>
+?>
 
   <? include('elements/error.php'); ?>
 
@@ -82,6 +82,12 @@ if ( $receipt_html ) { ?>
 
   <? include('elements/check.php') ?>
 
+  <? if ($ach_read_only) { ?>
+    <? if ( $payby == 'CARD' ) { ?>
+      <INPUT TYPE="hidden" NAME="auto" VALUE="1">
+    <? } ?>
+    </TD></TR>
+  <? } else { ?>
   <TR>
     <TD COLSPAN=2>
       <INPUT TYPE="checkbox" <? if ( ! $save_unchecked ) { echo 'CHECKED'; } ?> NAME="save" VALUE="1">
@@ -93,6 +99,8 @@ if ( $receipt_html ) { ?>
       Charge future payments to this account automatically
     </TD>
   </TR>
+  <? } ?>
+
   </TABLE>
   <BR>
   <INPUT TYPE="hidden" NAME="paybatch" VALUE="<? echo $paybatch; ?>">

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

Summary of changes:
 FS/FS/ClientAPI/MyAccount.pm                       |    1 +
 FS/FS/Conf.pm                                      |    7 ++
 fs_selfservice/FS-SelfService/cgi/change_pay.html  |    8 ++
 fs_selfservice/FS-SelfService/cgi/check.html       |  103 ++++++++++++++------
 .../FS-SelfService/cgi/make_ach_payment.html       |   28 +++---
 ng_selfservice/elements/check.php                  |   94 ++++++++++++------
 ng_selfservice/payment_ach.php                     |   10 +-
 7 files changed, 180 insertions(+), 71 deletions(-)




More information about the freeside-commits mailing list