From 99c0db191bb611fd29d153b858a8225aee514cb7 Mon Sep 17 00:00:00 2001 From: Gerhard Jungwirth Date: Mon, 8 Aug 2016 16:41:10 +0200 Subject: [PATCH] MT#19795 editing of reseller rtc status via web Change-Id: If4c1d64ad7b4c2b790a4dfabf1e1aebc55c4118c --- lib/NGCP/Panel/Controller/Reseller.pm | 80 ++++++++++++++++++++++++--- lib/NGCP/Panel/Form/ResellerRtc.pm | 30 ++++++++++ 2 files changed, 103 insertions(+), 7 deletions(-) create mode 100644 lib/NGCP/Panel/Form/ResellerRtc.pm diff --git a/lib/NGCP/Panel/Controller/Reseller.pm b/lib/NGCP/Panel/Controller/Reseller.pm index e761ffcbe7..f8f958302c 100644 --- a/lib/NGCP/Panel/Controller/Reseller.pm +++ b/lib/NGCP/Panel/Controller/Reseller.pm @@ -6,6 +6,7 @@ use DateTime qw(); use HTTP::Status qw(HTTP_SEE_OTHER); use File::Type; use NGCP::Panel::Form::Reseller; +use NGCP::Panel::Form::ResellerRtc; use NGCP::Panel::Form::Reseller::Branding; use NGCP::Panel::Utils::Contract; use NGCP::Panel::Utils::DateTime; @@ -26,6 +27,8 @@ sub auto :Private { sub list_reseller :Chained('/') :PathPart('reseller') :CaptureArgs(0) { my ($self, $c) = @_; + my $can_rtc = exists $c->config->{rtc}; + $c->stash( resellers => $c->model('DB') ->resultset('resellers')->search({ @@ -39,6 +42,7 @@ sub list_reseller :Chained('/') :PathPart('reseller') :CaptureArgs(0) { { name => "contract_id", search => 1, title => $c->loc("Contract #") }, { name => "name", search => 1, title => $c->loc("Name") }, { name => "status", search => 1, title => $c->loc("Status") }, + $can_rtc ? { name => "enable_rtc", search => 0, title => $c->loc("RTC") } : (), ]); # we need this in ajax_contracts also @@ -58,7 +62,10 @@ sub root :Chained('list_reseller') :PathPart('') :Args(0) :Does(ACL) :ACLDetachT sub ajax :Chained('list_reseller') :PathPart('ajax') :Args(0) :Does(ACL) :ACLDetachTo('/denied_page') :AllowedRole(admin) { my ($self, $c) = @_; my $resellers = $c->stash->{resellers}; - NGCP::Panel::Utils::Datatables::process($c, $resellers, $c->stash->{reseller_dt_columns}); + NGCP::Panel::Utils::Datatables::process($c, $resellers, $c->stash->{reseller_dt_columns}, sub { + my ($item) = @_; + return (enable_rtc => ( $item->rtc_user ? $c->loc("yes") : $c->loc("no") )); + }); $c->detach($c->view('JSON')); return; } @@ -73,7 +80,13 @@ sub create :Chained('list_reseller') :PathPart('create') :Args(0) :Does(ACL) :AC $params = merge($params, $c->session->{created_objects}); my $posted = $c->request->method eq 'POST'; - my $form = NGCP::Panel::Form::Reseller->new; + my $can_rtc = exists $c->config->{rtc}; + my $form; + if ($can_rtc) { + $form = NGCP::Panel::Form::ResellerRtc->new; + } else { + $form = NGCP::Panel::Form::Reseller->new; + } $form->process( posted => $posted, params => $c->request->params, @@ -88,10 +101,25 @@ sub create :Chained('list_reseller') :PathPart('create') :Args(0) :Does(ACL) :AC if($form->validated) { try { - $form->params->{contract_id} = delete $form->params->{contract}->{id}; - delete $form->params->{contract}; - my $reseller = $c->model('DB')->resultset('resellers')->create($form->params); + my $reseller = $c->model('DB')->resultset('resellers')->create({ + contract_id => $form->values->{contract}{id}, + name => $form->values->{name}, + status => $form->values->{status}, + }); NGCP::Panel::Utils::Reseller::create_email_templates( c => $c, reseller => $reseller ); + my $resource = $form->values; + $resource->{rtc_networks} = [qw/sip xmpp webrtc conference/]; + NGCP::Panel::Utils::Rtc::modify_reseller_rtc( + resource => $resource, + config => $c->config, + reseller_item => $reseller, + err_code => sub { + my ($msg, $debug) = @_; + $c->log->debug($debug) if $debug; + $c->log->warn($msg); + # TODO: abort reseller creation with error? + return; + }); delete $c->session->{created_objects}->{contract}; $c->session->{created_objects}->{reseller} = { id => $reseller->id }; @@ -236,7 +264,13 @@ sub edit :Chained('base') :PathPart('edit') :Args(0) :Does(ACL) :ACLDetachTo('/d my $reseller = $c->stash->{reseller}->first; my $posted = $c->request->method eq 'POST'; - my $form = NGCP::Panel::Form::Reseller->new; + my $can_rtc = exists $c->config->{rtc}; + my $form; + if ($can_rtc) { + $form = NGCP::Panel::Form::ResellerRtc->new; + } else { + $form = NGCP::Panel::Form::Reseller->new; + } # we need this in the ajax call to not filter it as used contract $c->session->{edit_contract_id} = $reseller->contract_id; @@ -244,6 +278,7 @@ sub edit :Chained('base') :PathPart('edit') :Args(0) :Does(ACL) :ACLDetachTo('/d my $params = { $reseller->get_inflated_columns }; $params->{contract}{id} = delete $params->{contract_id}; $params = merge($params, $c->session->{created_objects}); + $params->{enable_rtc} = !!$reseller->rtc_user; $form->process( posted => $posted, params => $c->request->params, @@ -262,7 +297,25 @@ sub edit :Chained('base') :PathPart('edit') :Args(0) :Does(ACL) :ACLDetachTo('/d $form->params->{contract_id} = delete $form->params->{contract}{id}; delete $form->params->{contract}; my $old_status = $reseller->status; - $reseller->update($form->params); + $reseller->update({ + contract_id => $form->values->{contract}{id}, + name => $form->values->{name}, + status => $form->values->{status}, + }); + my $resource = $form->values; + $resource->{rtc_networks} = [qw/sip xmpp webrtc conference/]; + NGCP::Panel::Utils::Rtc::modify_reseller_rtc( + old_resource => $params, + resource => $resource, + config => $c->config, + reseller_item => $reseller, + err_code => sub { + my ($msg, $debug) = @_; + $c->log->debug($debug) if $debug; + $c->log->warn($msg); + # TODO: abort reseller creation with error? + return; + }); if($reseller->status ne $old_status) { NGCP::Panel::Utils::Reseller::_handle_reseller_status_change($c, $reseller); @@ -309,7 +362,20 @@ sub terminate :Chained('base') :PathPart('terminate') :Args(0) :Does(ACL) :ACLDe try { $c->model('DB')->txn_do(sub { my $old_status = $reseller->status; + my $old_enable_rtc = !!$reseller->rtc_user; $reseller->update({ status => 'terminated' }); + NGCP::Panel::Utils::Rtc::modify_reseller_rtc( + old_resource => {status => $old_status, enable_rtc => $old_enable_rtc}, + resource => {status => 'terminated'}, + config => $c->config, + reseller_item => $reseller, + err_code => sub { + my ($msg, $debug) = @_; + $c->log->debug($debug) if $debug; + $c->log->warn($msg); + # TODO: abort reseller creation with error? + return; + }); if($reseller->status ne $old_status) { NGCP::Panel::Utils::Reseller::_handle_reseller_status_change($c,$reseller); diff --git a/lib/NGCP/Panel/Form/ResellerRtc.pm b/lib/NGCP/Panel/Form/ResellerRtc.pm new file mode 100644 index 0000000000..c10c1c124e --- /dev/null +++ b/lib/NGCP/Panel/Form/ResellerRtc.pm @@ -0,0 +1,30 @@ +package NGCP::Panel::Form::ResellerRtc; + +use HTML::FormHandler::Moose; +extends 'NGCP::Panel::Form::Reseller'; + +use HTML::FormHandler::Widget::Block::Bootstrap; + +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/] } + +has_field 'enable_rtc' => ( + type => 'Boolean', + required => 0, + default => 0, + element_attr => { + rel => ['tooltip'], + title => ['Whether an RTC-entity should be created for this reseller.'], + } +); + +has_block 'fields' => ( + tag => 'div', + class => [qw/modal-body/], + render_list => [qw/contract name status enable_rtc/], +); + +1; +# vim: set tabstop=4 expandtab: