diff options
-rw-r--r-- | FS/FS/Template_Mixin.pm | 12 | ||||
-rw-r--r-- | FS/FS/cust_pkg.pm | 27 | ||||
-rw-r--r-- | FS/FS/cust_svc.pm | 15 | ||||
-rw-r--r-- | FS/FS/h_cust_svc.pm | 41 |
4 files changed, 67 insertions, 28 deletions
diff --git a/FS/FS/Template_Mixin.pm b/FS/FS/Template_Mixin.pm index 5153f87..ddc933e 100644 --- a/FS/FS/Template_Mixin.pm +++ b/FS/FS/Template_Mixin.pm @@ -3320,6 +3320,7 @@ sub _items_cust_bill_pkg { # append the word 'Setup' to the setup line if there's going to be # a recur line for the same package (i.e. not a one-time charge) + # XXX localization my $description = $desc; $description .= ' Setup' if $cust_bill_pkg->recur != 0 @@ -3340,8 +3341,11 @@ sub _items_cust_bill_pkg { # always pass the svc_label through to the template, even if # not displaying it as an ext_description my @svc_labels = map &{$escape_function}($_), - $cust_pkg->h_labels_short($self->_date, undef, 'I'); - + $cust_pkg->h_labels_short($self->_date, + undef, + 'I', + $self->conf->{locale}, + ); $svc_label = $svc_labels[0]; unless ( $cust_pkg->part_pkg->hide_svc_detail @@ -3431,7 +3435,9 @@ sub _items_cust_bill_pkg { push @dates, undef if !$prev; my @svc_labels = map &{$escape_function}($_), - $cust_pkg->h_labels_short(@dates, 'I'); + $cust_pkg->h_labels_short(@dates, + 'I', + $self->conf->{locale}); $svc_label = $svc_labels[0]; # show service labels, unless... diff --git a/FS/FS/cust_pkg.pm b/FS/FS/cust_pkg.pm index b49fa5e..4320249 100644 --- a/FS/FS/cust_pkg.pm +++ b/FS/FS/cust_pkg.pm @@ -3834,23 +3834,27 @@ sub labels { map { [ $_->label ] } $self->cust_svc; } -=item h_labels END_TIMESTAMP [ START_TIMESTAMP ] [ MODE ] +=item h_labels END_TIMESTAMP [, START_TIMESTAMP [, MODE [, LOCALE ] ] ] Like the labels method, but returns historical information on services that were active as of END_TIMESTAMP and (optionally) not cancelled before START_TIMESTAMP. If MODE is 'I' (for 'invoice'), services with the I<pkg_svc.hidden> flag will be omitted. -Returns a list of lists, calling the label method for all (historical) services -(see L<FS::h_cust_svc>) of this billing item. +If LOCALE is passed, service definition names will be localized. + +Returns a list of lists, calling the label method for all (historical) +services (see L<FS::h_cust_svc>) of this billing item. =cut sub h_labels { my $self = shift; - warn "$me _h_labels called on $self\n" + my ($end, $start, $mode, $locale) = @_; + warn "$me h_labels\n" if $DEBUG; - map { [ $_->label(@_) ] } $self->h_cust_svc(@_); + map { [ $_->label($end, $start, $locale) ] } + $self->h_cust_svc($end, $start, $mode); } =item labels_short @@ -3863,15 +3867,15 @@ individual services rather than individual items. =cut sub labels_short { - shift->_labels_short( 'labels', @_ ); + shift->_labels_short( 'labels' ); # 'labels' takes no further arguments } -=item h_labels_short END_TIMESTAMP [ START_TIMESTAMP ] +=item h_labels_short END_TIMESTAMP [, START_TIMESTAMP [, MODE [, LOCALE ] ] ] Like h_labels, except returns a simple flat list, and shortens long -(currently >5 or the cust_bill-max_same_services configuration value) lists of -identical services to one line that lists the service label and the number of -individual services rather than individual items. +(currently >5 or the cust_bill-max_same_services configuration value) lists +of identical services to one line that lists the service label and the +number of individual services rather than individual items. =cut @@ -3879,6 +3883,9 @@ sub h_labels_short { shift->_labels_short( 'h_labels', @_ ); } +# takes a method name ('labels' or 'h_labels') and all its arguments; +# maybe should be "shorten($self->h_labels( ... ) )" + sub _labels_short { my( $self, $method ) = ( shift, shift ); diff --git a/FS/FS/cust_svc.pm b/FS/FS/cust_svc.pm index 3f73483..08183b4 100644 --- a/FS/FS/cust_svc.pm +++ b/FS/FS/cust_svc.pm @@ -702,10 +702,10 @@ sub pkg_cancel_date { return $cust_pkg->getfield('cancel') || ''; } -=item label +=item label [ LOCALE ] Returns a list consisting of: -- The name of this service (from part_svc) +- The name of this service (from part_svc), optionally localized - A meaningful identifier (username, domain, or mail alias) - The table name (i.e. svc_domain) for this service - svcnum @@ -714,7 +714,7 @@ Usage example: my($label, $value, $svcdb) = $cust_svc->label; -=item label_long +=item label_long [ LOCALE ] Like the B<label> method, except the second item in the list ("meaningful identifier") may be longer - typically, a full name is included. @@ -727,20 +727,25 @@ sub label_long { shift->_label('svc_label_long', @_); } sub _label { my $self = shift; my $method = shift; + my $locale = shift; my $svc_x = $self->svc_x or return "can't find ". $self->part_svc->svcdb. '.svcnum '. $self->svcnum; - $self->$method($svc_x); + $self->$method($svc_x, undef, undef, $locale); } +# svc_label(_long) takes three arguments: end date, start date, locale +# and FS::svc_*::label methods must accept those also, if they even care + sub svc_label { shift->_svc_label('label', @_); } sub svc_label_long { shift->_svc_label('label_long', @_); } sub _svc_label { my( $self, $method, $svc_x ) = ( shift, shift, shift ); + my ($end, $start, $locale) = @_; ( - $self->part_svc->svc, + $self->part_svc->svc_locale($locale), $svc_x->$method(@_), $self->part_svc->svcdb, $self->svcnum diff --git a/FS/FS/h_cust_svc.pm b/FS/FS/h_cust_svc.pm index 7b565ad..89a4cd7 100644 --- a/FS/FS/h_cust_svc.pm +++ b/FS/FS/h_cust_svc.pm @@ -39,14 +39,14 @@ sub date_deleted { $self->h_date('delete'); } -=item label END_TIMESTAMP [ START_TIMESTAMP ] +=item label END_TIMESTAMP [ START_TIMESTAMP ] [ LOCALE ] -Returns a label for this historical service, if the service was created before -END_TIMESTAMP and (optionally) not deleted before START_TIMESTAMP. Otherwise, -returns an empty list. +Returns a label for this historical service, if the service was created +before END_TIMESTAMP and (optionally) not deleted before START_TIMESTAMP. +Otherwise, returns an empty list. If a service is found, returns a list consisting of: -- The name of this historical service (from part_svc) +- The name of this historical service (from part_svc), optionally localized - A meaningful identifier (username, domain, or mail alias) - The table name (i.e. svc_domain) for this historical service @@ -55,13 +55,34 @@ If a service is found, returns a list consisting of: sub label { shift->_label('svc_label', @_); } sub label_long { shift->_label('svc_label_long', @_); } +# Parameters to _label: +# +# 1: the cust_svc method we should call to produce the label. (svc_label +# and svc_label_long are defined in FS::cust_svc, not here, and take a svc_x +# object as first argument.) +# 2, 3: date range to use to find the h_svc_x, which will be passed to +# svc_label(_long) and eventually have ->label called on it. +# 4: locale, passed to svc_label(_long) also. +# +# however, if label is called with a locale only, must DTRT (this is a +# FS::cust_svc subclass) + sub _label { my $self = shift; my $method = shift; + my ($end, $start, $locale); + if (defined($_[0])) { + if ( $_[0] =~ /^\d+$/ ) { + ($end, $start, $locale) = @_; + } else { + $locale = shift; + $end = $self->history_date; + } + } #carp "FS::h_cust_svc::_label called on $self" if $DEBUG; warn "FS::h_cust_svc::_label called on $self for $method" if $DEBUG; - my $svc_x = $self->h_svc_x(@_); + my $svc_x = $self->h_svc_x($end, $start); return () unless $svc_x; my $part_svc = $self->part_svc; @@ -71,7 +92,7 @@ sub _label { } my @label; - eval { @label = $self->$method($svc_x, @_); }; + eval { @label = $self->$method($svc_x, $end, $start, $locale); }; if ($@) { carp 'while resolving history record for svcdb/svcnum ' . @@ -85,9 +106,9 @@ sub _label { =item h_svc_x END_TIMESTAMP [ START_TIMESTAMP ] -Returns the FS::h_svc_XXX object for this service as of END_TIMESTAMP (i.e. an -FS::h_svc_acct object or FS::h_svc_domain object, etc.) and (optionally) not -cancelled before START_TIMESTAMP. +Returns the FS::h_svc_XXX object for this service as of END_TIMESTAMP (i.e. +an FS::h_svc_acct object or FS::h_svc_domain object, etc.) and (optionally) +not cancelled before START_TIMESTAMP. =cut |