TT#32963 join location and subscriber properly

this way we do not depend on the multidomain feature for error prone joining
on this condition anymore

cherry-picked to mr5.5 (see TT#38607)

Change-Id: Ibed97da69376aace6e792ed9db43fb5d461003ef
(cherry picked from commit ee2014f468)
changes/29/21929/2
Gerhard Jungwirth 7 years ago
parent d5fb451e42
commit ec16e85d24

@ -176,7 +176,7 @@ sub POST :Allow {
my ($guard, $txn_ok) = ($c->model('DB')->txn_scope_guard, 0);
{
$self->update_item($c, undef, undef, $resource, $form, $create);
last unless $self->update_item($c, undef, undef, $resource, $form, $create);
$guard->commit;
$txn_ok = 1;

@ -1844,13 +1844,10 @@ sub pbx_device_sync :Chained('pbx_device_base') :PathPart('sync') :Args(0) {
my $sub = $line->provisioning_voip_subscriber;
next unless($sub);
my $reg_rs = $c->model('DB')->resultset('location')->search({
username => $sub->username,
'kam_subscriber.uuid' => $sub->uuid,
},{
join => 'kam_subscriber',
});
if($c->config->{features}->{multidomain}) {
$reg_rs = $reg_rs->search({
domain => $sub->domain->domain,
});
}
my $uri = $sub->username . '@' . $sub->domain->domain;
if($reg_rs->count) {
$c->log->debug("trigger device resync for $uri as it is registered");

@ -3601,13 +3601,10 @@ sub ajax_registered :Chained('master') :PathPart('registered/ajax') :Args(0) {
my $s = $c->stash->{subscriber}->provisioning_voip_subscriber;
my $reg_rs = $c->model('DB')->resultset('location')->search({
username => $s->username,
'kam_subscriber.uuid' => $s->uuid,
},{
join => 'kam_subscriber',
});
if($c->config->{features}->{multidomain}) {
$reg_rs = $reg_rs->search({
domain => $s->domain->domain,
});
}
NGCP::Panel::Utils::Datatables::process($c, $reg_rs, $c->stash->{reg_dt_columns});
@ -3854,14 +3851,11 @@ sub registered :Chained('master') :PathPart('registered') :CaptureArgs(1) {
my $s = $c->stash->{subscriber}->provisioning_voip_subscriber;
my $reg_rs = $c->model('DB')->resultset('location')->search({
id => $reg_id,
username => $s->username,
'me.id' => $reg_id,
'kam_subscriber.uuid' => $s->uuid,
},{
join => 'kam_subscriber',
});
if($c->config->{features}->{multidomain}) {
$reg_rs = $reg_rs->search({
domain => $s->domain->domain,
});
}
$c->stash->{registered} = $reg_rs->first;
unless($c->stash->{registered}) {
NGCP::Panel::Utils::Message::error(

@ -15,22 +15,18 @@ use NGCP::Panel::Utils::Kamailio;
sub _item_rs {
my ($self, $c) = @_;
my @joins = ();;
if($c->config->{features}->{multidomain}) {
push @joins, 'domain';
}
my $item_rs = $c->model('DB')->resultset('location');
if($c->user->roles eq "admin") {
$item_rs = $item_rs->search({
},{
join => [@joins,'subscriber'],
join => { 'kam_subscriber' => 'provisioning_voip_subscriber'},
});
} elsif($c->user->roles eq "reseller") {
$item_rs = $item_rs->search({
'contact.reseller_id' => $c->user->reseller_id
},{
join => [@joins, { 'subscriber' => { 'voip_subscriber' => { 'contract' => 'contact' }}} ],
join => { 'kam_subscriber' => 'provisioning_voip_subscriber' => { 'voip_subscriber' => { 'contract' => 'contact' }}},
});
}
return $item_rs;
@ -102,19 +98,10 @@ sub item_by_id {
sub subscriber_from_item {
my ($self, $c, $item) = @_;
my $sub_rs = $c->model('DB')->resultset('voip_subscribers')->search({
username => $item->username,
status => { '!=' => 'terminated' },
});
if($c->config->{features}->{multidomain}) {
$sub_rs = $sub_rs->search({
'domain.domain' => $item->domain->domain,
}, {
join => 'domain',
});
}
my $sub = $sub_rs->first;
unless($sub && $sub->provisioning_voip_subscriber) {
my $kam_subscriber = $item ? $item->kam_subscriber : undef;
my $prov_subscriber = $kam_subscriber ? $kam_subscriber->provisioning_voip_subscriber : undef;
my $sub = $prov_subscriber ? $prov_subscriber->voip_subscriber : undef;
unless($sub && $prov_subscriber) {
return;
}
return $sub;
@ -186,7 +173,7 @@ sub update_item {
NGCP::Panel::Utils::Kamailio::flush($c);
return $item;
return $create ? 1 : $item; # on create, we dont have the item yet
}
sub fetch_item {

Loading…
Cancel
Save