Merge branch '16824'
[freeside.git] / FS / FS / svc_Common.pm
index 28f759a..ff00ce0 100644 (file)
@@ -5,6 +5,7 @@ use vars qw( @ISA $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 FS::Conf;
 use FS::Record qw( qsearch qsearchs fields dbh );
 use FS::cust_main_Mixin;
 use FS::cust_svc;
@@ -13,6 +14,7 @@ use FS::queue;
 use FS::cust_main;
 use FS::inventory_item;
 use FS::inventory_class;
+use FS::NetworkMonitoringSystem;
 
 @ISA = qw( FS::cust_main_Mixin FS::Record );
 
@@ -326,6 +328,12 @@ sub insert {
 
   }
 
+  my $nms_ip_error = $self->nms_ip_insert;
+  if ( $nms_ip_error ) {
+    $dbh->rollback if $oldAutoCommit;
+    return "error queuing IP insert: $nms_ip_error";
+  }
+
   if ( exists $options{'jobnums'} ) {
     push @{ $options{'jobnums'} }, @jobnums;
   }
@@ -988,9 +996,8 @@ sub export_getsettings {
   my %defaults = ();
   my $error = $self->export('getsettings', \%settings, \%defaults);
   if ( $error ) {
-    #XXX bubble this up better
     warn "error running export_getsetings: $error";
-    return ( {}, {} );
+    return ( { 'error' => $error }, {} );
   }
   ( \%settings, \%defaults );
 }
@@ -1008,13 +1015,30 @@ sub export_getstatus {
   my %hash = ();
   my $error = $self->export('getstatus', \$html, \%hash);
   if ( $error ) {
-    #XXX bubble this up better
     warn "error running export_getstatus: $error";
-    return ( '', {} );
+    return ( '', { 'error' => $error } );
   }
   ( $html, \%hash );
 }
 
+=item export_setstatus
+
+Runs export_setstatus callbacks.  If there is an error, returns the error,
+otherwise returns false.
+
+=cut
+
+sub export_setstatus {
+  my( $self, @args ) = @_;
+  my $error = $self->export('setstatus', @args);
+  if ( $error ) {
+    warn "error running export_setstatus: $error";
+    return $error;
+  }
+  '';
+}
+
+
 =item export HOOK [ EXPORT_ARGS ]
 
 Runs the provided export hook (i.e. "suspend", "unsuspend") for this service.
@@ -1148,8 +1172,56 @@ sub find_duplicates {
   return grep { $conflict_svcparts{$_->cust_svc->svcpart} } @dup;
 }
 
+=item getstatus_html
+
+=cut
+
+sub getstatus_html {
+  my $self = shift;
+
+  my $part_svc = $self->cust_svc->part_svc;
+
+  my $html = '';
+
+  foreach my $export ( grep $_->can('export_getstatus'), $part_svc->part_export ) {
+    my $export_html = '';
+    my %hash = ();
+    $export->export_getstatus( $self, \$export_html, \%hash );
+    $html .= $export_html;
+  }
+
+  $html;
+
+}
+
+=item nms_ip_insert
+
+=cut
 
+sub nms_ip_insert {
+  my $self = shift;
+  my $conf = new FS::Conf;
+  return '' unless grep { $self->table eq $_ }
+                     $conf->config('nms-auto_add-svc_ips');
+  my $ip_field = $self->table_info->{'ip_field'};
+
+  my $queue = FS::queue->new( {
+                'job'    => 'FS::NetworkMonitoringSystem::queued_add_router',
+                'svcnum' => $self->svcnum,
+  } );
+  $queue->insert( 'FS::NetworkMonitoringSystem',
+                  $self->$ip_field(),
+                  $conf->config('nms-auto_add-community')
+                );
+}
 
+=item nms_delip
+
+=cut
+
+sub nms_ip_delete {
+#XXX not yet implemented
+}
 
 =back