From 4a5b07fb140e6abe0c29122cf349ff3f917e9610 Mon Sep 17 00:00:00 2001 From: ivan Date: Wed, 30 Dec 1998 00:30:48 +0000 Subject: [PATCH] svc_ stuff is more properly OO - has a common superclass FS::svc_Common --- site_perl/Invoice.pm | 2 +- site_perl/agent.pm | 4 +- site_perl/svc_Common.pm | 190 ++++++++++++++++++++++++++++++++++++++++ site_perl/svc_acct.pm | 81 ++++------------- site_perl/svc_acct_sm.pm | 132 ++++++---------------------- site_perl/svc_domain.pm | 118 ++++++------------------- site_perl/table_template-svc.pm | 126 ++++++-------------------- 7 files changed, 288 insertions(+), 365 deletions(-) create mode 100644 site_perl/svc_Common.pm diff --git a/site_perl/Invoice.pm b/site_perl/Invoice.pm index 5eb596fad..20a016274 100644 --- a/site_perl/Invoice.pm +++ b/site_perl/Invoice.pm @@ -6,7 +6,7 @@ use FS::cust_bill; @ISA = qw(FS::cust_bill); -#warn "FS::Invoice depriciated\n"; +warn "FS::Invoice depriciated\n"; =head1 NAME diff --git a/site_perl/agent.pm b/site_perl/agent.pm index 7632d2fca..cc4fb1088 100644 --- a/site_perl/agent.pm +++ b/site_perl/agent.pm @@ -2,7 +2,7 @@ package FS::agent; use strict; use vars qw( @ISA ); -use FS::Record qw( qsearch qsearchs); +use FS::Record qw( qsearch qsearchs ); use FS::cust_main; use FS::agent_type; @@ -116,7 +116,7 @@ sub check { =head1 VERSION -$Id: agent.pm,v 1.3 1998-12-29 11:59:34 ivan Exp $ +$Id: agent.pm,v 1.4 1998-12-30 00:30:44 ivan Exp $ =head1 BUGS diff --git a/site_perl/svc_Common.pm b/site_perl/svc_Common.pm new file mode 100644 index 000000000..e516e0065 --- /dev/null +++ b/site_perl/svc_Common.pm @@ -0,0 +1,190 @@ +package FS::svc_Common; + +use strict; +use vars qw( @ISA ); +use FS::Record qw( qsearchs fields ); +use FS::cust_svc; +use FS::part_svc; + +@ISA = qw( FS::Record ); + +=head1 NAME + +FS::svc_Common - Object method for all svc_ records + +=head1 SYNOPSIS + +use FS::svc_Common; + +@ISA = qw( FS::svc_Common ); + +=head1 DESCRIPTION + +FS::svc_Common is intended as a base class for table-specific classes to +inherit from, i.e. FS::svc_acct. FS::svc_Common inherits from FS::Record. + +=head1 METHODS + +=over 4 + +=item insert + +Adds this record to the database. If there is an error, returns the error, +otherwise returns false. + +The additional fields pkgnum and svcpart (see L) should be +defined. An FS::cust_svc record will be created and inserted. + +=cut + +sub insert { + my $self = shift; + my $error; + + local $SIG{HUP} = 'IGNORE'; + local $SIG{INT} = 'IGNORE'; + local $SIG{QUIT} = 'IGNORE'; + local $SIG{TERM} = 'IGNORE'; + local $SIG{TSTP} = 'IGNORE'; + + $error = $self->check; + return $error if $error; + + my $svcnum = $self->svcnum; + my $cust_svc; + unless ( $svcnum ) { + $cust_svc = new FS::cust_svc ( { + 'svcnum' => $svcnum, + 'pkgnum' => $self->pkgnum, + 'svcpart' => $self->svcpart, + } ); + $error = $cust_svc->insert; + return $error if $error; + $svcnum = $self->svcnum($cust_svc->svcnum); + } + + $error = $self->SUPER::insert; + if ( $error ) { + $cust_svc->delete if $cust_svc; + return $error; + } + + ''; +} + +=item delete + +Deletes this account from the database. If there is an error, returns the +error, otherwise returns false. + +The corresponding FS::cust_svc record will be deleted as well. + +=cut + +sub delete { + my $self = shift; + my $error; + + local $SIG{HUP} = 'IGNORE'; + local $SIG{INT} = 'IGNORE'; + local $SIG{QUIT} = 'IGNORE'; + local $SIG{TERM} = 'IGNORE'; + local $SIG{TSTP} = 'IGNORE'; + + my $svcnum = $self->svcnum; + + $error = $self->SUPER::delete; + return $error if $error; + + my $cust_svc = qsearchs( 'cust_svc' , { 'svcnum' => $svcnum } ); + $error = $cust_svc->delete; + return $error if $error; + + ''; +} + +=item setfixed; + +Sets any fixed fields for this service (see L). If there is an +error, returns the error, otherwise returns the FS::part_svc object (use ref() +to test the return). Usually called by the check method. + +=cut + +sub setfixed { + my $self = shift; + + my $error; + + $error = + $self->ut_numbern('svcnum') + ; + return $error if $error; + + #get part_svc + my $svcpart; + if ( $self->svcnum ) { + my $cust_svc = qsearchs( 'cust_svc', { 'svcnum' => $self->svcnum } ); + return "Unknown svcnum" unless $cust_svc; + $svcpart = $cust_svc->svcpart; + } else { + $svcpart = $self->getfield('svcpart'); + } + my $part_svc = qsearchs( 'part_svc', { 'svcpart' => $svcpart } ); + return "Unkonwn svcpart" unless $part_svc; + + #set fixed fields from part_svc + foreach my $field ( fields('svc_acct') ) { + if ( $part_svc->getfield('svc_acct__'. $field. '_flag') eq 'F' ) { + $self->setfield( $field, $part_svc->getfield('svc_acct__'. $field) ); + } + } + + $part_svc; + +} + +=item suspend + +=item unsuspend + +=item cancel + +Stubs - return false (no error) so derived classes don't need to define these +methods. Called by the cancel method of FS::cust_pkg (see L). + +=cut + +sub suspend { ''; } +sub unsuspend { ''; } +sub cancel { ''; } + +=back + +=head1 VERSION + +$Id: svc_Common.pm,v 1.1 1998-12-30 00:30:45 ivan Exp $ + +=head1 BUGS + +The setfixed method return value. + +The new method should set defaults from part_svc (like the check method +sets fixed values). + +=head1 SEE ALSO + +L, L, L, L, schema.html +from the base documentation. + +=head1 HISTORY + +$Log: svc_Common.pm,v $ +Revision 1.1 1998-12-30 00:30:45 ivan +svc_ stuff is more properly OO - has a common superclass FS::svc_Common + + +=cut + +1; + diff --git a/site_perl/svc_acct.pm b/site_perl/svc_acct.pm index 1d3085969..473f78b24 100644 --- a/site_perl/svc_acct.pm +++ b/site_perl/svc_acct.pm @@ -5,10 +5,10 @@ use vars qw(@ISA $nossh_hack $conf $dir_prefix @shells $shellmachine @saltset @pw_set); use FS::Conf; use FS::Record qw( qsearchs fields ); +use FS::svc_Common; use FS::SSH qw(ssh); -use FS::cust_svc; -@ISA = qw( FS::Record ); +@ISA = qw( FS::svc_Common ); #ask FS::UID to run this stuff for us later $FS::UID::callback{'FS::svc_acct'} = sub { @@ -51,7 +51,7 @@ FS::svc_acct - Object methods for svc_acct records =head1 DESCRIPTION An FS::svc_acct object represents an account. FS::svc_acct inherits from -FS::Record. The following fields are currently supported: +FS::svc_Common. The following fields are currently supported: =over 4 @@ -135,24 +135,8 @@ sub insert { && $self->username !~ /^(hyla)?fax$/ ; - my $svcnum = $self->svcnum; - my $cust_svc; - unless ( $svcnum ) { - $cust_svc = new FS::cust_svc ( { - 'svcnum' => $svcnum, - 'pkgnum' => $self->pkgnum, - 'svcpart' => $self->svcpart, - } ); - my $error = $cust_svc->insert; - return $error if $error; - $svcnum = $self->svcnum($cust_svc->svcnum); - } - $error = $self->SUPER::insert; - if ($error) { - $cust_svc->delete if $cust_svc; - return $error; - } + return $error if $error; my ( $username, $uid, $dir, $shell ) = ( $self->username, @@ -205,15 +189,9 @@ sub delete { local $SIG{TERM} = 'IGNORE'; local $SIG{TSTP} = 'IGNORE'; - my $svcnum = $self->getfield('svcnum'); - $error = $self->SUPER::delete; return $error if $error; - my $cust_svc = qsearchs( 'cust_svc' , { 'svcnum' => $svcnum } ); - $error = $cust_svc->delete; - return $error if $error; - my $username = $self->username; if ( $username && $shellmachine && ! $nossh_hack ) { ssh("root\@$shellmachine","userdel $username"); @@ -247,7 +225,7 @@ setting $FS::svc_acct::nossh_hack true. =cut sub replace { - my ( $new, $old ) = @_; + my ( $new, $old ) = ( shift, shift ); my $error; return "Username in use" @@ -336,12 +314,6 @@ Just returns false (no error) for now. Called by the cancel method of FS::cust_pkg (see L). -=cut - -sub cancel { - ''; #stub (no error) - taken care of in delete -} - =item check Checks all fields to make sure this is a valid service. If there is an error, @@ -357,31 +329,11 @@ sub check { my($recref) = $self->hashref; - $recref->{svcnum} =~ /^(\d*)$/ or return "Illegal svcnum"; - $recref->{svcnum} = $1; - - #get part_svc - my($svcpart); - my($svcnum)=$self->getfield('svcnum'); - if ($svcnum) { - my($cust_svc)=qsearchs('cust_svc',{'svcnum'=>$svcnum}); - return "Unknown svcnum" unless $cust_svc; - $svcpart=$cust_svc->svcpart; - } else { - $svcpart=$self->getfield('svcpart'); - } - my($part_svc)=qsearchs('part_svc',{'svcpart'=>$svcpart}); - return "Unkonwn svcpart" unless $part_svc; + my $x = $self->setfixed; + return $x unless ref($x); + my $part_svc = $x; - #set fixed fields from part_svc - my($field); - foreach $field ( fields('svc_acct') ) { - if ( $part_svc->getfield('svc_acct__'. $field. '_flag') eq 'F' ) { - $self->setfield($field,$part_svc->getfield('svc_acct__'. $field) ); - } - } - - my($ulen)=$self->dbdef_table->column('username')->length; + my $ulen =$self->dbdef_table->column('username')->length; $recref->{username} =~ /^([a-z0-9_\-]{2,$ulen})$/ or return "Illegal username"; $recref->{username} = $1; @@ -488,24 +440,21 @@ sub check { =head1 VERSION -$Id: svc_acct.pm,v 1.3 1998-12-29 11:59:52 ivan Exp $ +$Id: svc_acct.pm,v 1.4 1998-12-30 00:30:45 ivan Exp $ =head1 BUGS The remote commands should be configurable. -The new method should set defaults from part_svc (like the check method -sets fixed values). - The bits which ssh should fork before doing so. The $recref stuff in sub check should be cleaned up. =head1 SEE ALSO -L, L, L, L, L, -L, L, L, schema.html from the base -documentation. +L, L, L, L, +L, L, L, L, L, +schema.html from the base documentation. =head1 HISTORY @@ -533,8 +482,8 @@ arbitrary radius attributes ivan@sisd.com 98-aug-13 pod and FS::conf ivan@sisd.com 98-sep-22 $Log: svc_acct.pm,v $ -Revision 1.3 1998-12-29 11:59:52 ivan -mostly properly OO, some work still to be done with svc_ stuff +Revision 1.4 1998-12-30 00:30:45 ivan +svc_ stuff is more properly OO - has a common superclass FS::svc_Common Revision 1.2 1998/11/13 09:56:55 ivan change configuration file layout to support multiple distinct databases (with diff --git a/site_perl/svc_acct_sm.pm b/site_perl/svc_acct_sm.pm index f1c049263..75e7b0281 100644 --- a/site_perl/svc_acct_sm.pm +++ b/site_perl/svc_acct_sm.pm @@ -3,11 +3,12 @@ package FS::svc_acct_sm; use strict; use vars qw( @ISA $nossh_hack $conf $shellmachine @qmailmachines ); use FS::Record qw( fields qsearch qsearchs ); +use FS::svc_Common; use FS::cust_svc; use FS::SSH qw(ssh); use FS::Conf; -@ISA = qw( FS::Record ); +@ISA = qw( FS::svc_Common ); #ask FS::UID to run this stuff for us later $FS::UID::callback{'FS::svc_acct_sm'} = sub { @@ -94,8 +95,8 @@ This behaviour can be surpressed by setting $FS::svc_acct_sm::nossh_hack true. =cut sub insert { - my($self)=@_; - my($error); + my $self = shift; + my $error; local $SIG{HUP} = 'IGNORE'; local $SIG{INT} = 'IGNORE'; @@ -116,34 +117,18 @@ sub insert { if $self->domuser ne '*' && ! qsearch('svc_acct_sm',{ 'domsvc' => $self->domsvc } ); - my($svcnum)=$self->getfield('svcnum'); - my($cust_svc); - unless ( $svcnum ) { - $cust_svc=create FS::cust_svc ( { - 'svcnum' => $svcnum, - 'pkgnum' => $self->getfield('pkgnum'), - 'svcpart' => $self->getfield('svcpart'), - } ); - my($error) = $cust_svc->insert; - return $error if $error; - $svcnum = $self->setfield('svcnum',$cust_svc->getfield('svcnum')); - } - - $error = $self->add; - if ($error) { - $cust_svc->del if $cust_svc; - return $error; - } + $error = $self->SUPER::insert; + return $error if $error; - my $svc_domain = qsearchs('svc_domain',{'svcnum'=> $self->domsvc } ); - my $svc_acct = qsearchs('svc_acct',{'uid'=> $self->domuid } ); - my($uid,$gid,$dir,$domain)=( - $svc_acct->getfield('uid'), - $svc_acct->getfield('gid'), - $svc_acct->getfield('dir'), - $svc_domain->getfield('domain') + my $svc_domain = qsearchs( 'svc_domain', { 'svcnum' => $self->domsvc } ); + my $svc_acct = qsearchs( 'svc_acct', { 'uid' => $self->domuid } ); + my ( $uid, $gid, $dir, $domain ) = ( + $svc_acct->uid, + $svc_acct->gid, + $svc_acct->dir, + $svc_domain->domain, ); - my($qdomain)=$domain; + my $qdomain = $domain; $qdomain =~ s/\./:/g; #see manpage for 'dot-qmail': EXTENSION ADDRESSES ssh("root\@$shellmachine","[ -e $dir/.qmail-$qdomain-default ] || { touch $dir/.qmail-$qdomain-default; chown $uid:$gid $dir/.qmail-$qdomain-default; }") if ( ! $nossh_hack && $shellmachine && $dir && $self->domuser eq '*' ); @@ -159,25 +144,6 @@ returns the error, otherwise returns false. The corresponding FS::cust_svc record will be deleted as well. -=cut - -sub delete { - my($self)=@_; - my($error); - - my($svcnum)=$self->getfield('svcnum'); - - $error = $self->del; - return $error if $error; - - my($cust_svc)=qsearchs('cust_svc',{'svcnum'=>$svcnum}); - $error = $cust_svc->del; - return $error if $error; - - ''; - -} - =item replace OLD_RECORD Replaces OLD_RECORD with this one in the database. If there is an error, @@ -186,12 +152,8 @@ returns the error, otherwise returns false. =cut sub replace { - my($new,$old)=@_; - my($error); - - return "(Old) Not a svc_acct_sm record!" unless $old->table eq "svc_acct_sm"; - return "Can't change svcnum!" - unless $old->getfield('svcnum') eq $new->getfield('svcnum'); + my ( $new, $old ) = ( shift, shift ); + my $error; return "Domain username (domuser) in use for this domain (domsvc)" if ( $old->domuser ne $new->domuser @@ -202,13 +164,8 @@ sub replace { } ) ; - $error=$new->check; - return $error if $error; - - $error = $new->rep($old); - return $error if $error; + $new->SUPER::replace($old); - ''; #no error } =item suspend @@ -217,36 +174,18 @@ Just returns false (no error) for now. Called by the suspend method of FS::cust_pkg (see L). -=cut - -sub suspend { - ''; #no error (stub) -} - =item unsuspend Just returns false (no error) for now. Called by the unsuspend method of FS::cust_pkg (see L). -=cut - -sub unsuspend { - ''; #no error (stub) -} - =item cancel Just returns false (no error) for now. Called by the cancel method of FS::cust_pkg (see L). -=cut - -sub cancel { - ''; #no error (stub) -} - =item check Checks all fields to make sure this is a valid virtual mail alias. If there is @@ -258,33 +197,14 @@ Sets any fixed values; see L. =cut sub check { - my($self)=@_; - return "Not a svc_acct_sm record!" unless $self->table eq "svc_acct_sm"; - my($recref) = $self->hashref; + my $self = shift; + my $error; - $recref->{svcnum} =~ /^(\d*)$/ or return "Illegal svcnum"; - $recref->{svcnum} = $1; - - #get part_svc - my($svcpart); - my($svcnum)=$self->getfield('svcnum'); - if ($svcnum) { - my($cust_svc)=qsearchs('cust_svc',{'svcnum'=>$svcnum}); - return "Unknown svcnum" unless $cust_svc; - $svcpart=$cust_svc->svcpart; - } else { - $svcpart=$self->getfield('svcpart'); - } - my($part_svc)=qsearchs('part_svc',{'svcpart'=>$svcpart}); - return "Unkonwn svcpart" unless $part_svc; - - #set fixed fields from part_svc - my($field); - foreach $field ( fields('svc_acct_sm') ) { - if ( $part_svc->getfield('svc_acct_sm__'. $field. '_flag') eq 'F' ) { - $self->setfield($field,$part_svc->getfield('svc_acct_sm__'. $field) ); - } - } + my $x = $self->setfixed; + return $x unless ref($x); + my $part_svc = $x; + + my($recref) = $self->hashref; $recref->{domuser} =~ /^(\*|[a-z0-9_\-]{2,32})$/ or return "Illegal domain username (domuser)"; @@ -309,12 +229,14 @@ sub check { =head1 VERSION -$Id: svc_acct_sm.pm,v 1.3 1998-12-29 11:59:54 ivan Exp $ +$Id: svc_acct_sm.pm,v 1.4 1998-12-30 00:30:46 ivan Exp $ =head1 BUGS The remote commands should be configurable. +The $recref stuff in sub check should be cleaned up. + =head1 SEE ALSO L, L, L, L, L, diff --git a/site_perl/svc_domain.pm b/site_perl/svc_domain.pm index c7e1e70bd..f86723f4a 100644 --- a/site_perl/svc_domain.pm +++ b/site_perl/svc_domain.pm @@ -9,10 +9,11 @@ use Mail::Internet; use Mail::Header; use Date::Format; use FS::Record qw(fields qsearch qsearchs); +use FS::svc_Common; use FS::cust_svc; use FS::Conf; -@ISA = qw(FS::Record Exporter); +@ISA = qw( FS::svc_Common ); #ask FS::UID to run this stuff for us later $FS::UID::callback{'FS::domain'} = sub { @@ -68,7 +69,7 @@ FS::svc_domain - Object methods for svc_domain records =head1 DESCRIPTION An FS::svc_domain object represents a domain. FS::svc_domain inherits from -FS::Record. The following fields are currently supported: +FS::svc_Common. The following fields are currently supported: =over 4 @@ -133,24 +134,8 @@ sub insert { return "Domain not found (see whois)" if ( $self->action eq "M" && $whois =~ /^No match for/ ); - my $svcnum = $self->svcnum; - my $cust_svc; - unless ( $svcnum ) { - $cust_svc = new FS::cust_svc ( { - 'svcnum' => $svcnum, - 'pkgnum' => $self->pkgnum, - 'svcpart' => $self->svcpart, - } ); - my $error = $cust_svc->insert; - return $error if $error; - $svcnum = $self->setfield( 'svcnum', $cust_svc->svcnum ); - } - $error = $self->SUPER::insert; - if ( $error ) { - $cust_svc->delete if $cust_svc; - return $error; - } + return $error if $error; $self->submit_internic unless $whois_hack; @@ -164,24 +149,6 @@ error, otherwise returns false. The corresponding FS::cust_svc record will be deleted as well. -=cut - -sub delete { - my $self = shift; - my $error; - - my $svcnum = $self->svcnum; - - $error = $self->delete; - return $error if $error; - - my $cust_svc = qsearchs( 'cust_svc', { 'svcnum' => $svcnum } ); - $error = $cust_svc->delete; - return $error if $error; - - ''; -} - =item replace OLD_RECORD Replaces OLD_RECORD with this one in the database. If there is an error, @@ -206,36 +173,18 @@ Just returns false (no error) for now. Called by the suspend method of FS::cust_pkg (see L). -=cut - -sub suspend { - ''; #no error (stub) -} - =item unsuspend Just returns false (no error) for now. Called by the unsuspend method of FS::cust_pkg (see L). -=cut - -sub unsuspend { - ''; #no error (stub) -} - =item cancel Just returns false (no error) for now. Called by the cancel method of FS::cust_pkg (see L). -=cut - -sub cancel { - ''; #no error (stub) -} - =item check Checks all fields to make sure this is a valid domain. If there is an error, @@ -248,44 +197,28 @@ Sets any fixed values; see L. sub check { my $self = shift; - - my($recref) = $self->hashref; - my $error; - $error = - $self->ut_numbern('svcnum') - ; - return $error if $error; + my $x = $self->setfixed; + return $x unless ref($x); + my $part_svc = $x; - #get part_svc (and pkgnum) - my($svcpart,$pkgnum); - my($svcnum)=$self->getfield('svcnum'); - if ($svcnum) { - my($cust_svc)=qsearchs('cust_svc',{'svcnum'=>$svcnum}); - return "Unknown svcnum" unless $cust_svc; - $svcpart=$cust_svc->svcpart; - $pkgnum=$cust_svc->pkgnum; + #hmm + my $pkgnum; + if ( $self->svcnum ) { + my $cust_svc = qsearchs( 'cust_svc', { 'svcnum' => $self->svcnum } ); + $pkgnum = $cust_svc->pkgnum; } else { - $svcpart=$self->svcpart; - $pkgnum=$self->pkgnum; - } - my($part_svc)=qsearchs('part_svc',{'svcpart'=>$svcpart}); - return "Unkonwn svcpart" unless $part_svc; - - #set fixed fields from part_svc - my($field); - foreach $field ( fields('svc_acct') ) { - if ( $part_svc->getfield('svc_domain__'. $field. '_flag') eq 'F' ) { - $self->setfield($field,$part_svc->getfield('svc_domain__'. $field) ); - } + $pkgnum = $self->pkgnum; } + my($recref) = $self->hashref; + unless ( $whois_hack ) { unless ( $self->email ) { #find out an email address - my(@svc_acct); - foreach ( qsearch('cust_svc',{'pkgnum'=>$pkgnum}) ) { - my($svc_acct)=qsearchs('svc_acct',{'svcnum'=>$_->svcnum}); + my @svc_acct; + foreach ( qsearch( 'cust_svc', { 'pkgnum' => $pkgnum } ) ) { + my $svc_acct = qsearchs( 'svc_acct', { 'svcnum' => $_->svcnum } ); push @svc_acct, $svc_acct if $svc_acct; } @@ -349,7 +282,7 @@ sub submit_internic { my $cust_pkg = qsearchs( 'cust_pkg', { 'pkgnum' => $self->pkgnum } ); return unless $cust_pkg; - my cust_main) = qsearchs( 'cust_main', { 'custnum' => $cust_pkg->custnum } ); + my $cust_main = qsearchs( 'cust_main', { 'custnum' => $cust_pkg->custnum } ); return unless $cust_main; my %subs = ( @@ -453,7 +386,7 @@ sub submit_internic { =head1 VERSION -$Id: svc_domain.pm,v 1.4 1998-12-29 11:59:55 ivan Exp $ +$Id: svc_domain.pm,v 1.5 1998-12-30 00:30:47 ivan Exp $ =head1 BUGS @@ -465,11 +398,12 @@ All registries should be supported. Should change action to a real field. +The $recref stuff in sub check should be cleaned up. + =head1 SEE ALSO -L, L, L, L, L, -L, L, L, schema.html from the base documentation, -config.html from the base documentation. +L, L, L, L, +L, L, L, L, L, schema.html from the base documentation, config.html from the base documentation. =head1 HISTORY @@ -488,8 +422,8 @@ ivan@sisd.com 98-jul-17-19 pod, some FS::Conf (not complete) ivan@sisd.com 98-sep-23 $Log: svc_domain.pm,v $ -Revision 1.4 1998-12-29 11:59:55 ivan -mostly properly OO, some work still to be done with svc_ stuff +Revision 1.5 1998-12-30 00:30:47 ivan +svc_ stuff is more properly OO - has a common superclass FS::svc_Common Revision 1.3 1998/11/13 09:56:57 ivan change configuration file layout to support multiple distinct databases (with diff --git a/site_perl/table_template-svc.pm b/site_perl/table_template-svc.pm index 4180d8d13..40c9ed9b5 100644 --- a/site_perl/table_template-svc.pm +++ b/site_perl/table_template-svc.pm @@ -2,10 +2,11 @@ package FS::svc_table; use strict; use vars qw(@ISA); -use FS::Record qw(fields qsearch qsearchs); +#use FS::Record qw( qsearch qsearchs ); +use FS::svc_Common; use FS::cust_svc; -@ISA = qw(FS::Record); +@ISA = qw(svc_Common); =head1 NAME @@ -35,7 +36,7 @@ FS::table_name - Object methods for table_name records =head1 DESCRIPTION An FS::table_name object represents an example. FS::table_name inherits from -FS::Record. The following fields are currently supported: +FS::svc_Common. The following fields are currently supported: =over 4 @@ -69,38 +70,13 @@ defined. An FS::cust_svc record will be created and inserted. =cut sub insert { - my($self)=@_; - my($error); + my $self = shift; + my $error; - local $SIG{HUP} = 'IGNORE'; - local $SIG{INT} = 'IGNORE'; - local $SIG{QUIT} = 'IGNORE'; - local $SIG{TERM} = 'IGNORE'; - local $SIG{TSTP} = 'IGNORE'; - - $error=$self->check; + $error = $self->SUPER::insert; return $error if $error; - my($svcnum)=$self->svcnum; - my($cust_svc); - unless ( $svcnum ) { - $cust_svc=create FS::cust_svc ( { - 'svcnum' => $svcnum, - 'pkgnum' => $self->pkgnum, - 'svcpart' => $self->svcpart, - } ); - my($error) = $cust_svc->insert; - return $error if $error; - $svcnum = $self->svcnum($cust_svc->svcnum); - } - - $error = $self->add; - if ($error) { - #$cust_svc->del if $cust_svc; - $cust_svc->delete if $cust_svc; - return $error; - - ''; #no error + ''; } =item delete @@ -110,12 +86,13 @@ Delete this record from the database. =cut sub delete { - my($self)=@_; - my($error); + my $self = shift; + my $error; - $error = $self->del; + $error = $self->SUPER::delete; return $error if $error; + ''; } @@ -127,55 +104,27 @@ returns the error, otherwise returns false. =cut sub replace { - my($new,$old)=@_; - my($error); - - return "(Old) Not a svc_table record!" unless $old->table eq "svc_table"; - return "Can't change svcnum!" - unless $old->getfield('svcnum') eq $new->getfield('svcnum'); - - $error=$new->check; - return $error if $error; + my ( $new, $old ) = ( shift, shift ); + my $error; - $error = $new->rep($old); + $error = $new->SUPER::replace($old); return $error if $error; - ''; #no error + ''; } =item suspend Called by the suspend method of FS::cust_pkg (see L). -=cut - -sub suspend { - ''; #no error (stub) -} - =item unsuspend Called by the unsuspend method of FS::cust_pkg (see L). -=cut - -sub unsuspend { - ''; #no error (stub) -} - - =item cancel -Just returns false (no error) for now. - Called by the cancel method of FS::cust_pkg (see L). -=cut - -sub cancel { - ''; #no error (stub) -} - =item check Checks all fields to make sure this is a valid example. If there is @@ -185,33 +134,12 @@ and repalce methods. =cut sub check { - my($self)=@_; - return "Not a svc_table record!" unless $self->table eq "svc_table"; - my($recref) = $self->hashref; - - $recref->{svcnum} =~ /^(\d+)$/ or return "Illegal svcnum"; - $recref->{svcnum} = $1; - - #get part_svc - my($svcpart); - my($svcnum)=$self->getfield('svcnum'); - if ($svcnum) { - my($cust_svc)=qsearchs('cust_svc',{'svcnum'=>$svcnum}); - return "Unknown svcnum" unless $cust_svc; - $svcpart=$cust_svc->svcpart; - } else { - $svcpart=$self->getfield('svcpart'); - } - my($part_svc)=qsearchs('part_svc',{'svcpart'=>$svcpart}); - return "Unkonwn svcpart" unless $part_svc; - - #set fixed fields from part_svc - my($field); - foreach $field ( fields('svc_acct') ) { - if ( $part_svc->getfield('svc_acct__'. $field. '_flag') eq 'F' ) { - $self->setfield($field,$part_svc->getfield('svc_acct__'. $field) ); - } - } + my $self = shift; + + my $x = $self->setfixed; + return $x unless ref($x); + my $part_svc = $x; + ''; #no error } @@ -220,7 +148,7 @@ sub check { =head1 VERSION -$Id: table_template-svc.pm,v 1.3 1998-12-29 11:59:56 ivan Exp $ +$Id: table_template-svc.pm,v 1.4 1998-12-30 00:30:48 ivan Exp $ =head1 BUGS @@ -228,16 +156,16 @@ The author forgot to customize this manpage. =head1 SEE ALSO -L, L, L, L, schema.html -froom the base documentation. +L, L, L, L, +L, schema.html from the base documentation. =head1 HISTORY ivan@voicenet.com 97-jul-21 $Log: table_template-svc.pm,v $ -Revision 1.3 1998-12-29 11:59:56 ivan -mostly properly OO, some work still to be done with svc_ stuff +Revision 1.4 1998-12-30 00:30:48 ivan +svc_ stuff is more properly OO - has a common superclass FS::svc_Common Revision 1.2 1998/11/15 04:33:01 ivan updates for newest versoin -- 2.11.0