diff --git a/lib/NGCP/Panel/Controller/Customer.pm b/lib/NGCP/Panel/Controller/Customer.pm index 24028c7623..9a3a884acd 100644 --- a/lib/NGCP/Panel/Controller/Customer.pm +++ b/lib/NGCP/Panel/Controller/Customer.pm @@ -684,10 +684,10 @@ sub subscriber_create :Chained('base') :PathPart('subscriber/create') :Args(0) { if($pbx && !$pbxadmin) { NGCP::Panel::Utils::Subscriber::update_subadmin_sub_aliases( schema => $schema, - subscriber_id => $billing_subscriber->id, + subscriber => $billing_subscriber, contract_id => $billing_subscriber->contract_id, alias_selected => decode_json($form->value->{alias_select}), - sadmin_id => $c->stash->{admin_subscriber}->id, + sadmin => $c->stash->{admin_subscriber}, ); } diff --git a/lib/NGCP/Panel/Controller/Subscriber.pm b/lib/NGCP/Panel/Controller/Subscriber.pm index c81b98523c..0f67e90715 100644 --- a/lib/NGCP/Panel/Controller/Subscriber.pm +++ b/lib/NGCP/Panel/Controller/Subscriber.pm @@ -223,6 +223,24 @@ sub base :Chained('sub_list') :PathPart('') :CaptureArgs(1) { $c->stash(subscriber => $res); + $c->stash->{contract} = $c->stash->{subscriber}->contract; + + $c->stash->{subscribers} = $c->model('DB')->resultset('voip_subscribers')->search({ + contract_id => $c->stash->{contract}->id, + status => { '!=' => 'terminated' }, + 'provisioning_voip_subscriber.is_pbx_group' => 0, + }, { + join => 'provisioning_voip_subscriber', + }); + + if($c->config->{features}->{cloudpbx} && $res->provisioning_voip_subscriber && + !$res->provisioning_voip_subscriber->admin) { + my $admin_subscribers = $c->stash->{subscribers}->search({ + 'provisioning_voip_subscriber.admin' => 1, + }); + $c->stash->{admin_subscriber} = $admin_subscribers->first; + } + $c->stash->{sd_dt_columns} = NGCP::Panel::Utils::Datatables::set_columns($c, [ { name => "id", search => 1, title => $c->loc('#') }, { name => "slot", search => 1, title => $c->loc('Slot') }, @@ -1859,15 +1877,6 @@ sub master :Chained('base') :PathPart('details') :CaptureArgs(0) { attribute => 'lock', prov_subscriber => $c->stash->{subscriber}->provisioning_voip_subscriber, ); - - $c->stash->{contract} = $c->stash->{subscriber}->contract; - $c->stash->{subscribers} = $c->model('DB')->resultset('voip_subscribers')->search({ - contract_id => $c->stash->{contract}->id, - status => { '!=' => 'terminated' }, - 'provisioning_voip_subscriber.is_pbx_group' => 0, - }, { - join => 'provisioning_voip_subscriber', - }); } sub details :Chained('master') :PathPart('') :Args(0) :Does(ACL) :ACLDetachTo('/denied_page') :AllowedRole(admin) :AllowedRole(reseller) :AllowedRole('subscriberadmin') { @@ -1929,10 +1938,6 @@ sub edit_master :Chained('master') :PathPart('edit') :Args(0) :Does(ACL) :ACLDet $form = NGCP::Panel::Form::Customer::PbxSubscriberEdit->new(ctx => $c); } } else { - my $admin_subscribers = $c->stash->{subscribers}->search({ - 'provisioning_voip_subscriber.admin' => 1, - }); - $c->stash->{admin_subscriber} = $admin_subscribers->first; $base_number = $c->stash->{admin_subscriber}->primary_number; if($c->user->roles eq 'subscriberadmin') { @@ -2173,30 +2178,14 @@ sub edit_master :Chained('master') :PathPart('edit') :Args(0) :Does(ACL) :ACLDet $form->values->{lock} ||= 0; # update lock below } - unless ($subadmin_pbx) { - for my $num($subscriber->voip_numbers->all) { - next if($subscriber->primary_number && $num->id == $subscriber->primary_number->id); - $num->update({ - subscriber_id => undef, - reseller_id => undef, - }); - } - } - - $schema->resultset('voip_dbaliases')->search({ - subscriber_id => $prov_subscriber->id, - domain_id => $prov_subscriber->domain->id, - })->delete_all; - - if ($subadmin_pbx && !$prov_subscriber->admin) { + if(!$prov_subscriber->admin && exists $form->params->{alias_select} && + $c->stash->{admin_subscriber}) { NGCP::Panel::Utils::Subscriber::update_subadmin_sub_aliases( schema => $schema, - subscriber_id => $subscriber->id, + subscriber => $subscriber, contract_id => $subscriber->contract_id, - alias_selected => decode_json($form->value->{alias_select}), - sadmin_id => $c->model('DB') - ->resultset('voip_subscribers') - ->find({uuid => $c->user->uuid})->id + alias_selected => decode_json($form->values->{alias_select}), + sadmin => $c->stash->{admin_subscriber}, ); } @@ -2369,7 +2358,7 @@ sub webpass_edit :Chained('base') :PathPart('webpass/edit') :Args(0) { my $prov_subscriber = $subscriber->provisioning_voip_subscriber; $schema->txn_do(sub { $prov_subscriber->update({ - webpassword => $form->value->{webpassword} }); + webpassword => $form->values->{webpassword} }); $c->flash(messages => [{type => 'success', text => $c->loc('Successfully updated password') }]); }); } catch($e) { diff --git a/lib/NGCP/Panel/Utils/Subscriber.pm b/lib/NGCP/Panel/Utils/Subscriber.pm index f64d77a691..5528a65545 100644 --- a/lib/NGCP/Panel/Utils/Subscriber.pm +++ b/lib/NGCP/Panel/Utils/Subscriber.pm @@ -611,25 +611,47 @@ sub update_subadmin_sub_aliases { my %params = @_; my $schema = $params{schema}; - my $subscriber_id = $params{subscriber_id}; - my $sadmin_id = $params{sadmin_id}; + my $subscriber = $params{subscriber}; + my $sadmin = $params{sadmin}; my $contract_id = $params{contract_id}; my $alias_selected = $params{alias_selected}; + print ">>>>>>>>>> update sub aliases\n"; + use Data::Printer; p %params; + my $num_rs = $schema->resultset('voip_numbers')->search_rs({ 'subscriber.contract_id' => $contract_id, },{ prefetch => 'subscriber', }); + for my $num ($num_rs->all) { next if ($num->voip_subscribers->first); # is a primary number + my $tmpsubscriber; if ($num->id ~~ $alias_selected) { - $num->update({ - subscriber_id => $subscriber_id + $tmpsubscriber = $subscriber; + } elsif ($num->subscriber_id == $subscriber->id) { #unselected + $tmpsubscriber = $sadmin + } else { + next; + } + $num->update({ + subscriber_id => $tmpsubscriber->id, + }); + my $dbnum = $schema->resultset('voip_dbaliases')->find({ + username => $num->cc . ($num->ac // '') . $num->sn, + domain_id => $subscriber->provisioning_voip_subscriber->domain_id, + }); + if($dbnum) { + $dbnum->update({ + subscriber_id => $tmpsubscriber->provisioning_voip_subscriber->id, }); - } elsif ($num->subscriber_id == $subscriber_id) { #unselected - $num->update({ - subscriber_id => $sadmin_id + } else { + $schema->resultset('voip_dbaliases')->create({ + username => $num->cc . ($num->ac // '') . $num->sn, + domain_id => $subscriber->provisioning_voip_subscriber->domain_id, + subscriber_id => $tmpsubscriber->provisioning_voip_subscriber->id, + is_primary => 0, }); } } @@ -663,14 +685,13 @@ sub terminate { ) if($prov_subscriber->pbx_group_id); $prov_subscriber->delete; } - if ($c->user->roles eq 'subscriberadmin') { + if(!$prov_subscriber->admin && $c->stash->{admin_subscriber}) { update_subadmin_sub_aliases( schema => $schema, - subscriber_id => $subscriber->id, + subscriber => $subscriber, contract_id => $subscriber->contract_id, alias_selected => [], #none, thus moving them back to our subadmin - sadmin_id => $schema->resultset('voip_subscribers') - ->find({uuid => $c->user->uuid})->id + sadmin => $c->stash->{admin_subscriber}, ); } else { $subscriber->voip_numbers->update_all({