X-Git-Url: http://git.freeside.biz/gitweb/?p=freeside.git;a=blobdiff_plain;f=FS%2FFS%2Fcust_svc.pm;h=cc5f4bf1dc6a4beaf08fbed3fac9742c3f4afdf4;hp=974af67439df71be3065167e3ecb170702b38d14;hb=57bb423fe457ba4e13726877f53bcdf944f828f8;hpb=29302d859b546f27061bcaf9d91c982df2ac1a27 diff --git a/FS/FS/cust_svc.pm b/FS/FS/cust_svc.pm index 974af6743..cc5f4bf1d 100644 --- a/FS/FS/cust_svc.pm +++ b/FS/FS/cust_svc.pm @@ -3,7 +3,7 @@ use base qw( FS::cust_main_Mixin FS::option_Common ); #FS::Record ); use strict; use vars qw( $DEBUG $me $ignore_quantity $conf $ticket_system ); -use Carp; +use Carp qw(cluck); #use Scalar::Util qw( blessed ); use List::Util qw( max ); use FS::Conf; @@ -16,6 +16,8 @@ use FS::domain_record; use FS::part_export; use FS::cdr; use FS::UI::Web; +use FS::export_cust_svc; +use FS::DBI; #most FS::svc_ classes are autoloaded in svc_x emthod use FS::svc_acct; #this one is used in the cache stuff @@ -32,6 +34,15 @@ FS::UID->install_callback( sub { $ticket_system = $conf->config('ticket_system') }); +our $cache_enabled = 0; + +sub _simplecache { + my( $self, $hashref ) = @_; + if ( $cache_enabled && $hashref->{'svc'} ) { + $self->{'_svcpart'} = FS::part_svc->new($hashref); + } +} + sub _cache { my $self = shift; my ( $hashref, $cache ) = @_; @@ -160,6 +171,17 @@ sub delete { local $FS::UID::AutoCommit = 0; my $dbh = dbh; + # delete associated export_cust_svc + foreach my $export_cust_svc ( + qsearch('export_cust_svc',{ 'svcnum' => $self->svcnum }) + ) { + my $error = $export_cust_svc->delete; + if ( $error ) { + $dbh->rollback if $oldAutoCommit; + return $error; + } + } + my $error = $self->SUPER::delete; if ( $error ) { $dbh->rollback if $oldAutoCommit; @@ -432,8 +454,10 @@ sub replace { #my $error = $new->SUPER::replace($old, @_); my $error = $new->SUPER::replace($old); - #trigger a relocate export on location changes - if ( $new->cust_pkg->locationnum != $old->cust_pkg->locationnum ) { + #trigger a relocate export on location changes (NENA2 and Northern 911 export) + my $old_pkg = $old->cust_pkg; + my $new_pkg = $new->cust_pkg; + if ( $old_pkg && $new_pkg && $new_pkg->locationnum != $old_pkg->locationnum ) { my $svc_x = $new->svc_x; if ( $svc_x->locationnum ) { if ( $svc_x->locationnum == $old->cust_pkg->locationnum ) { @@ -601,7 +625,11 @@ link_type. sub part_svc_link { my $self = shift; my $agentnum = $self->pkgnum ? $self->cust_pkg->cust_main->agentnum : ''; - FS::part_svc_link->by_agentnum($agentnum, src_svcpart=>$self->svcpart, @_); + FS::part_svc_link->by_agentnum($agentnum, + src_svcpart=>$self->svcpart, + disabled => '', + @_ + ); } =item display_svcnum @@ -625,9 +653,9 @@ L). sub part_svc { my $self = shift; - $self->{'_svcpart'} - ? $self->{'_svcpart'} - : qsearchs( 'part_svc', { 'svcpart' => $self->svcpart } ); + return $self->{_svcpart} if $self->{_svcpart}; + cluck 'cust_svc->part_svc called' if $DEBUG; + qsearchs( 'part_svc', { 'svcpart' => $self->svcpart } ); } =item cust_pkg @@ -677,10 +705,10 @@ sub pkg_cancel_date { return $cust_pkg->getfield('cancel') || ''; } -=item label +=item label [ LOCALE ] Returns a list consisting of: -- The name of this service (from part_svc) +- The name of this service (from part_svc), optionally localized - A meaningful identifier (username, domain, or mail alias) - The table name (i.e. svc_domain) for this service - svcnum @@ -689,7 +717,7 @@ Usage example: my($label, $value, $svcdb) = $cust_svc->label; -=item label_long +=item label_long [ LOCALE ] Like the B