MT#4967 clean up moving alias numbers.

Also allow admin/reseller to move numbers.
ipeshinskaya/InvoiceTemplate5
Andreas Granig 11 years ago
parent bffe93f359
commit f96f08f706

@ -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},
);
}

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

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

Loading…
Cancel
Save