MT#5929 Fix lock, ext_xxx_id and dbalias handling.

- ext_subscriber_id and ext_contract_id preferences weren't populated correctly.
- subscriber lock preference wasn't populated correctly
- old dbalias entries weren't cleared correctly for API calls
agranig/dummydel
Andreas Granig 11 years ago
parent d445274d1d
commit 74aeb7938d

@ -367,7 +367,21 @@ sub edit :Chained('base') :PathPart('edit') :Args(0) {
my $old_bprof_id = $billing_mapping->billing_profile_id;
$c->log->debug(">>>>>>>>>>> old bprof_id=$old_bprof_id");
my $old_prepaid = $billing_mapping->billing_profile->prepaid;
my $old_ext_id = $contract->external_id;
$contract->update($form->params);
if($contract->external_id ne $old_ext_id) {
foreach my $sub($contract->voip_subscribers->all) {
my $prov_sub = $sub->provisioning_voip_subscriber;
next unless($prov_sub);
NGCP::Panel::Utils::Subscriber::update_preferences(
c => $c,
prov_subscriber => $prov_sub,
preferences => { ext_contract_id => $contract->external_id }
);
}
}
if($bprof_id != $old_bprof_id) {
$contract->billing_mappings->create({
billing_profile_id => $bprof_id,
@ -573,6 +587,12 @@ sub subscriber_create :Chained('base') :PathPart('subscriber/create') :Args(0) {
$preferences->{display_name} = $form->params->{display_name}
if($form->params->{display_name});
}
if($c->stash->{contract}->external_id) {
$preferences->{ext_contract_id} = $c->stash->{contract}->external_id;
}
if($c->stash->{external_id}) {
$preferences->{ext_subscriber_id} = $c->stash->{external_id};
}
if($c->stash->{billing_mapping}->billing_profile->prepaid) {
$preferences->{prepaid} = 1;
}

@ -206,11 +206,25 @@ sub create_list :Chained('sub_list') :PathPart('create') :Args(0) :Does(ACL) :AC
'value' => 1,
});
}
if(defined $billing_subscriber->external_id) {
$voip_preferences->find({ 'attribute' => 'ext_subscriber_id' })
->voip_usr_preferences->create({
'subscriber_id' => $prov_subscriber->id,
'value' => $billing_subscriber->external_id,
});
}
$voip_preferences->find({ 'attribute' => 'account_id' })
->voip_usr_preferences->create({
'subscriber_id' => $prov_subscriber->id,
'value' => $prov_subscriber->contract->id,
});
if($contract->external_id) {
$voip_preferences->find({ 'attribute' => 'ext_contract_id' })
->voip_usr_preferences->create({
'subscriber_id' => $prov_subscriber->id,
'value' => $contract->external_id,
});
}
$voip_preferences->find({ 'attribute' => 'ac' })
->voip_usr_preferences->create({
'subscriber_id' => $prov_subscriber->id,
@ -1955,6 +1969,15 @@ sub edit_master :Chained('master') :PathPart('edit') :Args(0) :Does(ACL) :ACLDet
status => $form->params->{status},
external_id => $form->params->{external_id},
});
if(defined $subscriber->external_id) {
my $ext_pref = NGCP::Panel::Utils::Preferences::get_usr_preference_rs(
c => $c, attribute => 'ext_subscriber_id', prov_subscriber => $prov_subscriber);
unless($ext_pref->first) {
$ext_pref->create({ value => $subscriber->external_id });
} else {
$ext_pref->first->update({ value => $subscriber->external_id });
}
}
if($subscriber->status eq 'locked') {
$form->values->{lock} = 4; # update lock below
} elsif($old_status eq 'locked' && $subscriber->status eq 'active') {

@ -177,8 +177,22 @@ sub update_customer {
}
}
my $old_ext_id = $customer->external_id;
$customer->update($resource);
if($customer->external_id ne $old_ext_id) {
foreach my $sub($customer->voip_subscribers->all) {
my $prov_sub = $sub->provisioning_voip_subscriber;
next unless($prov_sub);
NGCP::Panel::Utils::Subscriber::update_preferences(
c => $c,
prov_subscriber => $prov_sub,
preferences => { ext_contract_id => $customer->external_id }
);
}
}
if($old_resource->{status} ne $resource->{status}) {
if($customer->id == 1) {
$self->error($c, HTTP_FORBIDDEN, "Cannot set customer status to '".$resource->{status}."' for customer id '1'");

@ -60,6 +60,14 @@ sub transform_resource {
push @{ $resource{alias_numbers} }, $alias;
}
}
my $pref = NGCP::Panel::Utils::Preferences::get_usr_preference_rs(
c => $c, attribute => 'lock',
prov_subscriber => $item->provisioning_voip_subscriber);
if($pref->first) {
$resource{lock} = $pref->first->value;
}
$resource{customer_id} = int(delete $resource{contract_id});
$resource{id} = int($item->id);
$resource{domain} = $item->domain->domain;
@ -264,6 +272,12 @@ sub prepare_resource {
$preferences->{cloud_pbx_base_cli} = $base_number->{cc} . $base_number->{ac} . $base_number->{sn};
}
}
if(exists $resource->{external_id}) {
$preferences->{ext_subscriber_id} = $resource->{external_id};
}
if(defined $customer->external_id) {
$preferences->{ext_contract_id} = $customer->external_id;
}
my $billing_profile = $self->get_billing_profile($c, $customer);
return unless($billing_profile);
@ -320,6 +334,7 @@ sub prepare_resource {
alias_numbers => $alias_numbers,
preferences => $preferences,
};
return $r;
}
@ -347,16 +362,18 @@ sub update_item {
return;
}
}
try {
NGCP::Panel::Utils::Subscriber::lock_provisoning_voip_subscriber(
c => $c,
prov_subscriber => $subscriber->provisioning_voip_subscriber,
level => $resource->{lock},
);
} catch($e) {
$c->log->error("failed to lock subscriber id ".$subscriber->id." with level ".$resource->{lock});
$self->error($c, HTTP_INTERNAL_SERVER_ERROR, "Failed to update subscriber lock");
return;
if(defined $resource->{lock}) {
try {
NGCP::Panel::Utils::Subscriber::lock_provisoning_voip_subscriber(
c => $c,
prov_subscriber => $subscriber->provisioning_voip_subscriber,
level => $resource->{lock},
);
} catch($e) {
$c->log->error("failed to lock subscriber id ".$subscriber->id." with level ".$resource->{lock});
$self->error($c, HTTP_INTERNAL_SERVER_ERROR, "Failed to update subscriber lock");
return;
}
}
NGCP::Panel::Utils::Subscriber::update_subscriber_numbers(
@ -385,6 +402,11 @@ sub update_item {
$subscriber->update($billing_res);
$subscriber->provisioning_voip_subscriber->update($provisioning_res);
$subscriber->discard_changes;
NGCP::Panel::Utils::Subscriber::update_preferences(
c => $c,
prov_subscriber => $subscriber->provisioning_voip_subscriber,
preferences => $preferences
);
# TODO: status handling (termination, ...)

@ -198,19 +198,10 @@ sub create_subscriber {
$preferences->{cli} = $cli
if(defined $cli);
foreach my $k(keys %{ $preferences } ) {
my $pref = NGCP::Panel::Utils::Preferences::get_usr_preference_rs(
c => $c, attribute => $k, prov_subscriber => $prov_subscriber);
if($pref->first && $pref->first->attribute->max_occur == 1) {
$pref->first->update({
'value' => $preferences->{$k},
});
} else {
$pref->create({
'value' => $preferences->{$k},
});
}
}
update_preferences(c => $c,
prov_subscriber => $prov_subscriber,
preferences => $preferences
);
$schema->resultset('voicemail_users')->create({
customer_id => $uuid_string,
@ -230,6 +221,27 @@ sub create_subscriber {
});
}
sub update_preferences {
my (%params) = @_;
my $c = $params{c};
my $prov_subscriber = $params{prov_subscriber};
my $preferences = $params{preferences};
foreach my $k(keys %{ $preferences } ) {
my $pref = NGCP::Panel::Utils::Preferences::get_usr_preference_rs(
c => $c, attribute => $k, prov_subscriber => $prov_subscriber);
if($pref->first && $pref->first->attribute->max_occur == 1) {
$pref->first->update({
'value' => $preferences->{$k},
});
} else {
$pref->create({
'value' => $preferences->{$k},
});
}
}
}
sub get_custom_subscriber_struct {
my %params = @_;
@ -527,9 +539,11 @@ sub update_subscriber_numbers {
subscriber_id => undef,
reseller_id => undef,
});
$prov_subs->voip_dbaliases->search({
id => { 'not in' => \@dbnums },
})->delete;
if($prov_subs) {
$prov_subs->voip_dbaliases->search({
id => { 'not in' => \@dbnums },
})->delete;
}
return;
}

Loading…
Cancel
Save