From da5ff2bd04f45b280f9fed2c37848d560657cc7b Mon Sep 17 00:00:00 2001 From: ivan Date: Tue, 13 Jan 2009 01:34:16 +0000 Subject: [PATCH] refactor out the ignoring rules into check_chargable; ignore carrierid rule w/411 rewrite, RT#4502 --- FS/FS/part_pkg/voip_cdr.pm | 85 +++++++++++++++++++++++++--------------------- 1 file changed, 46 insertions(+), 39 deletions(-) diff --git a/FS/FS/part_pkg/voip_cdr.pm b/FS/FS/part_pkg/voip_cdr.pm index e306754af..3ba3dce22 100644 --- a/FS/FS/part_pkg/voip_cdr.pm +++ b/FS/FS/part_pkg/voip_cdr.pm @@ -117,7 +117,7 @@ tie my %temporalities, 'Tie::IxHash', 'type' => 'checkbox', }, - '411_rewrite' => { 'name' => 'Rewrite these (comma-separated) destination numbers to 411 for rating purposes: ', + '411_rewrite' => { 'name' => 'Rewrite these (comma-separated) destination numbers to 411 for rating purposes (also ignore any carrierid check): ', }, 'output_format' => { 'name' => 'CDR invoice display format', @@ -236,55 +236,33 @@ sub calc_recur { my @call_details = (); if ( $rating_method eq 'prefix' ) { - #should have some better way of checking these options than a long - #if-else tree... - my $notchg = "not charging for CDR"; - - if ( $self->option('use_amaflags') && $cdr->amaflags != 2 ) { - - warn "$notchg (amaflags != 2)\n" if $DEBUG; - $charge = 0; - - } elsif ( $self->option('use_disposition') - && $cdr->disposition ne 'ANSWERED' ) { - - warn "$notchg (disposition != ANSWERED)\n" if $DEBUG; - $charge = 0; - - } elsif ( $self->option('use_disposition_taqua') - && $cdr->disposition != 100 ) { + my $da_rewrite = 0; + if ( $self->option('411_rewrite') ) { + my $dirass = $self->option('411_rewrite'); + $dirass =~ s/\s//g; + my @dirass = split(',', $dirass); + if ( grep $cdr->dst eq $_, @dirass ) { + $cdr->dst('411'); + $da_rewrite = 1; + } + } - warn "$notchg (disposition != 100)\n" if $DEBUG; - $charge = 0; + my $reason = $self->check_chargable( $cdr, + '411_rewrite' => $da_rewrite, + ); - } elsif ( $self->option('use_carrierid') - && $cdr->carrierid != $self->option('use_carrierid') ) { + if ( $reason ) { - warn "$notchg (carrierid != ". $self->option('use_carrierid'). ")\n" - if $DEBUG; - $charge = 0; - - } elsif ( $self->option('use_cdrtypenum') - && $cdr->cdrtypenum != $self->option('use_cdrtypenum') ) { - - warn "$notchg (cdrtypenum != ". $self->option('use_cdrtypenum'). ")\n" - if $DEBUG; + warn "not charging for CDR ($reason)\n" if $DEBUG; $charge = 0; } else { - + ### # look up rate details based on called station id # (or calling station id for toll free calls) ### - if ( $self->option('411_rewrite') ) { - my $dirass = $self->option('411_rewrite'); - $dirass =~s/\s//g; - my @dirass = split(',', $dirass); - $cdr->dst('411') if grep $cdr->dst eq $_, @dirass; - } - my( $to_or_from, $number ); if ( $cdr->dst =~ /^(\+?1)?8([02-8])\1/ && ! $self->option('disable_tollfree') @@ -545,6 +523,35 @@ sub calc_recur { $charges; } +#returns a reason why not to rate this CDR, or false if the CDR is chargeable +sub check_chargable { + my( $self, $cdr, %opt ) = @_; + + #should have some better way of checking these options from a hash + #or something + + return 'amaflags != 2' + if $self->option('use_amaflags') && $cdr->amaflags != 2; + + return 'disposition != ANSWERED' + if $self->option('use_disposition') && $cdr->disposition ne 'ANSWERED'; + + return "disposition != 100" + if $self->option('use_disposition_taqua') && $cdr->disposition != 100; + + return 'carrierid != '. $self->option('use_carrierid') + if $self->option('use_carrierid') + && $cdr->carrierid != $self->option('use_carrierid') + && ! $opt{'411_rewrite'}; + + return 'cdrtypenum != '. $self->option('use_cdrtypenum') + if $self->option('use_cdrtypenum') + && $cdr->cdrtypenum != $self->option('use_cdrtypenum'); + + #all right then, rate it + ''; +} + sub is_free { 0; } -- 2.11.0