MT#5009 Manually backport number termination/reuse

agranig/1_0_subfix
Andreas Granig 12 years ago
parent c0eb1cc86b
commit 7d351c73b2

@ -169,100 +169,15 @@ sub subscriber_create :Chained('base') :PathPart('subscriber/create') :Args(0) {
->find({domain => $billing_domain->domain});
try {
$schema->txn_do(sub {
my ($uuid_bin, $uuid_string);
UUID::generate($uuid_bin);
UUID::unparse($uuid_bin, $uuid_string);
# TODO: check if we find a reseller and contract and domains
my $number; my $cli = 0;
if(defined $c->request->params->{'e164.cc'} &&
$c->request->params->{'e164.cc'} ne '') {
$cli = $c->request->params->{'e164.cc'} .
($c->request->params->{'e164.ac'} || '') .
$c->request->params->{'e164.sn'};
$number = $reseller->voip_numbers->create({
cc => $c->request->params->{'e164.cc'},
ac => $c->request->params->{'e164.ac'} || '',
sn => $c->request->params->{'e164.sn'},
status => 'active',
});
}
my $billing_subscriber = $contract->voip_subscribers->create({
uuid => $uuid_string,
username => $c->request->params->{username},
domain_id => $billing_domain->id,
status => $c->request->params->{status},
primary_number_id => defined $number ? $number->id : undef,
});
if(defined $number) {
$number->update({ subscriber_id => $billing_subscriber->id });
}
my $prov_subscriber = $schema->resultset('provisioning_voip_subscribers')->create({
uuid => $uuid_string,
username => $c->request->params->{username},
password => $c->request->params->{password},
webusername => $c->request->params->{webusername} || $c->request->params->{username},
webpassword => $c->request->params->{webpassword},
admin => $c->request->params->{administrative} || 0,
account_id => $contract->id,
domain_id => $prov_domain->id,
create_timestamp => NGCP::Panel::Utils::DateTime::current_local,
});
my $voip_preferences = $schema->resultset('voip_preferences')->search({
'usr_pref' => 1,
});
$voip_preferences->find({ 'attribute' => 'account_id' })
->voip_usr_preferences->create({
'subscriber_id' => $prov_subscriber->id,
'value' => $contract->id,
});
$voip_preferences->find({ 'attribute' => 'ac' })
->voip_usr_preferences->create({
'subscriber_id' => $prov_subscriber->id,
'value' => $c->request->params->{'e164.ac'},
}) if (defined $c->request->params->{'e164.ac'} &&
length($c->request->params->{'e164.ac'}) > 0);
if(defined $c->request->params->{'e164.cc'} &&
length($c->request->params->{'e164.cc'}) > 0) {
$voip_preferences->find({ 'attribute' => 'cc' })
->voip_usr_preferences->create({
'subscriber_id' => $prov_subscriber->id,
'value' => $c->request->params->{'e164.cc'},
});
$cli = $c->request->params->{'e164.cc'} .
(defined $c->request->params->{'e164.ac'} &&
length($c->request->params->{'e164.ac'}) > 0 ?
$c->request->params->{'e164.ac'} : ''
) .
$c->request->params->{'e164.sn'};
$voip_preferences->find({ 'attribute' => 'cli' })
->voip_usr_preferences->create({
'subscriber_id' => $prov_subscriber->id,
'value' => $cli,
});
}
$schema->resultset('voicemail_users')->create({
customer_id => $uuid_string,
mailbox => $cli,
password => sprintf("%04d", int(rand 10000)),
email => '',
});
if($number) {
$schema->resultset('dbaliases')->create({
alias_username => $number->cc .
($number->ac || '').
$number->sn,
alias_domain => $prov_subscriber->domain->domain,
username => $prov_subscriber->username,
domain => $prov_subscriber->domain->domain,
});
}
my $preferences = {};
my $billing_subscriber = NGCP::Panel::Utils::Subscriber::create_subscriber(
c => $c,
schema => $schema,
contract => $c->stash->{contract},
params => $form->params,
admin_default => 0,
preferences => $preferences,
);
delete $c->session->{created_objects}->{domain};

@ -259,7 +259,10 @@ sub terminate :Chained('base') :PathPart('terminate') :Args(0) {
try {
$schema->txn_do(sub {
$subscriber->provisioning_voip_subscriber->delete;
$subscriber->voip_numbers->delete_all;
$subscriber->voip_numbers->update_all({
subscriber_id => undef,
reseller_id => undef,
});
$subscriber->update({ status => 'terminated' });
});
$c->flash(messages => [{type => 'success', text => 'Successfully terminated subscriber'}]);

@ -69,6 +69,10 @@ sub recursively_lock_contract {
if($status eq 'terminated') {
$subscriber->provisioning_voip_subscriber->delete
if($subscriber->provisioning_voip_subscriber);
$subscriber->voip_numbers->update_all({
reseller_id => undef,
subscriber_id => undef,
});
} elsif($status eq 'locked') {
NGCP::Panel::Utils::Subscriber::lock_provisoning_voip_subscriber(
c => $c,
@ -120,6 +124,10 @@ sub recursively_lock_contract {
if($status eq 'terminated') {
$subscriber->provisioning_voip_subscriber->delete
if($subscriber->provisioning_voip_subscriber);
$subscriber->voip_numbers->update_all({
reseller_id => undef,
subscriber_id => undef,
});
} elsif($status eq 'locked') {
NGCP::Panel::Utils::Subscriber::lock_provisoning_voip_subscriber(
c => $c,

@ -405,6 +405,39 @@ sub _set_rewrite_preferences {
}
sub get_usr_preference_rs {
my %params = @_;
my $c = $params{c};
my $attribute = $params{attribute};
my $prov_subscriber = $params{prov_subscriber};
my $pref_rs = $c->model('DB')->resultset('voip_preferences')->find({
attribute => $attribute, 'usr_pref' => 1,
})->voip_usr_preferences;
if($prov_subscriber) {
$pref_rs = $pref_rs->search({
subscriber_id => $prov_subscriber->id,
});
}
return $pref_rs;
}
sub get_dom_preference_rs {
my %params = @_;
my $c = $params{c};
my $attribute = $params{attribute};
my $prov_domain = $params{prov_domain};
my $preference = $c->model('DB')->resultset('voip_preferences')->find({
attribute => $attribute, 'dom_pref' => 1,
})->voip_dom_preferences->search_rs({
domain_id => $prov_domain->id,
});
return $preference;
}
1;
=head1 NAME

@ -237,6 +237,108 @@ sub update_subscriber_numbers {
return;
}
sub create_subscriber {
my %params = @_;
my $c = $params{c};
my $contract = $params{contract};
my $params = $params{params};
my $administrative = $params{admin_default};
my $preferences = $params{preferences};
my $schema = $params{schema} // $c->model('DB');
my $reseller = $contract->contact->reseller;
my $billing_domain = $schema->resultset('domains')
->find($params->{domain}{id});
my $prov_domain = $schema->resultset('voip_domains')
->find({domain => $billing_domain->domain});
$schema->txn_do(sub {
my ($uuid_bin, $uuid_string);
UUID::generate($uuid_bin);
UUID::unparse($uuid_bin, $uuid_string);
# TODO: check if we find a reseller and contract and domains
my $billing_subscriber = $contract->voip_subscribers->create({
uuid => $uuid_string,
username => $params->{username},
domain_id => $billing_domain->id,
status => $params->{status},
primary_number_id => undef, # will be filled in next step
});
my ($cli);
if(defined $params->{e164}{cc} && $params->{e164}{cc} ne '') {
$cli = $params->{e164}{cc} .
($params->{e164}{ac} || '') .
$params->{e164}{sn};
update_subscriber_numbers(
schema => $schema,
subscriber_id => $billing_subscriber->id,
reseller_id => $reseller->id,
primary_number => $params->{e164},
);
}
unless(exists $params->{password}) {
my ($pass_bin, $pass_str);
UUID::generate($pass_bin);
UUID::unparse($pass_bin, $pass_str);
$params->{password} = $pass_str;
}
my $prov_subscriber = $schema->resultset('provisioning_voip_subscribers')->create({
uuid => $uuid_string,
username => $params->{username},
password => $params->{password},
webusername => $params->{webusername} || $params->{username},
webpassword => $params->{webpassword},
admin => $params->{administrative} // $administrative,
account_id => $contract->id,
domain_id => $prov_domain->id,
create_timestamp => NGCP::Panel::Utils::DateTime::current_local,
});
$preferences->{account_id} = $contract->id;
$preferences->{ac} = $params->{e164}{ac}
if(defined $params->{e164}{ac} && length($params->{e164}{ac}) > 0);
$preferences->{cc} = $params->{e164}{cc}
if(defined $params->{e164}{cc} && length($params->{e164}{cc}) > 0);
$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},
});
}
}
$schema->resultset('voicemail_users')->create({
customer_id => $uuid_string,
mailbox => $cli // 0,
password => sprintf("%04d", int(rand 10000)),
email => '',
});
if($cli) {
$schema->resultset('voip_dbaliases')->create({
username => $cli,
domain_id => $prov_subscriber->domain->id,
subscriber_id => $prov_subscriber->id,
});
}
return $billing_subscriber;
});
}
1;
=head1 NAME

@ -1,4 +1,4 @@
[% site_config.title = 'Customer Details for #' _ contract.id _ " (" _ product.name _ ")" -%]
[% site_config.title = 'Customer Details for #' _ contract.id -%]
[%
lock_levels = [

Loading…
Cancel
Save