+ foreach my $cdr (
+ $svc_x->get_cdrs( %options )
+ ) {
+
+ my $object = $options{'inbound'}
+ ? $cdr->cdr_termination( 1 ) #1: inbound
+ : $cdr;
+
+ my $charge_min = $object->rated_minutes;
+
+ my $charge = sprintf('%.4f', ( $min_charge * $charge_min )
+ + 0.0000000001 ); #so 1.00005 rounds to 1.0001
+
+ if ( $charge > 0 ) {
+ $charges += $charge;
+
+ my $detail =
+ $cdr->downstream_csv( 'format' => $output_format,
+ 'charge' => $charge,
+ 'seconds' => ($use_duration ?
+ $cdr->duration :
+ $cdr->billsec),
+ 'granularity' => $granularity,
+ );
+
+ my $call_details =
+ { format => 'C',
+ detail => $detail,
+ amount => $charge,
+ #classnum => $cdr->calltypenum, #classnum
+ #phonenum => $phonenum, #XXX need this to sort on them
+ accountcode => $cdr->accountcode,
+ startdate => $cdr->startdate,
+ duration => $object->rated_seconds,
+ };
+
+ #warn " adding details on charge to invoice: [ ".
+ # join(', ', @{$call_details} ). " ]"
+ # if ( $DEBUG && ref($call_details) );
+ push @invoice_details_sort, [ $call_details, $cdr->calldate_unix ];
+ }
+
+ my $error = $cdr->set_status_and_rated_price(
+ 'done',
+ $charge,
+ $cust_svc->svcnum,
+ 'inbound' => $options{'inbound'},
+ 'rated_minutes' => $charge_min,
+ 'rated_seconds' => $object->rated_seconds,
+ );
+ die $error if $error;
+
+ } # $cdr
+
+ } # $pass
+
+ } # $cust_svc