implemented preliminary number block management

2.1@2833
Daniel Tiefnig 16 years ago
parent 51eea17e95
commit a75cd2fe27

@ -0,0 +1,203 @@
package admin::Controller::number;
use strict;
use warnings;
use base 'Catalyst::Controller';
=head1 NAME
admin::Controller::number - Catalyst Controller
=head1 DESCRIPTION
Catalyst Controller.
=head1 METHODS
=head2 index
Display and edit local number blocks.
=cut
sub index : Private {
my ( $self, $c ) = @_;
$c->stash->{template} = 'tt/number.tt';
my $blocks;
return unless $c->model('Provisioning')->call_prov( $c, 'billing', 'get_number_blocks',
undef,
\$blocks
);
$c->stash->{blocks} = $blocks if eval { @$blocks };
$c->stash->{edit_cc} = $c->request->params->{edit_cc};
$c->stash->{edit_ac} = $c->request->params->{edit_ac};
$c->stash->{edit_sn_prefix} = $c->request->params->{edit_sn_prefix};
if(exists $c->session->{crefill}) {
$c->stash->{crefill} = $c->session->{crefill};
delete $c->session->{crefill};
}
if(exists $c->session->{erefill}) {
$c->stash->{erefill} = $c->session->{erefill};
delete $c->session->{erefill};
} elsif($c->request->params->{edit_cc}) {
foreach my $block (eval { @$blocks }) {
if($$block{cc} == $c->stash->{edit_cc}
and $$block{ac} == $c->stash->{edit_ac}
and $$block{sn_prefix} == $c->stash->{edit_sn_prefix})
{
$c->stash->{erefill} = $block;
last;
}
}
}
return 1;
}
=head2 do_create_block
Create a new number block in the database.
=cut
sub do_create_block : Local {
my ( $self, $c ) = @_;
my %messages;
my %settings;
$settings{cc} = $c->request->params->{cc};
$settings{ac} = $c->request->params->{ac};
$settings{sn_prefix} = $c->request->params->{sn_prefix};
$settings{data}{sn_length} = $c->request->params->{sn_length};
$settings{data}{allocable} = $c->request->params->{allocable} ? 1 : 0;
$settings{data}{authoritative} = $c->request->params->{authoritative} ? 1 : 0;
unless(keys %messages) {
if($c->model('Provisioning')->call_prov( $c, 'billing', 'create_number_block',
\%settings,
undef))
{
$messages{cblockmsg} = 'Web.NumberBlock.Created';
$c->session->{messages} = \%messages;
$c->response->redirect("/number#create_block");
return;
}
$c->session->{crefill} = \%settings;
$c->response->redirect("/number#create_block");
return;
}
$messages{cblockerr} = 'Client.Voip.InputErrorFound';
$c->session->{messages} = \%messages;
$c->session->{crefill} = \%settings;
$c->response->redirect("/number#create_block");
return;
}
=head2 do_update_block
Update settings of a number block in the database.
=cut
sub do_update_block : Local {
my ( $self, $c ) = @_;
my %messages;
my %settings;
$settings{cc} = $c->request->params->{cc};
$settings{ac} = $c->request->params->{ac};
$settings{sn_prefix} = $c->request->params->{sn_prefix};
unless(length $settings{cc} and length $settings{ac}) {
$c->response->redirect("/number");
return;
}
$settings{data}{allocable} = $c->request->params->{allocable} ? 1 : 0;
$settings{data}{authoritative} = $c->request->params->{authoritative} ? 1 : 0;
unless(keys %messages) {
if($c->model('Provisioning')->call_prov( $c, 'billing', 'update_number_block',
\%settings,
undef))
{
$messages{eblockmsg} = 'Web.NumberBlock.Updated';
$c->session->{messages} = \%messages;
$c->response->redirect("/number");
return;
}
$c->session->{erefill} = \%settings;
$c->response->redirect("/number?edit_cc=$settings{cc}&edit_ac=$settings{ac}&edit_sn_prefix=$settings{sn_prefix}");
return;
}
$messages{eblockerr} = 'Client.Voip.InputErrorFound';
$c->session->{messages} = \%messages;
$c->session->{erefill} = \%settings;
$c->response->redirect("/number?edit_cc=$settings{cc}&edit_ac=$settings{ac}&edit_sn_prefix=$settings{sn_prefix}");
return;
}
=head2 do_delete_block
Delete a number block from the database.
=cut
sub do_delete_block : Local {
my ( $self, $c ) = @_;
my %settings;
$settings{cc} = $c->request->params->{cc};
$settings{ac} = $c->request->params->{ac};
$settings{sn_prefix} = $c->request->params->{sn_prefix};
unless(length $settings{cc} and length $settings{ac}) {
$c->response->redirect("/number");
return;
}
if($c->model('Provisioning')->call_prov( $c, 'billing', 'delete_number_block',
\%settings,
undef))
{
$c->session->{messages} = { eblockmsg => 'Web.NumberBlock.Deleted' };
$c->response->redirect("/number");
return;
}
$c->response->redirect("/number");
return;
}
=head1 BUGS AND LIMITATIONS
=over
=item none
=back
=head1 SEE ALSO
Provisioning model, Sipwise::Provisioning::Billing, Catalyst
=head1 AUTHORS
Daniel Tiefnig <dtiefnig@sipwise.com>
=head1 COPYRIGHT
The number controller is Copyright (c) 2010 Sipwise GmbH, Austria. All
rights reserved.
=cut
# ende gelaende
1;

