From a75cd2fe27a9eff74914ffbd1a0cea424cec8e04 Mon Sep 17 00:00:00 2001 From: Daniel Tiefnig Date: Wed, 24 Feb 2010 02:15:54 +0000 Subject: [PATCH] implemented preliminary number block management --- lib/admin/Controller/number.pm | 203 +++++++++++++++++++++++++++++++++ root/layout/menu | 1 + root/tt/number.tt | 145 +++++++++++++++++++++++ 3 files changed, 349 insertions(+) create mode 100644 lib/admin/Controller/number.pm create mode 100644 root/tt/number.tt diff --git a/lib/admin/Controller/number.pm b/lib/admin/Controller/number.pm new file mode 100644 index 0000000..b4c40fc --- /dev/null +++ b/lib/admin/Controller/number.pm @@ -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 + +=head1 COPYRIGHT + +The number controller is Copyright (c) 2010 Sipwise GmbH, Austria. All +rights reserved. + +=cut + +# ende gelaende +1; diff --git a/root/layout/menu b/root/layout/menu index e570ad6..9ea9b89 100644 --- a/root/layout/menu +++ b/root/layout/menu @@ -37,6 +37,7 @@

Number Management

diff --git a/root/tt/number.tt b/root/tt/number.tt new file mode 100644 index 0000000..0fd7a0b --- /dev/null +++ b/root/tt/number.tt @@ -0,0 +1,145 @@ +

Existing Number Blocks

+ +
+ [% IF messages.eblockmsg %]
[% messages.eblockmsg %]
[% END %] + [% IF messages.eblockerr %]
[% messages.eblockerr %]
[% END %] + [% IF erefill && prov_error %]
[% prov_error %]
[% END %] + + [% IF blocks %] + + + + + + + + + + [% id = 0 %] + [% FOREACH block = blocks %] + [% id = id + 1 %] + [% IF block.cc == edit_cc && block.ac == edit_ac && block.sn_prefix == edit_sn_prefix %] + + + + + + + + + + + + + + + + [% ELSE %] + + + + + + + + + + + + + + + + [% END %] + [% END %] +
ccacsn_prefixsn_lengthauthoritativeallocable + +
[% block.cc %][% block.ac %][% block.sn_prefix %][% block.data.sn_length %] + + + + + + cancel
[% block.cc %][% block.ac %][% block.sn_prefix %][% block.data.sn_length %] + + + + + [% UNLESS Catalyst.session.admin.read_only %] + edit + [% END %] +
+ [% UNLESS Catalyst.session.admin.read_only %] + + [% END %] +
+ [% ELSE %] + No number blocks found in the database. + [% END %] +
+ + [% UNLESS Catalyst.session.admin.read_only %] +

Create Number Block

+ +
+ [% IF messages.cblockmsg %]
[% messages.cblockmsg %]
[% END %] + [% IF messages.cblockerr %]
[% messages.cblockerr %]
[% END %] + +
+ + + + + + + + + + + + + + + + + + +
ccacsn_prefixsn_lengthauthoritativeallocable + +
+ + + + + + + + + + +
+
+ [% IF crefill && prov_error %]
[% prov_error %]
[% END %] + +
+ [% END %] +