From e832eb872042cb27881402c5c92a17ce4c0506e9 Mon Sep 17 00:00:00 2001 From: ivan Date: Thu, 19 Feb 2009 07:57:52 +0000 Subject: [PATCH] redirect pending payment report back to customer when the pending payment is resolved, RT#4837, and fix otaker fallout from the pending stuff, RT#4866 --- httemplate/search/cust_pay_pending.html | 10 +++ httemplate/search/elements/cust_pay_or_refund.html | 72 +++++++++++----------- httemplate/search/elements/search.html | 21 ++++++- 3 files changed, 65 insertions(+), 38 deletions(-) diff --git a/httemplate/search/cust_pay_pending.html b/httemplate/search/cust_pay_pending.html index f0a3a0150..f46e08ab1 100755 --- a/httemplate/search/cust_pay_pending.html +++ b/httemplate/search/cust_pay_pending.html @@ -10,6 +10,7 @@ 'addl_fields' => [ sub { time2str('%r', shift->_date ) }, $status_sub, ], + 'redirect_empty' => $redirect_empty, ) %> <%init> @@ -44,4 +45,13 @@ my $status_sub = sub { $return. qq! ($link)!; }; +my $redirect_empty = sub { + my $cgi = shift; + if ( $cgi->param('custnum') =~ /^(\d+)$/ ) { + $p. "view/cust_main.cgi?$1"; + } else { + ''; + } +}; + diff --git a/httemplate/search/elements/cust_pay_or_refund.html b/httemplate/search/elements/cust_pay_or_refund.html index 9e2eceb3a..add8427ca 100755 --- a/httemplate/search/elements/cust_pay_or_refund.html +++ b/httemplate/search/elements/cust_pay_or_refund.html @@ -3,45 +3,47 @@ Examples: include( 'elements/cust_pay_or_refund.html', - 'thing' => 'pay', - 'amount_field' => 'paid', - 'name_singular' => 'payment', - 'name_verb' => 'paid', + 'thing' => 'pay', + 'amount_field' => 'paid', + 'name_singular' => 'payment', + 'name_verb' => 'paid', ) include( 'elements/cust_pay_or_refund.html', - 'thing' => 'refund', - 'amount_field' => 'refund', - 'name_singular' => 'refund', - 'name_verb' => 'refunded', + 'thing' => 'refund', + 'amount_field' => 'refund', + 'name_singular' => 'refund', + 'name_verb' => 'refunded', ) include( 'elements/cust_pay_or_refund.html', - 'thing' => 'pay_pending', - 'amount_field' => 'paid', - 'name_singular' => 'pending payment', - 'name_verb' => 'pending', - 'disable_link' => 1, - 'disable_by' => 1, - 'html_init' => '', - 'addl_header' => [], - 'addl_fields' => [], + 'thing' => 'pay_pending', + 'amount_field' => 'paid', + 'name_singular' => 'pending payment', + 'name_verb' => 'pending', + 'disable_link' => 1, + 'disable_by' => 1, + 'html_init' => '', + 'addl_header' => [], + 'addl_fields' => [], + 'redirect_empty' => $redirect_empty, ) <% include( 'search.html', - 'title' => $title, - 'name_singular' => $name_singular, - 'query' => $sql_query, - 'count_query' => $count_query, - 'count_addl' => [ '$%.2f total '.$opt{name_verb}, ], - 'header' => [ "\u$name_singular", - 'Amount', - 'Date', - @header, - FS::UI::Web::cust_header(), - ], - 'fields' => [ + 'title' => $title, + 'name_singular' => $name_singular, + 'query' => $sql_query, + 'count_query' => $count_query, + 'count_addl' => [ '$%.2f total '.$opt{name_verb}, ], + 'redirect_empty' => $opt{'redirect_empty'}, + 'header' => [ "\u$name_singular", + 'Amount', + 'Date', + @header, + FS::UI::Web::cust_header(), + ], + 'fields' => [ 'payby_payinfo_pretty', sub { sprintf('$%.2f', shift->$amount_field() ) }, sub { time2str('%b %d %Y', shift->_date ) }, @@ -96,13 +98,11 @@ my @header = (); my @fields = (); unless ( $opt{'disable_by'} ) { push @header, 'By'; - push @fields, sub { - sub { my $o = shift->otaker; - $o = 'auto billing' if $o eq 'fs_daily'; - $o = 'customer self-service' if $o eq 'fs_selfservice'; - $o; - }, - }; + push @fields, sub { my $o = shift->otaker; + $o = 'auto billing' if $o eq 'fs_daily'; + $o = 'customer self-service' if $o eq 'fs_selfservice'; + $o; + }; } push @header, @{ $opt{'addl_header'} } diff --git a/httemplate/search/elements/search.html b/httemplate/search/elements/search.html index 23fe8f470..8835f8cae 100644 --- a/httemplate/search/elements/search.html +++ b/httemplate/search/elements/search.html @@ -60,7 +60,15 @@ Example: #redirect if there's only one item... # listref of URL base and column name (or method) # or a coderef that returns the same - 'redirect' => + 'redirect' => sub { my( $record, $cgi ) = @_; + [ popurl(2).'view/item.html', 'primary_key' ]; + }, + + #redirect if there's no items + # scalar URL or a coderef that returns a URL + 'redirect_empty' => sub { my( $cgi ) = @_; + popurl(2).'view/item.html'; + }, ### # optional @@ -277,9 +285,18 @@ Example: % && $type ne 'html-print' % ) { % my $redirect = $opt{'redirect'}; -% $redirect = &{$redirect}($rows->[0]) if ref($redirect) eq 'CODE'; +% $redirect = &{$redirect}($rows->[0], $cgi) if ref($redirect) eq 'CODE'; % my( $url, $method ) = @$redirect; % redirect( $url. $rows->[0]->$method() ); +% } elsif ( exists($opt{'redirect_empty'}) && ! scalar(@$rows) && $total == 0 +% && $type ne 'html-print' +% && $opt{'redirect_empty'} +% && ( ref($opt{'redirect_empty'}) ne 'CODE' +% || &{$opt{'redirect_empty'}}($cgi) ) +% ) { +% my $redirect = $opt{'redirect_empty'}; +% $redirect = &{$redirect}($cgi) if ref($redirect) eq 'CODE'; +% redirect( $redirect ); % } else { % if ( $opt{'name_singular'} ) { % $opt{'name'} = PL($opt{'name_singular'}); -- 2.11.0