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); 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; $guard->commit;
$txn_ok = 1; $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; my $sub = $line->provisioning_voip_subscriber;
next unless($sub); next unless($sub);
my $reg_rs = $c->model('DB')->resultset('location')->search({ 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; my $uri = $sub->username . '@' . $sub->domain->domain;
if($reg_rs->count) { if($reg_rs->count) {
$c->log->debug("trigger device resync for $uri as it is registered"); $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 $s = $c->stash->{subscriber}->provisioning_voip_subscriber;
my $reg_rs = $c->model('DB')->resultset('location')->search({ 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}); 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 $s = $c->stash->{subscriber}->provisioning_voip_subscriber;
my $reg_rs = $c->model('DB')->resultset('location')->search({ my $reg_rs = $c->model('DB')->resultset('location')->search({
id => $reg_id, 'me.id' => $reg_id,
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,
});
}
$c->stash->{registered} = $reg_rs->first; $c->stash->{registered} = $reg_rs->first;
unless($c->stash->{registered}) { unless($c->stash->{registered}) {
NGCP::Panel::Utils::Message::error( NGCP::Panel::Utils::Message::error(

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

Loading…
Cancel
Save