initial h2xs
[freeside.git] / site_perl / part_pkg.pm
index 4643b9f..556146e 100644 (file)
@@ -1,12 +1,11 @@
 package FS::part_pkg;
 
 use strict;
 package FS::part_pkg;
 
 use strict;
-use vars qw(@ISA @EXPORT_OK);
-use Exporter;
-use FS::Record qw(fields hfields);
+use vars qw( @ISA );
+use FS::Record qw( qsearch );
+use FS::pkg_svc;
 
 
-@ISA = qw(FS::Record Exporter);
-@EXPORT_OK = qw(hfields fields);
+@ISA = qw( FS::Record );
 
 =head1 NAME
 
 
 =head1 NAME
 
@@ -16,8 +15,8 @@ FS::part_pkg - Object methods for part_pkg objects
 
   use FS::part_pkg;
 
 
   use FS::part_pkg;
 
-  $record = create FS::part_pkg \%hash
-  $record = create FS::part_pkg { 'column' => 'value' };
+  $record = new FS::part_pkg \%hash
+  $record = new FS::part_pkg { 'column' => 'value' };
 
   $custom_record = $template_record->clone;
 
 
   $custom_record = $template_record->clone;
 
@@ -29,10 +28,15 @@ FS::part_pkg - Object methods for part_pkg objects
 
   $error = $record->check;
 
 
   $error = $record->check;
 
+  @pkg_svc = $record->pkg_svc;
+
+  $svcnum = $record->svcpart;
+  $svcnum = $record->svcpart( 'svc_acct' );
+
 =head1 DESCRIPTION
 
 =head1 DESCRIPTION
 
-An FS::part_pkg represents a billing item definition.  FS::part_pkg inherits
-from FS::Record.  The following fields are currently supported:
+An FS::part_pkg object represents a billing item definition.  FS::part_pkg
+inherits from FS::Record.  The following fields are currently supported:
 
 =over 4
 
 
 =over 4
 
@@ -57,40 +61,33 @@ just as you would normally.  More advanced semantics are not yet defined.
 
 =over 4 
 
 
 =over 4 
 
-=item create HASHREF
+=item new HASHREF
 
 Creates a new billing item definition.  To add the billing item definition to
 the database, see L<"insert">.
 
 =cut
 
 
 Creates a new billing item definition.  To add the billing item definition to
 the database, see L<"insert">.
 
 =cut
 
-sub create {
-  my($proto,$hashref)=@_;
-
-  #now in FS::Record::new
-  #my($field);
-  #foreach $field (fields('part_pkg')) {
-  #  $hashref->{$field}='' unless defined $hashref->{$field};
-  #}
-
-  $proto->new('part_pkg',$hashref);
-}
+sub table { 'part_pkg'; }
 
 =item clone
 
 
 =item clone
 
