X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=FS%2FFS%2Fpart_pkg%2Fvoip_cdr.pm;h=9f6dd0111290f29b9e6cadb232efd24149c8eb96;hb=ba06d25a6e19e6d5534e90619cf233306fa2f49c;hp=c745283d1376492c09d8f92b4902eba7d4cbd8fc;hpb=f319a3e27955cc3351f04c12a663f978a6e3d2a3;p=freeside.git diff --git a/FS/FS/part_pkg/voip_cdr.pm b/FS/FS/part_pkg/voip_cdr.pm index c745283d1..9f6dd0111 100644 --- a/FS/FS/part_pkg/voip_cdr.pm +++ b/FS/FS/part_pkg/voip_cdr.pm @@ -12,7 +12,7 @@ use FS::rate; use FS::rate_prefix; use FS::rate_detail; -@ISA = qw(FS::part_pkg::flat); +@ISA = qw(FS::part_pkg::prorate); $DEBUG = 0; @@ -55,6 +55,14 @@ tie my %temporalities, 'Tie::IxHash', 'type' => 'checkbox', }, + 'enable_prorate' => { 'name' => 'Enable prorating of the first month', + 'type' => 'checkbox', + }, + + 'cutoff_day' => { 'name' => 'Billing Day (1 - 28) for prorating ', + 'default' => '1', + }, + 'rating_method' => { 'name' => 'Region rating method', 'type' => 'radio', 'options' => \%rating_method, @@ -149,6 +157,10 @@ tie my %temporalities, 'Tie::IxHash', 'type' => 'checkbox', }, + 'count_available_phones' => { 'name' => 'Consider for tax purposes the number of lines to be svc_phones that may be provisioned rather than those that actually are.', + 'type' => 'checkbox', + }, + #XXX also have option for an external db # 'cdr_location' => { 'name' => 'CDR database location' # 'type' => 'select', @@ -175,6 +187,7 @@ tie my %temporalities, 'Tie::IxHash', }, 'fieldorder' => [qw( setup_fee recur_fee recur_temporality unused_credit + enable_prorate cutoff_day rating_method ratenum ignore_unrateable default_prefix disable_src @@ -188,6 +201,7 @@ tie my %temporalities, 'Tie::IxHash', 411_rewrite output_format summarize_usage usage_section bill_every_call + count_available_phones ) ], 'weight' => 40, @@ -200,7 +214,8 @@ sub calc_setup { #false laziness w/voip_sqlradacct calc_recur resolve it if that one ever gets used again sub calc_recur { - my($self, $cust_pkg, $sdate, $details, $param ) = @_; + my $self = shift; + my($cust_pkg, $sdate, $details, $param ) = @_; #my $last_bill = $cust_pkg->last_bill; my $last_bill = $cust_pkg->get('last_bill'); #->last_bill falls back to setup @@ -293,7 +308,7 @@ sub calc_recur { ### my( $to_or_from, $number ); - if ( $cdr->dst =~ /^(\+?1)?8([02-8])\1/ + if ( $cdr->dst =~ /^(\+?1)?8(8|[02-7]{2})/ && ! $disable_tollfree ) { #tollfree call @@ -544,8 +559,13 @@ sub calc_recur { } #if ( $spool_cdr && length($downstream_cdr) ) - $charges += $self->option('recur_fee') - if $param->{'increment_next_bill'}; + if ($param->{'increment_next_bill'}) { + if ( $self->option('enable_prorate', 1) ) { + $charges += $self->SUPER::calc_recur(@_); + } else { + $charges += $self->option('recur_fee') + } + } $charges; } @@ -624,7 +644,16 @@ sub base_recur { # to indicate it represents a line sub calc_units { my($self, $cust_pkg ) = @_; - scalar(grep { $_->part_svc->svcdb eq 'svc_phone' } $cust_pkg->cust_svc); + my $count = 0; + if ( $self->option('count_available_phones', 1)) { + map { $count += ( $_->quantity || 0 ) } + grep { $_->part_svc->svcdb eq 'svc_phone' } + $cust_pkg->part_pkg->pkg_svc; + } else { + $count = + scalar(grep { $_->part_svc->svcdb eq 'svc_phone' } $cust_pkg->cust_svc); + } + $count; } 1;