use vars qw(@ISA %info %options $DEBUG);
use Tie::IxHash;
-use FS::Record qw(fields);
+use FS::Record qw(fields dbh);
use FS::part_export;
@ISA = qw(FS::part_export);
'user' => { label => 'Northbound username', default=>'nbi' },
'password' => { label => 'Password', default => '' },
'ems' => { label => 'Full EMS', type => 'checkbox' },
+ 'always_bam' => { label => 'Always activate/suspend authentication', type => 'checkbox' },
'element_name_length' => { label => 'Size of siteName (best left blank)' },
;
sub prizm_command {
my ($self,$namespace,$method) = (shift,shift,shift);
- eval "use Net::Prizm qw(CustomerInfo PrizmElement);";
+ eval "use Net::Prizm 0.04 qw(CustomerInfo PrizmElement);";
die $@ if $@;
my $prizm = new Net::Prizm (
sub queued_prizm_command { # subroutine
my( $url, $user, $password, $namespace, $method, @args ) = @_;
- eval "use Net::Prizm qw(CustomerInfo PrizmElement);";
+ eval "use Net::Prizm 0.04 qw(CustomerInfo PrizmElement);";
die $@ if $@;
my $prizm = new Net::Prizm (
# }
# }
+ my $performance_profile = $svc->performance_profile;
+ $performance_profile ||= $svc->cust_svc->cust_pkg->part_pkg->pkg;
+
my $element_name_length = 50;
$element_name_length = $1
if $self->option('element_name_length') =~ /^\s*(\d+)\s*$/;
$location,
$contact,
sprintf("%032X", $svc->authkey),
- $svc->cust_svc->cust_pkg->part_pkg->pkg,
+ $performance_profile,
$svc->vlan_profile,
($self->option('ems') ? 1 : 0 ),
);
$err_or_som = $self->prizm_command('NetworkIfService', 'setElementConfigSet',
[ $element ],
- $svc->cust_svc->cust_pkg->part_pkg->pkg,
+ $performance_profile,
0,
1,
);
sub _export_delete {
my( $self, $svc ) = ( shift, shift );
+ my $oldAutoCommit = $FS::UID::AutoCommit;
+ local $FS::UID::AutoCommit = 0;
+ my $dbh = dbh;
+
my $cust_pkg = $svc->cust_svc->cust_pkg;
my $depend = [];
'svcnum' => $svc->svcnum,
'job' => 'FS::part_export::prizm::queued_prizm_command',
};
- $queue->insert(
+ my $error = $queue->insert(
( map { $self->option($_) }
qw( url user password ) ),
'CustomerIfService',
$cust_pkg->custnum,
0,
$svc->mac_addr,
- ) && push @$depend, $queue->jobnum;
+ );
+
+ if ($error) {
+ $dbh->rollback if $oldAutoCommit;
+ return $error;
+ }
+
+ push @$depend, $queue->jobnum;
}
- $self->queue_statuschange('deleteElement', $depend, $svc, 1);
+ my $err_or_queue =
+ $self->queue_statuschange('deleteElement', $depend, $svc, 1);
+
+ unless (ref($err_or_queue)) {
+ $dbh->rollback if $oldAutoCommit;
+ return $err_or_queue;
+ }
+
+ $dbh->commit or die $dbh->errstr if $oldAutoCommit;
+
+ '';
}
sub _export_replace {
return $err_or_som
unless ref($err_or_som);
+ my $performance_profile = $new->performance_profile;
+ $performance_profile ||= $new->cust_svc->cust_pkg->part_pkg->pkg;
+
+ $err_or_som = $self->prizm_command('NetworkIfService', 'setElementConfigSet',
+ [ $element ],
+ $performance_profile,
+ 0,
+ 1,
+ );
+ return $err_or_som
+ unless ref($err_or_som);
+
'';
}
sub _export_suspend {
my( $self, $svc ) = ( shift, shift );
+ my $depend = [];
my $ems = $self->option('ems') ? 1 : 0;
- $self->queue_statuschange('suspendNetworkElements', [], $svc, 1, $ems);
+ my $err_or_queue = '';
+
+ my $oldAutoCommit = $FS::UID::AutoCommit;
+ local $FS::UID::AutoCommit = 0;
+ my $dbh = dbh;
+
+ $err_or_queue =
+ $self->queue_statuschange('suspendNetworkElements', [], $svc, 1, $ems);
+ unless (ref($err_or_queue)) {
+ $dbh->rollback if $oldAutoCommit;
+ return $err_or_queue;
+ }
+ push @$depend, $err_or_queue->jobnum;
+
+ if ($ems && $self->option('always_bam')) {
+ $err_or_queue =
+ $self->queue_statuschange('suspendNetworkElements', $depend, $svc, 1, 0);
+ unless (ref($err_or_queue)) {
+ $dbh->rollback if $oldAutoCommit;
+ return $err_or_queue;
+ }
+ }
+
+ $dbh->commit or die $dbh->errstr if $oldAutoCommit;
+
+ '';
}
sub _export_unsuspend {
my( $self, $svc ) = ( shift, shift );
+ my $depend = [];
my $ems = $self->option('ems') ? 1 : 0;
- $self->queue_statuschange('activateNetworkElements', [], $svc, 1, $ems);
+ my $err_or_queue = '';
+
+ my $oldAutoCommit = $FS::UID::AutoCommit;
+ local $FS::UID::AutoCommit = 0;
+ my $dbh = dbh;
+
+ if ($ems && $self->option('always_bam')) {
+ $err_or_queue =
+ $self->queue_statuschange('activateNetworkElements', [], $svc, 1, 0);
+ unless (ref($err_or_queue)) {
+ $dbh->rollback if $oldAutoCommit;
+ return $err_or_queue;
+ }
+ push @$depend, $err_or_queue->jobnum;
+ }
+
+ $err_or_queue =
+ $self->queue_statuschange('activateNetworkElements', $depend, $svc, 1, $ems);
+ unless (ref($err_or_queue)) {
+ $dbh->rollback if $oldAutoCommit;
+ return $err_or_queue;
+ }
+
+ $dbh->commit or die $dbh->errstr if $oldAutoCommit;
+
+ '';
+}
+
+sub export_links {
+ my( $self, $svc, $arrayref ) = ( shift, shift, shift );
+
+ push @$arrayref, '<A HREF="http://'. $svc->ip_addr. '">SM</A>';
+
+ '';
}
sub queue_statuschange {
'svcnum' => $svc->svcnum,
'job' => 'FS::part_export::prizm::statuschange',
};
- $queue->insert(
+ my $error = $queue->insert(
( map { $self->option($_) }
qw( url user password ) ),
$method,
@args,
);
- if ($queue->jobnum) { # successful insertion
+ unless ($error) { # successful insertion
foreach my $job ( @$jobs ) {
- $queue->depend_insert($job);
+ $error ||= $queue->depend_insert($job);
}
}
+ $error or $queue;
}
sub statuschange { # subroutine
my( $url, $user, $password, $method, $mac_addr, @args) = @_;
- eval "use Net::Prizm qw(CustomerInfo PrizmElement);";
+ eval "use Net::Prizm 0.04 qw(CustomerInfo PrizmElement);";
die $@ if $@;
my $prizm = new Net::Prizm (