RT# 74537 - Added new selfservice config option to make ECHECK readonly on selfservic...
authorChristopher Burger <burgerc@freeside.biz>
Mon, 10 Jul 2017 13:52:54 +0000 (09:52 -0400)
committerChristopher Burger <burgerc@freeside.biz>
Mon, 10 Jul 2017 13:58:28 +0000 (09:58 -0400)
FS/FS/ClientAPI/MyAccount.pm
FS/FS/Conf.pm
fs_selfservice/FS-SelfService/cgi/change_pay.html
fs_selfservice/FS-SelfService/cgi/check.html
fs_selfservice/FS-SelfService/cgi/make_ach_payment.html
ng_selfservice/elements/check.php
ng_selfservice/payment_ach.php

index 505111e..49e61ab 100644 (file)
@@ -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'),
 
     };
 
index 086448c..d41cc74 100644 (file)
@@ -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',
index 6898dc7..e38ba76 100644 (file)
                       '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,
index 68753fe..17635c3 100644 (file)
@@ -1,54 +1,97 @@
 <TR>
   <TD ALIGN="right">Account&nbsp;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&nbsp;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&nbsp;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&nbsp;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&nbsp;holder<BR>Social&nbsp;';
-      $OUT .= 'security&nbsp;or&nbsp;tax&nbsp;ID&nbsp;#</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&nbsp;holder<BR>Social&nbsp;';
+      $OUT .= 'security&nbsp;or&nbsp;tax&nbsp;ID&nbsp;#</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&nbsp;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&nbsp;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>
index 8c2dfe3..37fd464 100644 (file)
@@ -20,24 +20,28 @@ EOF
 <TR>
   <TD ALIGN="right">Payment&nbsp;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%>">
index b026c92..fd0cd6d 100644 (file)
@@ -1,50 +1,88 @@
+<? if ($ach_read_only) { $bgShade = 'BGCOLOR="#ffffff"';  } ?>
 <TR>
   <TD ALIGN="right">Account&nbsp;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&nbsp;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&nbsp;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&nbsp;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&nbsp;holder<BR>Social&nbsp;security&nbsp;or&nbsp;tax&nbsp;ID&nbsp;#</TD><TD>
-      <INPUT TYPE="text" SIZE=32 MAXLENGTH=80 NAME="ss" VALUE="<? echo $ss; ?>">
-      </TD></TR><TR>
+    <TR>
+      <TD ALIGN="right">Account&nbsp;holder<BR>Social&nbsp;security&nbsp;or&nbsp;tax&nbsp;ID&nbsp;#</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&nbsp;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&nbsp;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>
index ecbd9c7..a3dce76 100644 (file)
@@ -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; ?>">