stray closing /TABLE in the no-ticket case
[freeside.git] / FS / FS / part_export.pm
index d6357fd..572a1b6 100644 (file)
@@ -10,6 +10,7 @@ use FS::part_svc;
 use FS::part_export_option;
 use FS::part_export_machine;
 use FS::svc_export_machine;
 use FS::part_export_option;
 use FS::part_export_machine;
 use FS::svc_export_machine;
+use FS::export_cust_svc;
 
 #for export modules, though they should probably just use it themselves
 use FS::queue;
 
 #for export modules, though they should probably just use it themselves
 use FS::queue;
@@ -162,6 +163,17 @@ sub delete {
   local $FS::UID::AutoCommit = 0;
   my $dbh = dbh;
 
   local $FS::UID::AutoCommit = 0;
   my $dbh = dbh;
 
+  # delete associated export_cust_svc
+  foreach my $export_cust_svc ( 
+    qsearch('export_cust_svc',{ 'exportnum' => $self->exportnum })
+  ) {
+    my $error = $export_cust_svc->delete;
+    if ( $error ) {
+      $dbh->rollback if $oldAutoCommit;
+      return $error;
+    }
+  }
+
   # clean up export_nas records
   my $error = $self->process_m2m(
     'link_table'    => 'export_nas',
   # clean up export_nas records
   my $error = $self->process_m2m(
     'link_table'    => 'export_nas',
@@ -637,6 +649,81 @@ sub _export_unsuspend {
   $self->_export_replace( $svc_x, $old );
 }
 
   $self->_export_replace( $svc_x, $old );
 }
 
+=item get_remoteid SVC
+
+Returns the remote id for this export for the given service.
+
+=cut
+
+sub get_remoteid {
+  my ($self, $svc_x) = @_;
+
+  my $export_cust_svc = qsearchs('export_cust_svc',{
+    'exportnum' => $self->exportnum,
+    'svcnum' => $svc_x->svcnum
+  });
+
+  return $export_cust_svc ? $export_cust_svc->remoteid : '';
+}
+
+=item set_remoteid SVC VALUE
+
+Sets the remote id for this export for the given service.
+See L<FS::export_cust_svc>.
+
+If value is true, inserts or updates export_cust_svc record.
+If value is false, deletes any existing record.
+
+Returns error message, blank on success.
+
+=cut
+
+sub set_remoteid {
+  my ($self, $svc_x, $value) = @_;
+
+  my $export_cust_svc = qsearchs('export_cust_svc',{
+    'exportnum' => $self->exportnum,
+    'svcnum' => $svc_x->svcnum
+  });
+
+  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;
+
+  my $error = '';
+  if ($value) {
+    if ($export_cust_svc) {
+      $export_cust_svc->set('remoteid',$value);
+      $error = $export_cust_svc->replace;
+    } else {
+      $export_cust_svc = new FS::export_cust_svc {
+        'exportnum' => $self->exportnum,
+        'svcnum' => $svc_x->svcnum,
+        'remoteid' => $value
+      };
+      $error = $export_cust_svc->insert;
+    }
+  } else {
+    if ($export_cust_svc) {
+      $error = $export_cust_svc->delete;
+    } #otherwise, it already doesn't exist
+  }
+
+  if ($oldAutoCommit) {
+    $dbh->rollback if $error;
+    $dbh->commit unless $error;
+  }
+
+  return $error;  
+}
+
 =item export_links SVC_OBJECT ARRAYREF
 
 Adds a list of web elements to ARRAYREF specific to this export and SVC_OBJECT.
 =item export_links SVC_OBJECT ARRAYREF
 
 Adds a list of web elements to ARRAYREF specific to this export and SVC_OBJECT.
@@ -704,8 +791,12 @@ actual DIDs except at the lowest level.
 Generally, 'state' alone will return an array of area codes or region names
 in the state.
 
 Generally, 'state' alone will return an array of area codes or region names
 in the state.
 
-'state' and 'areacode' together will return an array of exchanges (NXX
-prefixes), or for some exports, an array of ratecenter names.
+'state' and 'areacode' together will return an array of either:
+- exchange strings of the form "New York (212-555-XXXX)"
+- ratecenter names of the form "New York, NY"
+
+These strings are sent back to the UI and offered as options so that the user
+can choose the local calling area they like.
 
 'areacode' and 'exchange', or 'state' and 'ratecenter', or 'region' by itself
 will return an array of actual DID numbers.
 
 'areacode' and 'exchange', or 'state' and 'ratecenter', or 'region' by itself
 will return an array of actual DID numbers.
@@ -713,6 +804,8 @@ will return an array of actual DID numbers.
 Passing 'tollfree' with a true value will override the whole hierarchy and
 return an array of tollfree numbers.
 
 Passing 'tollfree' with a true value will override the whole hierarchy and
 return an array of tollfree numbers.
 
+C<get_dids> methods should report errors via die().
+
 =cut
 
 # no stub; can('get_dids') should return false by default
 =cut
 
 # no stub; can('get_dids') should return false by default