diff --git a/lib/NGCP/Panel/Controller/Device.pm b/lib/NGCP/Panel/Controller/Device.pm index da56637077..730f1fabcd 100644 --- a/lib/NGCP/Panel/Controller/Device.pm +++ b/lib/NGCP/Panel/Controller/Device.pm @@ -939,6 +939,7 @@ sub dev_field_config :Chained('/') :PathPart('device/autoprov/config') :Args() { } else { $display_name = $sub->username; }; + # TODO: only push password for private/shared line? push @{ $range->{lines} }, { username => $sub->username, domain => $sub->domain->domain, @@ -948,11 +949,6 @@ sub dev_field_config :Chained('/') :PathPart('device/autoprov/config') :Args() { rangenum => $line->linerange_num, type => $line->line_type, }; - if($line->line_type eq "private" && !exists $vars->{sla}) { - $vars->{sla}->{username} = $sub->username, - $vars->{sla}->{domain} = $sub->domain->domain, - $vars->{sla}->{password} = $sub->password, - } } push @{ $vars->{phone}->{lineranges} }, $range; } diff --git a/lib/NGCP/Panel/Controller/Domain.pm b/lib/NGCP/Panel/Controller/Domain.pm index 51e1c82920..c554222c6c 100644 --- a/lib/NGCP/Panel/Controller/Domain.pm +++ b/lib/NGCP/Panel/Controller/Domain.pm @@ -115,6 +115,18 @@ sub create :Chained('dom_list') :PathPart('create') :Args() { ) if($rwr_set); } + # for PBX domains, we set outbound_from_display to np_display + if($pbx) { + my $pref_rs = NGCP::Panel::Utils::Preferences::get_dom_preference_rs( + c => $c, attribute => 'outbound_from_display', prov_domain => $prov_dom + ); + unless($pref_rs->first) { + $pref_rs->create({ value => 'np_display' }); + } else { + $pref_rs->first->update({ value => 'np_display' }); + } + } + $new_dom->create_related('domain_resellers', { reseller_id => $reseller_id }); diff --git a/lib/NGCP/Panel/Controller/Sound.pm b/lib/NGCP/Panel/Controller/Sound.pm index f5e07c43c1..6d9298856a 100644 --- a/lib/NGCP/Panel/Controller/Sound.pm +++ b/lib/NGCP/Panel/Controller/Sound.pm @@ -178,17 +178,60 @@ sub edit :Chained('base') :PathPart('edit') { if($c->user->roles eq "admin") { $form->values->{reseller_id} = $form->values->{reseller}{id}; $form->values->{contract_id} = $form->values->{contract}{id} // undef; + if(defined $form->values->{contract_id}) { + $form->values->{contract_default} //= 0; + } else { + $form->values->{contract_default} = 0; + } + } elsif($c->user->roles eq "reseller") { + if(defined $c->stash->{set_result}->contract_id) { + $form->values->{contract_default} //= 0; + } else { + $form->values->{contract_default} = 0; + } + } else { + $form->values->{contract_default} //= 0; } delete $form->values->{reseller}; delete $form->values->{contract}; - $c->stash->{set_result}->update($form->values); + $c->model('DB')->txn_do(sub { + # if contract default is set, clear old ones first + if($c->stash->{set_result}->contract_id && $form->values->{contract_default} == 1) { + $c->stash->{sets_rs}->search({ + reseller_id => $c->stash->{set_result}->reseller_id, + contract_id => $c->stash->{set_result}->contract_id, + contract_default => 1, + })->update_all({ contract_default => 0 }); + } + + my $old_contract_default = $c->stash->{set_result}->contract_default; + $c->stash->{set_result}->update($form->values); + + if($c->stash->{set_result}->contract && + $c->stash->{set_result}->contract_default == 1 && $old_contract_default != 1) { + # go over each subscriber in the contract and set the contract_sound_set + # preference if it doesn't have one set yet + my $contract = $c->stash->{set_result}->contract; + foreach my $bill_subscriber($contract->voip_subscribers->all) { + my $prov_subscriber = $bill_subscriber->provisioning_voip_subscriber; + if($prov_subscriber) { + my $pref_rs = NGCP::Panel::Utils::Preferences::get_usr_preference_rs( + c => $c, prov_subscriber => $prov_subscriber, attribute => 'contract_sound_set', + ); + unless($pref_rs->first) { + $pref_rs->create({ value => $c->stash->{set_result}->id }); + } + } + } + } + }); delete $c->session->{created_objects}->{reseller}; delete $c->session->{created_objects}->{contract}; $c->flash(messages => [{type => 'success', text => 'Sound set successfully updated'}]); } catch($e) { $c->log->error("failed to update sound set: $e"); $c->flash(messages => [{type => 'error', text => 'Sound set successfully updated'}]); - } + }; NGCP::Panel::Utils::Navigation::back_or($c, $c->uri_for('/sound')); } @@ -294,17 +337,20 @@ sub create :Chained('sets_list') :PathPart('create') :Args() { my $schema = $c->model('DB'); $schema->txn_do(sub { + # if a new contract default is set, clear old ones first + if($form->values->{contract_id} && $form->values->{contract_default} == 1) { + $c->stash->{sets_rs}->search({ + reseller_id => $form->values->{reseller_id}, + contract_id => $form->values->{contract_id}, + contract_default => 1, + })->update_all({ contract_default => 0 }); + } my $set = $c->stash->{sets_rs}->create($form->values); - if($set->contract_default == 1) { + if($set->contract && $set->contract_default == 1) { # go over each subscriber in the contract and set the contract_sound_set # preference if it doesn't have one set yet - my $contract; - if($c->user->roles eq "admin" || $c->user->roles eq "reseller") { - $contract = $schema->resultset('contracts')->find($form->values->{contract_id}); - } else { - $contract = $c->user->contract; - } + my $contract = $set->contract; foreach my $bill_subscriber($contract->voip_subscribers->all) { my $prov_subscriber = $bill_subscriber->provisioning_voip_subscriber; if($prov_subscriber) { diff --git a/lib/NGCP/Panel/Utils/Preferences.pm b/lib/NGCP/Panel/Utils/Preferences.pm index 501c02a1a1..e2cce03a8c 100644 --- a/lib/NGCP/Panel/Utils/Preferences.pm +++ b/lib/NGCP/Panel/Utils/Preferences.pm @@ -454,7 +454,7 @@ sub get_dom_preference_rs { my $preference = $c->model('DB')->resultset('voip_preferences')->find({ attribute => $attribute, 'dom_pref' => 1, - })->voip_usr_preferences->search_rs({ + })->voip_dom_preferences->search_rs({ domain_id => $prov_domain->id, }); return $preference;