TT#67210 Use device_id assignment for field devices

* If a device id is assigned to a field device line, populate the
  device_id field for this line to be used in config templates.
* Handle assigned alias id of deviceid_number_id in /api/pbxdevices,
  if any.

Change-Id: I455c4cb6e7d96a21977094e9af97ae91bd29fb92
changes/52/33652/7
Andreas Granig 7 years ago
parent 28cb73e58e
commit 800957e900

@ -190,6 +190,23 @@ sub POST :Allow {
$self->error($c, HTTP_UNPROCESSABLE_ENTITY, "Invalid line. Invalid 'linerange'.");
return;
}
if (defined $line->{deviceid_number_id}) {
my $devid_num = $b_subs->voip_numbers->find($line->{deviceid_number_id});
unless ($devid_num) {
$self->error($c, HTTP_UNPROCESSABLE_ENTITY, "Invalid 'deviceid_number_id'. Could not find number for this subscriber.");
return;
}
unless ($devid_num->voip_dbalias && $devid_num->voip_dbalias->is_devid) {
$self->error($c, HTTP_UNPROCESSABLE_ENTITY, "Invalid 'deviceid_number_id'. Number is not a device id.");
return;
}
$line->{deviceid_alias_id} = $devid_num->voip_dbalias->id;
} else {
$line->{deviceid_alias_id} = undef;
}
delete $line->{deviceid_number_id};
my $linerange = $dev_model->autoprov_device_line_ranges->find({
name => $line->{linerange}
});

@ -1359,6 +1359,7 @@ sub dev_field_config :Chained('/') :PathPart('device/autoprov/config') :Args() {
}
}
$sub_preferences_vars{displayname} = delete $sub_preferences_vars{display_name};
$sub_preferences_vars{device_id} = $line->deviceid_alias ? $line->deviceid_alias->username : undef;
# TODO: only push password for private/shared line?
my $aliases = [ $sub->voip_dbaliases->search({ is_primary => 0 })->get_column("username")->all ];
my $primary = $sub->voip_dbaliases->search({ is_primary => 1 })->get_column("username")->first;

@ -97,5 +97,15 @@ has_field 'lines.type' => (
element_class => [qw/ngcp-linetype-select/],
);
has_field 'lines.deviceid_number_id' => (
type => '+NGCP::Panel::Field::PosInteger',
required => 0,
label => 'Device id',
element_attr => {
rel => ['tooltip'],
title => ['The number id (which must be marked as device id) used for this line/subscriber assignment.'],
},
);
1;
# vim: set tabstop=4 expandtab:

@ -54,7 +54,7 @@ sub resource_from_item {
my $p_subs = $line->provisioning_voip_subscriber;
my $b_subs = $p_subs ? $p_subs->voip_subscriber : undef;
my $line_attr = { $line->get_inflated_columns };
foreach my $f(qw/id device_id linerange_id/) {
foreach my $f(qw/id device_id linerange_id deviceid_alias_id/) {
delete $line_attr->{$f};
}
foreach my $f(qw/key_num/) {
@ -64,6 +64,8 @@ sub resource_from_item {
if($b_subs);
$line_attr->{linerange} = $line->autoprov_device_line_range->name;
$line_attr->{type} = delete $line_attr->{line_type};
$line_attr->{deviceid_number_id} = defined $line->deviceid_alias ?
$line->deviceid_alias->voip_number->id : undef;
push @lines, $line_attr;
}
$resource{customer_id} = delete $resource{contract_id};
@ -181,6 +183,23 @@ sub update_item {
$self->error($c, HTTP_UNPROCESSABLE_ENTITY, "Invalid line. Invalid 'linerange'.");
return;
}
if (defined $line->{deviceid_number_id}) {
my $devid_num = $b_subs->voip_numbers->find($line->{deviceid_number_id});
unless ($devid_num) {
$self->error($c, HTTP_UNPROCESSABLE_ENTITY, "Invalid 'deviceid_number_id'. Could not find number for this subscriber.");
return;
}
unless ($devid_num->voip_dbalias && $devid_num->voip_dbalias->is_devid) {
$self->error($c, HTTP_UNPROCESSABLE_ENTITY, "Invalid 'deviceid_number_id'. Number is not a device id.");
return;
}
$line->{deviceid_alias_id} = $devid_num->voip_dbalias->id;
} else {
$line->{deviceid_alias_id} = undef;
}
delete $line->{deviceid_number_id};
my $linerange = $dev_model->autoprov_device_line_ranges->find({
name => $line->{linerange}
});
@ -216,6 +235,7 @@ sub update_item {
die $err if $err;
}
$item->update($resource);
$item->discard_changes;
return $item;
}

Loading…
Cancel
Save