switch to a hard list of allowed password characters, #40792
[freeside.git] / FS / FS / cust_svc.pm
index 376ef02..d432747 100644 (file)
@@ -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 
@@ -1252,7 +1256,7 @@ sub _check_provision_hold {
 
   # 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
@@ -1300,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";
+    }
   }
 
   '';