RT#38363: use cust_payby when saving cards during payments
[freeside.git] / httemplate / misc / payment.cgi
index e221c60..7afdfd1 100644 (file)
@@ -1,5 +1,7 @@
 <& /elements/header.html, mt("Process [_1] payment",$type{$payby})  &>
 <& /elements/small_custview.html, $cust_main, '', '', popurl(2) . "view/cust_main.cgi" &>
+<BR>
+
 <FORM NAME="OneTrueForm" ACTION="process/payment.cgi" METHOD="POST" onSubmit="document.OneTrueForm.process.disabled=true">
 <INPUT TYPE="hidden" NAME="custnum"   VALUE="<% $custnum %>">
 <INPUT TYPE="hidden" NAME="payby"     VALUE="<% $payby %>">
 
 <& /elements/init_overlib.html &>
 
-<% ntable('#cccccc') %>
+<TABLE class="fsinnerbox">
 
   <& /elements/tr-amount_fee.html,
        'amount'             => $amount,
-       'process-pkgpart'    => scalar($conf->config('manual_process-pkgpart')),
+       'process-pkgpart'    => 
+          scalar($conf->config('manual_process-pkgpart', $cust_main->agentnum)),
        'process-display'    => scalar($conf->config('manual_process-display')),
-       'process-skip-first' => $conf->exists('manual_process-skip_first'),
+       'process-skip_first' => $conf->exists('manual_process-skip_first'),
        'num_payments'       => scalar($cust_main->cust_pay), 
-       'surcharge_percentage' => scalar($conf->config('credit-card-surcharge-percentage')),
+       'surcharge_percentage' =>
+         ( $payby eq 'CARD'
+             ? scalar($conf->config('credit-card-surcharge-percentage'))
+             : 0
+         ),
   &>
 
-  <& /elements/tr-select-discount_term.html,
-       'custnum'   => $custnum,
-       'amount_id' => 'amount',
-  &>
+% if ( $conf->exists('part_pkg-term_discounts') ) {
+    <& /elements/tr-select-discount_term.html,
+         'custnum'   => $custnum,
+         'amount_id' => 'amount',
+    &>
+% }
 
+% my $auto = 0;
 % if ( $payby eq 'CARD' ) {
 %
 %   my( $payinfo, $paycvv, $month, $year ) = ( '', '', '', '' );
 %   my $payname = $cust_main->first. ' '. $cust_main->getfield('last');
-%   if ( $cust_main->payby =~ /^(CARD|DCRD)$/ ) {
-%     $payinfo = $cust_main->paymask;
-%     $paycvv = $cust_main->paycvv;
-%     ( $month, $year ) = $cust_main->paydate_monthyear;
-%     $payname = $cust_main->payname if $cust_main->payname;
+%   my $location = $cust_main->bill_location;
+%
+%   #auto-fill with the highest weighted match
+%   my ($cust_payby) = $cust_main->cust_payby('CARD','DCRD');
+%   if ($cust_payby) {
+%     $payinfo = $cust_payby->paymask;
+%     $paycvv  = $cust_payby->paycvv;
+%     ( $month, $year ) = $cust_payby->paydate_monthyear;
+%     $payname = $cust_payby->payname if $cust_payby->payname;
+%     $location = $cust_payby->cust_location || $location;
+%     $auto = 1 if $cust_payby->payby eq 'CARD';
 %   }
 
     <TR>
@@ -78,7 +94,7 @@
     </TR>
 
     <& /elements/location.html,
-                  'object'         => $cust_main, #XXX errors???
+                  'object'         => $location,
                   'no_asterisks'   => 1,
                   'address1_label' => emt('Card billing address'),
     &>
 %   my( $account, $aba, $branch, $payname, $ss, $paytype, $paystate,
 %       $stateid, $stateid_state )
 %     = ( '', '', '', '', '', '', '', '', '' );
-%   if ( $cust_main->payby =~ /^(CHEK|DCHK)$/ ) {
-%     $cust_main->paymask =~ /^([\dx]+)\@([\d\.x]*)$/i
-%       or die "unparsable payinfo ". $cust_main->payinfo;
+%   my ($cust_payby) = $cust_main->cust_payby('CHEK','DCHK');
+%   if ($cust_payby) {
+%     $cust_payby->paymask =~ /^([\dx]+)\@([\d\.x]*)$/i
+%       or die "unparsable paymask ". $cust_payby->paymask;
 %     ($account, $aba) = ($1, $2);
 %     ($branch,$aba) = split('\.',$aba)
 %       if $conf->config('echeck-country') eq 'CA';
-%     $payname = $cust_main->payname;
+%     $payname = $cust_payby->payname;
+%     $paytype = $cust_payby->getfield('paytype');
+%     $paystate = $cust_payby->getfield('paystate');
+%     $auto = 1 if $cust_payby->payby eq 'CHEK';
+%     # these values aren't in cust_payby, but maybe should be...
 %     $ss = $cust_main->ss;
-%     $paytype = $cust_main->getfield('paytype');
-%     $paystate = $cust_main->getfield('paystate');
 %     $stateid = $cust_main->getfield('stateid');
 %     $stateid_state = $cust_main->getfield('stateid_state');
 %   }
       <TD ALIGN="right"><% mt('Account number') |h %></TD>
       <TD><INPUT TYPE="text" SIZE=10 NAME="payinfo1" VALUE="<%$account%>"></TD>
       <TD ALIGN="right"><% mt('Type') |h %></TD>
-      <TD><SELECT NAME="paytype"><% join('', map { qq!<OPTION VALUE="$_" !.($paytype eq $_ ? 'SELECTED' : '').">$_</OPTION>" } @FS::cust_main::paytypes) %></SELECT></TD>
+      <TD><SELECT NAME="paytype"><% join('', map { qq!<OPTION VALUE="$_" !.($paytype eq $_ ? 'SELECTED' : '').">$_</OPTION>" } FS::cust_payby->paytypes) %></SELECT></TD>
     </TR>
     <TR>
       <TD ALIGN="right"><% mt($routing_label) |h %></TD>
 
 <TR>
   <TD COLSPAN=2>
-    <INPUT TYPE="checkbox"<% ( ( $payby eq 'CARD' && $cust_main->payby ne 'DCRD' ) || ( $payby eq 'CHEK' && $cust_main->payby eq 'CHEK' ) ) ? ' CHECKED' : '' %> NAME="auto" VALUE="1" onClick="if (this.checked) { document.OneTrueForm.save.checked=true; }">
+    <INPUT TYPE="checkbox"<% $auto ? ' CHECKED' : '' %> NAME="auto" VALUE="1" onClick="if (this.checked) { document.OneTrueForm.save.checked=true; }">
     <% mt("Charge future payments to this [_1] automatically",$type{$payby}) |h %> 
   </TD>
 </TR>
@@ -266,7 +285,11 @@ my @states = sort { $a cmp $b } keys %states;
 
 my $amount = '';
 if ( $balance > 0 ) {
-  $amount = $balance;
+  # when configured to do so, amount will only auto-fill with balance
+  # if balance represents a single invoice
+  $amount = $balance
+    unless $conf->exists('manual_process-single_invoice_amount')
+      && ($cust_main->open_cust_bill != 1);
 }
 
 my $payunique = "webui-payment-". time. "-$$-". rand() * 2**32;