X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=site_perl%2Fpart_pkg.pm;h=556146e38eb1210bdf6a1e4b1f12de36cbc4aff5;hb=19c3d2717fb417187fb0f020a7ba2b065f3f8e30;hp=d1c12e47e99b0608637fba5ad646dfa41a86ead0;hpb=889bf4b600c134f91174caf0919a86dbdc4dcf03;p=freeside.git diff --git a/site_perl/part_pkg.pm b/site_perl/part_pkg.pm index d1c12e47e..556146e38 100644 --- a/site_perl/part_pkg.pm +++ b/site_perl/part_pkg.pm @@ -1,12 +1,11 @@ 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 @@ -16,8 +15,10 @@ FS::part_pkg - Object methods for part_pkg objects 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; $error = $record->insert; @@ -27,10 +28,15 @@ FS::part_pkg - Object methods for part_pkg objects $error = $record->check; + @pkg_svc = $record->pkg_svc; + + $svcnum = $record->svcpart; + $svcnum = $record->svcpart( 'svc_acct' ); + =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 @@ -55,23 +61,33 @@ just as you would normally. More advanced semantics are not yet defined. =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 -sub create { - my($proto,$hashref)=@_; +sub table { 'part_pkg'; } - #now in FS::Record::new - #my($field); - #foreach $field (fields('part_pkg')) { - # $hashref->{$field}='' unless defined $hashref->{$field}; - #} +=item clone - $proto->new('part_pkg',$hashref); +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; + my $class = ref($self); + my %hash = $self->hash; + $hash{'pkgpart'} = ''; + $hash{'comment'} = "(CUSTOM) ". $hash{'comment'} + unless $hash{'comment'} =~ /^\(CUSTOM\) /; + #new FS::part_pkg ( \%hash ); # ? + new $class ( \%hash ); # ? } =item insert @@ -79,15 +95,6 @@ sub create { 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. @@ -96,10 +103,7 @@ Currently unimplemented. 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 @@ -107,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. -=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 @@ -127,24 +120,55 @@ insert and replace methods. =cut sub check { - my($self)=@_; - return "Not a part_pkg record!" unless $self->table eq "part_pkg"; + my $self = shift; $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) 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) +associated with this billing item definition (see L). 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 BUGS +=head1 VERSION -It doesn't properly override FS::Record yet. +$Id: part_pkg.pm,v 1.6 1999-07-20 10:37:05 ivan Exp $ + +=head1 BUGS The delete method is unimplemented. @@ -162,6 +186,18 @@ ivan@sisd.com 97-dec-5 pod ivan@sisd.com 98-sep-21 +$Log: part_pkg.pm,v $ +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 + + =cut 1;