X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=FS%2FFS%2Fsvc_Common.pm;h=4a2d6178651e22be57959003997caa3ae5815abe;hb=87a59b1bdf236765177c27ab18390ef1317cc34c;hp=0aea4559bb99193ec6e025b3ad5598f8d483ffc9;hpb=54a357b171aa44f9399b4c146acd2afd3b686075;p=freeside.git diff --git a/FS/FS/svc_Common.pm b/FS/FS/svc_Common.pm index 0aea4559b..4a2d61786 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; @@ -989,18 +984,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.