if ( $cgi->param('accountcode') =~ /\S/ ) {
my $accountcode = $cgi->param('accountcode');
my @accountcode = map {
- ( my $v = $_ ) =~ s/^\s+|\s+$//g;
- if ( $v =~ /'/ ) { $v =~ s/'/\\'/g; $v = "E'$v'" }
- elsif ( length $v ) { $v = "'$v'" }
- length $v ? $v : ()
- } grep /\S/, split /\R/, $accountcode;
+ ( my $v = $_ ) =~ s/^\s+|\s+$//g; # trim margin whitespace
+ length $v ? dbh->quote($v) : ()
+ } grep /\S/, split /\R/, $accountcode; # collect non-trivial lines
if (@accountcode) {
my $search = 'accountcode IN ( ' . join( ',', @accountcode ) . ' )';
push @qsearch, $search;
$qsearch = ( scalar(keys %$hashref) ? ' AND ' : ' WHERE ' ) . $qsearch
if $qsearch;
-my $query = { 'table' => 'cdr',
- 'hashref' => $hashref,
- 'extra_sql' => $qsearch,
- 'order_by' => 'ORDER BY calldate',
- };
+my $query = { 'table' => 'cdr',
+ 'hashref' => $hashref,
+ 'extra_sql' => $qsearch,
+ 'order_by' => 'ORDER BY calldate',
+ };
if ( $cgi->param('longest') =~ /^(\d+)$/ && $cgi->param('longest') > 0 ) {
$cgi->param('maxrecords',$1);
###
my %header = %{ FS::cdr->table_info->{'fields'} };
+$header{ratename} = 'Rate plan';
my @first = qw( acctid calldate clid charged_party src dst dcontext );
my %first = map { $_=>1 } @first;
-my @fields = ( @first, grep !$first{$_}, fields('cdr') );
+my @fields = ( @first,
+ grep !$first{$_}, ( fields('cdr'), 'ratename' )
+ );
if ( $cgi->param('show') ) {
@fields = grep $cgi->param("show_$_"), @fields;
}
+if ( grep { $_ eq 'ratename' } @fields ) {
+ $query->{addl_from} .= '
+ LEFT JOIN rate_detail ON (cdr.rated_ratedetailnum = rate_detail.ratedetailnum)
+ LEFT JOIN rate ON (rate_detail.ratenum = rate.ratenum)
+ ';
+}
+
my @header = map {
if ( exists($header{$_}) ) {
$header{$_};