communigate provisioning phase 2: add svc_domain.trailer -> communigate TrailerText...
[freeside.git] / FS / FS / svc_broadband.pm
index d9a25b4..74cedfc 100755 (executable)
@@ -111,6 +111,8 @@ sub table_info {
 
 sub table { 'svc_broadband'; }
 
+sub table_dupcheck_fields { ( 'mac_addr' ); }
+
 =item search_sql STRING
 
 Class method which returns an SQL fragment to search for the given string.
@@ -218,10 +220,6 @@ sub check {
   ;
   return $error if $error;
 
-  #redundant, but better error message
-  return "MAC already in use"
-    if scalar( qsearch( 'svc_broadband', { 'mac_addr', $self->mac_addr } ) );
-
   if($self->speed_up < 0) { return 'speed_up must be positive'; }
   if($self->speed_down < 0) { return 'speed_down must be positive'; }
 
@@ -248,7 +246,19 @@ sub check {
     }
   }
 
+  $error = $self->_check_ip_addr;
+  return $error if $error;
+
+  $self->SUPER::check;
+}
+
+sub _check_ip_addr {
+  my $self = shift;
+
   if (not($self->ip_addr) or $self->ip_addr eq '0.0.0.0') {
+
+    return '' if $conf->exists('svc_broadband-allow_null_ip_addr'); #&& !$self->blocknum
+
     return "Must supply either address or block"
       unless $self->blocknum;
     my $next_addr = $self->addr_block->next_free_addr;
@@ -257,6 +267,7 @@ sub check {
     } else {
       return "No free addresses in addr_block (blocknum: ".$self->blocknum.")";
     }
+
   }
 
   if (not($self->blocknum)) {
@@ -290,9 +301,21 @@ sub check {
     return 'Router '.$router->routernum.' cannot provide svcpart '.$self->svcpart;
   }
 
-  $self->SUPER::check;
+  '';
+}
+
+sub _check_duplicate {
+  my $self = shift;
+
+  return "MAC already in use"
+    if ( $self->mac_addr &&
+         scalar( qsearch( 'svc_broadband', { 'mac_addr', $self->mac_addr } ) )
+       );
+
+  '';
 }
 
+
 =item NetAddr
 
 Returns a NetAddr::IP object containing the IP address of this service.  The netmask