X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=FS%2FFS%2Fdetail_format.pm;h=78517dd5b2e03aca24a976100af61a3737065d54;hb=a846aefc07208e8c4c0b0f223b90918828ce2bb4;hp=b072ff58d561830759b92201f79e0b1f0edae436;hpb=16453ebdacf7dc86d045a40eab8427414d6488e4;p=freeside.git diff --git a/FS/FS/detail_format.pm b/FS/FS/detail_format.pm index b072ff58d..78517dd5b 100644 --- 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 $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'}; - 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'} || []), @@ -168,7 +168,7 @@ sub header { 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: +acctid => acctid rated_price => amount rated_classnum => classnum rated_seconds => duration @@ -185,6 +186,11 @@ rated_regionname => regionname accountcode => accountcode startdate => startdate +If the formatter is in inbound mode, it will look up a C +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 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( { + 'acctid' => ($self->{inbound} ? '' : $cdr->acctid), 'amount' => $price, 'classnum' => $cdr->rated_classnum, - 'duration' => $cdr->rated_seconds, + 'duration' => $object->rated_seconds, 'regionname' => $cdr->rated_regionname, 'accountcode' => $cdr->accountcode, 'startdate' => $cdr->startdate, @@ -268,10 +275,7 @@ sub time2str_local { $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 @@ -281,13 +285,11 @@ sub duration { 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'; } - elsif ( $cdr->rated_granularity eq '60' ) { + elsif ( $object->rated_granularity eq '60' ) { sprintf('%dm', ($sec + 59)/60); } else {