X-Git-Url: http://git.freeside.biz/gitweb/?p=freeside.git;a=blobdiff_plain;f=FS%2FFS%2Fpart_pkg%2Fvoip_inbound.pm;h=efaf586abcaf961308f38ff3a0c32094dad6ea9b;hp=ec95c904071f458d25f8e5dcd3e9e57196f292ce;hb=defbec8798d006a70b13a4b7160742b85d16047d;hpb=ec02246ea0218838def2b12b0b987f71662d1761 diff --git a/FS/FS/part_pkg/voip_inbound.pm b/FS/FS/part_pkg/voip_inbound.pm index ec95c9040..efaf586ab 100644 --- a/FS/FS/part_pkg/voip_inbound.pm +++ b/FS/FS/part_pkg/voip_inbound.pm @@ -120,6 +120,10 @@ tie my %granularity, 'Tie::IxHash', FS::rate_detail::granularities(); 'type' => 'checkbox', }, + 'bill_only_pkg_dates' => { 'name' => 'Only bill CDRs with a date during the package billing period', + 'type' => 'checkbox', + }, + #XXX also have option for an external db # 'cdr_location' => { 'name' => 'CDR database location' # 'type' => 'select', @@ -160,6 +164,7 @@ tie my %granularity, 'Tie::IxHash', FS::rate_detail::granularities(); use_duration output_format usage_mandate summarize_usage usage_section bill_every_call + bill_only_pkg_dates ) ], 'weight' => 42, @@ -167,7 +172,7 @@ tie my %granularity, 'Tie::IxHash', FS::rate_detail::granularities(); sub price_info { my $self = shift; - my $str = $self->SUPER::price_info; + my $str = $self->SUPER::price_info(@_); $str .= " plus usage" if $str; $str; } @@ -206,19 +211,21 @@ sub calc_usage { if $self->recur_temporality eq 'preceding' && ( $last_bill eq '' || $last_bill == 0 ); - my $spool_cdr = $cust_pkg->cust_main->spool_cdr; - - my $charges = 0; # my $downstream_cdr = ''; my $included_min = $self->option('min_included', 1) || 0; + $included_min *= ($cust_pkg->quantity || 1); my $use_duration = $self->option('use_duration'); my $output_format = $self->option('output_format', 1) || 'default'; my $formatter = - FS::detail_format->new($output_format, buffer => $details, inbound => 1); + FS::detail_format->new($output_format, + buffer => $details, + inbound => 1, + locale => $cust_pkg->cust_main->locale + ); my $granularity = length($self->option('sec_granularity')) ? $self->option('sec_granularity') @@ -234,12 +241,18 @@ sub calc_usage { ) { my $svc_phone = $cust_svc->svc_x; - my $cdr_search = $svc_phone->psearch_cdrs( + my %options = ( 'inbound' => 1, 'default_prefix' => $self->option('default_prefix'), 'status' => '', # unprocessed only 'for_update' => 1, ); + if ( $self->option('bill_only_pkg_dates') ) { + $options{'begin'} = $last_bill; + $options{'end'} = $$sdate; + } + + my $cdr_search = $svc_phone->psearch_cdrs(%options); $cdr_search->limit(1000); $cdr_search->increment(0); while ( my $cdr = $cdr_search->fetch ) { @@ -287,10 +300,7 @@ sub calc_usage { my @call_details = ( $cdr->downstream_csv( 'format' => $output_format, 'charge' => $charge, - 'seconds' => ($use_duration - ? $cdr->duration - : $cdr->billsec - ), + 'seconds' => $seconds, 'granularity' => $granularity, ) ); @@ -312,10 +322,10 @@ sub calc_usage { 'done', $charge, $cust_svc->svcnum, - 'rated_seconds' => $use_duration ? $cdr->duration : $cdr->billsec, + 'rated_seconds' => $seconds, 'rated_granularity' => $granularity, 'rated_classnum' => $cdr->calltypenum, - 'inbound' => 1, + 'inbound' => 1, # to update cdr_termination, not cdr ); die $error if $error; $formatter->append($cdr); @@ -397,15 +407,5 @@ sub is_free { 0; } -# This equates svc_phone records; perhaps svc_phone should have a field -# to indicate it represents a line -# #XXX no count_available_phones? -sub calc_units { - my($self, $cust_pkg ) = @_; - my $count = - scalar(grep { $_->part_svc->svcdb eq 'svc_phone' } $cust_pkg->cust_svc); - $count; -} - 1;