From 0ce1ba66efbd074aca5182bb3e42bd99ff55472a Mon Sep 17 00:00:00 2001 From: ivan Date: Sun, 5 Jul 2009 21:35:52 +0000 Subject: [PATCH] CDR search by dcontext, charged_party, toggle of display fields, RT#4081 --- FS/FS/Schema.pm | 7 +++- FS/FS/cdr.pm | 48 +++++++++++++++++++++++++++ httemplate/elements/checkboxes.html | 10 ++++-- httemplate/search/cdr.html | 23 +++++++------ httemplate/search/report_cdr.html | 65 +++++++++++++++++++++++++++++++++++++ 5 files changed, 137 insertions(+), 16 deletions(-) diff --git a/FS/FS/Schema.pm b/FS/FS/Schema.pm index 52e119083..67ef612f3 100644 --- a/FS/FS/Schema.pm +++ b/FS/FS/Schema.pm @@ -2142,7 +2142,12 @@ sub tables_hashref { ], 'primary_key' => 'acctid', 'unique' => [], - 'index' => [ [ 'calldate' ], [ 'src' ], [ 'dst' ], [ 'charged_party' ], [ 'accountcode' ], [ 'carrierid' ], [ 'freesidestatus' ], [ 'freesiderewritestatus' ], [ 'cdrbatch' ], ], + 'index' => [ [ 'calldate' ], + [ 'src' ], [ 'dst' ], [ 'dcontext' ], [ 'charged_party' ], + [ 'accountcode' ], [ 'carrierid' ], + [ 'freesidestatus' ], [ 'freesiderewritestatus' ], + [ 'cdrbatch' ], + ], }, 'cdr_termination' => { diff --git a/FS/FS/cdr.pm b/FS/FS/cdr.pm index 7b1ee7a7e..96132ec90 100644 --- a/FS/FS/cdr.pm +++ b/FS/FS/cdr.pm @@ -153,6 +153,54 @@ points to. You can ask the object for a copy with the I method. sub table { 'cdr'; } +sub table_info { + { + 'fields' => { +#XXX fill in some (more) nice names + #'acctid' => '', + 'calldate' => 'Call date', + 'clid' => 'Caller ID', + 'src' => 'Source', + 'dst' => 'Destination', + 'dcontext' => 'Dest. context', + 'channel' => 'Channel', + 'dstchannel' => 'Destination channel', + #'lastapp' => '', + #'lastdata' => '', + 'startdate' => 'Start date', + 'answerdate' => 'Answer date', + 'enddate' => 'End date', + 'duration' => 'Duration', + 'billsec' => 'Billable seconds', + 'disposition' => 'Disposition', + 'amaflags' => 'AMA flags', + 'accountcode' => 'Account code', + #'uniqueid' => '', + 'userfield' => 'User field', + #'cdrtypenum' => '', + 'charged_party' => 'Charged party', + #'upstream_currency' => '', + 'upstream_price' => 'Upstream price', + #'upstream_rateplanid' => '', + #'ratedetailnum' => '', + 'rated_price' => 'Rated price', + #'distance' => '', + #'islocal' => '', + #'calltypenum' => '', + #'description' => '', + #'quantity' => '', + 'carrierid' => 'Carrier ID', + #'upstream_rateid' => '', + 'svcnum' => 'Freeside service', + 'freesidestatus' => 'Freeside status', + 'freesiderewritestatus' => 'Freeside rewrite status', + 'cdrbatch' => 'Batch', + }, + + }; + +} + =item insert Adds this record to the database. If there is an error, returns the error, diff --git a/httemplate/elements/checkboxes.html b/httemplate/elements/checkboxes.html index 126224538..b120adab7 100644 --- a/httemplate/elements/checkboxes.html +++ b/httemplate/elements/checkboxes.html @@ -10,8 +10,9 @@ Example: 'names_list' => [ 'value', 'other value', - [ 'complex value' => { 'desc' => "Add'l description", - 'note' => ' *', + [ 'complex value' => { 'label' => 'Display value', + 'desc' => "Add'l description", + 'note' => ' *', } ], ], @@ -40,7 +41,10 @@ Example: % foreach my $item ( @{ $opt{'names_list'} } ) { % % my $name = ref($item) ? $item->[0] : $item; -% ( my $display = $name ) =~ s/ / /g; +% my $display = ( ref($item) && $item->[1]{label} ) +% ? $item->[1]{label} +% : $name; +% $display =~ s/ / /g; % $display .= $item->[1]{note} if ref($item) && $item->[1]{note}; % my $desc = ref($item) && $item->[1]{desc} ? $item->[1]{desc} : ''; % diff --git a/httemplate/search/cdr.html b/httemplate/search/cdr.html index 26eac75b3..126c4fd43 100644 --- a/httemplate/search/cdr.html +++ b/httemplate/search/cdr.html @@ -158,6 +158,12 @@ if ( $cgi->param('dst') =~ /^\s*([\d\-\+ ]+)\s*$/ ) { push @search, "dst = '$dst'"; } +if ( $cgi->param('dcontext') =~ /^\s*(.+)\s*$/ ) { + my $dcontext = $1; + $hashref->{'dcontext'} = $dcontext; + push @search, "dcontext = '$dcontext'"; +} + if ( $cgi->param('charged_party') =~ /^\s*([\d\-\+\ ]+)\s*$/ ) { ( my $charged_party = $1 ) =~ s/\D//g; #$hashref->{'charged_party'} = $charged_party; @@ -203,24 +209,17 @@ $qsearch = ( scalar(keys %$hashref) ? ' AND ' : ' WHERE ' ) . $qsearch # display fields ### -#XXX fill in some (more) nice names -my %header = ( - 'calldate' => 'Call Date', - 'clid' => 'Caller ID', - 'charged_party' => 'Charged party', - 'src' => 'Source', - 'dst' => 'Destination', - 'dcontext' => 'Destination Context', - 'channel' => 'Channel', - 'dstchannel' => 'Destination Channel', - 'freesidestatus' => 'Freeside status', -); +my %header = %{ FS::cdr->table_info->{'fields'} }; my @first = qw( acctid calldate clid charged_party src dst dcontext ); my %first = map { $_=>1 } @first; my @fields = ( @first, grep !$first{$_}, fields('cdr') ); +if ( $cgi->param('show') ) { + @fields = grep $cgi->param("show_$_"), @fields; +} + my @header = map { if ( exists($header{$_}) ) { $header{$_}; diff --git a/httemplate/search/report_cdr.html b/httemplate/search/report_cdr.html index 6a0b89bf8..c5f728c87 100644 --- a/httemplate/search/report_cdr.html +++ b/httemplate/search/report_cdr.html @@ -5,6 +5,12 @@ + + + + + + + + + + + + + + + <% include( '/elements/tr-input-lessthan_greaterthan.html', 'label' => 'Duration (sec)', 'field' => 'duration', @@ -62,6 +83,28 @@ <% include( '/elements/tr-select-cdrbatch.html' ) %> + + + + + + + + + + + + + +
+ Search options +
Status:
Destination Context: + +
Charged Party #: + +
 
Display options
+ <% include('/elements/checkboxes.html', + 'names_list' => $names_list, + 'element_name_prefix' => 'show_', + 'checked_callback' => sub { $show_default{$_[1]} }, + # my($cgi, $name) = @_; + ) + %> +

@@ -73,4 +116,26 @@ die "access denied" unless $FS::CurrentUser::CurrentUser->access_right('List rating data'); +my @fields = fields('cdr'); +my $labels = FS::cdr->table_info->{'fields'}; + +#XXX config +my @show_default = qw( + calldate clid src dst dcontext charged_party + startdate answerdate enddate duration billsec + disposition amaflags accountcode userfield + rated_price upstream_price carrierid + svcnum freesidestatus freesiderewritestatus cdrbatch +); +my %show_default = map { $_=>1 } @show_default; + +my $names_list = [ map { + [ $_ => { + 'label' => 'Show '. ( $labels->{$_} || $_ ) + } + ] + } + @fields + ]; + -- 2.11.0