@ -37,6 +37,7 @@
<h3>Number Management</h3>
<ul>
<li><a href="/number">Number Blocks</a></li>
<li><a href="/lnp">LNP</a></li>
<li><a href="/ncos">NCOS</a></li>
</ul>

@ -0,0 +1,145 @@
<h3>Existing Number Blocks</h3>
<div class="p1">
[% IF messages.eblockmsg %]<div class="goodmsg">[% messages.eblockmsg %]</div>[% END %]
[% IF messages.eblockerr %]<div class="errormsg">[% messages.eblockerr %]</div>[% END %]
[% IF erefill && prov_error %]<div class="errormsg">[% prov_error %]</div>[% END %]
[% IF blocks %]
<table class="numberblocks">
<tr class="table_header">
<td style="width:60px;">cc</td>
<td style="width:60px;">ac</td>
<td style="width:80px;">sn_prefix</td>
<td style="width:80px;">sn_length</td>
<td class="tdcenter" style="width:100px;">authoritative</td>
<td class="tdcenter" style="width:100px;">allocable</td>
<td style="width:40px;" />
<td style="width:60px;" />
</tr>
[% id = 0 %]
[% FOREACH block = blocks %]
[% id = id + 1 %]
[% IF block.cc == edit_cc && block.ac == edit_ac && block.sn_prefix == edit_sn_prefix %]
<tr>
<form action="/number/do_update_block" method="post">
<input type="hidden" name="cc" value="[% block.cc %]" />
<input type="hidden" name="ac" value="[% block.ac %]" />
<input type="hidden" name="sn_prefix" value="[% block.sn_prefix %]" />
<td class="tdkey">[% block.cc %]</td>
<td class="tdkey">[% block.ac %]</td>
<td class="tdkey">[% block.sn_prefix %]</td>
<td class="tdkey">[% block.data.sn_length %]</td>
<td class="tdcenter">
<input type="checkbox" class="checkbox" title="check if NGCP is authoritative for this number block"
name="authoritative" [% IF erefill.data.authoritative %]checked="checked"[% END %] />
</td>
<td class="tdcenter">
<input type="checkbox" class="checkbox" title="check if numbers should be automatically assigned from this number block"
name="allocable" [% IF erefill.data.allocable %]checked="checked"[% END %] />
</td>
<td>
<div class="postlink">
<label for="blocksave[% id %]">save</label>
<input type="image" class="hidden" src="/static/images/dot_trans.gif" alt="" id="blocksave[% id %]" />
</div>
</td>
</form>
<td><a href="/number" class="aaction">cancel</a></td>
</tr>
[% ELSE %]
<tr>
<td>[% block.cc %]</td>
<td>[% block.ac %]</td>
<td>[% block.sn_prefix %]</td>
<td>[% block.data.sn_length %]</td>
<td class="tdcenter">
<input type="checkbox" class="checkbox" title="check if NGCP is authoritative for this number block"
name="authoritative" disabled="disabled" [% IF block.data.authoritative %]checked="checked"[% END %] />
</td>
<td class="tdcenter">
<input type="checkbox" class="checkbox" title="check if numbers should be automatically assigned from this number block"
name="allocable" disabled="disabled" [% IF block.data.allocable %]checked="checked"[% END %] />
</td>
<td>
[% UNLESS Catalyst.session.admin.read_only %]
<a href="/number?edit_cc=[% block.cc %]&amp;edit_ac=[% block.ac %]&amp;edit_sn_prefix=[% block.sn_prefix %]" class="aaction">edit</a>
[% END %]
</td>
<form action="/number/do_delete_block" method="post">
<input type="hidden" name="cc" value="[% block.cc %]" />
<input type="hidden" name="ac" value="[% block.ac %]" />
<input type="hidden" name="sn_prefix" value="[% block.sn_prefix %]" />
<td>
[% UNLESS Catalyst.session.admin.read_only %]
<div class="postlink">
<label for="blockdel[% id %]">delete</label>
<input type="image" class="hidden" src="/static/images/dot_trans.gif" alt="" id="blockdel[% id %]" />
</div>
[% END %]
</td>
</form>
</tr>
[% END %]
[% END %]
</table>
[% ELSE %]
No number blocks found in the database.
[% END %]
</div>
[% UNLESS Catalyst.session.admin.read_only %]
<h3 id="create_block">Create Number Block</h3>
<div class="p1">
[% IF messages.cblockmsg %]<div class="goodmsg">[% messages.cblockmsg %]</div>[% END %]
[% IF messages.cblockerr %]<div class="errormsg">[% messages.cblockerr %]</div>[% END %]
<form action="/number/do_create_block" method="post">
<table class="numberblocks">
<tr class="table_header">
<td style="width:60px;">cc</td>
<td style="width:60px;">ac</td>
<td style="width:80px;">sn_prefix</td>
<td style="width:80px;">sn_length</td>
<td class="tdcenter" style="width:100px;">authoritative</td>
<td class="tdcenter" style="width:100px;">allocable</td>
<td style="width:40px;" />
<td style="width:60px;" />
</tr>
<tr>
<td><input type="text" class="irealshort" title="country code, integer"
name="cc" value="[% crefill.cc %]" />
</td>
<td><input type="text" class="irealshort" title="area code, integer"
name="ac" value="[% crefill.ac %]" />
</td>
<td><input type="text" class="ishort" title="subscriber number prefix, numeric string"
name="sn_prefix" value="[% crefill.sn_prefix %]" />
</td>
<td><input type="text" class="irealshort" title="subscriber number length, integer"
name="sn_length" value="[% crefill.data.sn_length %]" />
</td>
<td class="tdcenter">
<input type="checkbox" class="checkbox" title="check if NGCP is authoritative for this number block"
name="authoritative" [% IF crefill.data.authoritative %]checked="checked"[% END %] />
</td>
<td class="tdcenter">
<input type="checkbox" class="checkbox" title="check if numbers should be automatically assigned from this number block"
name="allocable" [% IF crefill.data.allocable %]checked="checked"[% END %] />
</td>
<td>
<div class="postlink">
<label for="blockadd">add</label>
<input type="image" class="hidden" src="/static/images/dot_trans.gif" alt="" id="blockadd" />
</div>
</td>
<td />
</tr>
</table>
</form>
[% IF crefill && prov_error %]<div class="errormsg">[% prov_error %]</div>[% END %]
</div>
[% END %]
Loading…
Cancel
Save