From f65fcf1dd84687b28d978fed04500ea3e5fd8eaa Mon Sep 17 00:00:00 2001 From: Flaviu Mates Date: Wed, 13 Nov 2019 09:23:01 +0200 Subject: [PATCH] TT#65450 - Permit creation of reseller with same name as terminated one * Check if there's a terminated reseller with the same name and update that reseller's name to be of "old__" format then create new reseller with that name * Applies to both regular creation and default values creation * Added same checks to API too Change-Id: If997cf3716341c5c78bc6879ddea53f7b502c305 --- lib/NGCP/Panel/Controller/API/Resellers.pm | 13 ++++++++++--- lib/NGCP/Panel/Controller/Reseller.pm | 20 ++++++++++++++++++++ 2 files changed, 30 insertions(+), 3 deletions(-) diff --git a/lib/NGCP/Panel/Controller/API/Resellers.pm b/lib/NGCP/Panel/Controller/API/Resellers.pm index f35ebc8ba2..e6016a4b2b 100644 --- a/lib/NGCP/Panel/Controller/API/Resellers.pm +++ b/lib/NGCP/Panel/Controller/API/Resellers.pm @@ -127,11 +127,18 @@ sub POST :Allow { $self->error($c, HTTP_UNPROCESSABLE_ENTITY, "Invalid 'contract_id', reseller with this contract already exists"); last; } - if($schema->resultset('resellers')->find({ + if(my $existent_reseller = $schema->resultset('resellers')->find({ name => $resource->{name}, })) { - $self->error($c, HTTP_UNPROCESSABLE_ENTITY, "Invalid 'name', reseller with this name already exists"); - last; + if ($existent_reseller->status eq 'terminated') { + $existent_reseller->update({ + name => "old_" . $existent_reseller->id . "_" . $existent_reseller->name + }); + } + else { + $self->error($c, HTTP_UNPROCESSABLE_ENTITY, "Invalid 'name', reseller with this name already exists"); + last; + } } my $contract = $schema->resultset('contracts')->find($resource->{contract_id}); unless($contract) { diff --git a/lib/NGCP/Panel/Controller/Reseller.pm b/lib/NGCP/Panel/Controller/Reseller.pm index e930244a42..9f8f10701a 100644 --- a/lib/NGCP/Panel/Controller/Reseller.pm +++ b/lib/NGCP/Panel/Controller/Reseller.pm @@ -106,6 +106,15 @@ sub create :Chained('list_reseller') :PathPart('create') :Args(0) :Does(ACL) :AC if($form->validated) { try { + my $terminated_reseller = $c->model('DB')->resultset('resellers')->search({ + name => $form->values->{name}, + status => 'terminated' + })->first; + if ($terminated_reseller){ + $terminated_reseller->update({ + name => "old_" . $terminated_reseller->id . "_" . $terminated_reseller->name + }); + } my $reseller = $c->model('DB')->resultset('resellers')->create({ contract_id => $form->values->{contract}{id}, name => $form->values->{name}, @@ -493,6 +502,16 @@ sub create_defaults :Path('create_defaults') :Args(0) :Does(ACL) :ACLDetachTo('/ %{ $defaults{contracts} }, ## no critic (ProhibitCommaSeparatedStatements) contact_id => $r{contacts}->id, }); + + my $terminated_reseller = $billing->resultset('resellers')->search({ + name => $defaults{resellers}->{name}, + status => 'terminated' + })->first; + if ($terminated_reseller){ + $terminated_reseller->update({ + name => "old_" . $terminated_reseller->id . "_" . $terminated_reseller->name + }); + } $r{resellers} = $billing->resultset('resellers')->create({ %{ $defaults{resellers} }, ## no critic (ProhibitCommaSeparatedStatements) contract_id => $r{contracts}->id, @@ -534,6 +553,7 @@ sub create_defaults :Path('create_defaults') :Args(0) :Does(ACL) :ACLDetachTo('/ error => $e, desc => $c->loc('Failed to create reseller'), ); + NGCP::Panel::Utils::Navigation::back_or($c, $c->uri_for('/reseller')); }; NGCP::Panel::Utils::Message::info( c => $c,