diff options
author | ivan <ivan> | 2009-10-30 23:29:18 +0000 |
---|---|---|
committer | ivan <ivan> | 2009-10-30 23:29:18 +0000 |
commit | 2c7d4f461a5d42178e88d04c34a3f8ca256ee285 (patch) | |
tree | 9e25ac1acfb715f2deeda3f76641a96d8461d65f | |
parent | 5b76f0c1b944534613058a4b9252d5952406c557 (diff) |
more reporting options for failed billing events, RT#6447
-rw-r--r-- | FS/FS/cust_event.pm | 40 | ||||
-rw-r--r-- | FS/FS/cust_main_Mixin.pm | 57 | ||||
-rw-r--r-- | httemplate/elements/select-part_event.html | 6 | ||||
-rw-r--r-- | httemplate/elements/select-payby.html | 4 | ||||
-rw-r--r-- | httemplate/elements/tr-select-part_event.html | 20 | ||||
-rw-r--r-- | httemplate/search/cust_event.html | 15 | ||||
-rw-r--r-- | httemplate/search/report_cust_event.html | 66 |
7 files changed, 147 insertions, 61 deletions
diff --git a/FS/FS/cust_event.pm b/FS/FS/cust_event.pm index 10fb0acf7..bf3a5b749 100644 --- a/FS/FS/cust_event.pm +++ b/FS/FS/cust_event.pm @@ -322,9 +322,23 @@ specified in HASHREF. Valid parameters are =over 4 -=item +=item agentnum -=item +=item custnum + +=item invnum + +=item pkgnum + +=item failed + +=item beginning + +=item ending + +=item payby + +=item =back @@ -340,12 +354,15 @@ sub search_sql { join("\n", map { " $_: ". $param->{$_} } keys %$param ). "\n"; } - my @search = (); + my @search = $class->cust_search_sql($param); - if ( $param->{'agentnum'} && $param->{'agentnum'} =~ /^(\d+)$/ ) { - push @search, "cust_main.agentnum = $1"; - #my $agent = qsearchs('agent', { 'agentnum' => $1 } ); - #die "unknown agentnum $1" unless $agent; + #eventpart + my @eventpart = ref($param->{'eventpart'}) + ? @{ $param->{'eventpart'} } + : split(',', $param->{'eventpart'}); + @eventpart = grep /^(\d+)$/, @eventpart; + if ( @eventpart ) { + push @search, 'eventpart IN ('. join(',', @eventpart). ')'; } if ( $param->{'beginning'} =~ /^(\d+)$/ ) { @@ -361,10 +378,6 @@ sub search_sql { "statustext != 'N/A'"; } - #if ( $param->{'part_event.payby'} =~ /^(\w+)$/ ) { - # push @search, "part_event.payby = '$1'"; - #} - if ( $param->{'custnum'} =~ /^(\d+)$/ ) { push @search, "cust_main.custnum = '$1'"; } @@ -379,13 +392,8 @@ sub search_sql { "tablenum = '$1'"; } - #here is the agent virtualization - push @search, - $FS::CurrentUser::CurrentUser->agentnums_sql( 'table' => 'cust_main' ); - my $where = 'WHERE '. join(' AND ', @search ); - join(' AND ', @search ); } diff --git a/FS/FS/cust_main_Mixin.pm b/FS/FS/cust_main_Mixin.pm index 86751b1cb..5a29a4c22 100644 --- a/FS/FS/cust_main_Mixin.pm +++ b/FS/FS/cust_main_Mixin.pm @@ -1,11 +1,12 @@ package FS::cust_main_Mixin; use strict; -use vars qw( $DEBUG ); +use vars qw( $DEBUG $me ); use FS::UID qw(dbh); use FS::cust_main; $DEBUG = 0; +$me = '[FS::cust_main_Mixin]'; =head1 NAME @@ -273,6 +274,60 @@ foreach my $sub (qw( prospect active inactive suspended cancelled )) { die $@ if $@; } +=item cust_search_sql + +Returns a list of SQL WHERE fragments to search for parameters specified +in HASHREF. Valid parameters are: + +=over 4 + +=item agentnum + +=item status + +=item payby + +=back + +=cut + +sub cust_search_sql { + my($class, $param) = @_; + + if ( $DEBUG ) { + warn "$me cust_search_sql called with params: \n". + join("\n", map { " $_: ". $param->{$_} } keys %$param ). "\n"; + } + + my @search = (); + + if ( $param->{'agentnum'} && $param->{'agentnum'} =~ /^(\d+)$/ ) { + push @search, "cust_main.agentnum = $1"; + } + + #status (prospect active inactive suspended cancelled) + if ( grep { $param->{'status'} eq $_ } FS::cust_main->statuses() ) { + my $method = $param->{'status'}. '_sql'; + push @search, $class->$method(); + } + + #payby + my @payby = ref($param->{'payby'}) + ? @{ $param->{'payby'} } + : split(',', $param->{'payby'}); + @payby = grep /^([A-Z]{4})$/, @payby; + if ( @payby ) { + push @search, 'cust_main.payby IN ('. join(',', map "'$_'", @payby). ')'; + } + + #here is the agent virtualization + push @search, + $FS::CurrentUser::CurrentUser->agentnums_sql( 'table' => 'cust_main' ); + + return @search; + +} + =back =head1 BUGS diff --git a/httemplate/elements/select-part_event.html b/httemplate/elements/select-part_event.html new file mode 100644 index 000000000..f510672ba --- /dev/null +++ b/httemplate/elements/select-part_event.html @@ -0,0 +1,6 @@ +<% include( '/elements/select-table.html', + 'table' => 'part_event', + 'name_col' => 'event', + @_, + ) +%> diff --git a/httemplate/elements/select-payby.html b/httemplate/elements/select-payby.html index 3f19cb952..e0fb4f07d 100644 --- a/httemplate/elements/select-payby.html +++ b/httemplate/elements/select-payby.html @@ -8,7 +8,9 @@ % } % foreach my $option ( keys %{ $opt{'paybys'} } ) { -% my $sel = ( ref($value) && $value->{$option} ) || $option eq $value; +% my $sel = $opt{'all_selected'} +% || ( ref($value) && $value->{$option} ) +% || $option eq $value; <OPTION VALUE="<% $option %>" <% $sel ? 'SELECTED' : '' %> diff --git a/httemplate/elements/tr-select-part_event.html b/httemplate/elements/tr-select-part_event.html new file mode 100644 index 000000000..e1d913f2a --- /dev/null +++ b/httemplate/elements/tr-select-part_event.html @@ -0,0 +1,20 @@ +% unless ( $opt{'js_only'} ) { + + <% include('tr-td-label.html', @_ ) %> + + <TD <% $style %>> +% } + + <% include( '/elements/select-part_event.html', %opt ) %> + +% unless ( $opt{'js_only'} ) { + </TD> + </TR> +% } +<%init> + +my( %opt ) = @_; + +my $style = $opt{'cell_style'} ? 'STYLE="'. $opt{'cell_style'}. '"' : ''; + +</%init> diff --git a/httemplate/search/cust_event.html b/httemplate/search/cust_event.html index f8cf6b2a6..b22644efe 100644 --- a/httemplate/search/cust_event.html +++ b/httemplate/search/cust_event.html @@ -157,12 +157,18 @@ my $title = $cgi->param('failed') ? 'Failed billing events' : 'Billing events'; my %search = (); -my @scalars = qw ( agentnum custnum invnum pkgnum failed ); -for my $param ( @scalars ) { +my @scalars = qw( agentnum status custnum invnum pkgnum failed ); +for my $param (@scalars) { $search{$param} = scalar( $cgi->param($param) ) if $cgi->param($param); } +#lists +my @lists = qw( payby eventpart ); +foreach my $param (@lists) { + $search{$param} = [ $cgi->param($param) ]; +} + my($beginning, $ending) = FS::UI::Web::parse_beginning_ending($cgi); $search{'beginning'} = $beginning; $search{'ending'} = $ending; @@ -208,6 +214,11 @@ my $html_init = join("\n", map { } @params #keys %search ), + ( map { my $value = encode_entities( join(',', @{ $search{$_} } ) ); + qq(<INPUT TYPE="hidden" NAME="$_" VALUE="$value">); + } + @lists + ), qq!</FORM>! } qw( print_ email_ fax_ ) ). diff --git a/httemplate/search/report_cust_event.html b/httemplate/search/report_cust_event.html index e63b6375d..f77a072dc 100644 --- a/httemplate/search/report_cust_event.html +++ b/httemplate/search/report_cust_event.html @@ -6,52 +6,36 @@ <FORM ACTION="cust_event.html" METHOD="GET"> <INPUT TYPE="hidden" NAME="failed" VALUE="<% $cgi->param('failed') ? 1 : 0 %>"> - <TABLE> + <TABLE BGCOLOR="#cccccc" CELLSPACING=0> + + <TR> + <TH BGCOLOR="#e8e8e8" COLSPAN=2 ALIGN="left"><FONT SIZE="+1">Search options</FONT></TH> + </TR> <% include( '/elements/tr-select-agent.html', 'disable_empty'=>0 ) %> - <!--<TR> - <TD ALIGN="right">Customer type</TD> - <TD><SELECT MULTIPLE NAME="perhaps_payby"> - <OPTION SELECTED VALUE="CARD">Credit card (automatic) - <OPTION SELECTED VALUE="CHEK">E-check (automatic) - <OPTION SELECTED VALUE="LECB">Phone bill billing - <OPTION SELECTED VALUE="BILL">Billing - <OPTION SELECTED VALUE="DCRD">Credit card (on-demand) - <OPTION SELECTED VALUE="DCHK">E-check (on-demand) - </TD> - </TR> - --> + <% include( '/elements/tr-select-cust_main-status.html', + 'label' => 'Status' + ) + %> + + <% include( '/elements/tr-select-payby.html', + 'label' => 'Customer payment type', + 'payby_type' => 'cust', + 'multiple' => 1, + 'all_selected' => 1, + ) + %> + + <% include( '/elements/tr-select-part_event.html', + 'label' => 'Events', + 'multiple' => 1, + 'all_selected' => 1, + ) + %> + <% include( '/elements/tr-input-beginning_ending.html' ) %> - <!-- - <TR> - <TD ALIGN="right">Events: </TD> - <TD> - <SELECT NAME="eventpart"> - <OPTION SELECTED VALUE=""><% $cgi->param('failed') ? '(all failed events)' : '(all events)' %> -% #foreach my $part_bill_event ( qsearch( 'part_bill_event', {} ) ) { -% #} - </SELECT> - </TD> - </TR> - --> -<!-- <TR> - <TD ALIGN="right">Events for payment type: </TD> - <TD> - <SELECT NAME="part_bill_event.payby"> - <OPTION SELECTED VALUE="">(all) - <OPTION VALUE="CARD">Credit card (automatic) - <OPTION VALUE="BILL">Billing - <OPTION VALUE="CHEK">Electronic check (automatic) - <OPTION VALUE="DCRD">Credit card (on-demand) - <OPTION VALUE="DCHK">Electronic check (on-demand) - <OPTION VALUE="LECB">Phone bill billing - <OPTION VALUE="COMP">Complimentary - </SELECT> - </TD> - </TR> ---> </TABLE> <BR><INPUT TYPE="submit" VALUE="Get Report"> </FORM> |