Filter invoice report by payby, RT#9263
[freeside.git] / httemplate / search / cdr.html
index ceee6f2..00aee9e 100644 (file)
@@ -70,10 +70,11 @@ my @search = ();
 ###
 
 my $str2time_sql = str2time_sql;
+my $closing      = str2time_sql_closing;
 
 my($beginning, $ending) = FS::UI::Web::parse_beginning_ending($cgi);
-push @search, "$str2time_sql calldate) >= $beginning ",
-              "$str2time_sql calldate) <= $ending";
+push @search, "$str2time_sql calldate $closing >= $beginning ",
+              "$str2time_sql calldate $closing <= $ending";
 
 ###
 # duration / billsec
@@ -125,7 +126,7 @@ foreach my $param ( grep /^termpart\d+status$/, $cgi->param ) {
     $search =
       "NOT EXISTS ( SELECT 1 FROM cdr_termination WHERE $where_term )";
 
-  } elsif ( $cgi->param('freesidestatus') =~ /^([\w ]+)$/ ) {
+  } elsif ( $status =~ /^([\w ]+)$/ ) {
 
     #false lazienss w/cdr_termination.pm (i should be a part_termination method)
     my $where_term =
@@ -171,25 +172,68 @@ if ( $cgi->param('charged_party') =~ /^\s*([\d\-\+\ ]+)\s*$/ ) {
   #push @search, "charged_party = '$charged_party'";
   #XXX countrycode
 
-  my $search = " (    charged_party = '$charged_party'
-                   OR charged_party = '1$charged_party' ) ";
+  my $search = " (    charged_party IN ('$charged_party', '1$charged_party') )";
 
   push @search,  $search;
   push @qsearch, $search;
 }
 
+if ( $cgi->param('charged_party_or_src') =~ /^\s*([\d\-\+\ ]+)\s*$/ ) {
+  ( my $charged_party = $1 ) =~ s/\D//g;
+  #$hashref->{'charged_party'} = $charged_party;
+  #push @search, "charged_party = '$charged_party'";
+  #XXX countrycode
+
+  my $search = " (    charged_party IN ('$charged_party', '1$charged_party')
+                   OR src           IN ('$charged_party', '1$charged_party') )";
+
+  push @search,  $search;
+  push @qsearch, $search;
+}
+
+
+###
+# cdrbatchnum (or legacy cdrbatch)
+###
+
+if ( $cgi->param('cdrbatch') ) {
+
+  my $cdr_batch =
+    qsearchs('cdr_batch', { 'cdrbatch' => scalar($cgi->param('cdrbatch')) } );
+  if ( $cdr_batch ) {
+    $hashref->{cdrbatchnum} = $cdr_batch->cdrbatchnum;
+    push @search, 'cdrbatchnum = '. $cdr_batch->cdrbatchnum;
+  } else {
+    die "unknown cdrbatch ". $cgi->param('cdrbatch');
+  }
+
+} elsif ( $cgi->param('cdrbatchnum') ne '__ALL__' ) {
+
+  if ( $cgi->param('cdrbatchnum') eq '' ) {
+    my $search = "( cdrbatchnum IS NULL )";
+    push @qsearch, $search;
+    push @search,  $search;
+  } elsif ( $cgi->param('cdrbatchnum') =~ /^(\d+)$/ ) {
+    $hashref->{cdrbatchnum} = $1;
+    push @search, "cdrbatchnum = $1";
+  }
+
+}
+
 ###
-# cdrbatch
+# acctid
 ###
 
-if ( $cgi->param('cdrbatch') ne '__ALL__' ) {
-  if ( $cgi->param('cdrbatch') eq '' ) {
-    my $search = "( cdrbatch IS NULL OR cdrbatch = '' )";
+if ( $cgi->param('acctid') =~ /\d/ ) {
+  my $acctid = $cgi->param('acctid');
+  $acctid =~ s/\r\n/\n/g; #browsers?
+  my @acctid = map  { /^\s*(\d+)\s*$/ or die "guru meditation #4"; $1; }
+               grep { /^\s*(\d+)\s*$/ }
+               split(/\n/, $acctid);
+  if ( @acctid ) {
+    my $search = 'acctid IN ( '. join(',', @acctid). ' )';
     push @qsearch, $search;
     push @search,  $search;
-  } else {
-    $hashref->{cdrbatch} = $cgi->param('cdrbatch');
-    push @search, 'cdrbatch = '. dbh->quote($cgi->param('cdrbatch'));
   }
 }