From 1d10d2680260927723fa917b8a4eaa8569fbe478 Mon Sep 17 00:00:00 2001 From: Irina Peshinskaya Date: Tue, 24 May 2016 15:07:09 +0300 Subject: [PATCH] MT#12637 Reseller termination via API PATCH should process reseller resources Change-Id: I61bf179b66ad5b2b814efef7f83ed5c235416562 (cherry picked from commit 98b5168c9972d5fa8a3038b16da7b91aaf0fee8d) --- .../Panel/Controller/API/ResellersItem.pm | 4 +++ lib/NGCP/Panel/Controller/Reseller.pm | 31 ++----------------- lib/NGCP/Panel/Role/API/Resellers.pm | 3 ++ lib/NGCP/Panel/Utils/Reseller.pm | 26 ++++++++++++++++ 4 files changed, 35 insertions(+), 29 deletions(-) diff --git a/lib/NGCP/Panel/Controller/API/ResellersItem.pm b/lib/NGCP/Panel/Controller/API/ResellersItem.pm index f23194e59a..6555e770bc 100644 --- a/lib/NGCP/Panel/Controller/API/ResellersItem.pm +++ b/lib/NGCP/Panel/Controller/API/ResellersItem.pm @@ -10,6 +10,7 @@ use NGCP::Panel::Utils::DateTime; use NGCP::Panel::Utils::ValidateJSON qw(); use Path::Tiny qw(path); use Safe::Isa qw($_isa); +use Clone qw/clone/; require Catalyst::ActionRole::ACL; require NGCP::Panel::Role::HTTPMethods; require Catalyst::ActionRole::RequireSSL; @@ -123,6 +124,9 @@ sub PATCH :Allow { my $reseller = $self->reseller_by_id($c, $id); last unless $self->resource_exists($c, reseller => $reseller); my $old_resource = $self->hal_from_reseller($c, $reseller, $form)->resource; + #without it error: The entity could not be processed: Modification of a read-only value attempted at /usr/share/perl5/JSON/Pointer.pm line 200, <$fh> line 1.\n + #But really I don't understand why $old_resource is read-only. resource is rw in Data::HAL + $old_resource = clone($old_resource); my $resource = $self->apply_patch($c, $old_resource, $json); last unless $resource; diff --git a/lib/NGCP/Panel/Controller/Reseller.pm b/lib/NGCP/Panel/Controller/Reseller.pm index c340a61d3f..e761ffcbe7 100644 --- a/lib/NGCP/Panel/Controller/Reseller.pm +++ b/lib/NGCP/Panel/Controller/Reseller.pm @@ -265,7 +265,7 @@ sub edit :Chained('base') :PathPart('edit') :Args(0) :Does(ACL) :ACLDetachTo('/d $reseller->update($form->params); if($reseller->status ne $old_status) { - $self->_handle_reseller_status_change($c, $reseller); + NGCP::Panel::Utils::Reseller::_handle_reseller_status_change($c, $reseller); } }); @@ -312,7 +312,7 @@ sub terminate :Chained('base') :PathPart('terminate') :Args(0) :Does(ACL) :ACLDe $reseller->update({ status => 'terminated' }); if($reseller->status ne $old_status) { - $self->_handle_reseller_status_change($c,$reseller); + NGCP::Panel::Utils::Reseller::_handle_reseller_status_change($c,$reseller); } }); NGCP::Panel::Utils::Message::info( @@ -330,33 +330,6 @@ sub terminate :Chained('base') :PathPart('terminate') :Args(0) :Does(ACL) :ACLDe NGCP::Panel::Utils::Navigation::back_or($c, $c->uri_for('/reseller')); } -sub _handle_reseller_status_change { - my ($self, $c, $reseller) = @_; - - my $contract = $reseller->contract; - $contract->update({ status => $reseller->status }); - NGCP::Panel::Utils::Contract::recursively_lock_contract( - c => $c, - contract => $contract, - ); - - if($reseller->status eq "terminated") { - #delete ncos_levels - $reseller->ncos_levels->delete_all; - #delete voip_number_block_resellers - $reseller->voip_number_block_resellers->delete_all; - #delete voip_sound_sets - $reseller->voip_sound_sets->delete_all; - #delete voip_rewrite_rule_sets - $reseller->voip_rewrite_rule_sets->delete_all; - #delete autoprov_devices - $reseller->autoprov_devices->delete_all; - $reseller->email_templates->delete_all; - $reseller->emergency_containers->emergency_mappings->delete_all; - $reseller->emergency_containers->delete_all; - } -} - sub details :Chained('base') :PathPart('details') :Args(0) :Does(ACL) :ACLDetachTo('/denied_page') :AllowedRole(admin) { my ($self, $c) = @_; diff --git a/lib/NGCP/Panel/Role/API/Resellers.pm b/lib/NGCP/Panel/Role/API/Resellers.pm index 90caeffc11..8e5c6dc2d4 100644 --- a/lib/NGCP/Panel/Role/API/Resellers.pm +++ b/lib/NGCP/Panel/Role/API/Resellers.pm @@ -121,6 +121,9 @@ sub update_reseller { return; } } + if($old_resource->{status} ne $resource->{status}) { + NGCP::Panel::Utils::Reseller::_handle_reseller_status_change($c, $reseller); + } $reseller->update({ name => $resource->{name}, diff --git a/lib/NGCP/Panel/Utils/Reseller.pm b/lib/NGCP/Panel/Utils/Reseller.pm index 8cb9b596f1..4ad34e5338 100644 --- a/lib/NGCP/Panel/Utils/Reseller.pm +++ b/lib/NGCP/Panel/Utils/Reseller.pm @@ -127,6 +127,32 @@ sub check_reseller_delete_item { return 1; } +sub _handle_reseller_status_change { + my ($c, $reseller) = @_; + + my $contract = $reseller->contract; + $contract->update({ status => $reseller->status }); + NGCP::Panel::Utils::Contract::recursively_lock_contract( + c => $c, + contract => $contract, + ); + + if($reseller->status eq "terminated") { + #delete ncos_levels + $reseller->ncos_levels->delete_all; + #delete voip_number_block_resellers + $reseller->voip_number_block_resellers->delete_all; + #delete voip_sound_sets + $reseller->voip_sound_sets->delete_all; + #delete voip_rewrite_rule_sets + $reseller->voip_rewrite_rule_sets->delete_all; + #delete autoprov_devices + $reseller->autoprov_devices->delete_all; + $reseller->email_templates->delete_all; + $reseller->emergency_containers->emergency_mappings->delete_all; + $reseller->emergency_containers->delete_all; + } +} 1;