[freeside-commits] branch master updated. 573e68cc026cddd6e52d2f2027da388054a128d1

Mark Wells mark at 420.am
Thu Jan 30 13:17:26 PST 2014


The branch, master has been updated
       via  573e68cc026cddd6e52d2f2027da388054a128d1 (commit)
       via  82380ef8cb6e506f63dd4a8d1abf89cb079ae6cc (commit)
       via  4e082c20bcb6754f6f832cfc95d45198a2b920f5 (commit)
      from  6c442603b4c7e03cac88a425355eb50abd10d569 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
commit 573e68cc026cddd6e52d2f2027da388054a128d1
Author: Mark Wells <mark at freeside.biz>
Date:   Thu Jan 30 13:16:14 2014 -0800

    localize CDR column headings, #27276

diff --git a/FS/FS/Locales.pm b/FS/FS/Locales.pm
index bf10990..6dd7c5a 100644
--- 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) = @_;
-  %{ $locales{$locale} };
+  if (!$locale) {
+    return ();
+  } elsif (exists $locales{$locale}) {
+    return %{ $locales{$locale} };
+  } else {
+    die "unsupported locale '$locale'\n";
+  }
 }
 
 =item description LOCALE
diff --git a/FS/FS/detail_format.pm b/FS/FS/detail_format.pm
index 88cc02f..665afdb 100644
--- 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 Date::Format qw(time2str);
+use FS::L10N;
+use Date::Language;
 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.
 
+- locale: a locale string to use for static text and date formats.  This
+  is optional.
+
 =cut
 
 sub new {
@@ -58,11 +62,21 @@ sub new {
   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'} || []),
-             }; 
+               _lh      => FS::L10N->get_handle($locale),
+               _dh      => eval { Date::Language->new($language_name) } ||
+                           Date::Language->new()
+             };
   bless $self, $class;
 }
 
@@ -139,7 +153,7 @@ sub header {
   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') || '$');
 }
 
+# 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 {
diff --git a/FS/FS/detail_format/accountcode_default.pm b/FS/FS/detail_format/accountcode_default.pm
index f76c9d5..562a8a9 100644
--- 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 Date::Format qw(time2str);
 
 sub name { 'Default with accountcode' }
 
