RT# 81961 Generate HTML from POD during debian package install
[freeside.git] / FS / FS / svc_hardware.pm
index 67eca8f..cbf3ddf 100644 (file)
@@ -138,14 +138,19 @@ sub label {
   my $part_svc = $self->cust_svc->part_svc;
   my @label = ();
   if (my $type = $self->hardware_type) {
-    push @label, ($part_svc->part_svc_column('typenum') || 'Type:').
+    my $typenum_label = $part_svc->part_svc_column('typenum');
+    push @label, ( $typenum_label && $typenum_label->columnlabel || 'Type:' ).
                  $type->description;
   }
   if (my $ser = $self->serial) {
-    push @label, ($part_svc->part_svc_column('serial') || 'Serial#'). $ser;
+    my $serial_label = $part_svc->part_svc_column('serial');
+    push @label, ( $serial_label && $serial_label->columnlabel || 'Serial#' ).
+                 $ser;
   }
   if (my $mac = $self->display_hw_addr) {
-    push @label, ($part_svc->part_svc_column('hw_addr') || 'MAC:'). $mac;
+    my $hw_addr_label = $part_svc->part_svc_column('hw_addr');
+    push @label, ( $hw_addr_label && $hw_addr_label->columnlabel || 'MAC:').
+    $mac;
   }
   return join(', ', @label);
 }
@@ -210,6 +215,40 @@ sub check {
   $self->SUPER::check;
 }
 
+sub _check_duplicate {
+  my $self = shift;
+
+  return '' unless $conf->exists('global_unique-svc_hardware');
+
+  $self->lock_table;
+
+  if ( $self->hw_addr ) {
+    my @dup_mac;
+    @dup_mac = $self->find_duplicates('global', 'hw_addr');
+    if ( @dup_mac ) {
+      return "Hardware address in use (svcnum ".$dup_mac[0]->svcnum.")";
+    }
+  }
+
+  if ( $self->ip_addr ) {
+    my @dup_ip;
+    @dup_ip = $self->find_duplicates('global', 'ip_addr');
+    if ( @dup_ip ) {
+      return "IP address in use (svcnum ".$dup_ip[0]->svcnum.")";
+    }
+  }
+
+  if ( $self->serial ) {
+    my @dup_serial;
+    @dup_serial = $self->find_duplicates('global', 'typenum', 'serial');
+    if ( @dup_serial ) {
+      return "Serial number in use (svcnum ".$dup_serial[0]->svcnum.")";
+    }
+  }
+
+  '';
+}
+
 =item hardware_type
 
 Returns the L<FS::hardware_type> object associated with this installation.