From d57aa0e7ff7e86dba80c4e0dadce683a455ece3c Mon Sep 17 00:00:00 2001 From: Gerhard Jungwirth Date: Tue, 22 Jul 2014 16:40:50 +0200 Subject: [PATCH] MT#7673 update voicemail number in webinterface --- lib/NGCP/Panel/Controller/Subscriber.pm | 5 ++ lib/NGCP/Panel/Utils/Preferences.pm | 3 +- lib/NGCP/Panel/Utils/Subscriber.pm | 62 ++++++++++++++++++++----- 3 files changed, 58 insertions(+), 12 deletions(-) diff --git a/lib/NGCP/Panel/Controller/Subscriber.pm b/lib/NGCP/Panel/Controller/Subscriber.pm index 3de5322250..07534b042e 100644 --- a/lib/NGCP/Panel/Controller/Subscriber.pm +++ b/lib/NGCP/Panel/Controller/Subscriber.pm @@ -793,6 +793,11 @@ sub preferences_edit :Chained('preferences_base') :PathPart('edit') :Args(0) { base_uri => $c->uri_for_action('/subscriber/preferences', [$c->req->captures->[0]]), edit_uri => $c->uri_for_action('/subscriber/preferences_edit', $c->req->captures), ); + my $attr = $c->stash->{preference_meta}->attribute; + if ($c->req->method eq "POST" && $attr && ($attr eq "voicemail_echo_number" || $attr eq "cli")) { + NGCP::Panel::Utils::Subscriber::update_voicemail_number( + schema => $c->model('DB'), subscriber => $c->stash->{subscriber}); + } } catch($e) { NGCP::Panel::Utils::Message->error( c => $c, diff --git a/lib/NGCP/Panel/Utils/Preferences.pm b/lib/NGCP/Panel/Utils/Preferences.pm index f755e27d1a..3e69db98fe 100644 --- a/lib/NGCP/Panel/Utils/Preferences.pm +++ b/lib/NGCP/Panel/Utils/Preferences.pm @@ -543,8 +543,9 @@ sub get_usr_preference_rs { my $c = $params{c}; my $attribute = $params{attribute}; my $prov_subscriber = $params{prov_subscriber}; + my $schema = $params{schema} // $c->model('DB'); - my $pref_rs = $c->model('DB')->resultset('voip_preferences')->find({ + my $pref_rs = $schema->resultset('voip_preferences')->find({ attribute => $attribute, 'usr_pref' => 1, }); return unless($pref_rs); diff --git a/lib/NGCP/Panel/Utils/Subscriber.pm b/lib/NGCP/Panel/Utils/Subscriber.pm index 29e37cc428..8e50cee93f 100644 --- a/lib/NGCP/Panel/Utils/Subscriber.pm +++ b/lib/NGCP/Panel/Utils/Subscriber.pm @@ -489,17 +489,11 @@ sub update_subscriber_numbers { }); } push @dbnums, $dbalias->id; - if(defined $prov_subs->voicemail_user) { - $prov_subs->voicemail_user->update({ - mailbox => $cli, - }); - } + update_voicemail_number(schema => $schema, subscriber => $billing_subs); for my $cfset($prov_subs->voip_cf_destination_sets->all) { for my $cf($cfset->voip_cf_destinations->all) { - if($cf->destination =~ /\@voicebox\.local$/) { - $cf->update({ destination => 'sip:vmu'.$cli.'@voicebox.local' }); - } elsif($cf->destination =~ /\@fax2mail\.local$/) { + if($cf->destination =~ /\@fax2mail\.local$/) { $cf->update({ destination => 'sip:'.$cli.'@fax2mail.local' }); } elsif($cf->destination =~ /\@conference\.local$/) { $cf->update({ destination => 'sip:conf='.$cli.'@conference.local' }); @@ -511,9 +505,7 @@ sub update_subscriber_numbers { if (defined $billing_subs->primary_number) { $billing_subs->primary_number->delete; } - if(defined $prov_subs->voicemail_user) { - $prov_subs->voicemail_user->update({ mailbox => '0' }); - } + update_voicemail_number(schema => $schema, subscriber => $billing_subs); } if ( (defined $old_cc && defined $old_sn) @@ -1026,6 +1018,54 @@ sub check_dset_autoattendant_status { return $status; } +# order: voicemail_echo_number, cli, primary_number, '0' +sub update_voicemail_number { + my (%params) = @_; + + my $schema = $params{schema}; + my $subscriber = $params{subscriber}; + + my $prov_subs = $subscriber->provisioning_voip_subscriber; + return unless $prov_subs; + my $voicemail_user = $prov_subs->voicemail_user; + my $new_cli; + + my $echonumber_pref_rs = NGCP::Panel::Utils::Preferences::get_usr_preference_rs( + schema => $schema, + prov_subscriber => $prov_subs, + attribute => 'voicemail_echo_number' + ); + my $cli_pref_rs = NGCP::Panel::Utils::Preferences::get_usr_preference_rs( + schema => $schema, + prov_subscriber => $prov_subs, + attribute => 'cli' + ); + if (defined $echonumber_pref_rs->first) { + $new_cli = $echonumber_pref_rs->first->value; + } elsif (defined $cli_pref_rs->first) { + $new_cli = $cli_pref_rs->first->value; + } elsif (defined $subscriber->primary_number) { + my $n = $subscriber->primary_number; + $new_cli = $n->cc . ($n->ac // '') . $n->sn; + } else { + $new_cli = '0'; + } + + if (defined $voicemail_user) { + $voicemail_user->update({ mailbox => $new_cli }); + } + + for my $cfset ($prov_subs->voip_cf_destination_sets->all) { + for my $cf ($cfset->voip_cf_destinations->all) { + if($cf->destination =~ /\@voicebox\.local$/) { + $cf->update({ destination => 'sip:vmu'.$new_cli.'@voicebox.local' }); + } + } + } + + return; +} + 1; =head1 NAME