<% include("/elements/header$popup.html", $header ) %> <% include('/elements/error.html') %> % unless ( $cgi->param('error') ) { % } <%init> die "access denied" unless $FS::CurrentUser::CurrentUser->access_right('Import'); my $action = $1; my $header = ''; my $popup = ''; my $js = 'topreload();'; $cgi->param('ordernum') =~ /^(\d+)$/ or die 'illegal ordernum'; my $ordernum = $1; my $did_order = qsearchs( { 'table' => 'did_order', 'hashref' => { 'ordernum' => $ordernum }, } ); 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 = ''; $header = 'DID order confirmed'; $confirmed = parse_datetime($cgi->param('confirmed')) if $cgi->param('confirmed') && $cgi->param('confirmed') !~ /^\d+$/; $confirmed = $1 if $cgi->param('confirmed') && $cgi->param('confirmed') =~ /^(\d+)$/; die "invalid confirmation date" unless $confirmed; $did_order->confirmed($confirmed); $did_order->vendor_order_id($cgi->param('vendor_order_id')); $cgi->param('error',$did_order->replace); print $cgi->redirect(popurl(1). "did_order_confirm.html?". $cgi->query_string ) if $cgi->param('error'); $popup = '-popup'; } elsif ( $action eq 'cancel' ) { $header = 'DID order cancelled'; $cgi->param('error',$did_order->delete); $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); my @params = $cgi->param; foreach my $param ( @params ) { next unless $param =~ /^custnum(\d+)_pkgnum_svcpart$/; my $custnum = $1; my $value = $cgi->param($param); next unless $value =~ /^(\d+)_(\d+)$/; my $pkgnum = $1; my $svcpart = $2; if ( $did_order->custnum && $did_order->custnum == $custnum ) { # per-order custnum case foreach my $did ( @dids ) { 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'); } } } $popup = '-popup'; } elsif ( $action eq 'merge' ) { $header = 'DID order merged'; $cgi->param('target_ordernum') =~ /^(\d+)$/ or die 'illegal target_ordernum'; my $target_ordernum = $1; my $target_did_order = qsearchs( { 'table' => 'did_order', 'hashref' => { 'ordernum' => $target_ordernum }, } ); die "No order $target_ordernum" unless $target_did_order; $cgi->param('error',$target_did_order->merge($did_order)); $js = "window.location.href = '${p}browse/did_order.html'"; } else { die "illegal action"; } $header = 'Error' if $cgi->param('error');