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; my $old_bprof_id = $billing_mapping->billing_profile_id;
$c->log->debug(">>>>>>>>>>> old bprof_id=$old_bprof_id"); $c->log->debug(">>>>>>>>>>> old bprof_id=$old_bprof_id");
my $old_prepaid = $billing_mapping->billing_profile->prepaid; my $old_prepaid = $billing_mapping->billing_profile->prepaid;
my $old_ext_id = $contract->external_id;
$contract->update($form->params); $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) { if($bprof_id != $old_bprof_id) {
$contract->billing_mappings->create({ $contract->billing_mappings->create({
billing_profile_id => $bprof_id, 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} $preferences->{display_name} = $form->params->{display_name}
if($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) { if($c->stash->{billing_mapping}->billing_profile->prepaid) {
$preferences->{prepaid} = 1; $preferences->{prepaid} = 1;
} }

@ -206,11 +206,25 @@ sub create_list :Chained('sub_list') :PathPart('create') :Args(0) :Does(ACL) :AC
'value' => 1, '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_preferences->find({ 'attribute' => 'account_id' })
->voip_usr_preferences->create({ ->voip_usr_preferences->create({
'subscriber_id' => $prov_subscriber->id, 'subscriber_id' => $prov_subscriber->id,
'value' => $prov_subscriber->contract->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_preferences->find({ 'attribute' => 'ac' })
->voip_usr_preferences->create({ ->voip_usr_preferences->create({
'subscriber_id' => $prov_subscriber->id, '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}, status => $form->params->{status},
external_id => $form->params->{external_id}, 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') { if($subscriber->status eq 'locked') {
$form->values->{lock} = 4; # update lock below $form->values->{lock} = 4; # update lock below
} elsif($old_status eq 'locked' && $subscriber->status eq 'active') { } 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); $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($old_resource->{status} ne $resource->{status}) {
if($customer->id == 1) { if($customer->id == 1) {
$self->error($c, HTTP_FORBIDDEN, "Cannot set customer status to '".$resource->{status}."' for 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; 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{customer_id} = int(delete $resource{contract_id});
$resource{id} = int($item->id); $resource{id} = int($item->id);
$resource{domain} = $item->domain->domain; $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}; $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); my $billing_profile = $self->get_billing_profile($c, $customer);
return unless($billing_profile); return unless($billing_profile);
@ -320,6 +334,7 @@ sub prepare_resource {
alias_numbers => $alias_numbers, alias_numbers => $alias_numbers,
preferences => $preferences, preferences => $preferences,
}; };
return $r; return $r;
} }
@ -347,16 +362,18 @@ sub update_item {
return; return;
} }
} }
try { if(defined $resource->{lock}) {
NGCP::Panel::Utils::Subscriber::lock_provisoning_voip_subscriber( try {
c => $c, NGCP::Panel::Utils::Subscriber::lock_provisoning_voip_subscriber(
prov_subscriber => $subscriber->provisioning_voip_subscriber, c => $c,
level => $resource->{lock}, 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}); } catch($e) {
$self->error($c, HTTP_INTERNAL_SERVER_ERROR, "Failed to update subscriber lock"); $c->log->error("failed to lock subscriber id ".$subscriber->id." with level ".$resource->{lock});
return; $self->error($c, HTTP_INTERNAL_SERVER_ERROR, "Failed to update subscriber lock");
return;
}
} }
NGCP::Panel::Utils::Subscriber::update_subscriber_numbers( NGCP::Panel::Utils::Subscriber::update_subscriber_numbers(
@ -385,6 +402,11 @@ sub update_item {
$subscriber->update($billing_res); $subscriber->update($billing_res);
$subscriber->provisioning_voip_subscriber->update($provisioning_res); $subscriber->provisioning_voip_subscriber->update($provisioning_res);
$subscriber->discard_changes; $subscriber->discard_changes;
NGCP::Panel::Utils::Subscriber::update_preferences(
c => $c,
prov_subscriber => $subscriber->provisioning_voip_subscriber,
preferences => $preferences
);
# TODO: status handling (termination, ...) # TODO: status handling (termination, ...)

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

Loading…
Cancel
Save