X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=FS%2FFS%2Fcust_svc.pm;h=d432747d95125150f3b63e004be804c1eb3f1b5a;hb=b3cc20aeca25e4351c6ec3b795a951e6124f6376;hp=c5099fc59a348d40c3247e2a7903b274162408dc;hpb=41aef8bd93f7cc3a39056a8fd997d3072dfcdf8a;p=freeside.git diff --git a/FS/FS/cust_svc.pm b/FS/FS/cust_svc.pm index c5099fc59..d432747d9 100644 --- a/FS/FS/cust_svc.pm +++ b/FS/FS/cust_svc.pm @@ -121,7 +121,7 @@ sub insert { my $error = $self->SUPER::insert; #check if this releases a hold (see FS::pkg_svc provision_hold) - $error ||= $self->_provision_hold; + $error ||= $self->_check_provision_hold; if ( $error ) { $dbh->rollback if $oldAutoCommit; @@ -460,7 +460,7 @@ sub replace { } # if this is a location change #check if this releases a hold (see FS::pkg_svc provision_hold) - $error ||= $new->_provision_hold; + $error ||= $new->_check_provision_hold; if ( $error ) { $dbh->rollback if $oldAutoCommit; @@ -601,7 +601,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 @@ -1205,9 +1209,10 @@ sub smart_search_param { my @or = map { my $table = $_; my $search_sql = "FS::$table"->search_sql($string); + my $addl_from = "FS::$table"->search_sql_addl_from(); "SELECT $table.svcnum AS svcnum, '$table' AS svcdb ". - "FROM $table WHERE $search_sql"; + "FROM $table $addl_from WHERE $search_sql"; } FS::part_svc->svc_tables; @@ -1246,12 +1251,12 @@ sub smart_search_param { # then removes hold from pkg # returns $error or '' on success, # does not indicate if pkg status was changed -sub _provision_hold { +sub _check_provision_hold { my $self = shift; # check status of cust_pkg my $cust_pkg = $self->cust_pkg; - return '' unless $cust_pkg->status eq 'on hold'; + return '' unless $cust_pkg && $cust_pkg->status eq 'on hold'; # check flag on this svc # small false laziness with $self->pkg_svc @@ -1299,13 +1304,19 @@ sub _upgrade_data { my $svcdb = $cust_svc->part_svc->svcdb; $h_search{'hashref'}{'svcnum'} = $svcnum; $h_search{'table'} = "h_$svcdb"; - my $h_svc_x = qsearchs(\%h_search) - or next; - my $class = "FS::$svcdb"; - my $new_svc_x = $class->new({ $h_svc_x->hash }); - my $error = $new_svc_x->insert; - warn "error repairing svcnum $svcnum ($svcdb) from history:\n$error\n" - if $error; + my $h_svc_x = qsearchs(\%h_search); + if ( $h_svc_x ) { + my $class = "FS::$svcdb"; + my $new_svc_x = $class->new({ $h_svc_x->hash }); + my $error = $new_svc_x->insert; + warn "error repairing svcnum $svcnum ($svcdb) from history:\n$error\n" + if $error; + } else { + # can't be fixed, so remove the dangling cust_svc to avoid breaking + # stuff + my $error = $cust_svc->delete; + warn "error cleaning up missing svcnum $svcnum ($svcdb):\n$error\n"; + } } '';