projects
/
freeside.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
on 5.x, always show included minutes on invoice, #71455
[freeside.git]
/
FS
/
FS
/
part_pkg
/
voip_cdr.pm
diff --git
a/FS/FS/part_pkg/voip_cdr.pm
b/FS/FS/part_pkg/voip_cdr.pm
index
7363700
..
420026d
100644
(file)
--- a/
FS/FS/part_pkg/voip_cdr.pm
+++ b/
FS/FS/part_pkg/voip_cdr.pm
@@
-149,7
+149,7
@@
tie my %accountcode_tollfree_field, 'Tie::IxHash',
# 'type' => 'checkbox',
# },
# 'type' => 'checkbox',
# },
- 'international_prefix' => { 'name' => 'Destination prefix for international CDR records',
+ 'international_prefix' => { 'name' => 'Destination prefix for international CDR records
(or "none" for no prefix)
',
'default' => '011',
},
'default' => '011',
},
@@
-185,7
+185,10
@@
tie my %accountcode_tollfree_field, 'Tie::IxHash',
'skip_dst_prefix' => { 'name' => 'Do not charge for CDRs where the destination number starts with any of these values: ',
},
'skip_dst_prefix' => { 'name' => 'Do not charge for CDRs where the destination number starts with any of these values: ',
},
- 'skip_dcontext' => { 'name' => 'Do not charge for CDRs where the dcontext is set to any of these (comma-separated) values: ',
+ 'skip_dcontext' => { 'name' => 'Do not charge for CDRs where dcontext is set to any of these (comma-separated) values: ',
+ },
+
+ 'skip_dcontext_suffix' => { 'name' => 'Do not charge for CDRs where dcontext ends with: ',
},
'skip_dstchannel_prefix' => { 'name' => 'Do not charge for CDRs where the dstchannel starts with:',
},
'skip_dstchannel_prefix' => { 'name' => 'Do not charge for CDRs where the dstchannel starts with:',
@@
-322,7
+325,8
@@
tie my %accountcode_tollfree_field, 'Tie::IxHash',
cdr_svc_method
rating_method rounding ratenum intrastate_ratenum
calls_included
cdr_svc_method
rating_method rounding ratenum intrastate_ratenum
calls_included
- min_charge min_included sec_granularity
+ min_charge min_included
+ sec_granularity
ignore_unrateable
default_prefix
disable_src
ignore_unrateable
default_prefix
disable_src
@@
-333,7
+337,7
@@
tie my %accountcode_tollfree_field, 'Tie::IxHash',
use_cdrtypenum ignore_cdrtypenum
use_calltypenum ignore_calltypenum
ignore_disposition disposition_in
use_cdrtypenum ignore_cdrtypenum
use_calltypenum ignore_calltypenum
ignore_disposition disposition_in
- skip_dcontext skip_dst_prefix
+ skip_dcontext skip_d
context_suffix skip_d
st_prefix
skip_dstchannel_prefix skip_src_length_more
noskip_src_length_accountcode_tollfree
accountcode_tollfree_ratenum accountcode_tollfree_field
skip_dstchannel_prefix skip_src_length_more
noskip_src_length_accountcode_tollfree
accountcode_tollfree_ratenum accountcode_tollfree_field
@@
-398,11
+402,14
@@
sub calc_usage {
my $charges = 0;
my $charges = 0;
- my $included_min = $self->option('min_included', 1) || 0;
+ my $included_min_total = ($self->option('min_included', 1) || 0)
+ * ($cust_pkg->quantity || 1);
#single price rating
#or region group
#single price rating
#or region group
+ my $included_min_left = $included_min_total;
my $included_calls = $self->option('calls_included', 1) || 0;
my $included_calls = $self->option('calls_included', 1) || 0;
+ $included_calls *= ($cust_pkg->quantity || 1);
my $cdr_svc_method = $self->option('cdr_svc_method',1)||'svc_phone.phonenum';
my $rating_method = $self->option('rating_method') || 'prefix';
my $cdr_svc_method = $self->option('cdr_svc_method',1)||'svc_phone.phonenum';
my $rating_method = $self->option('rating_method') || 'prefix';
@@
-418,7
+425,8
@@
sub calc_usage {
my $formatter = FS::detail_format->new($output_format,
buffer => $details,
my $formatter = FS::detail_format->new($output_format,
buffer => $details,
- locale => $cust_pkg->cust_main->locale
+ locale => $cust_pkg->cust_main->locale,
+ rounding => ($self->option_cacheable('rounding') || 2),
);
my $use_duration = $self->option('use_duration');
);
my $use_duration = $self->option('use_duration');
@@
-494,7
+502,7
@@
sub calc_usage {
'part_pkg' => $self,
'cust_pkg' => $cust_pkg,
'svcnum' => $svc_x->svcnum,
'part_pkg' => $self,
'cust_pkg' => $cust_pkg,
'svcnum' => $svc_x->svcnum,
- 'plan_included_min' => \$included_min,
+ 'plan_included_min' => \$included_min
_left
,
'detail_included_min_hashref' => \%detail_included_min,
);
die $error if $error; #??
'detail_included_min_hashref' => \%detail_included_min,
);
die $error if $error; #??
@@
-535,6
+543,15
@@
sub calc_usage {
$formatter->finish; #writes into $details
unshift @$details, $formatter->header if @$details;
$formatter->finish; #writes into $details
unshift @$details, $formatter->header if @$details;
+ if ( $included_min_total > 0 ) {
+
+ my $min_detail = sprintf('%d / %d ',
+ $included_min_total - $included_min_left,
+ $included_min_total
+ ) . $cust_pkg->mt('included minutes used');
+ unshift @$details, $min_detail;
+ }
+
$charges;
}
$charges;
}
@@
-586,6
+603,11
@@
sub check_chargable {
if $self->option_cacheable('skip_dcontext') =~ /\S/
&& grep { $cdr->dcontext eq $_ } split(/\s*,\s*/, $self->option_cacheable('skip_dcontext'));
if $self->option_cacheable('skip_dcontext') =~ /\S/
&& grep { $cdr->dcontext eq $_ } split(/\s*,\s*/, $self->option_cacheable('skip_dcontext'));
+ my $len_suffix = length($self->option_cacheable('skip_dcontext_suffix'));
+ return "dcontext ends with ". $self->option_cacheable('skip_dcontext_suffix')
+ if $len_suffix
+ && substr($cdr->dcontext,-$len_suffix,$len_suffix) eq $self->option_cacheable('skip_dcontext_suffix');
+
my $len_prefix = length($self->option_cacheable('skip_dstchannel_prefix'));
return "dstchannel starts with ". $self->option_cacheable('skip_dstchannel_prefix')
if $len_prefix
my $len_prefix = length($self->option_cacheable('skip_dstchannel_prefix'));
return "dstchannel starts with ". $self->option_cacheable('skip_dstchannel_prefix')
if $len_prefix
@@
-664,7
+686,8
@@
sub reset_usage {
FS::cust_pkg_usage->new({
'pkgnum' => $cust_pkg->pkgnum,
'pkgusagepart' => $part,
FS::cust_pkg_usage->new({
'pkgnum' => $cust_pkg->pkgnum,
'pkgusagepart' => $part,
- 'minutes' => $part_pkg_usage->minutes,
+ 'minutes' => $part_pkg_usage->minutes *
+ ($cust_pkg->quantity || 1),
});
foreach my $cdr_usage (
qsearch('cdr_cust_pkg_usage', {'cdrusagenum' => $usage->cdrusagenum})
});
foreach my $cdr_usage (
qsearch('cdr_cust_pkg_usage', {'cdrusagenum' => $usage->cdrusagenum})