[freeside-commits] freeside/FS/FS Schema.pm, 1.143, 1.144 cust_pkg.pm, 1.128, 1.129 part_pkg.pm, 1.91, 1.92

Jeff Finucane,420,, jeff at wavetail.420.am
Sun Jun 21 08:21:32 PDT 2009


Update of /home/cvs/cvsroot/freeside/FS/FS
In directory wavetail.420.am:/tmp/cvs-serv32471/FS/FS

Modified Files:
	Schema.pm cust_pkg.pm part_pkg.pm 
Log Message:
CUSTOM packages/actual flag for custom packages #3988

Index: Schema.pm
===================================================================
RCS file: /home/cvs/cvsroot/freeside/FS/FS/Schema.pm,v
retrieving revision 1.143
retrieving revision 1.144
diff -u -d -r1.143 -r1.144
--- Schema.pm	18 Jun 2009 11:03:34 -0000	1.143
+++ Schema.pm	21 Jun 2009 15:21:29 -0000	1.144
@@ -1191,6 +1191,7 @@
         'plan',          'varchar', 'NULL', $char_d, '', '', 
         'plandata',      'text', 'NULL', '', '', '', 
         'disabled',      'char', 'NULL', 1, '', '', 
+        'custom',        'char', 'NULL', 1, '', '', 
         'taxclass',      'varchar', 'NULL', $char_d, '', '', 
         'classnum',      'int',     'NULL', '', '', '', 
         'taxproductnum', 'int',     'NULL', '', '', '', 

Index: part_pkg.pm
===================================================================
RCS file: /home/cvs/cvsroot/freeside/FS/FS/part_pkg.pm,v
retrieving revision 1.91
retrieving revision 1.92
diff -u -d -r1.91 -r1.92
--- part_pkg.pm	18 Jun 2009 11:03:34 -0000	1.91
+++ part_pkg.pm	21 Jun 2009 15:21:30 -0000	1.92
@@ -85,6 +85,8 @@
 
 =item disabled - Disabled flag, empty or `Y'
 
+=item custom - Custom flag, empty or `Y'
+
 =item setup_cost - for cost tracking
 
 =item recur_cost - for cost tracking
@@ -113,9 +115,8 @@
 =item clone
 
 An alternate constructor.  Creates a new package definition by duplicating
-an existing definition.  A new pkgpart is assigned and `(CUSTOM) ' is prepended
-to the comment field.  To add the package definition to the database, see
-L<"insert">.
+an existing definition.  A new pkgpart is assigned and the custom flag is
+set to Y.  To add the package definition to the database, see L<"insert">.
 
 =cut
 
@@ -124,8 +125,7 @@
   my $class = ref($self);
   my %hash = $self->hash;
   $hash{'pkgpart'} = '';
-  $hash{'comment'} = "(CUSTOM) ". $hash{'comment'}
-    unless $hash{'comment'} =~ /^\(CUSTOM\) /;
+  $hash{'custom'} = 'Y';
   #new FS::part_pkg ( \%hash ); # ?
   new $class ( \%hash ); # ?
 }
@@ -452,6 +452,7 @@
     || $self->ut_enum('recurtax', [ '', 'Y' ] )
     || $self->ut_textn('taxclass')
     || $self->ut_enum('disabled', [ '', 'Y' ] )
+    || $self->ut_enum('custom', [ '', 'Y' ] )
     #|| $self->ut_moneyn('setup_cost')
     #|| $self->ut_moneyn('recur_cost')
     || $self->ut_floatn('setup_cost')
@@ -488,20 +489,30 @@
   '';
 }
 
-=item pkg_comment
+=item pkg_comment [ OPTION => VALUE... ]
 
 Returns an (internal) string representing this package.  Currently,
 "pkgpart: pkg - comment", is returned.  "pkg - comment" may be returned in the
-future, omitting pkgpart.
+future, omitting pkgpart.  The comment will have '(CUSTOM) ' prepended if
+custom is Y.
+
+If the option nopkgpart is true then the "pkgpart: ' is omitted.
 
 =cut
 
 sub pkg_comment {
   my $self = shift;
+  my %opt = @_;
 
   #$self->pkg. ' - '. $self->comment;
   #$self->pkg. ' ('. $self->comment. ')';
-  $self->pkgpart. ': '. $self->pkg. ' - '. $self->comment;
+  my $pre = $opt{nopkgpart} ? '' : $self->pkgpart. ': ';
+  $pre. $self->pkg. ' - '. $self->custom_comment;
+}
+
+sub custom_comment {
+  my $self = shift;
+  ( $self->custom ? '(CUSTOM) ' : '' ). $self->comment;
 }
 
 =item pkg_class
@@ -1257,6 +1268,33 @@
 
   }
 
+  # now upgrade to the explicit custom flag
+
+  @part_pkg = qsearch({
+    'table'     => 'part_pkg',
+    'hashref'   => { disabled => 'Y', custom => '' },
+    'extra_sql' => "AND comment LIKE '(CUSTOM) %'",
+  });
+
+  foreach my $part_pkg (@part_pkg) {
+    my $new = new FS::part_pkg { $part_pkg->hash };
+    $new->custom('Y');
+    my $comment = $part_pkg->comment;
+    $comment =~ s/^\(CUSTOM\) //;
+    $new->comment($comment);
+
+    my $pkg_svc = { map { $_->svcpart => $_->quantity } $part_pkg->pkg_svc };
+    my $primary = $part_pkg->svcpart;
+    my $options = { $part_pkg->options };
+
+    my $error = $new->replace( $part_pkg,
+                               'pkg_svc'     => $pkg_svc,
+                               'primary_svc' => $primary,
+                               'options'     => $options,
+                             );
+    die $error if $error;
+  }
+
 }
 
 =item curuser_pkgs_sql
@@ -1379,6 +1417,8 @@
 
 part_pkg_taxrate is Pg specific
 
+replace should be smarter about managing the related tables (options, pkg_svc)
+
 =head1 SEE ALSO
 
 L<FS::Record>, L<FS::cust_pkg>, L<FS::type_pkgs>, L<FS::pkg_svc>, L<Safe>.

Index: cust_pkg.pm
===================================================================
RCS file: /home/cvs/cvsroot/freeside/FS/FS/cust_pkg.pm,v
retrieving revision 1.128
retrieving revision 1.129
diff -u -d -r1.128 -r1.129
--- cust_pkg.pm	27 May 2009 07:50:40 -0000	1.128
+++ cust_pkg.pm	21 Jun 2009 15:21:30 -0000	1.129
@@ -2193,6 +2193,10 @@
 
 active, inactive, suspended, one-time charge, inactive, cancel (or cancelled)
 
+=item custom
+
+ boolean selects custom packages
+
 =item classnum
 
 =item pkgpart
@@ -2321,6 +2325,12 @@
   #eslaf
 
   ###
+  # parse custom
+  ###
+
+  push @where,  "part_pkg.custom = 'Y'" if $params->{custom};
+
+  ###
   # parse part_pkg
   ###
 



More information about the freeside-commits mailing list