diff options
| -rw-r--r-- | FS/FS/Conf.pm | 7 | ||||
| -rw-r--r-- | FS/FS/cdr.pm | 26 | 
2 files changed, 29 insertions, 4 deletions
| diff --git a/FS/FS/Conf.pm b/FS/FS/Conf.pm index bcca28ca4..7f3231367 100644 --- a/FS/FS/Conf.pm +++ b/FS/FS/Conf.pm @@ -5512,6 +5512,13 @@ and customer address. Include units.',    },    { +    'key'         => 'cdr-max_duration', +    'section'     => 'telephony', +    'description' => 'If set, defines a global maximum billsec/duration for (prefix-based) call rating, in seconds.  Used with questionable/dirty CDR data that may contain bad records with long billsecs/durations.', +    'type'        => 'text', +  }, + +  {      'key'         => 'disable-cust-pkg_class',      'section'     => 'UI',      'description' => 'Disable the two-step dropdown for selecting package class and package, and return to the classic single dropdown.', diff --git a/FS/FS/cdr.pm b/FS/FS/cdr.pm index 7f87462a0..2c8350834 100644 --- a/FS/FS/cdr.pm +++ b/FS/FS/cdr.pm @@ -3,7 +3,7 @@ package FS::cdr;  use strict;  use vars qw( @ISA @EXPORT_OK $DEBUG $me               $conf $cdr_prerate %cdr_prerate_cdrtypenums -             $use_lrn $support_key +             $use_lrn $support_key $max_duration             );  use Exporter;  use List::Util qw(first min); @@ -50,6 +50,8 @@ FS::UID->install_callback( sub {    $support_key = $conf->config('support-key');    $use_lrn = $conf->exists('cdr-lrn_lookup'); +  $max_duration = $conf->config('cdr-max_duration') || 0; +  });  =head1 NAME @@ -649,6 +651,10 @@ sub rate_prefix {    my $part_pkg = $opt{'part_pkg'} or return "No part_pkg specified";    my $cust_pkg = $opt{'cust_pkg'}; +  ### +  # (Directory assistance) rewriting +  ### +    my $da_rewrote = 0;    # this will result in those CDRs being marked as done... is that     # what we want? @@ -664,6 +670,10 @@ sub rate_prefix {      $da_rewrote = 1;    } +  ### +  # Checks to see if the CDR is chargeable +  ### +    my $reason = $part_pkg->check_chargable( $self,                                             'da_rewrote'   => $da_rewrote,                                           ); @@ -700,6 +710,17 @@ sub rate_prefix {      }    } +  my $rated_seconds = $part_pkg->option_cacheable('use_duration') +                        ? $self->duration +                        : $self->billsec; +  if ( $max_duration > 0 && $rated_seconds > $max_duration ) { +    return $self->set_status_and_rated_price( +      'failed', +      '', +      $opt{'svcnum'}, +    ); +  } +    ###    # look up rate details based on called station id    # (or calling station id for toll free calls) @@ -872,9 +893,6 @@ sub rate_prefix {    # We don't round _anything_ (except granularizing)     # until the final $charge = sprintf("%.2f"...). -  my $rated_seconds = $part_pkg->option_cacheable('use_duration') -                        ? $self->duration -                        : $self->billsec;    my $seconds_left = $rated_seconds;    #no, do this later so it respects (group) included minutes | 
