BroadWorks export, phase 1, #25927
[freeside.git] / FS / FS / svc_phone.pm
index 647412f..3191262 100644 (file)
@@ -134,6 +134,15 @@ Class of Service for E911 service (per the NENA 2.1 standard).
 
 Type of Service for E911 service.
 
+=item circuit_svcnum
+
+The L<FS::svc_circuit> record for the physical circuit that transports this
+phone line.
+
+=item sip_server
+
+The hostname of the SIP server that this phone number is routed to.
+
 =back
 
 =head1 METHODS
@@ -185,8 +194,17 @@ sub table_info {
                          select_table => 'svc_domain',
                          select_key   => 'svcnum',
                          select_label => 'domain',
+                         select_allow_empty => 1,
                          disable_inventory => 1,
                        },
+        'circuit_svcnum'   => { label             => 'Circuit',
+                                type              => 'select',
+                                select_table      => 'svc_domain',
+                                select_key        => 'svcnum',
+                                select_label      => 'circuit_label',
+                                disable_inventory => 1,
+                              },
+
         'sms_carrierid'    => { label             => 'SMS Carrier',
                                 type              => 'select',
                                 select_table      => 'cdr_carrier',
@@ -243,6 +261,10 @@ sub table_info {
                                 disable_inventory => 1,
                                 multiple => 1,
                         },
+        'sip_server'  => {
+                                label => 'SIP Host',
+                                %dis2,
+                         },
     },
   };
 }
@@ -251,6 +273,8 @@ sub table { 'svc_phone'; }
 
 sub table_dupcheck_fields { ( 'countrycode', 'phonenum' ); }
 
+sub device_table { 'phone_device'; }
+
 =item search_sql STRING
 
 Class method which returns an SQL fragment to search for the given string.
@@ -301,45 +325,20 @@ error, otherwise returns false.
 
 =cut
 
-sub insert {
-  my $self = shift;
-  my %options = @_;
-
-  if ( $DEBUG ) {
-    warn "[$me] insert called on $self: ". Dumper($self).
-         "\nwith options: ". Dumper(%options);
-  }
+sub preinsert_hook_first {
+  my( $self, %options ) = @_;
 
-  local $SIG{HUP} = 'IGNORE';
-  local $SIG{INT} = 'IGNORE';
-  local $SIG{QUIT} = 'IGNORE';
-  local $SIG{TERM} = 'IGNORE';
-  local $SIG{TSTP} = 'IGNORE';
-  local $SIG{PIPE} = 'IGNORE';
-
-  my $oldAutoCommit = $FS::UID::AutoCommit;
-  local $FS::UID::AutoCommit = 0;
-  my $dbh = dbh;
+  return '' unless $options{'cust_location'};
 
   #false laziness w/cust_pkg.pm... move this to location_Mixin?  that would
   #make it more of a base class than a mixin... :)
-  if ( $options{'cust_location'} ) {
-    my $error = $options{'cust_location'}->find_or_insert;
-    if ( $error ) {
-      $dbh->rollback if $oldAutoCommit;
-      return "inserting cust_location (transaction rolled back): $error";
-    }
-    $self->locationnum( $options{'cust_location'}->locationnum );
-  }
+  $options{'cust_location'}->custnum( $self->cust_svc->cust_pkg->custnum );
+  my $error = $options{'cust_location'}->find_or_insert;
+  return "inserting cust_location (transaction rolled back): $error"
+    if $error;
+  $self->locationnum( $options{'cust_location'}->locationnum );
   #what about on-the-fly edits?  if the ui supports it?
 
-  my $error = $self->SUPER::insert(%options);
-  if ( $error ) {
-    $dbh->rollback if $oldAutoCommit;
-    return $error;
-  }
-
-  $dbh->commit or die $dbh->errstr if $oldAutoCommit;
   '';
 
 }
@@ -540,6 +539,7 @@ sub check {
                                'native', 'portin-reject', 'portout-reject'])
     || $self->ut_enumn('portable', ['','Y'])
     || $self->ut_textn('lnp_reject_reason')
+    || $self->ut_domainn('sip_server')
   ;
   return $error if $error;
 
@@ -711,6 +711,8 @@ sub radius_groups {
 
 =item sms_cdr_carrier
 
+Returns the L<FS::cdr_carrier> assigned as the SMS carrier for this phone.
+
 =cut
 
 sub sms_cdr_carrier {
@@ -721,6 +723,8 @@ sub sms_cdr_carrier {
 
 =item sms_carriername
 
+Returns the name of the SMS carrier, or an empty string if there isn't one.
+
 =cut
 
 sub sms_carriername {
@@ -729,6 +733,29 @@ sub sms_carriername {
   $cdr_carrier->carriername;
 }
 
+=item svc_circuit
+
+Returns the L<FS::svc_circuit> assigned as the trunk for this phone line.
+
+=item circuit_label
+
+Returns the label of the circuit (the part_svc label followed by the 
+circuit ID), or an empty string if there isn't one.
+
+=cut
+
+sub svc_circuit {
+  my $self = shift;
+  my $svcnum = $self->get('circuit_svcnum') or return '';
+  return FS::svc_circuit->by_key($svcnum);
+}
+
+sub circuit_label {
+  my $self = shift;
+  my $svc_circuit = $self->svc_circuit or return '';
+  return join(' ', $svc_circuit->part_svc->svc, $svc_circuit->circuit_id);
+}
+
 =item phone_device
 
 Returns any FS::phone_device records associated with this service.