diff options
Diffstat (limited to 'httemplate')
| -rwxr-xr-x | httemplate/edit/cust_refund.cgi | 72 | ||||
| -rwxr-xr-x | httemplate/edit/process/cust_refund.cgi | 170 | 
2 files changed, 37 insertions, 205 deletions
| diff --git a/httemplate/edit/cust_refund.cgi b/httemplate/edit/cust_refund.cgi index 473648f42..55f06642b 100755 --- a/httemplate/edit/cust_refund.cgi +++ b/httemplate/edit/cust_refund.cgi @@ -104,63 +104,25 @@        <TD COLSPAN=2><INPUT TYPE="text" NAME="payinfo" VALUE="<% $payinfo %>" SIZE=10></TD>      </TR>  % } -%  elsif ($payby eq 'CHEK') { -% -<SCRIPT TYPE="text/javascript"> -  function cust_payby_changed (what) { -    var custpaybynum = what.options[what.selectedIndex].value -    if ( custpaybynum == '' || custpaybynum == '0' ) { -       //what.form.payinfo.disabled = false; -       $('#cust_payby').slideDown(); -    } else { -       //what.form.payinfo.value = ''; -       //what.form.payinfo.disabled = true; -       $('#cust_payby').slideUp(); -    } -  } -</SCRIPT> -% my @cust_payby = (); -% if ( $payby eq 'CARD' ) { -%   @cust_payby = $cust_main->cust_payby('CARD','DCRD'); -% } elsif ( $payby eq 'CHEK' ) { -%   @cust_payby = $cust_main->cust_payby('CHEK','DCHK'); -% } else { -%   die "unknown payby $payby"; -% } -% -% my $custpaybynum = length(scalar($cgi->param('custpaybynum'))) -%                      ? scalar($cgi->param('custpaybynum')) -%                      : scalar(@cust_payby) && $cust_payby[0]->custpaybynum; -<& /elements/tr-select-cust_payby.html, -     'cust_payby' => \@cust_payby, -     'curr_value' => $custpaybynum, -     'onchange'   => 'cust_payby_changed(this)', -&> -    <INPUT TYPE="hidden" NAME="batch" VALUE="1"> -    </TABLE> -<P> -<DIV ID="cust_payby" -  <% $custpaybynum ? 'STYLE="display:none"' -                   : '' -  %> -> -<TABLE class="fsinnerbox"> - -<& /elements/cust_payby_new.html, -     'cust_payby' => \@cust_payby, -     'curr_value' => $custpaybynum, -&> - -</TABLE> -</DIV> +% elsif ($payby eq 'CHEK' || $payby eq 'CARD') { + +%  if ( $conf->exists("batch-enable") +%      || grep $payby eq $_, $conf->config('batch-enable_payby') +%  ) { +%     if ( grep $payby eq $_, $conf->config('realtime-disable_payby') ) { +          <INPUT TYPE="hidden" NAME="batch" VALUE="1"> +%     } else { +        <TR> +          <TD ALIGN="right"><INPUT TYPE="checkbox" NAME="batch" VALUE="1" ID="batch" <% ($batchnum || $batch) ? 'checked' : '' %> ></TD> +          <TD ALIGN="left">   <% mt('Add to current batch') |h %></TD> +        </TR> +%     } +%  } -%  } else { +% } else {      <INPUT TYPE="hidden" NAME="payinfo" VALUE=""> -    </TABLE>  % } -<P> -<TABLE class="fsinnerbox">  <& /elements/tr-select-reason.html,                'field'          => 'reasonnum',                'reason_class'   => 'F', @@ -193,16 +155,18 @@ my $payby   = $cgi->param('payby');  my $payinfo = $cgi->param('payinfo');  my $reason  = $cgi->param('reason');  my $link    = $cgi->param('popup') ? 'popup' : ''; +my $batch   = $cgi->param('batch');  die "access denied"    unless $FS::CurrentUser::CurrentUser->refund_access_right($payby); -my( $paynum, $cust_pay ) = ( '', '' ); +my( $paynum, $cust_pay, $batchnum ) = ( '', '', '' );  if ( $cgi->param('paynum') =~ /^(\d+)$/ ) {    $paynum = $1;    $cust_pay = qsearchs('cust_pay', { paynum=>$paynum } )      or die "unknown payment # $paynum";    $refund ||= $cust_pay->unrefunded; +  $batchnum = $cust_pay->batchnum;    if ( $custnum ) {      die "payment # $paynum is not for specified customer # $custnum"        unless $custnum == $cust_pay->custnum; diff --git a/httemplate/edit/process/cust_refund.cgi b/httemplate/edit/process/cust_refund.cgi index 8dbe4fc63..49aedf3fe 100755 --- a/httemplate/edit/process/cust_refund.cgi +++ b/httemplate/edit/process/cust_refund.cgi @@ -53,137 +53,6 @@ if ( $error ) {               'CHEK' => 'electronic check (ACH)',               ); -my( $cust_payby, $payinfo, $paycvv, $month, $year, $payname ); -my $paymask = ''; -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"); - -} 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  ## @@ -193,46 +62,45 @@ if ( (my $custpaybynum = scalar($cgi->param('custpaybynum'))) > 0 ) {    my $refund = "$1$2";    $cgi->param('paynum') =~ /^(\d*)$/ or die "Illegal paynum!";    my $paynum = $1; -  my $paydate; -  if ($cust_payby->paydate) { $paydate = "$year-$month-01"; } -  else { $paydate = "2037-12-01"; } +  #my $paydate; +  my $paydate = $cgi->param('exp_year'). '-'. $cgi->param('exp_month'). '-01'; +  #unless ($paynum) { +  #  if ($cust_payby->paydate) { $paydate = "$year-$month-01"; } +  #  else { $paydate = "2037-12-01"; } +  #}    if ( $cgi->param('batch') ) { - +    $paydate = "2037-12-01" unless $paydate;      $error ||= $cust_main->batch_card(                                       'payby'    => $payby,                                       'amount'   => $refund, -                                     'payinfo'  => $payinfo, -                                     'paydate'  => $paydate, -                                     'payname'  => $payname, +                                     #'payinfo'  => $payinfo, +                                     #'paydate'  => $paydate, +                                     #'payname'  => $payname,                                       'paycode'  => 'C',                                       map { $_ => scalar($cgi->param($_)) }                                         @{$payby2fields{$payby}}                                     );      errorpage($error) if $error; -#### post refund #####      my %hash = map {        $_, scalar($cgi->param($_))      } fields('cust_refund'); -    $paynum = $cgi->param('paynum'); -    $paynum =~ /^(\d*)$/ or die "Illegal paynum!"; -    if ($paynum) { -      my $cust_pay = qsearchs('cust_pay',{ 'paynum' => $paynum }); -      die "Could not find paynum $paynum" unless $cust_pay; -      $error = $cust_pay->refund(\%hash); -    } else { -      my $new = new FS::cust_refund ( \%hash ); -      $error = $new->insert; -    } -    # if not a batch refund run realtime. + +    my $new = new FS::cust_refund ( { 'paynum' => $paynum, +                                      %hash, +                                  } ); +    $error = $new->insert; + +  # if not a batch refund run realtime.    } else { +    $options{'paydate'} = $paydate if $paydate =~ /^\d{2,4}-\d{1,2}-01$/;      $error = $cust_main->realtime_refund_bop( $bop, 'amount' => $refund,                                                    'paynum' => $paynum,                                                    'reasonnum' => $reasonnum,                                                    %options );    } -} else { +} else { # run cash refund.    my %hash = map {      $_, scalar($cgi->param($_))    } fields('cust_refund'); | 
