From 8c45fc5a7c48a132e352534a13ffbe823e763406 Mon Sep 17 00:00:00 2001 From: Gerhard Jungwirth Date: Mon, 5 Oct 2015 19:05:45 +0200 Subject: [PATCH] MT#15203 Allow adding alias numbers to pbx group Change-Id: If1fa5574d28cd18df1790e0dd2eccff76b255894 --- lib/NGCP/Panel/Controller/Customer.pm | 39 ++++++++++++---- lib/NGCP/Panel/Form/Customer/PbxGroup.pm | 8 +--- lib/NGCP/Panel/Form/Customer/PbxGroupBase.pm | 13 ++++-- lib/NGCP/Panel/Form/Customer/PbxGroupEdit.pm | 30 ++++++------ .../Form/Customer/PbxGroupEditSubadmin.pm | 46 +++++++++++++++++++ .../Panel/Form/Customer/PbxSubscriberEdit.pm | 2 - 6 files changed, 104 insertions(+), 34 deletions(-) create mode 100644 lib/NGCP/Panel/Form/Customer/PbxGroupEditSubadmin.pm diff --git a/lib/NGCP/Panel/Controller/Customer.pm b/lib/NGCP/Panel/Controller/Customer.pm index 6535fb3ebb..324edbe59d 100644 --- a/lib/NGCP/Panel/Controller/Customer.pm +++ b/lib/NGCP/Panel/Controller/Customer.pm @@ -1234,10 +1234,10 @@ sub pbx_group_create :Chained('base') :PathPart('pbx/group/create') :Args(0) { } my $posted = ($c->request->method eq 'POST'); - $c->stash->{pilot} = $c->stash->{subscribers}->search({ + my $pilot = $c->stash->{subscribers}->search({ 'provisioning_voip_subscriber.is_pbx_pilot' => 1, })->first; - unless($c->stash->{pilot}) { + unless($pilot) { NGCP::Panel::Utils::Message->error( c => $c, error => 'cannot create pbx group without having a pilot subscriber', @@ -1268,7 +1268,6 @@ sub pbx_group_create :Chained('base') :PathPart('pbx/group/create') :Args(0) { $schema->set_transaction_isolation('READ COMMITTED'); $schema->txn_do( sub { my $preferences = {}; - my $pilot = $c->stash->{pilot}; my $base_number = $pilot->primary_number; if($base_number) { @@ -1360,6 +1359,15 @@ sub pbx_group_edit :Chained('pbx_group_base') :PathPart('edit') :Args(0) { $form = NGCP::Panel::Form::Customer::PbxGroupEdit->new; my $params = { $c->stash->{pbx_group}->provisioning_voip_subscriber->get_inflated_columns }; $params = $params->merge($c->session->{created_objects}); + + unless ($posted) { + NGCP::Panel::Utils::Subscriber::prepare_alias_select( + c => $c, + subscriber => $c->stash->{pbx_group}, + params => $params, + ); + } + $form->process( posted => $posted, params => $c->request->params, @@ -1385,23 +1393,36 @@ sub pbx_group_edit :Chained('pbx_group_base') :PathPart('edit') :Args(0) { cloud_pbx_hunt_timeout => $form->values->{pbx_hunt_timeout}, } ); + my $e164; + my $sub = $c->stash->{pbx_group}; if(defined $form->values->{pbx_extension} && $form->values->{pbx_extension} ne $old_extension) { - my $sub = $c->stash->{pbx_group}; my $base_number = $c->stash->{pilot}->primary_number; - my $e164 = { + $e164 = { cc => $sub->primary_number->cc, ac => $sub->primary_number->ac, sn => $base_number->sn . $form->values->{pbx_extension}, }; - NGCP::Panel::Utils::Subscriber::update_subscriber_numbers( + } + NGCP::Panel::Utils::Subscriber::update_subscriber_numbers( + c => $c, + schema => $schema, + subscriber_id => $sub->id, + reseller_id => $sub->contract->contact->reseller_id, + $e164 ? (primary_number => $e164) : (), + $c->user->roles eq 'subscriberadmin' ? () : (alias_numbers => $form->values->{alias_number}), + ); + if(exists $form->values->{alias_select} && $c->stash->{pilot}) { + NGCP::Panel::Utils::Subscriber::update_subadmin_sub_aliases( c => $c, schema => $schema, - subscriber_id => $sub->id, - reseller_id => $sub->contract->contact->reseller_id, - primary_number => $e164, + subscriber => $sub, + contract_id => $sub->contract_id, + alias_selected => decode_json($form->values->{alias_select}), + sadmin => $c->stash->{pilot}, ); } + }); NGCP::Panel::Utils::Message->info( c => $c, diff --git a/lib/NGCP/Panel/Form/Customer/PbxGroup.pm b/lib/NGCP/Panel/Form/Customer/PbxGroup.pm index e3c201beec..e77871517a 100644 --- a/lib/NGCP/Panel/Form/Customer/PbxGroup.pm +++ b/lib/NGCP/Panel/Form/Customer/PbxGroup.pm @@ -9,16 +9,10 @@ has_field 'username' => ( label => 'Name', ); -has_field 'pbx_extension' => ( - type => 'Text', - required => 1, - label => 'Extension', -); - has_block 'fields' => ( tag => 'div', class => [qw/modal-body/], - render_list => [qw/username pbx_extension pbx_hunt_policy pbx_hunt_timeout/], + render_list => [qw/username pbx_extension pbx_hunt_policy pbx_hunt_timeout alias_number alias_number_add/], ); sub validate_username { diff --git a/lib/NGCP/Panel/Form/Customer/PbxGroupBase.pm b/lib/NGCP/Panel/Form/Customer/PbxGroupBase.pm index 570f1edac9..d1a788a3f4 100644 --- a/lib/NGCP/Panel/Form/Customer/PbxGroupBase.pm +++ b/lib/NGCP/Panel/Form/Customer/PbxGroupBase.pm @@ -5,12 +5,19 @@ extends 'HTML::FormHandler'; use Moose::Util::TypeConstraints; use HTML::FormHandler::Widget::Block::Bootstrap; -use NGCP::Panel::Field::PosInteger; has '+widget_wrapper' => ( default => 'Bootstrap' ); has_field 'submitid' => ( type => 'Hidden' ); sub build_render_list {[qw/submitid fields actions/]} -sub build_form_element_class {[qw(form-horizontal)]} +sub build_form_element_class { [qw(form-horizontal)] } + +with 'NGCP::Panel::Render::RepeatableJs'; + +has_field 'pbx_extension' => ( + type => 'Text', + required => 1, + label => 'Extension', +); has_field 'pbx_hunt_policy' => ( type => 'Select', @@ -42,7 +49,7 @@ has_field 'save' => ( has_block 'fields' => ( tag => 'div', class => [qw/modal-body/], - render_list => [qw/pbx_hunt_policy pbx_hunt_timeout/], + render_list => [qw/pbx_extension pbx_hunt_policy pbx_hunt_timeout/], ); has_block 'actions' => ( diff --git a/lib/NGCP/Panel/Form/Customer/PbxGroupEdit.pm b/lib/NGCP/Panel/Form/Customer/PbxGroupEdit.pm index 396745c251..cf7f012839 100644 --- a/lib/NGCP/Panel/Form/Customer/PbxGroupEdit.pm +++ b/lib/NGCP/Panel/Form/Customer/PbxGroupEdit.pm @@ -3,25 +3,29 @@ package NGCP::Panel::Form::Customer::PbxGroupEdit; use HTML::FormHandler::Moose; extends 'NGCP::Panel::Form::Customer::PbxGroupBase'; -has_field 'pbx_extension' => ( - type => 'Text', - required => 1, - label => 'Extension', +has_field 'alias_number' => ( + type => '+NGCP::Panel::Field::AliasNumber', + setup_for_js => 1, + do_wrapper => 1, + do_label => 0, + tags => { + controls_div => 1, + }, + wrapper_class => [qw/hfh-rep/], +); + +has_field 'alias_number_add' => ( + type => 'AddElement', + repeatable => 'alias_number', + value => 'Add another number', + element_class => [qw/btn btn-primary pull-right/], ); has_block 'fields' => ( tag => 'div', class => [qw/modal-body/], - render_list => [qw/pbx_extension pbx_hunt_policy pbx_hunt_timeout/], + render_list => [qw/pbx_extension pbx_hunt_policy pbx_hunt_timeout alias_number alias_number_add/], ); -sub validate_username { - my ($self, $field) = @_; - - unless($field->value =~ /^[a-zA-Z0-9_\-]+$/) { - $field->add_error("Invalid group name, must only contain letters, digits, - and _"); - } -} - 1; # vim: set tabstop=4 expandtab: diff --git a/lib/NGCP/Panel/Form/Customer/PbxGroupEditSubadmin.pm b/lib/NGCP/Panel/Form/Customer/PbxGroupEditSubadmin.pm new file mode 100644 index 0000000000..b6f7302545 --- /dev/null +++ b/lib/NGCP/Panel/Form/Customer/PbxGroupEditSubadmin.pm @@ -0,0 +1,46 @@ +package NGCP::Panel::Form::Customer::PbxGroupEditSubadmin; + +use HTML::FormHandler::Moose; +extends 'NGCP::Panel::Form::Customer::PbxGroupBase'; + +has_field 'alias_select' => ( + type => '+NGCP::Panel::Field::DataTable', + label => 'Numbers', + do_label => 0, + do_wrapper => 0, + required => 0, + template => 'helpers/datatables_multifield.tt', + ajax_src => '/invalid', + table_titles => ['#', 'Number', 'Subscriber'], + table_fields => ['id', 'number', 'subscriber_username'], +); + +has_block 'fields' => ( + tag => 'div', + class => [qw/modal-body/], + render_list => [qw/pbx_extension pbx_hunt_policy pbx_hunt_timeout alias_select/], +); + +sub field_list { + my ($self) = @_; + + my $c = $self->ctx; + return unless($c); + + if($self->field('alias_select')) { + my $sub; + if($c->stash->{pilot}) { + $sub = $c->stash->{pilot}; + } + + if($sub) { + $self->field('alias_select')->ajax_src( + $c->uri_for_action("/subscriber/aliases_ajax", [$sub->id])->as_string, + ); + } + } + return; +} + +1; +# vim: set tabstop=4 expandtab: diff --git a/lib/NGCP/Panel/Form/Customer/PbxSubscriberEdit.pm b/lib/NGCP/Panel/Form/Customer/PbxSubscriberEdit.pm index 746d31fad7..36e8c851b9 100644 --- a/lib/NGCP/Panel/Form/Customer/PbxSubscriberEdit.pm +++ b/lib/NGCP/Panel/Form/Customer/PbxSubscriberEdit.pm @@ -6,8 +6,6 @@ use Moose::Util::TypeConstraints; use HTML::FormHandler::Widget::Block::Bootstrap; -use NGCP::Panel::Field::PbxGroup; - has '+widget_wrapper' => ( default => 'Bootstrap' ); has_field 'submitid' => ( type => 'Hidden' ); sub build_render_list {[qw/submitid fields actions/]}