MT#7119 API: Fix PBX subscriber creation.

Document only rendered form fields.
Expose pbx_extension and others via subscribers form.
mr3.3.1
Andreas Granig 12 years ago
parent d51779ddab
commit 4e3b373df3

@ -218,18 +218,21 @@ sub field_to_json : Private {
sub get_collection_properties {
my ($self, $form) = @_;
my $renderlist = $form->form->blocks->{fields}->{render_list};
my @props = ();
foreach my $f($form->fields) {
my $name = $f->name;
next if (
$f->type eq "Hidden" ||
$f->type eq "Button" ||
$f->type eq "Submit" ||
0);
next if(defined $renderlist && !grep {/^$name$/} @{ $renderlist });
my @types = ();
push @types, 'null' unless ($f->required || $f->validate_when_empty);
push @types, $self->field_to_json($f->type);
my $name = $f->name;
if($f->type =~ /^\+NGCP::Panel::Field::/) {
if($f->type =~ /E164/) {
$name = 'primary_number';
@ -249,6 +252,7 @@ sub get_collection_properties {
}
push @props, { name => $name, description => $desc, types => \@types };
}
@props = sort{$a->{name} cmp $b->{name}} @props;
return \@props;
}

@ -6,6 +6,16 @@ extends 'NGCP::Panel::Form::Subscriber';
sub build_render_list {[qw/submitid fields actions/]}
sub build_form_element_class {[qw(form-horizontal)]}
has_field 'customer' => (
type => '+NGCP::Panel::Field::CustomerContract',
label => 'Customer',
validate_when_empty => 1,
element_attr => {
rel => ['tooltip'],
title => ['The contract used for this subscriber.']
},
);
has_field 'display_name' => (
type => 'Text',
label => 'Display Name',
@ -39,6 +49,16 @@ has_field 'lock' => (
},
);
has_field 'pbx_extension' => (
type => 'Text',
label => 'PBX Extension',
element_attr => {
rel => ['tooltip'],
title => ['The PBX extension used for short dialling. If provided, the primary number will automatically be derived from the pilot subscriber\'s primary number suffixed by this extension.']
},
);
has_field 'is_pbx_group' => (
type => 'Boolean',
label => 'Is PBX Group?',
@ -99,7 +119,7 @@ has_field 'save' => (
has_block 'fields' => (
tag => 'div',
class => [qw/modal-body/],
render_list => [qw/contract domain e164 alias_number email webusername webpassword username password status lock external_id administrative is_pbx_group pbx_group display_name profile_set profile/ ],
render_list => [qw/customer domain e164 alias_number email webusername webpassword username password status lock external_id administrative is_pbx_group pbx_group display_name profile_set profile/ ],
);
has_block 'actions' => (
@ -114,6 +134,9 @@ sub update_fields {
my $c = $self->ctx;
return unless $c;
# make sure we don't use contract, as we have customer
$self->field('contract')->inactive(1);
if($c->config->{security}->{password_sip_autogenerate}) {
$self->field('password')->required(0);
}

@ -220,7 +220,6 @@ sub prepare_resource {
$resource->{domain_id} = $domain->id;
}
$resource->{e164} = delete $resource->{primary_number};
$resource->{contract_id} = delete $resource->{customer_id};
$resource->{status} //= 'active';
$resource->{administrative} //= 0;
$resource->{profile_set}{id} = delete $resource->{profile_set_id};
@ -250,7 +249,7 @@ sub prepare_resource {
}
}
my $customer = $self->get_customer($c, $resource->{contract_id});
my $customer = $self->get_customer($c, $resource->{customer_id});
return unless($customer);
if(!$update && defined $customer->max_subscribers && $customer->voip_subscribers->search({
status => { '!=' => 'terminated' },
@ -286,6 +285,34 @@ sub prepare_resource {
$admin = $resource->{admin} // 0;
}
if($admin_subscriber) {
unless($resource->{pbx_extension}) {
$self->error($c, HTTP_UNPROCESSABLE_ENTITY, "A pbx_extension is required if customer is PBX and pilot subscriber exists.");
return;
}
$resource->{e164}->{cc} = $admin_subscriber->primary_number->cc;
$resource->{e164}->{ac} = $admin_subscriber->primary_number->ac // '';
$resource->{e164}->{sn} = $admin_subscriber->primary_number->sn . $resource->{pbx_extension};
unless($resource->{is_pbx_group}) {
unless($resource->{pbx_group_id}) {
$self->error($c, HTTP_UNPROCESSABLE_ENTITY, "A pbx_group_id is required if customer is PBX and pilot subscriber exists.");
return;
}
my $group_subscriber = $c->model('DB')->resultset('voip_subscribers')->find({
id => $resource->{pbx_group_id},
contract_id => $resource->{customer_id},
'provisioning_voip_subscriber.is_pbx_group' => 1,
},{
join => 'provisioning_voip_subscriber',
});
unless($group_subscriber) {
$self->error($c, HTTP_UNPROCESSABLE_ENTITY, "Invalid pbx_group_id, does not exist for this contract.");
return;
}
}
}
$preferences->{shared_buddylist_visibility} = 1;
$preferences->{display_name} = $resource->{display_name}
if(defined $resource->{display_name});

Loading…
Cancel
Save