-Creates a new billing item definition by duplicating an existing definition.
-A new pkgpart is assigned and "(CUSTOM) " is prepended to the comment field.
-To add the billing item definition to the database, see L<"insert">.
+An alternate constructor.  Creates a new billing item definition by duplicating
+an existing definition.  A new pkgpart is assigned and `(CUSTOM) ' is prepended
+to the comment field.  To add the billing item definition to the database, see
+L<"insert">.
 
 =cut
 
 sub clone {
   my $self = shift;
 
 =cut
 
 sub clone {
   my $self = shift;
+  my $class = ref($self);
   my %hash = $self->hash;
   $hash{'pkgpart'} = '';
   $hash{'comment'} = "(CUSTOM) ". $hash{'comment'}
     unless $hash{'comment'} =~ /^\(CUSTOM\) /;
   my %hash = $self->hash;
   $hash{'pkgpart'} = '';
   $hash{'comment'} = "(CUSTOM) ". $hash{'comment'}
     unless $hash{'comment'} =~ /^\(CUSTOM\) /;
-  create FS::part_pkg ( \%hash ); # ?
+  #new FS::part_pkg ( \%hash ); # ?
+  new $class ( \%hash ); # ?
 }
 
 =item insert
 }
 
 =item insert
@@ -98,15 +95,6 @@ sub clone {
 Adds this billing item definition to the database.  If there is an error,
 returns the error, otherwise returns false.
 
 Adds this billing item definition to the database.  If there is an error,
 returns the error, otherwise returns false.
 
-=cut
-
-sub insert {
-  my($self)=@_;
-
-  $self->check or
-  $self->add;
-}
-
 =item delete
 
 Currently unimplemented.
 =item delete
 
 Currently unimplemented.
@@ -115,10 +103,7 @@ Currently unimplemented.
 
 sub delete {
   return "Can't (yet?) delete package definitions.";
 
 sub delete {
   return "Can't (yet?) delete package definitions.";
-# maybe check & make sure the pkgpart isn't in cust_pkg or type_pkgs?
-#  my($self)=@_;
-#
-#  $self->del;
+# check & make sure the pkgpart isn't in cust_pkg or type_pkgs?
 }
 
 =item replace OLD_RECORD
 }
 
 =item replace OLD_RECORD
@@ -126,17 +111,6 @@ sub delete {
 Replaces OLD_RECORD with this one in the database.  If there is an error,
 returns the error, otherwise returns false.
 
 Replaces OLD_RECORD with this one in the database.  If there is an error,
 returns the error, otherwise returns false.
 
-=cut
-
-sub replace {
-  my($new,$old)=@_;
-  return "(Old) Not a part_pkg record!" unless $old->table eq "part_pkg";
-  return "Can't change pkgpart!"
-    unless $old->getfield('pkgpart') eq $new->getfield('pkgpart');
-  $new->check or
-  $new->rep($old);
-}
-
 =item check
 
 Checks all fields to make sure this is a valid billing item definition.  If
 =item check
 
 Checks all fields to make sure this is a valid billing item definition.  If
@@ -146,29 +120,56 @@ insert and replace methods.
 =cut
 
 sub check {
 =cut
 
 sub check {
-  my($self)=@_;
-  return "Not a part_pkg record!" unless $self->table eq "part_pkg";
+  my $self = shift;
 
   $self->ut_numbern('pkgpart')
 
   $self->ut_numbern('pkgpart')
-    or $self->ut_text('pkg')
-    or $self->ut_text('comment')
-    or $self->ut_anything('setup')
-    or $self->ut_number('freq')
-    or $self->ut_anything('recur')
+    || $self->ut_text('pkg')
+    || $self->ut_text('comment')
+    || $self->ut_anything('setup')
+    || $self->ut_number('freq')
+    || $self->ut_anything('recur')
   ;
   ;
+}
 
 
+=item pkg_svc
+
+Returns all FS::pkg_svc objects (see L<FS::pkg_svc>) for this package
+definition.
+
+=cut
+
+sub pkg_svc {
+  my $self = shift;
+  qsearch( 'pkg_svc', { 'pkgpart' => $self->pkgpart } );
+}
+
+=item svcpart [ SVCDB ]
+
+Returns the svcpart of a single service definition (see L<FS::part_svc>)
+associated with this billing item definition (see L<FS::pkg_svc>).  Returns
+false if there not exactly one service definition with quantity 1, or if 
+SVCDB is specified and does not match the svcdb of the service definition, 
+
+=cut
+
+sub svcpart {
+  my $self = shift;
+  my $svcdb = shift;
+  my @pkg_svc = $self->pkg_svc;
+  return '' if scalar(@pkg_svc) != 1
+               || $pkg_svc[0]->quantity != 1
+               || ( $svcdb && $pkg_svc[0]->part_svc->svcdb ne $svcdb );
+  $pkg_svc[0]->svcpart;
 }
 
 =back
 
 =head1 VERSION
 
 }
 
 =back
 
 =head1 VERSION
 
-$Id: part_pkg.pm,v 1.3 1998-11-15 13:00:15 ivan Exp $
+$Id: part_pkg.pm,v 1.6 1999-07-20 10:37:05 ivan Exp $
 
 =head1 BUGS
 
 
 =head1 BUGS
 
-It doesn't properly override FS::Record yet.
-
 The delete method is unimplemented.
 
 setup and recur semantics are not yet defined (and are implemented in
 The delete method is unimplemented.
 
 setup and recur semantics are not yet defined (and are implemented in
@@ -186,7 +187,14 @@ ivan@sisd.com 97-dec-5
 pod ivan@sisd.com 98-sep-21
 
 $Log: part_pkg.pm,v $
 pod ivan@sisd.com 98-sep-21
 
 $Log: part_pkg.pm,v $
-Revision 1.3  1998-11-15 13:00:15  ivan
+Revision 1.6  1999-07-20 10:37:05  ivan
+cleaned up the new one-screen signup bits in htdocs/edit/cust_main.cgi to
+prepare for a signup server
+
+Revision 1.5  1998/12/31 01:04:16  ivan
+doc
+
+Revision 1.3  1998/11/15 13:00:15  ivan
 bugfix in clone method, clone method doc clarification
 
 
 bugfix in clone method, clone method doc clarification