% $pre %>Payment<% $post %> by <% $otaker %>
<% "$info$desc$view$apply$refund$void$delete$unapply" %>
<%init>
my( $cust_pay, %opt ) = @_;
my $conf = new FS::Conf;
my $curuser = $FS::CurrentUser::CurrentUser;
my $payby = $cust_pay->payby;
my $payinfo;
if ( $payby eq 'CARD' ) {
$payinfo = $cust_pay->paymask;
} elsif ( $payby eq 'CHEK' ) {
my( $account, $aba ) = split('@', $cust_pay->paymask );
$payinfo = "ABA $aba, Acct #$account";
} else {
$payinfo = $cust_pay->payinfo;
}
my @cust_bill_pay = $cust_pay->cust_bill_pay;
my @cust_pay_refund = $cust_pay->cust_pay_refund;
my $target = "$payby$payinfo";
$payby =~ s/^BILL$/Check #/ if $payinfo;
$payby =~ s/^CHEK$/Electronic check /;
$payby =~ s/^PREP$/Prepaid card /;
$payby =~ s/^CARD$/Credit card #/;
$payby =~ s/^COMP$/Complimentary by /;
$payby =~ s/^CASH$/Cash/;
$payby =~ s/^WEST$/Western Union/;
$payby =~ s/^MCRD$/Manual credit card/;
$payby =~ s/^BILL$//;
my $info = $payby ? "($payby$payinfo)" : '';
my( $pre, $post, $desc, $apply, $ext ) = ( '', '', '', '', '' );
if ( scalar(@cust_bill_pay) == 0
&& scalar(@cust_pay_refund) == 0 ) {
#completely unapplied
$pre = 'Unapplied ';
$post = '';
if ( $curuser->access_right('Apply payment') ) {
if ( $cust_pay->cust_main->total_owed > 0 ) {
$apply = ' ('.
include( '/elements/popup_link.html',
'label' => 'apply',
'action' => "${p}edit/cust_bill_pay.cgi?".
$cust_pay->paynum,
'actionlabel' => 'Apply payment',
'width' => 392,
#default# 'height' => 336,
).
')';
}
if ( $cust_pay->cust_main->total_unapplied_refunds > 0 ) {
$apply.= ' ('.
include( '/elements/popup_link.html',
'label' => 'apply to refund',
'action' => "${p}edit/cust_pay_refund.cgi?".
$cust_pay->paynum,
'actionlabel' => 'Apply payment to refund',
'width' => 392,
#default# 'height' => 336,
).
')';
}
}
} elsif ( scalar(@cust_bill_pay) == 1
&& scalar(@cust_pay_refund) == 0
&& $cust_pay->unapplied == 0 ) {
#applied to one invoice, the usual situation
$desc = ' '. $cust_bill_pay[0]->applied_to_invoice;
} elsif ( scalar(@cust_bill_pay) == 0
&& scalar(@cust_pay_refund) == 1
&& $cust_pay->unapplied == 0 ) {
#applied to one refund
$desc = ' refunded on '. time2str("%D", $cust_pay_refund[0]->_date);
} else {
#complicated
$desc = '
';
foreach my $app ( sort { $a->_date <=> $b->_date }
( @cust_bill_pay, @cust_pay_refund ) ) {
if ( $app->isa('FS::cust_bill_pay') ) {
$desc .= ' '.
'$'. $app->amount.
' '. $app->applied_to_invoice.
'
';
#' on '. time2str("%D", $cust_bill_pay->_date).
} elsif ( $app->isa('FS::cust_pay_refund') ) {
$desc .= ' '.
'$'. $app->amount.
' refunded on '. time2str("%D", $app->_date).
'
';
} else {
die "$app is not a FS::cust_bill_pay or FS::cust_pay_refund";
}
}
if ( $cust_pay->unapplied > 0 ) {
$desc .= ' '.
'$'.
$cust_pay->unapplied. ' unapplied';
if ( $curuser->access_right('Apply payment') ) {
if ( $cust_pay->cust_main->total_owed > 0 ) {
$apply = ' ('.
include( '/elements/popup_link.html',
'label' => 'apply',
'action' => "${p}edit/cust_bill_pay.cgi?".
$cust_pay->paynum,
'actionlabel' => 'Apply payment',
'width' => 392,
#default# 'height' => 336,
).
')';
}
if ( $cust_pay->cust_main->total_unapplied_refunds > 0 ) {
$apply.= ' ('.
include( '/elements/popup_link.html',
'label' => 'apply to refund',
'action' => "${p}edit/cust_pay_refund.cgi?".
$cust_pay->paynum,
'actionlabel' => 'Apply payment to refund',
'width' => 392,
#default# 'height' => 336,
).
')';
}
}
$desc .= '
';
}
}
my $view =
' ('. include('/elements/popup_link.html',
'label' => 'view receipt',
'action' => "${p}view/cust_pay.html?link=popup;paynum=".
$cust_pay->paynum,
'actionlabel' => 'Payment Receipt',
).
')';
my $refund = '';
my $refund_days = $conf->config('card_refund-days') || 120;
if ( $cust_pay->closed !~ /^Y/i
&& $cust_pay->payby =~ /^(CARD|CHEK)$/
&& time-$cust_pay->_date < $refund_days*86400
&& $cust_pay->unrefunded > 0
&& $curuser->access_right('Refund payment')
) {
$refund = qq! (refund)!;
}
my $void = '';
if ( $cust_pay->closed !~ /^Y/i
&& ( ( $cust_pay->payby eq 'CARD'
&& $curuser->access_right('Credit card void')
)
|| ( $cust_pay->payby eq 'CHEK'
&& $curuser->access_right('Echeck void')
)
|| ( $cust_pay->payby !~ /^(CARD|CHEK)$/
&& $curuser->access_right('Regular void')
)
)
)
{
$void = qq! (void)!;
}
my $delete = '';
if ( $cust_pay->closed !~ /^Y/i
&& $conf->exists('deletepayments')
&& $curuser->access_right('Delete payment')
)
{
$delete = qq! (delete)!;
}
my $unapply = '';
if ( $cust_pay->closed !~ /^Y/i
&& scalar(@cust_bill_pay)
&& $curuser->access_right('Unapply payment')
)
{
$unapply = qq! (unapply)!;
}
my $otaker = $cust_pay->otaker;
$otaker = 'auto billing' if $otaker eq 'fs_daily';
$otaker = 'customer self-service' if $otaker eq 'fs_selfservice';
%init>