summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorlevinse <levinse>2011-06-08 20:57:56 +0000
committerlevinse <levinse>2011-06-08 20:57:56 +0000
commit528fac78e910fc7cf0dae1e5469d385c898cf373 (patch)
tree122623699ea679bc86f295fd92c68972aaf30149
parentce8f8c834fb0b707b6cbd27846e812efc211e4f3 (diff)
DID inventory/import / bulk DID orders - phase 2, RT12754
-rw-r--r--FS/FS/did_order_item.pm12
-rw-r--r--httemplate/misc/did_order_confirmed.html56
2 files changed, 59 insertions, 9 deletions
diff --git a/FS/FS/did_order_item.pm b/FS/FS/did_order_item.pm
index 235e00eb7..d1f906f8c 100644
--- a/FS/FS/did_order_item.pm
+++ b/FS/FS/did_order_item.pm
@@ -126,6 +126,18 @@ sub check {
$self->SUPER::check;
}
+=item rate_center
+
+Returns the rate_center for this order item.
+
+=cut
+
+sub rate_center {
+ my $self = shift;
+ return '' unless $self->ratecenternum;
+ qsearchs('rate_center', { 'ratecenternum' => $self->ratecenternum });
+}
+
=back
=head1 SEE ALSO
diff --git a/httemplate/misc/did_order_confirmed.html b/httemplate/misc/did_order_confirmed.html
index 3505a1e1d..53dbb2f3a 100644
--- a/httemplate/misc/did_order_confirmed.html
+++ b/httemplate/misc/did_order_confirmed.html
@@ -24,6 +24,17 @@ my $did_order = qsearchs( {
} );
die "No order $ordernum" unless $did_order;
+sub didprov {
+ my($pkgnum,$svcpart,$phonenum) = (shift,shift,shift);
+ my $svc_phone = new FS::svc_phone({
+ pkgnum => $pkgnum,
+ svcpart => $svcpart,
+ countrycode => 1,
+ phonenum => $phonenum,
+ });
+ $cgi->param('error',$svc_phone->insert);
+}
+
my $action = $cgi->param('action');
if ( $action eq 'confirm' ) {
my $confirmed = '';
@@ -48,6 +59,8 @@ elsif ( $action eq 'cancel' ) {
$js = "window.location.href = '${p}browse/did_order.html'";
}
elsif ( $action eq 'provision' ) {
+ # XXX: most of this should move into did_order.pm and become transaction-enabled
+
$header = 'DID order provisioned';
my @dids = qsearch( 'phone_avail', { ordernum => $ordernum } );
die "no DIDs on order" unless scalar(@dids);
@@ -60,20 +73,45 @@ elsif ( $action eq 'provision' ) {
my $pkgnum = $1;
my $svcpart = $2;
if ( $did_order->custnum && $did_order->custnum == $custnum ) {
- # this is our old per-order custnum case
+ # per-order custnum case
foreach my $did ( @dids ) {
- my $svc_phone = new FS::svc_phone({
- pkgnum => $pkgnum,
- svcpart => $svcpart,
- countrycode => 1,
- phonenum => $did->npa.$did->nxx.$did->station,
- });
- $cgi->param('error',$svc_phone->insert);
+ didprov($pkgnum,$svcpart,$did->npa.$did->nxx.$did->station);
+ last if $cgi->param('error');
+ }
+ }
+ elsif(!$did_order->custnum) { # multi-customer/stock case
+
+ # get each order item for this customer for this order
+ my @did_order_item = qsearch('did_order_item', {
+ 'ordernum' => $ordernum,
+ 'custnum' => $custnum,
+ });
+ foreach my $did_order_item ( @did_order_item ) {
+ # get imported unprovisioned DIDs for this order matching this order item
+ my $didsearch = { 'ordernum' => $ordernum,
+ 'svcnum' => '',
+ };
+ $didsearch->{'npa'} = $did_order_item->npa
+ if $did_order_item->npa;
+ $didsearch->{'state'} = $did_order_item->state
+ if $did_order_item->state;
+ $didsearch->{'name'} = $did_order_item->rate_center->description
+ if $did_order_item->rate_center;
+ $didsearch->{'msanum'} = $did_order_item->msanum
+ if $did_order_item->msanum;
+ $didsearch->{'latanum'} = $did_order_item->latanum
+ if $did_order_item->latanum;
+ @dids = qsearch('phone_avail', $didsearch);
+ my $limit = $did_order_item->quantity;
+ foreach my $did ( @dids ) {
+ didprov($pkgnum,$svcpart,$did->npa.$did->nxx.$did->station);
+ $limit--;
+ last if $cgi->param('error') || $limit == 0;
+ }
last if $cgi->param('error');
}
}
- # XXX: now what do we do for order items? Not clear how to match a DID in an order item
}
$popup = '-popup';
}