X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=FS%2FFS%2Fpart_pkg%2Fvoip_cdr.pm;h=1a99bd7e1252a2b3e948c04ccbc06d3567d00797;hb=c27f80ec10180391d00286bf50dfbf09a96c1b00;hp=21c6a8a2c6affd6ce256944ab81df53e0f62e00b;hpb=63973c641c4be00765fa27e55c57cc5b9aa4da19;p=freeside.git diff --git a/FS/FS/part_pkg/voip_cdr.pm b/FS/FS/part_pkg/voip_cdr.pm index 21c6a8a2c..1a99bd7e1 100644 --- a/FS/FS/part_pkg/voip_cdr.pm +++ b/FS/FS/part_pkg/voip_cdr.pm @@ -31,6 +31,11 @@ tie my %rating_method, 'Tie::IxHash', 'single_price' => 'A single price per minute for all calls.', ; +tie my %rounding, 'Tie::IxHash', + '2' => 'Two decimal places (cent)', + '4' => 'Four decimal places (100th of a cent)', +; + #tie my %cdr_location, 'Tie::IxHash', # 'internal' => 'Internal: CDR records imported into the internal CDR table', # 'external' => 'External: CDR records queried directly from an external '. @@ -56,6 +61,11 @@ tie my %detail_formats, 'Tie::IxHash', FS::cdr::invoice_formats() ; +tie my %accountcode_tollfree_field, 'Tie::IxHash', + 'dst' => 'Destination (dst)', + 'src' => 'Source (src)', +; + %info = ( 'name' => 'VoIP rating by plan of CDR records in an internal (or external) SQL table', 'shortname' => 'VoIP/telco CDR rating (standard)', @@ -92,6 +102,11 @@ tie my %detail_formats, 'Tie::IxHash', 'options' => \%rating_method, }, + 'rounding' => { 'name' => 'Rounding for destination prefix rating', + 'type' => 'select', + 'select_options' => \%rounding, + }, + 'ratenum' => { 'name' => 'Rate plan', 'type' => 'select', 'select_table' => 'rate', @@ -201,6 +216,12 @@ tie my %detail_formats, 'Tie::IxHash', 'empty_label' => '', }, + 'accountcode_tollfree_field' => { + 'name' => 'When using an alternate rate plan for toll-free accountcodes, the CDR field to use in rating calculations', + 'type' => 'select', + 'select_options' => \%accountcode_tollfree_field, + }, + 'skip_dst_length_less' => { 'name' => 'Do not charge for CDRs where the destination is less than this many digits:', }, @@ -253,7 +274,7 @@ tie my %detail_formats, 'Tie::IxHash', 'type' => 'checkbox', }, - 'usage_mandate' => { 'name' => 'Always put usage details in separate section', + 'usage_mandate' => { 'name' => 'Always put usage details in separate section. The section is defined in the next option.', 'type' => 'checkbox', }, #eofalse @@ -304,7 +325,7 @@ tie my %detail_formats, 'Tie::IxHash', FS::part_pkg::prorate_Mixin::fieldorder, qw( cdr_svc_method - rating_method ratenum intrastate_ratenum + rating_method rounding ratenum intrastate_ratenum calls_included min_charge min_included sec_granularity ignore_unrateable @@ -320,7 +341,7 @@ tie my %detail_formats, 'Tie::IxHash', skip_dcontext skip_dst_prefix skip_dstchannel_prefix skip_src_length_more noskip_src_length_accountcode_tollfree - accountcode_tollfree_ratenum + accountcode_tollfree_ratenum accountcode_tollfree_field skip_dst_length_less noskip_dst_length_accountcode_tollfree skip_lastapp @@ -330,12 +351,12 @@ tie my %detail_formats, 'Tie::IxHash', 411_rewrite output_format selfservice_format selfservice_inbound_format - usage_mandate summarize_usage usage_section - bill_every_call bill_inactive_svcs + usage_mandate usage_section summarize_usage + usage_nozero bill_every_call bill_inactive_svcs count_available_phones suspend_bill ) ], - 'weight' => 40, + 'weight' => 41, ); sub price_info { @@ -352,7 +373,7 @@ sub calc_recur { my $charges = 0; $charges += $self->calc_usage(@_); - $charges += $self->calc_recur_Common(@_); + $charges += ($cust_pkg->quantity || 1) * $self->calc_recur_Common(@_); $charges; @@ -423,6 +444,11 @@ sub calc_usage { $svc_x = $cust_svc->svc_x; } + unless ( $svc_x ) { + my $h = $self->option('bill_inactive_svcs',1) ? 'h_' : ''; + warn "WARNING: no $h$svc_table for svcnum ". $cust_svc->svcnum. "\n"; + } + my %options = ( 'disable_src' => $self->option('disable_src'), 'default_prefix' => $self->option('default_prefix'), @@ -596,9 +622,12 @@ sub calc_units { my($self, $cust_pkg ) = @_; 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; + foreach my $pkg_svc ($cust_pkg->part_pkg->pkg_svc) { + if ($pkg_svc->part_svc->svcdb eq 'svc_phone') { # svc_pbx? + $count += $pkg_svc->quantity || 0; + } + } + $count *= $cust_pkg->quantity; } else { $count = scalar(grep { $_->part_svc->svcdb eq 'svc_phone' } $cust_pkg->cust_svc);