don't ignore the cdrtypenum rule for 0, hopefully finally fix DA for QIS, RT#4502
[freeside.git] / FS / FS / part_pkg / voip_cdr.pm
index 150c064..cf9dd7b 100644 (file)
@@ -254,15 +254,15 @@ sub calc_recur {
       my @call_details = ();
       if ( $rating_method eq 'prefix' ) {
 
-        my $da_rewrite = 0;
-        if ( scalar(@dirass) && $cdr->dst && grep $cdr->dst eq $_, @dirass ) {
+        my $da_rewrote = 0;
+        if ( length($cdr->dst) && grep { $cdr->dst eq $_ } @dirass ){
           $cdr->dst('411');
-          $da_rewrite = 1;
+          $da_rewrote = 1;
         }
 
         my $reason = $self->check_chargable( $cdr,
-                                             '411_rewrite'  => $da_rewrite,
-                                             'option_cache' => %opt_cache,
+                                             'da_rewrote'   => $da_rewrote,
+                                             'option_cache' => \%opt_cache,
                                            );
 
         if ( $reason ) {
@@ -335,11 +335,11 @@ sub calc_recur {
 
           if ( $rate_detail ) {
 
+            $rate_region = $rate_detail->dest_region;
+            $regionnum = $rate_region->regionnum;
             warn "  found rate for regionnum $regionnum ".
                  "and rate detail $rate_detail\n"
               if $DEBUG;
-            $rate_region = $rate_detail->dest_region;
-            $regionnum = $rate_region->regionnum;
 
           } elsif ( $ignore_unrateable ) {
 
@@ -562,13 +562,13 @@ sub check_chargable {
     if $opt{'use_disposition_taqua'} && $cdr->disposition != 100;
 
   return "carrierid != $opt{'use_carrierid'}"
-    if $opt{'use_carrierid'}
-    && $cdr->carrierid != $opt{'use_carrierid'}
-    && ! $flags{'411_rewrite'};
+    if length($opt{'use_carrierid'})
+    && $cdr->carrierid ne $opt{'use_carrierid'} #ne otherwise 0 matches ''
+    && ! $flags{'da_rewrote'};
 
   return "cdrtypenum != $opt{'use_cdrtypenum'}"
-    if $opt{'use_cdrtypenum'}
-    && $cdr->cdrtypenum != $opt{'use_cdrtypenum'};
+    if length($opt{'use_cdrtypenum'})
+    && $cdr->cdrtypenum ne $opt{'use_cdrtypenum'}; #ne otherwise 0 matches ''
 
   #all right then, rate it
   '';