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_<reseller_id>_<name>"
	   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
changes/30/35130/2
Flaviu Mates 6 years ago
parent 71e950d758
commit f65fcf1dd8

@ -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) {

@ -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,

Loading…
Cancel
Save