X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=FS%2FFS%2Fpart_pkg%2Fvoip_cdr.pm;h=81de0bda089b76443067d3bfcdbd0788d2eda1d8;hb=bd928f5f74892da75dc3094a189c07fd8848ec07;hp=25b8d780115982f5c936e47e31d4cc5628867fed;hpb=c40ec6975d9d8275454eb9a1b076a4078d87c8df;p=freeside.git diff --git a/FS/FS/part_pkg/voip_cdr.pm b/FS/FS/part_pkg/voip_cdr.pm index 25b8d7801..81de0bda0 100644 --- a/FS/FS/part_pkg/voip_cdr.pm +++ b/FS/FS/part_pkg/voip_cdr.pm @@ -46,7 +46,7 @@ tie my %granularity, 'Tie::IxHash', FS::rate_detail::granularities(); %info = ( 'name' => 'VoIP rating by plan of CDR records in an internal (or external) SQL table', 'shortname' => 'VoIP/telco CDR rating (standard)', - 'inherit_fields' => [ 'global_Mixin' ], + 'inherit_fields' => [ 'prorate_Mixin', 'global_Mixin' ], 'fields' => { 'suspend_bill' => { 'name' => 'Continue recurring billing while suspended', 'type' => 'checkbox', @@ -61,10 +61,6 @@ tie my %granularity, 'Tie::IxHash', FS::rate_detail::granularities(); 'subscription', 'default' => '1', }, - 'add_full_period'=> { 'name' => 'When prorating first month, also bill '. - 'for one full period after that', - 'type' => 'checkbox', - }, 'recur_method' => { 'name' => 'Recurring fee method', #'type' => 'radio', #'options' => \%recur_method, @@ -137,22 +133,23 @@ tie my %granularity, 'Tie::IxHash', FS::rate_detail::granularities(); 'type' => 'checkbox', }, - 'use_amaflags' => { 'name' => 'Do not charge for CDRs where the amaflags field is not set to "2" ("BILL"/"BILLING").', + 'use_amaflags' => { 'name' => 'Only charge for CDRs where the amaflags field is set to "2" ("BILL"/"BILLING").', 'type' => 'checkbox', }, - 'use_disposition' => { 'name' => 'Do not charge for CDRs where the disposition flag is not set to "ANSWERED".', - 'type' => 'checkbox', + 'use_carrierid' => { 'name' => 'Only charge for CDRs where the Carrier ID is set to: ', }, - 'use_disposition_taqua' => { 'name' => 'Do not charge for CDRs where the disposition is not set to "100" (Taqua).', - 'type' => 'checkbox', - }, - - 'use_carrierid' => { 'name' => 'Do not charge for CDRs where the Carrier ID is not set to: ', + 'use_cdrtypenum' => { 'name' => 'Only charge for CDRs where the CDR Type is set to: ', }, - - 'use_cdrtypenum' => { 'name' => 'Do not charge for CDRs where the CDR Type is not set to: ', + + 'ignore_cdrtypenum' => { 'name' => 'Do not charge for CDRs where the CDR Type is set to: ', + }, + + 'ignore_disposition' => { 'name' => 'Do not charge for CDRs where the Disposition is set to any of these (comma-separated) values: ', + }, + + 'disposition_in' => { 'name' => 'Only charge for CDRs where the Disposition is set to any of these (comma-separated) values: ', }, 'skip_dst_prefix' => { 'name' => 'Do not charge for CDRs where the destination number starts with any of these values: ', @@ -258,8 +255,9 @@ tie my %granularity, 'Tie::IxHash', FS::rate_detail::granularities(); }, 'fieldorder' => [qw( recur_temporality - recur_method cutoff_day - add_full_period + recur_method cutoff_day ), + FS::part_pkg::prorate_Mixin::fieldorder, + qw( cdr_svc_method rating_method ratenum intrastate_ratenum min_charge min_included @@ -269,8 +267,10 @@ tie my %granularity, 'Tie::IxHash', FS::rate_detail::granularities(); disable_src domestic_prefix international_prefix disable_tollfree - use_amaflags use_disposition - use_disposition_taqua use_carrierid use_cdrtypenum + use_amaflags + use_carrierid + use_cdrtypenum ignore_cdrtypenum + ignore_disposition disposition_in skip_dcontext skip_dst_prefix skip_dstchannel_prefix skip_src_length_more noskip_src_length_accountcode_tollfree @@ -296,11 +296,6 @@ sub price_info { $str; } -sub calc_setup { - my($self, $cust_pkg ) = @_; - $self->option('setup_fee'); -} - sub calc_recur { my $self = shift; my($cust_pkg, $sdate, $details, $param ) = @_; @@ -779,6 +774,7 @@ sub calc_usage { $classnum, $phonenum, $cdr->accountcode, + $cdr->startdate, $seconds, $regionname, ]; @@ -791,6 +787,7 @@ sub calc_usage { $classnum, $phonenum, $cdr->accountcode, + $cdr->startdate, $seconds, $regionname, ]; @@ -873,10 +870,11 @@ sub check_chargable { my @opt = qw( use_amaflags - use_disposition - use_disposition_taqua use_carrierid use_cdrtypenum + ignore_cdrtypenum + disposition_in + ignore_disposition skip_dst_prefix skip_dcontext skip_dstchannel_prefix @@ -893,11 +891,18 @@ sub check_chargable { return 'amaflags != 2' if $opt{'use_amaflags'} && $cdr->amaflags != 2; - return 'disposition != ANSWERED' - if $opt{'use_disposition'} && $cdr->disposition ne 'ANSWERED'; + return "disposition NOT IN ( $opt{'disposition_in'} )" + if $opt{'disposition_in'} =~ /\S/ + && !grep { $cdr->disposition eq $_ } split(/\s*,\s*/, $opt{'disposition_in'}); + + return "disposition IN ( $opt{'ignore_disposition'} )" + if $opt{'ignore_disposition'} =~ /\S/ + && grep { $cdr->disposition eq $_ } split(/\s*,\s*/, $opt{'ignore_disposition'}); - return "disposition != 100" - if $opt{'use_disposition_taqua'} && $cdr->disposition != 100; + foreach(split(/\s*,\s*/, $opt{'skip_dst_prefix'})) { + return "dst starts with '$_'" + if length($_) && substr($cdr->dst,0,length($_)) eq $_; + } return "carrierid != $opt{'use_carrierid'}" if length($opt{'use_carrierid'}) @@ -907,11 +912,10 @@ sub check_chargable { return "cdrtypenum != $opt{'use_cdrtypenum'}" if length($opt{'use_cdrtypenum'}) && $cdr->cdrtypenum ne $opt{'use_cdrtypenum'}; #ne otherwise 0 matches '' - - foreach(split(',',$opt{'skip_dst_prefix'})) { - return "dst starts with '$_'" - if length($_) && substr($cdr->dst,0,length($_)) eq $_; - } + + return "cdrtypenum == $opt{'ignore_cdrtypenum'}" + if length($opt{'ignore_cdrtypenum'}) + && $cdr->cdrtypenum eq $opt{'ignore_cdrtypenum'}; #eq otherwise 0 matches '' return "dcontext IN ( $opt{'skip_dcontext'} )" if $opt{'skip_dcontext'} =~ /\S/