X-Git-Url: http://git.freeside.biz/gitweb/?p=freeside.git;a=blobdiff_plain;f=httemplate%2Fview%2Fcust_main%2Fpayment_history%2Fpayment.html;h=6402383d83e301361adc5b947372300b4ac2b383;hp=6ec9fdb9612aca2a20687705dba223ca8a2bef09;hb=929783d1045757abbe5c84ff2439547b0f8eca23;hpb=06a85a88bfdb0d3fc79ee055eb8327658dfe63ab diff --git a/httemplate/view/cust_main/payment_history/payment.html b/httemplate/view/cust_main/payment_history/payment.html index 6ec9fdb96..6402383d8 100644 --- a/httemplate/view/cust_main/payment_history/payment.html +++ b/httemplate/view/cust_main/payment_history/payment.html @@ -1,38 +1,19 @@ -<% $pre %>Payment<% $post %> by <% $otaker %> -<% "$info$desc$view$apply$refund$void$delete$unapply" %> +<% $payment. ' '. $info. $desc. + $view. $email. $change_pkg. $apply. $refund. $void. $unapply +%> <%init> my( $cust_pay, %opt ) = @_; my $date_format = $opt{'date_format'} || '%m/%d/%Y'; -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 $unapplied = $cust_pay->unapplied; +my ($payby,$payinfo) = translate_payinfo($cust_pay); 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$//; +$payby = translate_payby($payby,$payinfo); my $info = $payby ? "($payby$payinfo)" : ''; my $desc = ''; @@ -43,183 +24,194 @@ if ( $opt{'pkg-balances'} && $cust_pay->pkgnum ) { my %cust_bill_pay_width = ('width' => 392); my %cust_bill_pay_height = (); -if ($conf->exists('cust_bill_pay_pkg-manual')) { +if ( $opt{'cust_bill_pay_pkg-manual'} ) { %cust_bill_pay_width = ('width' => 592); %cust_bill_pay_height = ('height' => 436); } -my( $pre, $post, $apply, $ext ) = ( '', '', '', '' ); +my $apply = ''; + +my $italicize_otaker = 0; +my $otaker = $cust_pay->otaker; +if ( $otaker eq 'fs_daily' ) { + $otaker = 'auto billing'; + $italicize_otaker = 1; +} +if ( $otaker eq 'fs_selfservice' ) { + $otaker = 'customer self-service'; + $italicize_otaker = 1; +} + +my $payment = emt("Payment by [_1]",$otaker); +$payment =~ s/$otaker/$otaker<\/i>/ if $italicize_otaker; + 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', - %cust_bill_pay_width, - %cust_bill_pay_height, - ). - ')'; - } - 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, - ). - ')'; - } - } + $payment = emt("Unapplied Payment by [_1]",$otaker); + $payment =~ s/$otaker/$otaker<\/i>/ if $italicize_otaker; + $payment = ''.$payment.''; } elsif ( scalar(@cust_bill_pay) == 1 && scalar(@cust_pay_refund) == 0 - && $cust_pay->unapplied == 0 ) { + && $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 ) { + && $unapplied == 0 ) { #applied to one refund - $desc .= ' refunded on '. time2str($date_format, $cust_pay_refund[0]->_date); + $desc .= emt(" refunded on [_1]", time2str($date_format, $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($date_format, $cust_bill_pay->_date). + $desc .= '  ' . $opt{money_char} . $app->amount . ' ' . + $app->applied_to_invoice . '
'; } elsif ( $app->isa('FS::cust_pay_refund') ) { - $desc .= '  '. - '$'. $app->amount. - ' refunded on '. time2str($date_format, $app->_date). - '
'; + $desc .= '  ' . + emt("[_1][_2] refunded on [_3]", $opt{money_char}, $app->amount, + time2str($date_format, $app->_date) ) . '
'; } else { die "$app is not a FS::cust_bill_pay or FS::cust_pay_refund"; } } - if ( $cust_pay->unapplied > 0 ) { + if ( $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', - %cust_bill_pay_width, - %cust_bill_pay_height, - ). - ')'; - } - 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, - ). - ')'; - } - } + ''. + emt("[_1][_2] unapplied", $opt{money_char}, $unapplied). + ''; $desc .= '
'; } } +if ($unapplied > 0) { + if ( $opt{'Apply payment'} ) { + if ( $opt{total_owed} > 0 ) { + $apply = ' ('. + include( '/elements/popup_link.html', + 'label' => emt('apply'), + 'action' => "${p}edit/cust_bill_pay.cgi?". + $cust_pay->paynum, + 'actionlabel' => emt('Apply payment'), + %cust_bill_pay_width, + %cust_bill_pay_height, + ). + ')'; + } + if ( $opt{total_unapplied_refunds} > 0 ) { + $apply.= ' ('. + include( '/elements/popup_link.html', + 'label' => emt('apply refund'), + 'style' => 'white-space: nowrap', + 'action' => "${p}edit/cust_pay_refund.cgi?". + $cust_pay->paynum, + 'actionlabel' => emt('Apply payment to refund'), + 'width' => 392, + ). + ')'; + } + $apply .= ' (auto‑apply: ' + . ($cust_pay->no_auto_apply ? 'no' : 'yes') + . ' | ' + . include( '/elements/popup_link.html', + 'label' => emt($cust_pay->no_auto_apply ? 'yes' : 'no'), + 'action' => "${p}edit/process/cust_pay-no_auto_apply.cgi?paynum=" + . $cust_pay->paynum + . '&no_auto_apply=' + . ($cust_pay->no_auto_apply ? '' : 'Y'), + 'actionlabel' => emt('Toggle Auto-Apply'), + 'width' => 392, + 'height' => 200, + ) + . ')'; + } else { # end if $opt('Apply payment') + $apply .= ' (no auto-apply)' if $cust_pay->no_auto_apply; + } +} # end if $unapplied > 0 + my $view = ' ('. include('/elements/popup_link.html', - 'label' => 'view receipt', + 'label' => emt('view receipt'), 'action' => "${p}view/cust_pay.html?link=popup;paynum=". $cust_pay->paynum, - 'actionlabel' => 'Payment Receipt', + 'actionlabel' => emt('Payment Receipt'), + ). + ')'; + +my $email = $opt{'has_email_address'} ? + q! (paynum. + q!','Email Payment Receipt')" TITLE="Send email receipt">email receipt)! + : ''; + +my $change_pkg = ''; +if ( $apply && $opt{'pkg-balances'} && $cust_pay->pkgnum ) { + $change_pkg = + ' ('. include('/elements/popup_link.html', + 'label' => emt('change package'), + 'action' => "${p}edit/cust_pay-pkgnum.html?paynum=". + $cust_pay->paynum, + 'actionlabel' => emt('Change payment package'), + 'width' => 763, ). ')'; +} my $refund = ''; my $refund_days = $opt{'card_refund-days'} || 120; +my @refund_right = grep { $opt{$_} } $FS::CurrentUser::CurrentUser->refund_rights($cust_pay->payby); if ( $cust_pay->closed !~ /^Y/i - && $cust_pay->payby =~ /^(CARD|CHEK)$/ + && $cust_pay->payby =~ /^(CARD|CHEK|BILL)$/ && time-$cust_pay->_date < $refund_days*86400 && $cust_pay->unrefunded > 0 - && $curuser->access_right('Refund payment') + && scalar(@refund_right) ) { + my $refundtitle = ($cust_pay->payby =~ /^(CARD|CHEK)$/) + ? emt('Send a refund for this payment to the payment gateway') + : emt('Record a refund for this payment'); + $refund = qq! (refund)!; + qq! TITLE="! . $refundtitle + . '">' . emt('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 - && $opt{'deletepayments'} - && $curuser->access_right('Delete payment') - ) -{ - $delete = qq! (delete)!; -} +my $voidmsg = $cust_pay->payby =~ /^(CARD|CHEK)$/ + ? ' (' . emt('do not send anything to the payment gateway').')' + : ''; +$void = ' ('. + include( '/elements/popup_link.html', + 'label' => emt('void'), + 'action' => "${p}misc/void-cust_pay.html?".$cust_pay->paynum, + 'actionlabel' => emt('Void payment'), + 'title' => emt('Void this payment from the database'). + $voidmsg, + ). + ')' + if $cust_pay->closed !~ /^Y/i + && ( ( $cust_pay->payby eq 'CARD' && $opt{'Credit card void'} ) + || ( $cust_pay->payby eq 'CHEK' && $opt{'Echeck void'} ) + || ( $cust_pay->payby !~ /^(CARD|CHEK)$/ && $opt{'Void payments'} ) + ); my $unapply = ''; -if ( $cust_pay->closed !~ /^Y/i - && scalar(@cust_bill_pay) - && $curuser->access_right('Unapply payment') - ) -{ - $unapply = qq! (unapply)!; +if ($opt{'Unapply payment'} && !$cust_pay->closed) { + $unapply = areyousure_link("${p}misc/unapply-cust_pay.cgi?".$cust_pay->paynum, + emt('Are you sure you want to unapply this payment from invoices?'), + emt('Keep this payment, but dissociate it from the invoices it is currently applied against'), + emt('unapply') + ) + if @cust_bill_pay; + $unapply .= areyousure_link("${p}misc/unapply-cust_pay_refund.cgi?".$cust_pay->paynum, + emt('Are you sure you want to unapply this payment from refunds?'), + emt('Keep this payment, but dissociate it from the refunds it is currently applied to'), + emt('unapply refunds') + ) + if $cust_pay->refund_to_unapply; } -my $otaker = $cust_pay->otaker; -$otaker = 'auto billing' if $otaker eq 'fs_daily'; -$otaker = 'customer self-service' if $otaker eq 'fs_selfservice'; -