From: Mark Wells
Date: Tue, 29 Mar 2016 00:36:25 +0000 (-0700)
Subject: slightly better error reporting for DID selector, from #39914
X-Git-Url: http://git.freeside.biz/gitweb/?p=freeside.git;a=commitdiff_plain;h=79dc2b72b17acaa6aa19da6cd4f8c1b8a194a794
slightly better error reporting for DID selector, from #39914
---
diff --git a/FS/FS/part_export.pm b/FS/FS/part_export.pm
index 1b6c55a8b..572a1b684 100644
--- a/FS/FS/part_export.pm
+++ b/FS/FS/part_export.pm
@@ -804,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.
+C methods should report errors via die().
+
=cut
# no stub; can('get_dids') should return false by default
diff --git a/FS/FS/part_export/bandwidth_com.pm b/FS/FS/part_export/bandwidth_com.pm
index 6c69fe356..4fbc2de21 100644
--- a/FS/FS/part_export/bandwidth_com.pm
+++ b/FS/FS/part_export/bandwidth_com.pm
@@ -151,43 +151,46 @@ sub can_get_dids { 1 }
sub get_dids_npa_select { 1 }
sub get_dids {
- local $SIG{__DIE__};
my $self = shift;
my %opt = @_;
my ($exportnum) = $self->exportnum =~ /^(\d+)$/;
- return [] if $opt{'tollfree'}; # we'll come back to this
+ try {
+ return [] if $opt{'tollfree'}; # we'll come back to this
- my ($state, $npa, $nxx) = @opt{'state', 'areacode', 'exchange'};
+ my ($state, $npa, $nxx) = @opt{'state', 'areacode', 'exchange'};
- if ( $nxx ) {
+ if ( $nxx ) {
- die "areacode required\n" unless $npa;
- my $limit = $self->option('num_dids') || 20;
- my $result = $self->api_get('availableNumbers', [
- 'npaNxx' => $npa.$nxx,
- 'quantity' => $limit,
- 'LCA' => 'false',
- # find only those that match the NPA-NXX, not those thought to be in
- # the same local calling area. though that might be useful.
- ]);
- return [ $result->findnodes('//TelephoneNumber')->to_literal_list ];
+ die "areacode required\n" unless $npa;
+ my $limit = $self->option('num_dids') || 20;
+ my $result = $self->api_get('availableNumbers', [
+ 'npaNxx' => $npa.$nxx,
+ 'quantity' => $limit,
+ 'LCA' => 'false',
+ # find only those that match the NPA-NXX, not those thought to be in
+ # the same local calling area. though that might be useful.
+ ]);
+ return [ $result->findnodes('//TelephoneNumber')->to_literal_list ];
- } elsif ( $npa ) {
+ } elsif ( $npa ) {
- return $self->npanxx_cache($npa);
+ return $self->npanxx_cache($npa);
- } elsif ( $state ) {
+ } elsif ( $state ) {
- return $self->npa_cache($state);
+ return $self->npa_cache($state);
- } else { # something's wrong
+ } else { # something's wrong
- warn "get_dids called with no arguments";
- return [];
+ warn "get_dids called with no arguments";
+ return [];
+ }
+ } catch {
+ die "$me $_\n";
}
}
diff --git a/FS/FS/part_export/test.pm b/FS/FS/part_export/test.pm
index 126897c0b..392fc4feb 100644
--- a/FS/FS/part_export/test.pm
+++ b/FS/FS/part_export/test.pm
@@ -18,6 +18,7 @@ tie %options, 'Tie::IxHash',
'replace' => { label => 'Replace',type => 'checkbox', default => 1, },
'suspend' => { label => 'Suspend',type => 'checkbox', default => 1, },
'unsuspend'=>{ label => 'Unsuspend', type => 'checkbox', default => 1, },
+ 'get_dids_npa_select' => { label => 'DIDs by NPA', type => 'checkbox' },
;
%info = (
@@ -31,6 +32,8 @@ or always dies, according to the "Result" option. It does nothing else; the
purpose is purely to simulate success or failure within an export module.
The checkbox options can be used to turn the export off for certain
actions, if this is needed.
+
This export will produce a small set of DIDs, in either Alabama (if the
+"DIDs by NPA" option is on) or California (if not).
END
);
@@ -72,4 +75,79 @@ sub run {
}
}
+sub can_get_dids { 1 }
+
+sub get_dids_npa_select {
+ my $self = shift;
+ $self->option('get_dids_npa_select') ? 1 : 0;
+}
+
+# we don't yet have tollfree
+
+my $dids_by_npa = {
+ 'states' => [ 'AK', 'AL' ],
+ # states
+ 'AK' => [],
+ 'AL' => [ '205', '998', '999' ],
+ # NPAs
+ '205' => [ 'ALABASTER (205-555-XXXX)', # an NPA-NXX
+ 'EMPTY (205-998-XXXX)',
+ 'INVALID (205-999-XXXX)',
+ 'ALBERTVILLE, AL', # a ratecenter
+ ],
+ '998' => [],
+ '999' => undef,
+ # exchanges
+ '205555' =>
+ [
+ '2055550101',
+ '2055550102'
+ ],
+ '205998' => [],
+ '205999' => undef,
+ # ratecenters
+ 'ALBERTVILLE' => [
+ '2055550111',
+ '2055550112',
+ ],
+},
+
+my $dids_by_region = {
+ 'states' => [ 'CA', 'CO' ],
+ 'CA' => [ 'CALIFORNIA',
+ 'EMPTY',
+ 'INVALID'
+ ],
+ 'CO' => [],
+ # regions
+ 'CALIFORNIA' => [
+ '4155550200',
+ '4155550201',
+ ],
+ 'EMPTY' => [],
+ 'INVALID' => undef,
+};
+
+sub get_dids {
+ my $self = shift;
+ my %opt = @_;
+ my $data = $self->get_dids_npa_select ? $dids_by_npa : $dids_by_region;
+
+ my $key;
+ if ( $opt{'exchange'} ) {
+ $key = $opt{'areacode'} . $opt{'exchange'};
+ } else {
+ $key = $opt{'ratecenter'}
+ || $opt{'areacode'}
+ || $opt{'region'}
+ || $opt{'state'}
+ || 'states';
+ }
+ if ( defined $data->{ $key } ) {
+ return $data->{ $key };
+ } else {
+ die "[test] '$key' is invalid\n";
+ }
+}
+
1;
diff --git a/httemplate/REST/1.0/phone_avail b/httemplate/REST/1.0/phone_avail
index ef9d3e7f0..c6638f48f 100644
--- a/httemplate/REST/1.0/phone_avail
+++ b/httemplate/REST/1.0/phone_avail
@@ -17,7 +17,8 @@ if ( scalar(@exports) > 1 ) {
die "no DID providing export attached to svcpart $svcpart";
}
my $export = $exports[0];
-
+
+# XXX no error handling
my $phonenums = $export->get_dids( map { $_ => scalar($cgi->param($_)) }
qw( ratecenter state areacode exchange )
);
diff --git a/httemplate/elements/select-areacode.html b/httemplate/elements/select-areacode.html
index f0f56d56d..612f03a8b 100644
--- a/httemplate/elements/select-areacode.html
+++ b/httemplate/elements/select-areacode.html
@@ -28,6 +28,7 @@
function <% $opt{'prefix'} %>update_areacodes(areacodes) {
+ var reply = JSON.parse(areacodes);
// blank the current areacode
for ( var i = what.form.<% $opt{'prefix'} %>areacode.length; i >= 0; i-- )
what.form.<% $opt{'prefix'} %>areacode.options[i] = null;
@@ -47,7 +48,7 @@
% }
// add the new areacodes
- var areacodeArray = eval('(' + areacodes + ')' );
+ var areacodeArray = reply.areacodes;
for ( var s = 0; s < areacodeArray.length; s++ ) {
var areacodeLabel = areacodeArray[s];
if ( areacodeLabel == "" )
@@ -62,6 +63,11 @@
} else {
var areacodeerror = document.getElementById('<% $opt{'prefix'} %>areacodeerror');
areacodeerror.style.display = 'inline';
+ if ( reply.error ) {
+ areacodeerror.textContent = reply.error;
+ } else {
+ areacodeerror.textContent = 'Select a different state';
+ }
}
//run the callback
@@ -78,7 +84,7 @@