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;
} # 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;
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
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;
# 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
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";
+ }
}
'';