'Apply credit', #NEWNEW
'Unapply credit', #aka unapplycredits Enable "unapplication" of unclosed credits.
'Delete credit', #aka. deletecredits Enable deletion of unclosed credits. Be very careful! Only delete credits that were data-entry errors, not adjustments. Optionally specify one or more comma-separated email addresses to be notified when a credit is deleted.
+ 'Post refund',
+# 'Process refund',
'Add on-the-fly credit reason', #NEW
###
'BILL' => {
tinyname => 'billing',
shortname => 'Billing',
+ payname => 'Check',
longname => 'Billing',
},
'PREP' => {
$hash{$payby}->{shortname};
}
+sub payname {
+ my( $self, $payby ) = @_;
+ #$hash{$payby}->{payname} || $hash{$payby}->{shortname};
+ exists($hash{$payby}->{payname})
+ ? $hash{$payby}->{payname}
+ : $hash{$payby}->{shortname};
+}
+
sub longname {
my( $self, $payby ) = @_;
$hash{$payby}->{longname};
<% include("/elements/header.html", $title, '') %>
% }
-<% include('/elements/error.html') %>
-
-<LINK REL="stylesheet" TYPE="text/css" HREF="../elements/calendar-win2k-2.css" TITLE="win2k-2">
-<SCRIPT TYPE="text/javascript" SRC="../elements/calendar_stripped.js"></SCRIPT>
-<SCRIPT TYPE="text/javascript" SRC="../elements/calendar-en.js"></SCRIPT>
-<SCRIPT TYPE="text/javascript" SRC="../elements/calendar-setup.js"></SCRIPT>
+<% include('/elements/init_calendar.html') %>
-<FORM ACTION="<% popurl(1) %>process/cust_pay.cgi" METHOD=POST>
-<INPUT TYPE="hidden" NAME="link" VALUE="<% $link %>">
-<INPUT TYPE="hidden" NAME="linknum" VALUE="<% $linknum %>">
+<% include('/elements/error.html') %>
% unless ( $link eq 'popup' ) {
<% small_custview($custnum, $conf->config('countrydefault')) %>
% }
+<FORM NAME="PaymentForm" ACTION="<% popurl(1) %>process/cust_pay.cgi" METHOD=POST onSubmit="document.PaymentForm.submit.disabled=true">
+<INPUT TYPE="hidden" NAME="link" VALUE="<% $link %>">
+<INPUT TYPE="hidden" NAME="linknum" VALUE="<% $linknum %>">
<INPUT TYPE="hidden" NAME="payby" VALUE="<% $payby %>">
+<INPUT TYPE="hidden" NAME="paybatch" VALUE="<% $paybatch %>">
<BR><BR>
+
Payment
<% ntable("#cccccc", 2) %>
<TR>
<TD ALIGN="right">Amount</TD>
<TD BGCOLOR="#ffffff" ALIGN="right"><% $money_char %></TD>
- <TD><INPUT TYPE="text" NAME="paid" VALUE="<% $paid %>" SIZE=8 MAXLENGTH=8> by <B><% $payby{$payby} %></B></TD>
+ <TD><INPUT TYPE="text" NAME="paid" VALUE="<% $paid %>" SIZE=8 MAXLENGTH=8> by <B><% FS::payby->payname($payby) %></B></TD>
</TR>
% if ( $payby eq 'BILL' ) {
</TABLE>
-<INPUT TYPE="hidden" NAME="paybatch" VALUE="<% $paybatch %>">
-
<BR>
<INPUT TYPE="submit" VALUE="Post payment">
</FORM>
-</BODY>
-</HTML>
-<%once>
+% if ( $link eq 'popup' ) {
+ </BODY>
+ </HTML>
+% } else {
+ <% include('/elements/footer.html') %>
+% }
-my $conf = new FS::Conf;
+<%init>
-my %payby = (
- 'BILL' => 'Check',
- 'CASH' => 'Cash',
- 'WEST' => 'Western Union',
- 'MCRD' => 'Manual credit card',
-);
+my $conf = new FS::Conf;
my $money_char = $conf->config('money_char') || '$';
-</%once>
-<%init>
-
die "access denied"
unless $FS::CurrentUser::CurrentUser->access_right('Post payment');
my $paybatch = "webui-$_date-$$-". rand() * 2**32;
-my $title = 'Post '. $payby{$payby}. ' payment';
+my $title = 'Post '. FS::payby->payname($payby). ' payment';
$title .= " against Invoice #$linknum" if $link eq 'invnum';
my $custnum;
} elsif ( $link eq 'custnum' ) {
$custnum = $linknum;
}
-</%init>
+</%init>
-<% include('/elements/header.html', 'Refund '. ucfirst(lc($payby)). ' payment', '') %>
+% if ( $link eq 'popup' ) {
+ <% include('/elements/header-popup.html', $title ) %>
+% } else {
+ <% include("/elements/header.html", $title, '') %>
+% }
<% include('/elements/error.html') %>
-<% small_custview($custnum, $conf->config('countrydefault')) %>
+% unless ( $link eq 'popup' ) {
+ <% small_custview($custnum, $conf->config('countrydefault')) %>
+% }
<FORM NAME="RefundForm" ACTION="<% $p1 %>process/cust_refund.cgi" METHOD=POST onSubmit="document.RefundForm.submit.disabled=true">
+<INPUT TYPE="hidden" NAME="popup" VALUE="<% $link %>">
<INPUT TYPE="hidden" NAME="refundnum" VALUE="">
<INPUT TYPE="hidden" NAME="custnum" VALUE="<% $custnum %>">
<INPUT TYPE="hidden" NAME="paynum" VALUE="<% $paynum %>">
<INPUT TYPE="hidden" NAME="_date" VALUE="<% $_date %>">
<INPUT TYPE="hidden" NAME="payby" VALUE="<% $payby %>">
-<INPUT TYPE="hidden" NAME="payinfo" VALUE="">
<INPUT TYPE="hidden" NAME="paybatch" VALUE="">
<INPUT TYPE="hidden" NAME="credited" VALUE="">
+
<BR>
+
% if ( $cust_pay ) {
%
% #false laziness w/FS/FS/cust_pay.pm
-% my $payby = $cust_pay->payby;
+% my $payby = FS::payby->payname($cust_pay->payby);
% my $paymask = $cust_pay->paymask;
% my $paydate = $cust_pay->paydate;
% if ( $cgi->param('error') ) {
% $paydate = $cgi->param('exp_year'). '-'. $cgi->param('exp_month'). '-01';
% $paydate = '' unless ($paydate =~ /^\d{2,4}-\d{1,2}-01$'/);
% }
-% $payby =~ s/^BILL$/Check/ if $paymask;
-% $payby =~ s/^CHEK$/Electronic check/;
-%
-%
-
<BR>Payment
<% ntable("#cccccc", 2) %>
</TR>
<TR>
- <TD ALIGN="right">Method</TD><TD BGCOLOR="#ffffff"><% ucfirst(lc($payby)) %> # <% $paymask %></TD>
+ <TD ALIGN="right">Method</TD><TD BGCOLOR="#ffffff"><% $payby %> # <% $paymask %></TD>
</TR>
% unless ( $paydate ) { # possibly other reasons: i.e. card has since expired
<% ntable("#cccccc", 2) %>
<TR>
- <TD ALIGN="right">Date</TD><TD BGCOLOR="#ffffff"><% time2str("%D",$_date) %></TD>
+ <TD ALIGN="right">Date</TD>
+ <TD BGCOLOR="#ffffff"><% time2str("%D",$_date) %></TD>
</TR>
<TR>
- <TD ALIGN="right">Amount</TD><TD BGCOLOR="#ffffff">$<INPUT TYPE="text" NAME="refund" VALUE="<% $refund %>" SIZE=8 MAXLENGTH=8></TD>
+ <TD ALIGN="right">Amount</TD>
+ <TD BGCOLOR="#ffffff">$<INPUT TYPE="text" NAME="refund" VALUE="<% $refund %>" SIZE=8 MAXLENGTH=8> by <B><% FS::payby->payname($payby) %></B></TD>
</TR>
+% if ( $payby eq 'BILL' ) {
+ <TR>
+ <TD ALIGN="right">Check #</TD>
+ <TD COLSPAN=2><INPUT TYPE="text" NAME="payinfo" VALUE="<% $payinfo %>" SIZE=10></TD>
+ </TR>
+% } else {
+ <INPUT TYPE="hidden" NAME="payinfo" VALUE="">
+% }
+
<TR>
- <TD ALIGN="right">Reason</TD><TD BGCOLOR="#ffffff"><INPUT TYPE="text" NAME="reason" VALUE="<% $reason %>"></TD>
+ <TD ALIGN="right">Reason</TD>
+ <TD BGCOLOR="#ffffff"><INPUT TYPE="text" NAME="reason" VALUE="<% $reason %>"></TD>
</TR>
</TABLE>
</FORM>
-<% include('/elements/footer.html') %>
+% if ( $link eq 'popup' ) {
+ </BODY>
+ </HTML>
+% } else {
+ <% include('/elements/footer.html') %>
+% }
<%init>
my $custnum = $cgi->param('custnum');
my $refund = $cgi->param('refund');
my $payby = $cgi->param('payby');
+my $payinfo = $cgi->param('payinfo');
my $reason = $cgi->param('reason');
+my $link = $cgi->param('popup') ? 'popup' : '';
my( $paynum, $cust_pay ) = ( '', '' );
if ( $cgi->param('paynum') =~ /^(\d+)$/ ) {
my $p1 = popurl(1);
+my $title = 'Refund '. FS::payby->payname($payby). ' payment';
+
</%init>
% $cgi->param('error', $error);
<% $cgi->redirect(popurl(2). "cust_refund.cgi?". $cgi->query_string ) %>
%} else {
+%
+% if ( $link eq 'popup' ) {
+%
+<% header('Refund entered') %>
+ <SCRIPT TYPE="text/javascript">
+ window.top.location.reload();
+ </SCRIPT>
+
+ </BODY></HTML>
+% } else {
<% $cgi->redirect(popurl(3). "view/cust_main.cgi?$custnum") %>
+% }
%}
<%init>
die "access denied"
- unless $FS::CurrentUser::CurrentUser->access_right('Refund payment');
+ unless $FS::CurrentUser::CurrentUser->access_right('Refund payment')
+ || $FS::CurrentUser::CurrentUser->access_right('Post refund');
$cgi->param('custnum') =~ /^(\d*)$/ or die "Illegal custnum!";
my $custnum = $1;
my $cust_main = qsearchs('cust_main', { 'custnum' => $custnum } )
or die "unknown custnum $custnum";
+my $link = $cgi->param('popup') ? 'popup' : '';
+
my $error = '';
if ( $cgi->param('payby') =~ /^(CARD|CHEK)$/ ) {
my %options = ();
'reason' => $reason,
%options );
} else {
- die 'unimplemented';
- #my $new = new FS::cust_refund ( {
- # map {
- # $_, scalar($cgi->param($_));
- # } ( fields('cust_refund'), 'paynum' )
- #} );
- #$error = $new->insert;
+ my $new = new FS::cust_refund ( {
+ map {
+ $_, scalar($cgi->param($_));
+ } fields('cust_refund') #huh? , 'paynum' )
+ } );
+ $error = $new->insert;
}
</%init>
--- /dev/null
+<LINK REL="stylesheet" TYPE="text/css" HREF="<%$fsurl%>elements/calendar-win2k-2.css" TITLE="win2k-2">
+
+% foreach (qw( _stripped -en -setup )) {
+<SCRIPT TYPE="text/javascript" SRC="<%$fsurl%>elements/calendar<%$_%>.js"></SCRIPT>
+% }
: $cust_refund->payinfo;
$payby =~ s/^BILL$/Check #/ if $payinfo;
+$payby =~ s/^BILL$/Check/;
$payby =~ s/^CHEK$/Electronic check /;
$payby =~ s/^(CARD|COMP)$/$1 /;
<TR>
<TD ALIGN="right">Refund method</TD>
- <TD BGCOLOR="#FFFFFF"><B><% $cust_refund->payby_name %> #<% $cust_refund->paymask %></B></TD>
+ <TD BGCOLOR="#FFFFFF"><B><% $cust_refund->payby_name %><% $cust_refund->paymask ? ' #'.$cust_refund->paymask : '' %></B></TD>
</TR>
% if ( $cust_refund->payby =~ /^(CARD|CHEK|LECB)$/ && $cust_refund->paybatch ) {