lastapp searching, RT#12181
[freeside.git] / httemplate / search / cdr.html
index a557596..7e62447 100644 (file)
@@ -8,6 +8,7 @@
                            'order_by'  => 'ORDER BY calldate',
                           },
                'count_query' => $count_query,
+               'count_addl' => [ $totalminutes_sub ],
                'header' => [
                              '', # checkbox column
                              @header,
@@ -45,7 +46,6 @@
                                   '';
                                 }
                               },
-
              )
 %>
 <%init>
@@ -55,6 +55,13 @@ die "access denied"
 
 my $edit_data = $FS::CurrentUser::CurrentUser->access_right('Edit rating data');
 
+my $totalminutes_sub = sub {
+    my $billsec = shift;
+    sprintf("%.2f",$billsec/60) . ' total minutes';
+};
+
+my $conf = new FS::Conf;
+
 my $areboxes = 0;
 
 my $title = 'Call Detail Records';
@@ -145,36 +152,71 @@ foreach my $param ( grep /^termpart\d+status$/, $cgi->param ) {
 }
 
 ###
-# src/dest/charged_party
+# src/dest/charged_party/svcnum
 ###
 
-if ( $cgi->param('src') =~ /^\s*([\d\-\+\ ]+)\s*$/ ) {
-  ( my $src = $1 ) =~ s/\D//g;
+my $phonenum = qr/^\s*([\d\-\+\ ]+)\s*$/;
+my $x = qr/\D/;
+if ( $conf->exists('svc_phone-allow_alpha_phonenum') ) {
+  $phonenum = qr/^\s*([\d\-\+\ A-Za-z]+)\s*$/;
+  $x = qr/[^\dA-Za-z]/;
+}
+
+if ( $cgi->param('src') =~ $phonenum ) {
+  ( my $src = $1 ) =~ s/$x//g;
   $hashref->{'src'} = $src;
   push @search, "src = '$src'";
 }
 
-if ( $cgi->param('dst') =~ /^\s*([\d\-\+ ]+)\s*$/ ) {
-  ( my $dst = $1 ) =~ s/\D//g;
-  $hashref->{'dst'} = $dst;
-  push @search, "dst = '$dst'";
+if ( $cgi->param('dst') ) {
+
+  my @d = map { $_, "1$_" } split(/\s*,\s*/, $cgi->param('dst') );
+  
+  my $search = 'dst IN ('. join(',', map dbh->quote($_), @d). ')';
+
+  push @search,  $search;
+  push @qsearch, $search;
+
 }
 
 if ( $cgi->param('dcontext') =~ /^\s*(.+)\s*$/ ) {
   my $dcontext = $1;
   $hashref->{'dcontext'} = $dcontext;
-  push @search, "dcontext = '$dcontext'";
+  push @search, 'dcontext = '. dbh->quote($dcontext);
+}
+
+if ( $cgi->param('charged_party') ) {
+
+  my @cp = map { $_, "1$_" }
+             split(/\s*,\s*/, $cgi->param('charged_party') );
+  
+  my $search = 'charged_party IN ('. join(',', map dbh->quote($_), @cp). ')';
+
+  push @search,  $search;
+  push @qsearch, $search;
 }
 
-if ( $cgi->param('charged_party') =~ /^\s*([\d\-\+\ ]+)\s*$/ ) {
-  ( my $charged_party = $1 ) =~ s/\D//g;
-  #$hashref->{'charged_party'} = $charged_party;
-  #push @search, "charged_party = '$charged_party'";
-  #XXX countrycode
+if ( $cgi->param('charged_party_or_src') ) {
+
+  my @cp = map { $_, "1$_" }
+             split(/\s*,\s*/, $cgi->param('charged_party_or_src') );
+  my $in = join(',', map dbh->quote($_), @cp);
 
-  my $search = " (    charged_party = '$charged_party'
-                   OR charged_party = '1$charged_party' ) ";
+  my $search = "( charged_party IN ($in) OR src IN ($in) )";
+
+  push @search,  $search;
+  push @qsearch, $search;
+}
+
+if ( $cgi->param('lastapp') =~ /^\s*(.+)\s*$/ ) {
+  my $lastapp = $1;
+  $hashref->{'lastapp'} = $lastapp;
+  push @search, 'lastapp = '. dbh->quote($lastapp);
+}
 
+if ( $cgi->param('svcnum') =~ /^([\d, ]+)$/ ) {
+  my $svcnum = $1;
+  my $search = "svcnum IN ($svcnum)";
   push @search,  $search;
   push @qsearch, $search;
 }
@@ -231,7 +273,7 @@ if ( $cgi->param('acctid') =~ /\d/ ) {
 my $search = join(' AND ', @search);
 $search = "WHERE $search" if $search;
 
-my $count_query = "SELECT COUNT(*) FROM cdr $search";
+my $count_query = "SELECT COUNT(*), sum(billsec) FROM cdr $search";
 
 my $qsearch = join(' AND ', @qsearch);
 $qsearch = ( scalar(keys %$hashref) ? ' AND ' : ' WHERE ' ) . $qsearch