option to keep track of unrateable CDRs, #15502
authormark <mark>
Sat, 10 Dec 2011 01:03:14 +0000 (01:03 +0000)
committermark <mark>
Sat, 10 Dec 2011 01:03:14 +0000 (01:03 +0000)
FS/FS/part_pkg/voip_cdr.pm
httemplate/elements/menu.html
httemplate/search/cdr.html
httemplate/search/report_cdr.html
httemplate/view/svc_phone.cgi

index 81de0bd..35b0cac 100644 (file)
@@ -43,6 +43,13 @@ tie my %temporalities, 'Tie::IxHash',
 
 tie my %granularity, 'Tie::IxHash', FS::rate_detail::granularities();
 
+# previously "1" was "ignore 
+tie my %unrateable_opts, 'Tie::IxHash',
+  ''  => 'Exit with a fatal error',
+  1   => 'Flag for later review',
+  2   => 'Ignore and continue',
+;
+
 %info = (
   'name' => 'VoIP rating by plan of CDR records in an internal (or external) SQL table',
   'shortname' => 'VoIP/telco CDR rating (standard)',
@@ -105,8 +112,9 @@ tie my %granularity, 'Tie::IxHash', FS::rate_detail::granularities();
                            'select_options' => \%granularity,
                          },
 
-    'ignore_unrateable' => { 'name' => 'Ignore calls without a rate in the rate tables.  By default, the system will throw a fatal error upon encountering unrateable calls.',
-                             'type' => 'checkbox',
+    'ignore_unrateable' => { 'name' => 'Handling of calls without a rate in the rate table',
+                             'type' => 'select',
+                             'select_options' => \%unrateable_opts,
                            },
 
     'default_prefix' => { 'name'    => 'Default prefix optionally prepended to customer DID numbers when searching for CDR records',
@@ -637,8 +645,20 @@ sub calc_usage {
       #if ( ! $rate_detail && ! scalar(@call_details) ) {}
       if ( ! $rate_detail && $charge eq '' ) {
 
-        warn "no rate_detail found for CDR.acctid: ". $cdr->acctid.
-             "; skipping\n"
+        if ( $ignore_unrateable == 2 ) {
+          # throw a warning--not recommended
+          warn "no rate_detail found for CDR.acctid: ". $cdr->acctid.
+               "; skipping\n"
+        }
+        else {
+          # mark the CDR as unrateable
+          my $error = $cdr->set_status_and_rated_price(
+            'failed',
+            '',
+            $cust_svc->svcnum
+          );
+          die $error if $error;
+        }#if $ignore_unrateable
 
       } else { # there *is* a rate_detail (or call_details), proceed...
         # About this section:
index df45e05..8e69373 100644 (file)
@@ -252,6 +252,7 @@ tie my %report_inventory, 'Tie::IxHash',
 tie my %report_rating, 'Tie::IxHash',
   'RADIUS sessions' => [ $fsurl.'search/sqlradius.html', '' ],
   'Call Detail Records (CDRs)' => [ $fsurl.'search/report_cdr.html', '' ],
+  'Unrateable CDRs' => [ $fsurl.'search/cdr.html?freesidestatus=failed' ],
   'Time worked' => [ $fsurl.'search/report_rt_transaction.html', '' ],
   'Time worked summary' => [ $fsurl.'search/report_rt_ticket.html', '' ],
 ;
index 1e3c57c..5e917db 100644 (file)
@@ -80,15 +80,21 @@ my @qsearch = @search;
 # freesidestatus
 ###
 
-if ( $cgi->param('freesidestatus') eq 'NULL' ) {
+my $status = $cgi->param('freesidestatus');
+if ( $status eq 'NULL' ) {
 
   $title = "Unprocessed $title";
   $hashref->{'freesidestatus'} = ''; # Record.pm will take care of it
   push @search, "( freesidestatus IS NULL OR freesidestatus = '' )";
 
-} elsif ( $cgi->param('freesidestatus') =~ /^([\w ]+)$/ ) {
-
-  $title = "Processed $title";
+} elsif ( $status =~ /^([\w ]+)$/ ) {
+  
+  if ( $status eq 'done' ) {
+    $title = "Processed $title";
+  }
+  elsif ( $status eq 'failed' ) {
+    $title = "Skipped $title";
+  }
   $hashref->{'freesidestatus'} = $1;
   push @search, "freesidestatus = '$1'";
 
index b9f8837..f305ed9 100644 (file)
     <TD ALIGN="right">Status: </TD>
     <TD>
       <SELECT NAME="freesidestatus">
-        <OPTION VALUE="">(all)
-        <OPTION VALUE="NULL">unprocessed
-        <OPTION VALUE="done">processed
+        <OPTION VALUE="">(all)</OPTION>
+        <OPTION VALUE="NULL">unprocessed</OPTION>
+        <OPTION VALUE="done">processed</OPTION>
+        <OPTION VALUE="failed">skipped</OPTION>
       </SELECT>
     </TD>
   </TR>
index ffb6fcc..40c8d85 100644 (file)
@@ -127,6 +127,7 @@ my $html_foot = sub {
   tie my %what, 'Tie::IxHash',
     'pending' => 'NULL',
     'billed'  => 'done',
+    'skipped' => 'failed',
   ;
 
   my $number = $svc_phone->phonenum;