projects
/
freeside.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
82380ef
)
localize CDR column headings, #27276
author
Mark Wells
<mark@freeside.biz>
Thu, 30 Jan 2014 21:16:14 +0000
(13:16 -0800)
committer
Mark Wells
<mark@freeside.biz>
Thu, 30 Jan 2014 21:16:14 +0000
(13:16 -0800)
12 files changed:
FS/FS/Locales.pm
patch
|
blob
|
history
FS/FS/detail_format.pm
patch
|
blob
|
history
FS/FS/detail_format/accountcode_default.pm
patch
|
blob
|
history
FS/FS/detail_format/accountcode_simple.pm
patch
|
blob
|
history
FS/FS/detail_format/basic.pm
patch
|
blob
|
history
FS/FS/detail_format/default.pm
patch
|
blob
|
history
FS/FS/detail_format/description_default.pm
patch
|
blob
|
history
FS/FS/detail_format/simple.pm
patch
|
blob
|
history
FS/FS/detail_format/simple2.pm
patch
|
blob
|
history
FS/FS/detail_format/source_default.pm
patch
|
blob
|
history
FS/FS/part_pkg/voip_cdr.pm
patch
|
blob
|
history
FS/FS/part_pkg/voip_inbound.pm
patch
|
blob
|
history
diff --git
a/FS/FS/Locales.pm
b/FS/FS/Locales.pm
index
bf10990
..
6dd7c5a
100644
(file)
--- a/
FS/FS/Locales.pm
+++ b/
FS/FS/Locales.pm
@@
-52,7
+52,13
@@
Returns a hash of information about a locale.
sub locale_info {
my($class, $locale) = @_;
sub locale_info {
my($class, $locale) = @_;
- %{ $locales{$locale} };
+ if (!$locale) {
+ return ();
+ } elsif (exists $locales{$locale}) {
+ return %{ $locales{$locale} };
+ } else {
+ die "unsupported locale '$locale'\n";
+ }
}
=item description LOCALE
}
=item description LOCALE
diff --git
a/FS/FS/detail_format.pm
b/FS/FS/detail_format.pm
index
88cc02f
..
665afdb
100644
(file)
--- a/
FS/FS/detail_format.pm
+++ b/
FS/FS/detail_format.pm
@@
-5,7
+5,8
@@
use vars qw( $DEBUG );
use FS::Conf;
use FS::cdr;
use FS::cust_bill_pkg_detail;
use FS::Conf;
use FS::cdr;
use FS::cust_bill_pkg_detail;
-use Date::Format qw(time2str);
+use FS::L10N;
+use Date::Language;
use Text::CSV_XS;
my $me = '[FS::detail_format]';
use Text::CSV_XS;
my $me = '[FS::detail_format]';
@@
-44,6
+45,9
@@
OPTIONS may contain:
rated_price, rated_seconds, rated_minutes, and svcnum. This can be
changed with the C<inbound> method.
rated_price, rated_seconds, rated_minutes, and svcnum. This can be
changed with the C<inbound> method.
+- locale: a locale string to use for static text and date formats. This
+ is optional.
+
=cut
sub new {
=cut
sub new {
@@
-58,11
+62,21
@@
sub new {
die "$me error loading $class: $@" if $@;
my %opt = @_;
die "$me error loading $class: $@" if $@;
my %opt = @_;
- my $self = { conf => FS::Conf->new,
+ my $locale = $opt{'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),
csv => Text::CSV_XS->new,
inbound => ($opt{'inbound'} ? 1 : 0),
buffer => ($opt{'buffer'} || []),
csv => Text::CSV_XS->new,
inbound => ($opt{'inbound'} ? 1 : 0),
buffer => ($opt{'buffer'} || []),
- };
+ _lh => FS::L10N->get_handle($locale),
+ _dh => eval { Date::Language->new($language_name) } ||
+ Date::Language->new()
+ };
bless $self, $class;
}
bless $self, $class;
}
@@
-139,7
+153,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->
header_detail
}
+ { 'format' => 'C', 'detail' => $self->
mt($self->header_detail)
}
)
}
)
}
@@
-228,6
+242,18
@@
sub money_char {
$self->{money_char} ||= ($self->conf->config('money_char') || '$');
}
$self->{money_char} ||= ($self->conf->config('money_char') || '$');
}
+# localization methods
+
+sub time2str_local {
+ my $self = shift;
+ $self->{_dh}->time2str(@_);
+}
+
+sub mt {
+ my $self = shift;
+ $self->{_lh}->maketext(@_);
+}
+
#imitate previous behavior for now
sub duration {
#imitate previous behavior for now
sub duration {
diff --git
a/FS/FS/detail_format/accountcode_default.pm
b/FS/FS/detail_format/accountcode_default.pm
index
f76c9d5
..
562a8a9
100644
(file)
--- a/
FS/FS/detail_format/accountcode_default.pm
+++ b/
FS/FS/detail_format/accountcode_default.pm
@@
-2,7
+2,6
@@
package FS::detail_format::accountcode_default;
use strict;
use base qw(FS::detail_format);
use strict;
use base qw(FS::detail_format);
-use Date::Format qw(time2str);
sub name { 'Default with accountcode' }
sub name { 'Default with accountcode' }
@@
-12,8
+11,8
@@
sub columns {
my $self = shift;
my $cdr = shift;
(
my $self = shift;
my $cdr = shift;
(
-
time2str
($self->date_format, $cdr->startdate),
-
time2str
('%r', $cdr->startdate),
+
$self->time2str_local
($self->date_format, $cdr->startdate),
+
$self->time2str_local
('%r', $cdr->startdate),
$cdr->accountcode,
($cdr->rated_pretty_dst || $cdr->dst),
$cdr->rated_regionname,
$cdr->accountcode,
($cdr->rated_pretty_dst || $cdr->dst),
$cdr->rated_regionname,
diff --git
a/FS/FS/detail_format/accountcode_simple.pm
b/FS/FS/detail_format/accountcode_simple.pm
index
10a28db
..
5a19310
100644
(file)
--- a/
FS/FS/detail_format/accountcode_simple.pm
+++ b/
FS/FS/detail_format/accountcode_simple.pm
@@
-2,7
+2,6
@@
package FS::detail_format::accountcode_simple;
use strict;
use base qw(FS::detail_format);
use strict;
use base qw(FS::detail_format);
-use Date::Format qw(time2str);
sub name { 'Simple with source' }
sub name { 'Simple with source' }
@@
-12,8
+11,8
@@
sub columns {
my $self = shift;
my $cdr = shift;
(
my $self = shift;
my $cdr = shift;
(
-
time2str
($self->date_format, $cdr->startdate),
-
time2str
('%r', $cdr->startdate),
+
$self->time2str_local
($self->date_format, $cdr->startdate),
+
$self->time2str_local
('%r', $cdr->startdate),
$cdr->src,
$cdr->accountcode,
$self->duration($cdr),
$cdr->src,
$cdr->accountcode,
$self->duration($cdr),
diff --git
a/FS/FS/detail_format/basic.pm
b/FS/FS/detail_format/basic.pm
index
811cf40
..
c45e926
100644
(file)
--- a/
FS/FS/detail_format/basic.pm
+++ b/
FS/FS/detail_format/basic.pm
@@
-2,7
+2,6
@@
package FS::detail_format::basic;
use strict;
use base qw(FS::detail_format);
use strict;
use base qw(FS::detail_format);
-use Date::Format qw(time2str);
sub name { 'Basic' }
sub name { 'Basic' }
@@
-12,7
+11,7
@@
sub columns {
my $self = shift;
my $cdr = shift;
(
my $self = shift;
my $cdr = shift;
(
-
time2str
('%d %b - %I:%M %p', $cdr->startdate),
+
$self->time2str_local
('%d %b - %I:%M %p', $cdr->startdate),
$cdr->dst,
$self->duration($cdr),
$self->price($cdr),
$cdr->dst,
$self->duration($cdr),
$self->price($cdr),
diff --git
a/FS/FS/detail_format/default.pm
b/FS/FS/detail_format/default.pm
index
6c73d08
..
44abc83
100644
(file)
--- a/
FS/FS/detail_format/default.pm
+++ b/
FS/FS/detail_format/default.pm
@@
-2,7
+2,6
@@
package FS::detail_format::default;
use strict;
use base qw(FS::detail_format);
use strict;
use base qw(FS::detail_format);
-use Date::Format qw(time2str);
sub name { 'Default' }
sub name { 'Default' }
@@
-12,8
+11,8
@@
sub columns {
my $self = shift;
my $cdr = shift;
(
my $self = shift;
my $cdr = shift;
(
-
time2str
($self->date_format, $cdr->startdate),
-
time2str
('%r', $cdr->startdate),
+
$self->time2str_local
($self->date_format, $cdr->startdate),
+
$self->time2str_local
('%r', $cdr->startdate),
($cdr->rated_pretty_dst || $cdr->dst),
$cdr->rated_regionname,
$self->duration($cdr),
($cdr->rated_pretty_dst || $cdr->dst),
$cdr->rated_regionname,
$self->duration($cdr),
diff --git
a/FS/FS/detail_format/description_default.pm
b/FS/FS/detail_format/description_default.pm
index
42e1725
..
7bc3ee2
100644
(file)
--- a/
FS/FS/detail_format/description_default.pm
+++ b/
FS/FS/detail_format/description_default.pm
@@
-2,7
+2,6
@@
package FS::detail_format::description_default;
use strict;
use base qw(FS::detail_format);
use strict;
use base qw(FS::detail_format);
-use Date::Format qw(time2str);
sub name { 'Default with description field as destination' }
sub name { 'Default with description field as destination' }
@@
-13,8
+12,8
@@
sub columns {
my $cdr = shift;
(
$cdr->src,
my $cdr = shift;
(
$cdr->src,
-
time2str
($self->date_format, $cdr->startdate),
-
time2str
('%r', $cdr->startdate),
+
$self->time2str_local
($self->date_format, $cdr->startdate),
+
$self->time2str_local
('%r', $cdr->startdate),
($cdr->rated_pretty_dst || $cdr->dst),
$cdr->description,
$self->duration($cdr),
($cdr->rated_pretty_dst || $cdr->dst),
$cdr->description,
$self->duration($cdr),
diff --git
a/FS/FS/detail_format/simple.pm
b/FS/FS/detail_format/simple.pm
index
ef92706
..
9622e32
100644
(file)
--- a/
FS/FS/detail_format/simple.pm
+++ b/
FS/FS/detail_format/simple.pm
@@
-2,7
+2,6
@@
package FS::detail_format::simple;
use strict;
use base qw(FS::detail_format);
use strict;
use base qw(FS::detail_format);
-use Date::Format qw(time2str);
sub name { 'Simple' }
sub name { 'Simple' }
@@
-12,8
+11,8
@@
sub columns {
my $self = shift;
my $cdr = shift;
(
my $self = shift;
my $cdr = shift;
(
-
time2str
($self->date_format, $cdr->startdate),
-
time2str
('%r', $cdr->startdate),
+
$self->time2str_local
($self->date_format, $cdr->startdate),
+
$self->time2str_local
('%r', $cdr->startdate),
$cdr->userfield,
$cdr->dst,
$self->duration($cdr),
$cdr->userfield,
$cdr->dst,
$self->duration($cdr),
diff --git
a/FS/FS/detail_format/simple2.pm
b/FS/FS/detail_format/simple2.pm
index
82773d2
..
d571141
100644
(file)
--- a/
FS/FS/detail_format/simple2.pm
+++ b/
FS/FS/detail_format/simple2.pm
@@
-2,7
+2,6
@@
package FS::detail_format::simple2;
use strict;
use base qw(FS::detail_format);
use strict;
use base qw(FS::detail_format);
-use Date::Format qw(time2str);
sub name { 'Simple with source' }
sub name { 'Simple with source' }
@@
-12,8
+11,8
@@
sub columns {
my $self = shift;
my $cdr = shift;
(
my $self = shift;
my $cdr = shift;
(
-
time2str
($self->date_format, $cdr->startdate),
-
time2str
('%r', $cdr->startdate),
+
$self->time2str_local
($self->date_format, $cdr->startdate),
+
$self->time2str_local
('%r', $cdr->startdate),
$cdr->userfield,
$cdr->src,
$cdr->dst,
$cdr->userfield,
$cdr->src,
$cdr->dst,
diff --git
a/FS/FS/detail_format/source_default.pm
b/FS/FS/detail_format/source_default.pm
index
1f46cd2
..
592fd3c
100644
(file)
--- a/
FS/FS/detail_format/source_default.pm
+++ b/
FS/FS/detail_format/source_default.pm
@@
-2,7
+2,6
@@
package FS::detail_format::source_default;
use strict;
use base qw(FS::detail_format);
use strict;
use base qw(FS::detail_format);
-use Date::Format qw(time2str);
sub name { 'Default with source' }
sub name { 'Default with source' }
@@
-13,8
+12,8
@@
sub columns {
my $cdr = shift;
(
$cdr->src,
my $cdr = shift;
(
$cdr->src,
-
time2str
($self->date_format, $cdr->startdate),
-
time2str
('%r', $cdr->startdate),
+
$self->time2str_local
($self->date_format, $cdr->startdate),
+
$self->time2str_local
('%r', $cdr->startdate),
($cdr->rated_pretty_dst || $cdr->dst),
$cdr->rated_regionname,
$self->duration($cdr),
($cdr->rated_pretty_dst || $cdr->dst),
$cdr->rated_regionname,
$self->duration($cdr),
diff --git
a/FS/FS/part_pkg/voip_cdr.pm
b/FS/FS/part_pkg/voip_cdr.pm
index
a55832d
..
229d4f6
100644
(file)
--- a/
FS/FS/part_pkg/voip_cdr.pm
+++ b/
FS/FS/part_pkg/voip_cdr.pm
@@
-418,7
+418,10
@@
sub calc_usage {
my $usage_showzero = $self->option('usage_showzero', 1);
my $usage_showzero = $self->option('usage_showzero', 1);
- 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
+ );
my $use_duration = $self->option('use_duration');
my $use_duration = $self->option('use_duration');
diff --git
a/FS/FS/part_pkg/voip_inbound.pm
b/FS/FS/part_pkg/voip_inbound.pm
index
1566c18
..
052bb7f
100644
(file)
--- a/
FS/FS/part_pkg/voip_inbound.pm
+++ b/
FS/FS/part_pkg/voip_inbound.pm
@@
-218,7
+218,11
@@
sub calc_usage {
my $output_format = $self->option('output_format', 1) || 'default';
my $formatter =
my $output_format = $self->option('output_format', 1) || 'default';
my $formatter =
- FS::detail_format->new($output_format, buffer => $details, inbound => 1);
+ FS::detail_format->new($output_format,
+ buffer => $details,
+ inbound => 1,
+ locale => $cust_pkg->cust_main->locale
+ );
my $granularity = length($self->option('sec_granularity'))
? $self->option('sec_granularity')
my $granularity = length($self->option('sec_granularity'))
? $self->option('sec_granularity')