projects
/
freeside.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
respect granularity settings for display of inbound call duration, #71715
[freeside.git]
/
FS
/
FS
/
detail_format.pm
diff --git
a/FS/FS/detail_format.pm
b/FS/FS/detail_format.pm
index
b072ff5
..
78517dd
100644
(file)
--- a/
FS/FS/detail_format.pm
+++ b/
FS/FS/detail_format.pm
@@
-63,13
+63,13
@@
sub new {
my %opt = @_;
my $locale = $opt{'locale'} || '';
my %opt = @_;
my $locale = $opt{'locale'} || '';
- my $conf = FS::Conf->new(
locale => $locale
);
+ my $conf = FS::Conf->new(
{ locale => $locale }
);
$locale ||= $conf->config('locale') || 'en_US';
my %locale_info = FS::Locales->locale_info($locale);
my $language_name = $locale_info{'name'};
$locale ||= $conf->config('locale') || 'en_US';
my %locale_info = FS::Locales->locale_info($locale);
my $language_name = $locale_info{'name'};
- my $self = { conf => FS::Conf->new(
locale => $locale
),
+ my $self = { conf => FS::Conf->new(
{ locale => $locale }
),
csv => Text::CSV_XS->new({ binary => 1 }),
inbound => ($opt{'inbound'} ? 1 : 0),
buffer => ($opt{'buffer'} || []),
csv => Text::CSV_XS->new({ binary => 1 }),
inbound => ($opt{'inbound'} ? 1 : 0),
buffer => ($opt{'buffer'} || []),
@@
-168,7
+168,7
@@
sub header {
my $self = shift;
FS::cust_bill_pkg_detail->new(
my $self = shift;
FS::cust_bill_pkg_detail->new(
- { 'format' => 'C', 'detail' => $self->
mt($self->header_detail)
}
+ { 'format' => 'C', 'detail' => $self->
header_detail
}
)
}
)
}
@@
-178,6
+178,7
@@
Takes a single CDR and returns an invoice detail to describe it.
By default, this maps the following fields from the CDR:
By default, this maps the following fields from the CDR:
+acctid => acctid
rated_price => amount
rated_classnum => classnum
rated_seconds => duration
rated_price => amount
rated_classnum => classnum
rated_seconds => duration
@@
-185,6
+186,11
@@
rated_regionname => regionname
accountcode => accountcode
startdate => startdate
accountcode => accountcode
startdate => startdate
+If the formatter is in inbound mode, it will look up a C<cdr_termination>
+record and use rated_price and rated_seconds from that, and acctid will be
+set to null to avoid linking the CDR to the detail record for the inbound
+leg of the call.
+
'phonenum' is set to the internal C<phonenum> value set on the formatter
object.
'phonenum' is set to the internal C<phonenum> value set on the formatter
object.
@@
-208,9
+214,10
@@
sub single_detail {
$price = 0 if $cdr->freesidestatus eq 'no-charge';
FS::cust_bill_pkg_detail->new( {
$price = 0 if $cdr->freesidestatus eq 'no-charge';
FS::cust_bill_pkg_detail->new( {
+ 'acctid' => ($self->{inbound} ? '' : $cdr->acctid),
'amount' => $price,
'classnum' => $cdr->rated_classnum,
'amount' => $price,
'classnum' => $cdr->rated_classnum,
- 'duration' => $
cdr
->rated_seconds,
+ 'duration' => $
object
->rated_seconds,
'regionname' => $cdr->rated_regionname,
'accountcode' => $cdr->accountcode,
'startdate' => $cdr->startdate,
'regionname' => $cdr->rated_regionname,
'accountcode' => $cdr->accountcode,
'startdate' => $cdr->startdate,
@@
-268,10
+275,7
@@
sub time2str_local {
$self->{_dh}->time2str(@_);
}
$self->{_dh}->time2str(@_);
}
-sub mt {
- my $self = shift;
- $self->{_lh}->maketext(@_);
-}
+# header strings are now localized in FS::TemplateItem_Mixin::detail
#imitate previous behavior for now
#imitate previous behavior for now
@@
-281,13
+285,11
@@
sub duration {
my $object = $self->{inbound} ? $cdr->cdr_termination(1) : $cdr;
my $sec = $object->rated_seconds if $object;
$sec ||= 0;
my $object = $self->{inbound} ? $cdr->cdr_termination(1) : $cdr;
my $sec = $object->rated_seconds if $object;
$sec ||= 0;
- # XXX termination objects don't have rated_granularity so this may
- # result in inbound CDRs being displayed as min/sec when they shouldn't.
- # Should probably fix this.
- if ( $cdr->rated_granularity eq '0' ) {
+ # termination objects now have rated_granularity.
+ if ( $object->rated_granularity eq '0' ) {
'1 call';
}
'1 call';
}
- elsif ( $
cdr
->rated_granularity eq '60' ) {
+ elsif ( $
object
->rated_granularity eq '60' ) {
sprintf('%dm', ($sec + 59)/60);
}
else {
sprintf('%dm', ($sec + 59)/60);
}
else {