use strict;
use base qw( FS::svc_External_Common );
-#use FS::Record qw( qsearch qsearchs );
+use FS::Record qw( qsearch qsearchs dbh );
+use FS::Conf;
use FS::cust_svc;
+use FS::svc_phone;
+use FS::svc_acct;
=head1 NAME
=over 4
-=item field - description
+=item svcnum
+
+Primary key (assigned automatcially for new accounts)
+
+=item id
+
+(Unique?) number of external record
+
+=item title
+
+PBX name
+
+=item max_extensions
+
+Maximum number of extensions
=back
'display_weight' => 70,
'cancel_weight' => 90,
'fields' => {
- 'id' => 'Thirdlane ID',
- 'title' => 'Description',
+ 'id' => 'ID',
+ 'title' => 'Name',
'max_extensions' => 'Maximum number of User Extensions',
# 'field' => 'Description',
# 'another_field' => {
=item label
-Returns a meaningful identifier for this PBX tenant.
+Returns the title field for this PBX tenant.
=cut
sub label {
my $self = shift;
- $self->label_field; #or something more complicated if necessary
+ $self->title;
}
=item insert
sub delete {
my $self = shift;
- my $error;
-
- $error = $self->SUPER::delete;
- return $error if $error;
+ 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;
+
+ foreach my $svc_phone (qsearch('svc_phone', { 'pbxsvc' => $self->svcnum } )) {
+ $svc_phone->pbxsvc('');
+ my $error = $svc_phone->replace;
+ if ( $error ) {
+ $dbh->rollback if $oldAutoCommit;
+ return $error;
+ }
+ }
+
+ foreach my $svc_acct (qsearch('svc_acct', { 'pbxsvc' => $self->svcnum } )) {
+ my $error = $svc_acct->delete;
+ if ( $error ) {
+ $dbh->rollback if $oldAutoCommit;
+ return $error;
+ }
+ }
+
+ my $error = $self->SUPER::delete;
+ if ( $error ) {
+ $dbh->rollback if $oldAutoCommit;
+ return $error;
+ }
+
+ $dbh->commit or die $dbh->errstr if $oldAutoCommit;
'';
}
$self->SUPER::check;
}
+#XXX this is a way-too simplistic implementation
+# at the very least, title should be unique across exports that need that or
+# controlled by a conf setting or something
+sub _check_duplicate {
+ my $self = shift;
+
+ my $conf = new FS::Conf;
+ return '' if $conf->config('global_unique-pbx_title') eq 'disabled';
+
+ $self->lock_table;
+
+ if ( qsearchs( 'svc_pbx', { 'title' => $self->title } ) ) {
+ return "Name in use";
+ } else {
+ return '';
+ }
+}
+
=back
=head1 BUGS