Properly set PBX preferences and use transaction.

agranig/peering-route
Andreas Granig 12 years ago
parent df1c2cc4c1
commit 63e9ded2ca

@ -227,34 +227,52 @@ sub subscriber_create :Chained('base') :PathPart('subscriber/create') :Args(0) {
if($form->validated) {
my $billing_subscriber;
try {
my $preferences = {};
if($pbx && !$pbxadmin) {
my $admin = $admin_subscribers->[0];
$form->params->{domain}{id} = $admin->{domain_id};
# TODO: make DT selection multi-select capable
# set pbx_group preferences somehow for the related group subscriber as well
$form->params->{pbx_group_id} = $form->params->{group}{id};
delete $form->params->{group};
my $base_number = $admin->{primary_number};
if($base_number) {
# $preferences->{base_cli} = $base_number->cc . $base_number->ac . $base_number->sn;
if($form->params->{extension}) {
$form->params->{e164}{cc} = $base_number->{cc};
$form->params->{e164}{ac} = $base_number->{ac};
$form->params->{e164}{sn} = $base_number->{sn} . $form->params->{extension};
my $schema = $c->model('DB');
$schema->txn_do(sub {
my $preferences = {};
if($pbx && !$pbxadmin) {
my $admin = $admin_subscribers->[0];
$form->params->{domain}{id} = $admin->{domain_id};
# TODO: make DT selection multi-select capable
$form->params->{pbx_group_id} = $form->params->{group}{id};
delete $form->params->{group};
my $base_number = $admin->{primary_number};
if($base_number) {
$preferences->{cloud_pbx_base_cli} = $base_number->{cc} . $base_number->{ac} . $base_number->{sn};
if($form->params->{extension}) {
$form->params->{e164}{cc} = $base_number->{cc};
$form->params->{e164}{ac} = $base_number->{ac};
$form->params->{e164}{sn} = $base_number->{sn} . $form->params->{extension};
}
}
}
}
if($pbx) {
$preferences->{cloud_pbx} = 1;
}
$billing_subscriber = NGCP::Panel::Utils::Subscriber::create_subscriber(
c => $c,
contract => $c->stash->{contract},
params => $form->params,
admin_default => $pbxadmin,
preferences => $preferences,
);
if($pbx) {
$preferences->{cloud_pbx} = 1;
}
$billing_subscriber = NGCP::Panel::Utils::Subscriber::create_subscriber(
c => $c,
schema => $schema,
contract => $c->stash->{contract},
params => $form->params,
admin_default => $pbxadmin,
preferences => $preferences,
);
# update the corresponding group subscriber preference
if($pbx && !$pbxadmin && $form->params->{pbx_group_id}) {
my $grp_subscriber = $c->model('DB')->resultset('voip_pbx_groups')
->find($form->params->{pbx_group_id})
->provisioning_voip_subscriber;
if($grp_subscriber) {
my $grp_pref_rs = NGCP::Panel::Utils::Subscriber::get_usr_preference_rs(
c => $c, attribute => 'cloud_pbx_hunt_group', prov_subscriber => $grp_subscriber
);
$grp_pref_rs->create({ value => 'sip:'.$form->params->{username}.'@'.
$billing_subscriber->domain->domain });
}
}
});
delete $c->session->{created_objects}->{domain};
delete $c->session->{created_objects}->{group};
$c->flash(messages => [{type => 'success', text => 'Subscriber successfully created.'}]);
@ -408,15 +426,14 @@ sub pbx_group_create :Chained('base') :PathPart('pbx/group/create') :Args(0) {
);
if($posted && $form->validated) {
try {
$c->model('DB')->schema->txn_do( sub {
my $schema = $c->model('DB');
$schema->txn_do( sub {
my $preferences = {};
my $admin = $admin_subscribers->[0];
my $base_number = $admin->{primary_number};
if($base_number) {
# TODO: this pref doesn't exist yet in the db
# $preferences->{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($form->params->{extension}) {
$form->params->{e164}{cc} = $base_number->{cc};
$form->params->{e164}{ac} = $base_number->{ac};
@ -431,8 +448,11 @@ sub pbx_group_create :Chained('base') :PathPart('pbx/group/create') :Args(0) {
$form->params->{username} = lc $form->params->{name};
$form->params->{username} =~ s/\s+/_/g;
$preferences->{cloud_pbx} = 1;
$preferences->{cloud_pbx_hunt_policy} = $form->params->{hunt_policy};
$preferences->{cloud_pbx_hunt_timeout} = $form->params->{hunt_policy_timeout};
my $billing_subscriber = NGCP::Panel::Utils::Subscriber::create_subscriber(
c => $c,
schema => $schema,
contract => $c->stash->{contract},
params => $form->params,
admin_default => 0,

@ -143,7 +143,7 @@ sub create_subscriber {
my $administrative = $params{admin_default};
my $preferences = $params{preferences};
my $schema = $c->model('DB');
my $schema = $params{schema} // $c->model('DB');
my $reseller = $contract->contact->reseller;
my $billing_domain = $schema->resultset('domains')
->find($params->{domain}{id});
@ -201,10 +201,6 @@ sub create_subscriber {
create_timestamp => NGCP::Panel::Utils::DateTime::current_local,
});
my $voip_preferences = $schema->resultset('voip_preferences')->search({
'usr_pref' => 1,
});
$preferences->{account_id} = $contract->id;
$preferences->{ac} = $params->{e164}{ac}
if(defined $params->{e164}{ac} && length($params->{e164}{ac}) > 0);
@ -214,11 +210,17 @@ sub create_subscriber {
if(defined $cli);
foreach my $k(keys %{ $preferences } ) {
$voip_preferences->find({ 'attribute' => $k })
->voip_usr_preferences->create({
'subscriber_id' => $prov_subscriber->id,
my $pref = 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({

Loading…
Cancel
Save