TT#145300 Adjust domains reseller_id handling

* domains do not use billing.domain_resellers table anymore
  but instead the new domains.reseller_id field. That is
  to remove the unneeded many<>many relation through the
  additional table where the actual logic only supports
  one(reseller) to many(domains) relation

Change-Id: I1b681543baf1901f19e10c2f6210e4cf6eeb8fbe
mr10.2
Kirill Solomko 4 years ago
parent 1c10d54924
commit da4278daa3

@ -22,15 +22,7 @@ sub query_params {
{
param => 'reseller_id',
description => 'Filter for callqueues of subscribers belonging to a specific reseller',
query => {
first => sub {
my $q = shift;
{ 'domain_resellers.reseller_id' => $q };
},
second => sub {
{ join => 'domain_resellers' };
},
},
query_type => 'string_eq',
},
{
# we handle that separately/manually in the role

@ -22,15 +22,7 @@ sub query_params {
{
param => 'reseller_id',
description => 'Filter for callrecordings belonging to a specific reseller',
query => {
first => sub {
my $q = shift;
{ 'domain_resellers.reseller_id' => $q };
},
second => sub {
{ join => 'domain_resellers' };
},
},
query_type => 'string_eq',
},
{
param => 'status',

@ -24,15 +24,7 @@ sub query_params {
{
param => 'reseller_id',
description => 'Filter for domains belonging to a specific reseller',
query => {
first => sub {
my $q = shift;
{ 'domain_resellers.reseller_id' => $q };
},
second => sub {
{ join => 'domain_resellers' };
},
},
query_type => 'string_eq',
},
{
param => 'domain',
@ -154,21 +146,19 @@ sub POST :Allow {
try {
my $rs = $self->item_rs($c);
$billing_domain = $c->model('DB')->resultset('domains')->create({
domain => $resource->{domain}
});
my $provisioning_domain = $c->model('DB')->resultset('voip_domains')->create({
domain => $resource->{domain}
});
my $reseller_id;
if($c->user->roles eq "admin") {
$reseller_id = $resource->{reseller_id};
} elsif($c->user->roles eq "reseller") {
$reseller_id = $c->user->reseller_id;
}
$billing_domain->create_related('domain_resellers', {
$billing_domain = $c->model('DB')->resultset('domains')->create({
domain => $resource->{domain},
reseller_id => $reseller_id,
});
my $provisioning_domain = $c->model('DB')->resultset('voip_domains')->create({
domain => $resource->{domain}
});
} catch($e) {
$c->log->error("failed to create domain: $e"); # TODO: user, message, trace, ...
$self->error($c, HTTP_INTERNAL_SERVER_ERROR, "Failed to create domain.");

@ -78,9 +78,8 @@ sub DELETE :Allow {
if($c->user->roles eq "admin") {
} elsif($c->user->roles eq "reseller") {
#relation domain->domain_resellers is one to many.
unless($domain->domain_resellers->search({ reseller_id => $c->user->reseller_id })->first() ) {
$self->error($c, HTTP_FORBIDDEN, "Domain does not belong to reseller");
if ($domain->reseller_id != $c->user->reseller_id) {
$self->error($c, HTTP_FORBIDDEN, "Domain does not belong to the reseller");
last;
}
}

@ -35,7 +35,10 @@ sub dom_list :Chained('/') :PathPart('domain') :CaptureArgs(0) {
$c->stash->{domain_dt_columns} = NGCP::Panel::Utils::Datatables::set_columns($c, [
{ name => 'id', search => 1, title => $c->loc('#') },
{ name => 'domain_resellers.reseller.name', search => 1, title => $c->loc('Reseller') },
($c->user->is_superuser
? { name => "reseller.name", search => 1, title => $c->loc("Reseller") }
: ()
),
{ name => 'domain', search => 1, title => $c->loc('Domain') },
]);
@ -55,11 +58,9 @@ sub _dom_resultset_admin {
sub _dom_resultset_reseller {
my ($self, $c) = @_;
return $c->model('DB')->resultset('admins')->find(
{ id => $c->user->id, } )
->reseller
->domain_resellers
->search_related('domain');
return $c->model('DB')->resultset('domains')->search({
reseller_id => $c->user->reseller_id,
});
}
sub root :Chained('dom_list') :PathPart('') :Args(0) {
@ -69,9 +70,13 @@ sub root :Chained('dom_list') :PathPart('') :Args(0) {
sub create :Chained('dom_list_restricted') :PathPart('create') :Args() {
my ($self, $c, $reseller_id, $type) = @_;
my $posted = ($c->request->method eq 'POST');
my $form; my $pbx;
if($type && $type eq 'pbx') {
my $posted = ($c->request->method eq 'POST');
my $params = {};
$params = merge($params, $c->session->{created_objects});
delete $params->{domain} if exists $params->{domain};
if ($type && $type eq 'pbx') {
unless($reseller_id && is_int($reseller_id)) {
NGCP::Panel::Utils::Message::error(
c => $c,
@ -99,23 +104,38 @@ sub create :Chained('dom_list_restricted') :PathPart('create') :Args() {
} else {
$form = NGCP::Panel::Form::get("NGCP::Panel::Form::Domain::Reseller", $c);
}
my $params = { %{ $c->session->{created_objects} } };
delete $params->{domain} if exists $params->{domain};
$form->process(
posted => $posted,
params => $c->request->params,
item => $params,
item => $params,
);
NGCP::Panel::Utils::Navigation::check_form_buttons(
c => $c,
form => $form,
fields => {
'reseller.create' => $c->uri_for('/reseller/create'),
},
back_uri => $c->req->uri,
);
if($posted && $form->validated) {
if ($posted && $form->validated) {
try {
if ($c->user->is_superuser) {
$form->values->{reseller_id} = delete $form->values->{reseller}{id};
} else {
$form->values->{reseller_id} = $c->user->reseller_id;
}
$c->model('DB')->schema->txn_do( sub {
my $prov_dom = $c->model('DB')->resultset('voip_domains')
->create({domain => $form->value->{domain}});
my $new_dom = $c->stash->{dom_rs}
->create({domain => $form->value->{domain}});
delete $c->session->{created_objects}->{reseller};
my $new_dom = $c->stash->{dom_rs}->create({
domain => $form->value->{domain},
reseller_id => $form->value->{reseller_id},
});
unless($pbx) {
$reseller_id = $c->user->is_superuser ?
$form->values->{reseller}{id} : $c->user->reseller_id;
} elsif($form->values->{rwr_set}) {
my $rwr_set = $c->model('DB')->resultset('voip_rewrite_rule_sets')
->find($form->values->{rwr_set});
@ -138,9 +158,6 @@ sub create :Chained('dom_list_restricted') :PathPart('create') :Args() {
}
}
$new_dom->create_related('domain_resellers', {
reseller_id => $reseller_id
});
NGCP::Panel::Utils::Prosody::activate_domain($c, $form->value->{domain})
unless($c->config->{features}->{debug});
delete $c->session->{created_objects}->{reseller};
@ -219,18 +236,34 @@ sub edit :Chained('base') :PathPart('edit') :Args(0) {
my $posted = ($c->request->method eq 'POST');
my $form = NGCP::Panel::Form::get("NGCP::Panel::Form::Domain::Reseller", $c);
my $params = { $c->stash->{dom_rs}->get_inflated_columns };
$form->process(
posted => 1,
params => $posted ? $c->request->params : $c->stash->{domain},
action => $c->uri_for($c->stash->{domain}->{id}, 'edit'),
posted => $posted,
params => $c->request->params,
item => $params,
);
NGCP::Panel::Utils::Navigation::check_form_buttons(
c => $c,
form => $form,
fields => {
'reseller.create' => $c->uri_for('/reseller/create'),
},
back_uri => $c->req->uri,
);
if($posted && $form->validated) {
if ($posted && $form->validated) {
try {
if($c->user->is_superuser) {
$form->values->{reseller_id} = delete $form->values->{reseller}{id};
} else {
$form->values->{reseller_id} = $c->user->reseller_id;
}
$c->model('DB')->schema->txn_do( sub {
$c->stash->{'domain_result'}->update({
domain => $form->value->{domain},
});
$c->stash->{'domain_result'}->update($form->values);
delete $c->session->{created_objects}->{reseller};
$c->stash->{'provisioning_domain_result'}->update({
domain => $form->value->{domain},
});
@ -326,9 +359,7 @@ sub ajax_filter_reseller :Chained('dom_list') :PathPart('ajax/filter_reseller')
my ($self, $c, $reseller_id) = @_;
my $resultset = $c->stash->{dom_rs}->search({
'domain_resellers.reseller_id' => $reseller_id,
},{
join => 'domain_resellers'
'reseller_id' => $reseller_id,
});
NGCP::Panel::Utils::Datatables::process($c, $resultset, $c->stash->{domain_dt_columns});
$c->detach( $c->view("JSON") );
@ -417,7 +448,7 @@ sub load_preference_list :Private {
}
}
my $correct_reseller_id = $c->stash->{domain_result}->domain_resellers->first->reseller_id;
my $correct_reseller_id = $c->stash->{domain_result}->reseller_id;
my $rewrite_rule_sets_rs = $c->model('DB')
->resultset('voip_rewrite_rule_sets')
->search_rs({ reseller_id => $correct_reseller_id, });

@ -214,7 +214,7 @@ sub base :Chained('list_reseller') :PathPart('') :CaptureArgs(1) {
$c->stash->{domain_dt_columns} = NGCP::Panel::Utils::Datatables::set_columns($c, [
{ name => "id", search => 1, title => $c->loc('#') },
{ name => "domain", search => 1, title => $c->loc('Domain') },
{ name => "domain_resellers.reseller.name", search => 1, title => $c->loc('Reseller') },
{ name => "domain.reseller.name", search => 1, title => $c->loc('Reseller') },
]);
$c->stash->{tmpl_dt_columns} = NGCP::Panel::Utils::Datatables::set_columns($c, [
{ name => 'id', search => 1, title => $c->loc('#') },

@ -38,8 +38,8 @@ sub resource_from_item {
$resource{id} = int($item->id);
if ($c->user->roles eq "admin" && $item->domain_resellers->first) {
$resource{reseller_id} = int($item->domain_resellers->first->reseller_id)
if ($c->user->roles eq "admin") {
$resource{reseller_id} = $item->reseller_id;
}
return \%resource;
@ -80,11 +80,9 @@ sub _item_rs {
if($c->user->roles eq "admin") {
$item_rs = $c->model('DB')->resultset('domains');
} elsif($c->user->roles eq "reseller") {
$item_rs = $c->model('DB')->resultset('admins')->find(
{ id => $c->user->id, } )
->reseller
->domain_resellers
->search_related('domain');
$item_rs = $c->model('DB')->resultset('domains')->search({
reseller_id => $c->user->reseller_id,
});
}
return $item_rs;
}

@ -79,11 +79,9 @@ sub _item_rs {
if($c->user->roles eq "admin") {
$item_rs = $c->model('DB')->resultset('domains');
} elsif($c->user->roles eq "reseller") {
$item_rs = $c->model('DB')->resultset('admins')->find(
{ id => $c->user->id, } )
->reseller
->domain_resellers
->search_related('domain');
$item_rs = $c->model('DB')->resultset('domains')->search({
reseller_id => $c->user->reseller_id,
});
}
} elsif($type eq "profiles") {
# we actually return the profile rs here, as we can easily

@ -104,15 +104,14 @@ sub recursively_lock_contract {
if ($status eq 'terminated') {
# remove domains in case of reseller termination
for my $domain ($reseller->domain_resellers->all) {
my $prov_domain = $domain->domain->provisioning_voip_domain;
for my $domain ($reseller->domains->all) {
my $prov_domain = $domain->provisioning_voip_domain;
if ($prov_domain) {
$prov_domain->voip_dbaliases->delete;
$prov_domain->voip_dom_preferences->delete;
$prov_domain->provisioning_voip_subscribers->delete;
$prov_domain->delete;
}
$domain->domain->delete;
$domain->delete;
}

@ -448,7 +448,7 @@ sub update_preferences {
$elem = $item->provisioning_voip_domain;
$full_rs = $elem->voip_dom_preferences;
$pref_type = 'dom_pref';
$reseller_id = $item->domain_resellers->first->reseller_id;
$reseller_id = $item->reseller_id;
} elsif($type eq "profiles") {
delete $resource->{profile_id};
delete $resource->{profilepreferences_id};

@ -233,9 +233,7 @@ sub prepare_resource {
if($c->user->roles eq "admin") {
} elsif($c->user->roles eq "reseller") {
$domain = $domain->search({
'domain_resellers.reseller_id' => $c->user->reseller_id,
}, {
join => 'domain_resellers',
'reseller_id' => $c->user->reseller_id,
});
}
$domain = $domain->first;
@ -364,9 +362,7 @@ sub prepare_resource {
if ($c->user->roles eq "admin" || $c->user->roles eq "ccareadmin") {
} elsif ($c->user->roles eq "reseller" || $c->user->roles eq "ccare") {
$domain = $domain->search({
'domain_resellers.reseller_id' => $c->user->reseller_id,
}, {
join => 'domain_resellers',
'reseller_id' => $c->user->reseller_id,
});
}
$domain = $domain->first;
@ -391,7 +387,7 @@ sub prepare_resource {
return;
}
if (!$customer->contact->reseller->domain_resellers->search({domain_id => $domain->id})->first()) {
if (!$customer->contact->reseller->id != $domain->reseller_id) {
&{$err_code}(HTTP_UNPROCESSABLE_ENTITY, "Invalid 'domain', doesn't belong to the same reseller as subscriber's customer.");
return;
}

@ -29,7 +29,7 @@ sub _prepare_resellers_count {
sub _prepare_domains_count {
my ($self, $c) = @_;
$c->stash(
domains => $c->model('DB')->resultset('domain_resellers')->search_rs({}),
domains => $c->model('DB')->resultset('domains')->search_rs({}),
);
}

@ -25,7 +25,7 @@ sub _prepare_domains_count {
my ($self, $c) = @_;
my $reseller = $self->_get_reseller($c);
$c->stash(
domains => $reseller->domain_resellers,
domains => $reseller->domains,
);
}

Loading…
Cancel
Save