ticket 1528 add driver's license field, mask it and ssn
[freeside.git] / FS / FS / svc_broadband.pm
index ec91532..473cd57 100755 (executable)
@@ -85,9 +85,52 @@ points to.  You can ask the object for a copy with the I<hash> method.
 
 =cut
 
 
 =cut
 
+sub table_info {
+  {
+    'name' => 'Broadband',
+    'name_plural' => 'Broadband services',
+    'longname_plural' => 'Fixed (username-less) broadband services',
+    'display_weight' => 50,
+    'cancel_weight'  => 70,
+    'fields' => {
+      'description' => 'Descriptive label for this particular device.',
+      'speed_down'  => 'Maximum download speed for this service in Kbps.  0 denotes unlimited.',
+      'speed_up'    => 'Maximum upload speed for this service in Kbps.  0 denotes unlimited.',
+      'ip_addr'     => 'IP address.  Leave blank for automatic assignment.',
+      'blocknum'    => 'Address block.',
+    },
+  };
+}
+
 sub table { 'svc_broadband'; }
 
 sub table { 'svc_broadband'; }
 
-=item insert
+=item search_sql STRING
+
+Class method which returns an SQL fragment to search for the given string.
+
+=cut
+
+sub search_sql {
+  my( $class, $string ) = @_;
+  if ( $string =~ /^(\d{1,3}\.){3}\d{1,3}$/ ) {
+    $class->search_sql_field('ip_addr', $string );
+  } else {
+    '1 = 0'; #false
+  }
+}
+
+=item label
+
+Returns the IP address.
+
+=cut
+
+sub label {
+  my $self = shift;
+  $self->ip_addr;
+}
+
+=item insert [ , OPTION => VALUE ... ]
 
 Adds this record to the database.  If there is an error, returns the error,
 otherwise returns false.
 
 Adds this record to the database.  If there is an error, returns the error,
 otherwise returns false.
@@ -95,6 +138,12 @@ otherwise returns false.
 The additional fields pkgnum and svcpart (see FS::cust_svc) should be 
 defined.  An FS::cust_svc record will be created and inserted.
 
 The additional fields pkgnum and svcpart (see FS::cust_svc) should be 
 defined.  An FS::cust_svc record will be created and inserted.
 
+Currently available options are: I<depend_jobnum>
+
+If I<depend_jobnum> is set (to a scalar jobnum or an array reference of
+jobnums), all provisioning jobs will have a dependancy on the supplied
+jobnum(s) (they will not run until the specific job(s) complete(s)).
+
 =cut
 
 # Standard FS::svc_Common::insert
 =cut
 
 # Standard FS::svc_Common::insert
@@ -145,9 +194,16 @@ sub check {
   my $error =
     $self->ut_numbern('svcnum')
     || $self->ut_foreign_key('blocknum', 'addr_block', 'blocknum')
   my $error =
     $self->ut_numbern('svcnum')
     || $self->ut_foreign_key('blocknum', 'addr_block', 'blocknum')
+    || $self->ut_textn('description')
     || $self->ut_number('speed_up')
     || $self->ut_number('speed_down')
     || $self->ut_ipn('ip_addr')
     || $self->ut_number('speed_up')
     || $self->ut_number('speed_down')
     || $self->ut_ipn('ip_addr')
+    || $self->ut_hexn('mac_addr')
+    || $self->ut_hexn('auth_key')
+    || $self->ut_coordn('latitude', -90, 90)
+    || $self->ut_coordn('longitude', -180, 180)
+    || $self->ut_sfloatn('altitude')
+    || $self->ut_textn('vlan_profile')
   ;
   return $error if $error;
 
   ;
   return $error if $error;
 
@@ -155,8 +211,10 @@ sub check {
   if($self->speed_down < 0) { return 'speed_down must be positive'; }
 
   if (not($self->ip_addr) or $self->ip_addr eq '0.0.0.0') {
   if($self->speed_down < 0) { return 'speed_down must be positive'; }
 
   if (not($self->ip_addr) or $self->ip_addr eq '0.0.0.0') {
-    $self->ip_addr($self->addr_block->next_free_addr->addr);
-    if (not $self->ip_addr) {
+    my $next_addr = $self->addr_block->next_free_addr;
+    if ($next_addr) {
+      $self->ip_addr($next_addr->addr);
+    } else {
       return "No free addresses in addr_block (blocknum: ".$self->blocknum.")";
     }
   }
       return "No free addresses in addr_block (blocknum: ".$self->blocknum.")";
     }
   }