X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=FS%2FFS%2Fsvc_Common.pm;h=e4591720d98cea07202358eab7c625aef7443e7a;hb=a21bd79010b9a3a5e1f9e19dca673dcb38f35334;hp=0aea4559bb99193ec6e025b3ad5598f8d483ffc9;hpb=f3e0ac2b009c4edd5692cb587ff709dac2223ebe;p=freeside.git diff --git a/FS/FS/svc_Common.pm b/FS/FS/svc_Common.pm index 0aea4559b..e4591720d 100644 --- a/FS/FS/svc_Common.pm +++ b/FS/FS/svc_Common.pm @@ -1,14 +1,14 @@ package FS::svc_Common; +use base qw( FS::cust_main_Mixin FS::Record ); use strict; -use vars qw( @ISA $noexport_hack $DEBUG $me +use vars qw( $noexport_hack $DEBUG $me $overlimit_missing_cust_svc_nonfatal_kludge ); use Carp qw( cluck carp croak confess ); #specify cluck have to specify them all use Scalar::Util qw( blessed ); use Lingua::EN::Inflect qw( PL_N ); use FS::Conf; use FS::Record qw( qsearch qsearchs fields dbh ); -use FS::cust_main_Mixin; use FS::cust_svc; use FS::part_svc; use FS::queue; @@ -17,8 +17,6 @@ use FS::inventory_item; use FS::inventory_class; use FS::NetworkMonitoringSystem; -@ISA = qw( FS::cust_main_Mixin FS::Record ); - $me = '[FS::svc_Common]'; $DEBUG = 0; @@ -30,9 +28,8 @@ FS::svc_Common - Object method for all svc_ records =head1 SYNOPSIS -use FS::svc_Common; - -@ISA = qw( FS::svc_Common ); +package svc_myservice; +use base qw( FS::svc_Common ); =head1 DESCRIPTION @@ -335,6 +332,8 @@ sub preinsert_hook_first { ''; } sub _check_duplcate { ''; } sub preinsert_hook { ''; } sub table_dupcheck_fields { (); } +sub prereplace_hook { ''; } +sub prereplace_hook_first { ''; } sub predelete_hook { ''; } sub predelete_hook_first { ''; } @@ -367,6 +366,7 @@ sub delete { || $self->SUPER::delete || $self->export('delete', @$export_args) || $self->return_inventory + || $self->release_router || $self->predelete_hook || $self->cust_svc->delete ; @@ -471,15 +471,10 @@ sub replace { local $FS::UID::AutoCommit = 0; my $dbh = dbh; - my $error = $new->set_auto_inventory($old); - if ( $error ) { - $dbh->rollback if $oldAutoCommit; - return $error; - } - - #redundant, but so any duplicate fields are maniuplated as appropriate - # (svc_phone.phonenum) - $error = $new->check; + my $error = $new->prereplace_hook_first($old) + || $new->set_auto_inventory($old) + || $new->check; #redundant, but so any duplicate fields are + #maniuplated as appropriate (svc_phone.phonenum) if ( $error ) { $dbh->rollback if $oldAutoCommit; return $error; @@ -809,6 +804,9 @@ If there is an error, returns the error, otherwise returns false. =cut sub set_auto_inventory { + # don't try to do this during an upgrade + return '' if $FS::CurrentUser::upgrade_hack; + my $self = shift; my $old = @_ ? shift : ''; @@ -989,18 +987,29 @@ sub inventory_item { }); } -=item cust_svc +=item release_router -Returns the cust_svc record associated with this svc_ record, as a FS::cust_svc -object (see L). +Delete any routers associated with this service. This will release their +address blocks, also. =cut -sub cust_svc { +sub release_router { my $self = shift; - qsearchs('cust_svc', { 'svcnum' => $self->svcnum } ); + my @routers = qsearch('router', { svcnum => $self->svcnum }); + foreach (@routers) { + my $error = $_->delete; + return "$error (removing router '".$_->routername."')" if $error; + } + ''; } + +=item cust_svc + +Returns the cust_svc record associated with this svc_ record, as a FS::cust_svc +object (see L). + =item suspend Runs export_suspend callbacks.