[freeside-commits] branch master updated. 3512d4ac59e1b0364ac9e42308bd91972e8085bf

Ivan ivan at 420.am
Wed Mar 27 19:28:53 PDT 2013


The branch, master has been updated
       via  3512d4ac59e1b0364ac9e42308bd91972e8085bf (commit)
       via  f0cd66efaddc221bdd2584eececd50a6953d5085 (commit)
      from  4fdaf2e78de5e32772af84b010de28656d8422fb (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 3512d4ac59e1b0364ac9e42308bd91972e8085bf
Merge: f0cd66e 4fdaf2e
Author: Ivan Kohler <ivan at freeside.biz>
Date:   Wed Mar 27 19:28:46 2013 -0700

    Merge branch 'master' of git.freeside.biz:/home/git/freeside


commit f0cd66efaddc221bdd2584eececd50a6953d5085
Author: Ivan Kohler <ivan at freeside.biz>
Date:   Wed Mar 27 19:26:19 2013 -0700

    UI for part_pkg_msgcat, RT#19906

diff --git a/FS/FS/Mason.pm b/FS/FS/Mason.pm
index ae75539..376fedc 100644
--- a/FS/FS/Mason.pm
+++ b/FS/FS/Mason.pm
@@ -337,6 +337,7 @@ if ( -e $addl_handler_use_file ) {
   use FS::part_pkg_usage_class;
   use FS::part_pkg_usage;
   use FS::cdr_cust_pkg_usage;
+  use FS::part_pkg_msgcat;
   # Sammath Naur
 
   if ( $FS::Mason::addl_handler_use ) {
diff --git a/FS/FS/part_pkg.pm b/FS/FS/part_pkg.pm
index efb1b59..40fb1dc 100644
--- a/FS/FS/part_pkg.pm
+++ b/FS/FS/part_pkg.pm
@@ -1,7 +1,8 @@
 package FS::part_pkg;
+use base qw( FS::m2m_Common FS::o2m_Common FS::option_Common );
 
 use strict;
-use vars qw( @ISA %plans $DEBUG $setup_hack $skip_pkg_svc_hack );
+use vars qw( %plans $DEBUG $setup_hack $skip_pkg_svc_hack );
 use Carp qw(carp cluck confess);
 use Scalar::Util qw( blessed );
 use Time::Local qw( timelocal_nocheck );
@@ -25,7 +26,6 @@ use FS::part_pkg_discount;
 use FS::part_pkg_usage;
 use FS::part_pkg_vendor;
 
- at ISA = qw( FS::m2m_Common FS::option_Common );
 $DEBUG = 0;
 $setup_hack = 0;
 $skip_pkg_svc_hack = 0;
@@ -726,12 +726,24 @@ returns the base pkg field.
 
 sub pkg_locale {
   my( $self, $locale ) = @_;
-  my $part_pkg_msgcat = qsearchs( 'part_pkg_msgcat', { pkgpart=>$self->pkgpart,
-                                                       locale =>$locale       })
-    or return $self->pkg;
+  my $part_pkg_msgcat = $self->part_pkg_msgcat($locale) or return $self->pkg;
   $part_pkg_msgcat->pkg;
 }
 
+=item part_pkg_msgcat LOCALE
+
+Like pkg_locale, but returns the FS::part_pkg_msgcat object itself.
+
+=cut
+
+sub part_pkg_msgcat {
+  my( $self, $locale ) = @_;
+  qsearchs( 'part_pkg_msgcat', {
+    pkgpart => $self->pkgpart,
+    locale  => $locale,
+  });
+}
+
 =item pkg_comment [ OPTION => VALUE... ]
 
 Returns an (internal) string representing this package.  Currently,
diff --git a/httemplate/edit/part_pkg.cgi b/httemplate/edit/part_pkg.cgi
index 7baf84d..d1d54fc 100755
--- a/httemplate/edit/part_pkg.cgi
+++ b/httemplate/edit/part_pkg.cgi
@@ -28,7 +28,8 @@
 
               'labels' => { 
                             'pkgpart'          => 'Package Definition',
-                            'pkg'              => 'Package (customer-visible)',
+                            'pkg'              => 'Package',
+                            %locale_field_labels,
                             'comment'          => 'Comment (customer-hidden)',
                             'classnum'         => 'Package class',
                             'addon_classnum'   => 'Restrict additional orders to package class',
@@ -80,6 +81,7 @@
                                 size      => 40, #32
                                 maxlength => 50,
                               },
+                              #@locale_fields,
                               {field=>'comment',  type=>'text', size=>40 }, #32
                               { field         => 'agentnum',
                                 type          => 'select-agent',
@@ -337,6 +339,22 @@ my $agent_clone_extra_sql =
 my $conf = new FS::Conf;
 my $taxproducts = $conf->exists('enable_taxproducts');
 
+my @locales = grep { ! /^en_/i } $conf->config('available-locales');
+my %locale_labels =  map {
+  ( $_ => 'Package -- '. FS::Locales->description($_) )
+} @locales;
+ at locales = 
+  sort { $locale_labels{$a} cmp $locale_labels{$b} }
+    @locales;
+
+my $n = 0;
+my %locale_field_labels = (
+  map {
+        ( 'pkgpartmsgnum'. $n++. '_pkg' => $locale_labels{$_} );
+      }
+    @locales
+);
+
 my $sth = dbh->prepare("SELECT COUNT(*) FROM part_pkg_report_option".
                        "  WHERE disabled IS NULL OR disabled = ''  ")
   or die dbh->errstr;
@@ -368,6 +386,42 @@ my $recur_show_zero_disabled = 1;
 
 my $pkgpart = '';
 
+my $splice_locale_fields = sub {
+  my( $fields, $pkey_value_callback, $pkg_value_callback ) = @_;
+
+  my $n = 0;
+  my @locale_fields = (
+    map { 
+          my $pkey_value= $pkey_value_callback ? &$pkey_value_callback($_) : '';
+          my $pkg_value = $pkg_value_callback
+                            ? $pkg_value_callback eq 'cgiparam'
+                                ? $cgi->param('pkgpartmsgnum'. $n. '_pkg')
+                                : &$pkg_value_callback($_)
+                            : '';
+          (
+            { field     => 'pkgpartmsgnum'. $n,
+              type      => 'hidden',
+              value     => $pkey_value,
+            },
+            { field     => 'pkgpartmsgnum'. $n. '_locale',
+              type      => 'hidden',
+              value     => $_,
+            },
+            { field     => 'pkgpartmsgnum'. $n++. '_pkg',
+              type      => 'text',
+              size      => 40,
+              #maxlength => 50,
+              value     => $pkg_value,
+            },
+          );
+  
+        }
+      @locales
+  );
+  splice(@$fields, 7, 0, @locale_fields); #XXX 7 is arbitrary above
+
+};
+
 my $error_callback = sub {
   my($cgi, $object, $fields, $opt ) = @_;
 
@@ -408,6 +462,16 @@ my $error_callback = sub {
 
   $pkgpart = $object->pkgpart;
 
+  &$splice_locale_fields(
+    $fields,
+    sub {
+          my $locale = shift;
+          my $part_pkg_msgcat = $object->part_pkg_msgcat($locale);
+          $part_pkg_msgcat ? $part_pkg_msgcat->pkgpartmsgnum : '';
+        },
+    'cgiparam'
+  );
+
 };
 
 my $new_hashref_callback = sub { { 'plan' => 'flat' }; };
@@ -473,6 +537,20 @@ my $edit_callback = sub {
 
   $pkgpart = $object->pkgpart;
 
+  &$splice_locale_fields(
+    $fields,
+    sub {
+          my $locale = shift;
+          my $part_pkg_msgcat = $object->part_pkg_msgcat($locale);
+          $part_pkg_msgcat ? $part_pkg_msgcat->pkgpartmsgnum : '';
+        },
+    sub {
+          my $locale = shift;
+          my $part_pkg_msgcat = $object->part_pkg_msgcat($locale);
+          $part_pkg_msgcat ? $part_pkg_msgcat->pkg : '';
+        }
+  );
+
 };
 
 my $new_callback = sub {
@@ -487,6 +565,8 @@ my $new_callback = sub {
 
   $options{'suspend_bill'}=1 if $conf->exists('part_pkg-default_suspend_bill');
 
+  &$splice_locale_fields($fields, '', '');
+
 };
 
 my $clone_callback = sub {
@@ -520,6 +600,16 @@ my $clone_callback = sub {
     foreach (qw( setup_fee recur_fee disable_line_item_date_ranges ));
 
   $recur_disabled = $object->freq ? 0 : 1;
+
+  &$splice_locale_fields(
+    $fields,
+    '',
+    sub {
+      my $locale = shift;
+      my $part_pkg_msgcat = $object->part_pkg_msgcat($locale);
+      $part_pkg_msgcat ? $part_pkg_msgcat->pkg : '';
+    }
+  );
 };
 
 my $discount_error_callback = sub {
diff --git a/httemplate/edit/process/part_pkg.cgi b/httemplate/edit/process/part_pkg.cgi
index 2ac57f9..932e33b 100755
--- a/httemplate/edit/process/part_pkg.cgi
+++ b/httemplate/edit/process/part_pkg.cgi
@@ -10,6 +10,7 @@
               'precheck_callback' => $precheck_callback,
               'args_callback'     => $args_callback,
               'process_m2m'       => \@process_m2m,
+              'process_o2m'       => \@process_o2m,
           )
 %>
 <%init>
@@ -244,4 +245,11 @@ if ( $cgi->param('pkgpart') || ! $conf->exists('agent_defaultpkg') ) {
   };
 }
 
+my @process_o2m = (
+  {
+    'table'  => 'part_pkg_msgcat',
+    'fields' => [qw( locale pkg )],
+  },
+);
+
 </%init>

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

Summary of changes:
 FS/FS/Mason.pm                       |    1 +
 FS/FS/part_pkg.pm                    |   22 ++++++--
 httemplate/edit/part_pkg.cgi         |   92 +++++++++++++++++++++++++++++++++-
 httemplate/edit/process/part_pkg.cgi |    8 +++
 4 files changed, 117 insertions(+), 6 deletions(-)




More information about the freeside-commits mailing list