third time's a charm - fix a small bug and make more analogous to HEAD - RT#8605
[freeside.git] / FS / FS / part_pkg / voip_cdr.pm
index de47b45..e2408a3 100644 (file)
@@ -538,19 +538,24 @@ sub calc_usage {
           my $granularity = $rate_detail->sec_granularity;
 
                       # length($cdr->billsec) ? $cdr->billsec : $cdr->duration;
-          $seconds = $use_duration ? $cdr->duration : $cdr->billsec;
+          my $charge_sec = $use_duration ? $cdr->duration : $cdr->billsec;
+          $seconds = ( $charge_sec <= $rate_detail->conn_sec ) # min()
+                       ? $charge_sec
+                       : $rate_detail->conn_sec;
 
-          $seconds -= $rate_detail->conn_sec;
-          $seconds = 0 if $seconds < 0;
+          $charge_sec -= $rate_detail->conn_sec;
+          $charge_sec = 0 if $charge_sec < 0;
 
-          $seconds += $granularity - ( $seconds % $granularity )
-            if $seconds      # don't granular-ize 0 billsec calls (bills them)
+          $charge_sec += $granularity - ( $charge_sec % $granularity )
+            if $charge_sec   # don't granular-ize 0 billsec calls (bills them)
             && $granularity; # 0 is per call
-          my $minutes = sprintf("%.1f", $seconds / 60);
+          $seconds += $charge_sec;
+
+          my $minutes = sprintf("%.1f", $charge_sec / 60);
           $minutes =~ s/\.0$// if $granularity == 60;
 
           my $duration_minutes =  #for invoice display purposes
-            sprintf("%.1f", ($seconds + $rate_detail->conn_sec)/ 60);
+            sprintf("%.1f", $seconds / 60);
           $duration_minutes =~ s/\.0$// if $granularity == 60;
 
           # per call rather than per minute