@@ -12,8 +11,8 @@ sub columns {
   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,
diff --git a/FS/FS/detail_format/accountcode_simple.pm b/FS/FS/detail_format/accountcode_simple.pm
index 10a28db..5a19310 100644
--- 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 Date::Format qw(time2str);
 
 sub name { 'Simple with source' }
 
@@ -12,8 +11,8 @@ sub columns {
   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),
diff --git a/FS/FS/detail_format/basic.pm b/FS/FS/detail_format/basic.pm
index 811cf40..c45e926 100644
--- 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 Date::Format qw(time2str);
 
 sub name { 'Basic' }
 
@@ -12,7 +11,7 @@ sub columns {
   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),
diff --git a/FS/FS/detail_format/default.pm b/FS/FS/detail_format/default.pm
index 6c73d08..44abc83 100644
--- 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 Date::Format qw(time2str);
 
 sub name { 'Default' }
 
@@ -12,8 +11,8 @@ sub columns {
   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),
diff --git a/FS/FS/detail_format/description_default.pm b/FS/FS/detail_format/description_default.pm
index 42e1725..7bc3ee2 100644
--- 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 Date::Format qw(time2str);
 
 sub name { 'Default with description field as destination' }
 
@@ -13,8 +12,8 @@ sub columns {
   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),
diff --git a/FS/FS/detail_format/simple.pm b/FS/FS/detail_format/simple.pm
index ef92706..9622e32 100644
--- 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 Date::Format qw(time2str);
 
 sub name { 'Simple' }
 
@@ -12,8 +11,8 @@ sub columns {
   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),
diff --git a/FS/FS/detail_format/simple2.pm b/FS/FS/detail_format/simple2.pm
index 82773d2..d571141 100644
--- 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 Date::Format qw(time2str);
 
 sub name { 'Simple with source' }
 
@@ -12,8 +11,8 @@ sub columns {
   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,
diff --git a/FS/FS/detail_format/source_default.pm b/FS/FS/detail_format/source_default.pm
index 1f46cd2..592fd3c 100644
--- 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 Date::Format qw(time2str);
 
 sub name { 'Default with source' }
 
@@ -13,8 +12,8 @@ sub columns {
   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),
diff --git a/FS/FS/part_pkg/voip_cdr.pm b/FS/FS/part_pkg/voip_cdr.pm
index a55832d..229d4f6 100644
--- 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 $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');
 
diff --git a/FS/FS/part_pkg/voip_inbound.pm b/FS/FS/part_pkg/voip_inbound.pm
index 1566c18..052bb7f 100644
--- 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 = 
-    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')

commit 82380ef8cb6e506f63dd4a8d1abf89cb079ae6cc
Author: Mark Wells <mark at freeside.biz>
Date:   Wed Jan 29 18:34:27 2014 -0800

    fix localization cache, #27276

diff --git a/FS/FS/L10N/DBI.pm b/FS/FS/L10N/DBI.pm
index db387db..dc92317 100644
--- a/FS/FS/L10N/DBI.pm
+++ b/FS/FS/L10N/DBI.pm
@@ -3,15 +3,22 @@ use base qw(FS::L10N);
 use strict;
 use FS::Msgcat;
 
-our %Lexicon = ();
+sub lexicon {
+  my $lh = shift;
+  my $class = ref($lh) || $lh;
+  no strict 'refs';
+  \%{ $class . '::Lexicon' };
+}
 
 sub maketext {
   my($lh, $key, @rest) = @_;
 
-  unless ( exists $Lexicon{$key} ) {
-    my $lang = $lh->language_tag;
-    $lang =~ s/-(\w*)/_\U$1/;
-    $Lexicon{$key} = FS::Msgcat::_gettext( $key, $lang );
+  my $lang = $lh->language_tag;
+  $lang =~ s/-(\w*)/_\U$1/;
+
+  my $lex = $lh->lexicon;
+  unless ( exists $lex->{$key} ) {
+    $lex->{$key} = FS::Msgcat::_gettext( $key, $lang );
   }
 
   my $res = eval { $lh->SUPER::maketext($key, @rest) };

commit 4e082c20bcb6754f6f832cfc95d45198a2b920f5
Author: Mark Wells <mark at freeside.biz>
Date:   Wed Jan 29 18:34:16 2014 -0800

    make date_format a localized config option, #27276

diff --git a/FS/FS/Conf.pm b/FS/FS/Conf.pm
index 597d193..415b90a 100644
--- a/FS/FS/Conf.pm
+++ b/FS/FS/Conf.pm
@@ -1061,6 +1061,7 @@ sub reason_type_options {
                        '%d/%m/%Y' => 'DD/MM/YYYY',
 		       '%Y/%m/%d' => 'YYYY/MM/DD',
                      ],
+    'per_locale'  => 1,
   },
 
   {
@@ -1075,6 +1076,7 @@ sub reason_type_options {
                        '%d/%m/%Y'  => 'DD/MM/YYYY',
 		       '%Y/%m/%d'  => 'YYYY/MM/DD',
                      ],
+    'per_locale'  => 1,
   },
 
   {
diff --git a/FS/FS/Template_Mixin.pm b/FS/FS/Template_Mixin.pm
index c8e5546..00151ae 100644
--- a/FS/FS/Template_Mixin.pm
+++ b/FS/FS/Template_Mixin.pm
@@ -2,7 +2,7 @@ package FS::Template_Mixin;
 
 use strict;
 use vars qw( $DEBUG $me
-             $money_char $date_format $rdate_format $date_format_long );
+             $money_char );
              # but NOT $conf
 use vars qw( $invoice_lines @buf ); #yuck
 use List::Util qw(sum);
@@ -27,9 +27,6 @@ $me = '[FS::Template_Mixin]';
 FS::UID->install_callback( sub { 
   my $conf = new FS::Conf; #global
   $money_char       = $conf->config('money_char')       || '$';  
-  $date_format      = $conf->config('date_format')      || '%x'; #/YY
-  $rdate_format     = $conf->config('date_format')      || '%m/%d/%Y';  #/YYYY
-  $date_format_long = $conf->config('date_format_long') || '%b %o, %Y';
 } );
 
 =item conf [ MODE ]
@@ -406,14 +403,6 @@ sub print_generic {
   my $escape_function_nonbsp = ($format eq 'html')
                                  ? \&_html_escape : $escape_function;
 
-  my %date_formats = ( 'latex'    => $date_format_long,
-                       'html'     => $date_format_long,
-                       'template' => '%s',
-                     );
-  $date_formats{'html'} =~ s/ / /g;
-
-  my $date_format = $date_formats{$format};
-
   my %newline_tokens = (  'latex'     => '\\\\',
                           'html'      => '<br>',
                           'template'  => "\n",
@@ -498,14 +487,14 @@ sub print_generic {
     '_date'           => ( $params{'no_date'} ? '' : $self->_date ),
     'date'            => ( $params{'no_date'}
                              ? ''
-                             : $self->time2str_local($date_format, $self->_date)
+                             : $self->time2str_local('long', $self->_date, $format)
                          ),
-    'today'           => $self->time2str_local($date_format_long, $today),
+    'today'           => $self->time2str_local('long', $today, $format),
     'terms'           => $self->terms,
     'template'        => $template, #params{'template'},
     'notice_name'     => $notice_name, # escape?
     'current_charges' => sprintf("%.2f", $self->charged),
-    'duedate'         => $self->due_date2str($rdate_format), #date_format?
+    'duedate'         => $self->due_date2str('rdate'), #date_format?
 
     #customer info
     'custnum'         => $cust_main->display_custnum,
@@ -547,7 +536,7 @@ sub print_generic {
   #localization
   $invoice_data{'emt'} = sub { &$escape_function($self->mt(@_)) };
   # prototype here to silence warnings
-  $invoice_data{'time2str'} = sub ($;$$) { $self->time2str_local(@_) };
+  $invoice_data{'time2str'} = sub ($;$$) { $self->time2str_local(@_, $format) };
 
   my $min_sdate = 999999999999;
   my $max_edate = 0;
@@ -560,9 +549,10 @@ sub print_generic {
   }
 
   $invoice_data{'bill_period'} = '';
-  $invoice_data{'bill_period'} = $self->time2str_local('%e %h', $min_sdate) 
-                                 . " to " .
-                                 $self->time2str_local('%e %h', $max_edate)
+  $invoice_data{'bill_period'} =
+      $self->time2str_local('%e %h', $min_sdate, $format) 
+      . " to " .
+      $self->time2str_local('%e %h', $max_edate, $format)
     if ($max_edate != 0 && $min_sdate != 999999999999);
 
   $invoice_data{finance_section} = '';
@@ -670,7 +660,7 @@ sub print_generic {
         next if $cust_pay->_date > $self->_date;
         push @payments, {
             '_date'       => $cust_pay->_date,
-            'date'        => time2str($date_format, $cust_pay->_date),
+            'date'        => $self->time2str_local('long', $cust_pay->_date, $format),
             'payinfo'     => $cust_pay->payby_payinfo_pretty,
             'amount'      => sprintf('%.2f', $cust_pay->paid),
         };
@@ -685,7 +675,7 @@ sub print_generic {
         next if $cust_credit->_date > $self->_date;
         push @credits, {
             '_date'       => $cust_credit->_date,
-            'date'        => time2str($date_format, $cust_credit->_date),
+            'date'        => $self->time2str_local('long', $cust_credit->_date, $format),
             'creditreason'=> $cust_credit->reason,
             'amount'      => sprintf('%.2f', $cust_credit->amount),
         };
@@ -1725,7 +1715,7 @@ sub balance_due_msg {
   return $msg unless $self->terms;
   if ( $self->due_date ) {
     $msg .= ' - ' . $self->mt('Please pay by'). ' '.
-      $self->due_date2str($date_format);
+      $self->due_date2str('short');
   } elsif ( $self->terms ) {
     $msg .= ' - '. $self->terms;
   }
@@ -1738,7 +1728,7 @@ sub balance_due_date {
   my $duedate = '';
   if (    $conf->exists('invoice_default_terms') 
        && $conf->config('invoice_default_terms')=~ /^\s*Net\s*(\d+)\s*$/ ) {
-    $duedate = $self->time2str_local($rdate_format, $self->_date + ($1*86400) );
+    $duedate = $self->time2str_local('rdate', $self->_date + ($1*86400) );
   }
   $duedate;
 }
@@ -1756,7 +1746,7 @@ Returns a string with the date, for example: "3/20/2008"
 
 sub _date_pretty {
   my $self = shift;
-  $self->time2str_local($date_format, $self->_date);
+  $self->time2str_local('short', $self->_date);
 }
 
 =item _items_sections OPTIONS
@@ -2756,8 +2746,8 @@ sub _items_cust_bill_pkg {
         if ( $cust_bill_pkg->recur != 0 ) {
           push @b, {
             'description' => "$desc (".
-                             $self->time2str_local($date_format, $cust_bill_pkg->sdate). ' - '.
-                             $self->time2str_local($date_format, $cust_bill_pkg->edate). ')',
+                             $self->time2str_local('short', $cust_bill_pkg->sdate). ' - '.
+                             $self->time2str_local('short', $cust_bill_pkg->edate). ')',
             'amount'      => sprintf("%.2f", $cust_bill_pkg->recur),
           };
         }
diff --git a/FS/FS/cust_bill.pm b/FS/FS/cust_bill.pm
index 165bb1a..83ddb65 100644
--- a/FS/FS/cust_bill.pm
+++ b/FS/FS/cust_bill.pm
@@ -2,7 +2,7 @@ package FS::cust_bill;
 use base qw( FS::Template_Mixin FS::cust_main_Mixin FS::Record );
 
 use strict;
-use vars qw( $DEBUG $me $date_format );
+use vars qw( $DEBUG $me );
              # but NOT $conf
 use Fcntl qw(:flock); #for spool_csv
 use Cwd;
@@ -44,7 +44,6 @@ $me = '[FS::cust_bill]';
 #ask FS::UID to run this stuff for us later
 FS::UID->install_callback( sub { 
   my $conf = new FS::Conf; #global
-  $date_format      = $conf->config('date_format')      || '%x'; #/YY
 } );
 
 =head1 NAME
@@ -1966,7 +1965,7 @@ sub print_csv {
     my $taxtotal = 0;
     $taxtotal += $_->{'amount'} foreach $self->_items_tax;
 
-    my $duedate = $self->due_date2str('%m/%d/%Y'); #date_format?
+    my $duedate = $self->due_date2str('%m/%d/%Y'); # hardcoded, NOT date_format
 
     my( $previous_balance, @unused ) = $self->previous; #previous balance
 
@@ -2966,8 +2965,8 @@ sub _items_previous {
   my @b = ();
   foreach ( @pr_cust_bill ) {
     my $date = $conf->exists('invoice_show_prior_due_date')
-               ? 'due '. $_->due_date2str($date_format)
-               : $self->time2str_local($date_format, $_->_date);
+               ? 'due '. $_->due_date2str('short')
+               : $self->time2str_local('short', $_->_date);
     push @b, {
       'description' => $self->mt('Previous Balance, Invoice #'). $_->invnum. " ($date)",
       #'pkgpart'     => 'N/A',
@@ -3031,7 +3030,7 @@ sub _items_credits {
       #                 " (". time2str("%x",$_->cust_credit->_date) .")".
       #                 $reason,
       'description' => $self->mt('Credit applied').' '.
-                       $self->time2str_local($date_format,$obj->_date). $reason,
+                       $self->time2str_local('short', $obj->_date). $reason,
       'amount'      => sprintf("%.2f",$obj->amount),
     };
   }
@@ -3075,7 +3074,7 @@ sub _items_payments {
   foreach my $obj (@objects) {
     my $cust_pay = $obj->isa('FS::cust_pay') ? $obj : $obj->cust_pay;
     my $desc = $self->mt('Payment received').' '.
-               $self->time2str_local($date_format, $cust_pay->_date );
+               $self->time2str_local('short', $cust_pay->_date );
     $desc .= $self->mt(' via ') .
              $cust_pay->payby_payinfo_pretty( $self->cust_main->locale )
       if $detailed;

-----------------------------------------------------------------------

Summary of changes:
 FS/FS/Conf.pm                              |    2 +
 FS/FS/L10N/DBI.pm                          |   17 ++++++++---
 FS/FS/Locales.pm                           |    8 ++++-
 FS/FS/Template_Mixin.pm                    |   42 ++++++++++-----------------
 FS/FS/cust_bill.pm                         |   13 ++++----
 FS/FS/detail_format.pm                     |   34 ++++++++++++++++++++--
 FS/FS/detail_format/accountcode_default.pm |    5 +--
 FS/FS/detail_format/accountcode_simple.pm  |    5 +--
 FS/FS/detail_format/basic.pm               |    3 +-
 FS/FS/detail_format/default.pm             |    5 +--
 FS/FS/detail_format/description_default.pm |    5 +--
 FS/FS/detail_format/simple.pm              |    5 +--
 FS/FS/detail_format/simple2.pm             |    5 +--
 FS/FS/detail_format/source_default.pm      |    5 +--
 FS/FS/part_pkg/voip_cdr.pm                 |    5 ++-
 FS/FS/part_pkg/voip_inbound.pm             |    6 +++-
 16 files changed, 97 insertions(+), 68 deletions(-)




More information about the freeside-commits mailing list