MT#3977 Implement line/key handling for devices.

This is part 1 to define keys/lines on a device, to be assigned to
subscribers.
agranig/peering-route
Andreas Granig 13 years ago
parent 76f4bdd14c
commit fba3998657

@ -160,8 +160,15 @@ sub devmod_create :Chained('base') :PathPart('model/create') :Args(0) :Does(ACL)
$form->params->{mac_image} = $mac_image->slurp;
$form->params->{mac_image_type} = $ft->mime_type($form->params->{mac_image});
}
my $linerange = delete $form->params->{linerange};
my $devmod = $schema->resultset('autoprov_devices')->create($form->params);
foreach my $range(@{ $linerange }) {
delete $range->{id};
$devmod->autoprov_device_line_ranges->create($range);
}
delete $c->session->{created_objects}->{reseller};
$c->session->{created_objects}->{device} = { id => $devmod->id };
$c->flash(messages => [{type => 'success', text => 'Successfully created device model'}]);
@ -228,6 +235,11 @@ sub devmod_edit :Chained('devmod_base') :PathPart('edit') :Args(0) :Does(ACL) :A
my $posted = ($c->request->method eq 'POST');
my $form;
my $params = { $c->stash->{devmod}->get_inflated_columns };
$params->{linerange} = [];
foreach my $range($c->stash->{devmod}->autoprov_device_line_ranges->all) {
push @{ $params->{linerange} }, { $range->get_inflated_columns };
}
use Data::Printer; p $params;
$params->{reseller}{id} = delete $params->{reseller_id};
$params = $params->merge($c->session->{created_objects});
if($c->user->is_superuser) {
@ -283,7 +295,15 @@ sub devmod_edit :Chained('devmod_base') :PathPart('edit') :Args(0) :Does(ACL) :A
delete $form->params->{mac_image_type};
}
my $linerange = delete $form->params->{linerange};
$c->stash->{devmod}->update($form->params);
$c->stash->{devmod}->autoprov_device_line_ranges->delete_all;
foreach my $range(@{ $linerange }) {
delete $range->{id};
$c->stash->{devmod}->autoprov_device_line_ranges->create($range);
}
delete $c->session->{created_objects}->{reseller};
$c->flash(messages => [{type => 'success', text => 'Successfully updated device model'}]);
});

@ -6,6 +6,8 @@ use Moose::Util::TypeConstraints;
use HTML::FormHandler::Widget::Block::Bootstrap;
with 'NGCP::Panel::Render::RepeatableJs';
has '+widget_wrapper' => ( default => 'Bootstrap' );
has '+enctype' => ( default => 'multipart/form-data');
has_field 'submitid' => ( type => 'Hidden' );
@ -63,6 +65,87 @@ has_field 'sync_params' => (
default => '[% server.uri %]/$MA',
);
has_field 'linerange' => (
type => 'Repeatable',
label => 'Line/Key Range',
setup_for_js => 1,
do_wrapper => 1,
do_label => 1,
required => 1,
tags => {
controls_div => 1,
},
wrapper_class => [qw/hfh-rep-block/],
);
has_field 'linerange.id' => (
type => 'Hidden',
);
has_field 'linerange.name' => (
type => 'Text',
label => 'Name',
default => 'Phone Keys',
element_attr => {
rel => ['tooltip'],
title => ['The Name of this range, e.g. <i>Phone Keys</i> or <i>Attendant Console 1 Keys</i>, accessible in the config template array via <i>phone.lineranges[].name</i>'],
},
);
has_field 'linerange.num_lines' => (
type => 'PosInteger',
label => 'Number of Lines/Keys',
default => 4,
element_attr => {
rel => ['tooltip'],
title => ['The number of Lines/Keys in this range, indexed from 0 in the config template array <i>phone.lineranges[].lines[]</i>'],
},
);
has_field 'linerange.can_private' => (
type => 'Boolean',
label => 'Supports Private Line',
default => 1,
element_attr => {
rel => ['tooltip'],
title => ['Lines/Keys in this range can be used as regular phone lines. Value is accessible in the config template via <i>phone.lineranges[].lines[].can_private</i>'],
},
);
has_field 'linerange.can_shared' => (
type => 'Boolean',
label => 'Supports Shared Line',
default => 0,
element_attr => {
rel => ['tooltip'],
title => ['Lines/Keys in this range can be used as shared lines. Value is accessible in the config template via <i>phone.lineranges[].lines[].can_shared</i>'],
},
);
has_field 'linerange.can_blf' => (
type => 'Boolean',
label => 'Supports Busy Lamp Field',
default => 0,
element_attr => {
rel => ['tooltip'],
title => ['Lines/Keys in this range can be used as Busy Lamp Field. Value is accessible in the config template via <i>phone.lineranges[].lines[].can_blf</i>'],
},
);
has_field 'linerange.rm' => (
type => 'RmElement',
value => 'Remove',
order => 100,
element_class => [qw/btn btn-primary pull-right/],
);
has_field 'linerange_add' => (
type => 'AddElement',
repeatable => 'linerange',
value => 'Add another Line/Key Range',
element_class => [qw/btn btn-primary pull-right/],
);
has_field 'save' => (
type => 'Submit',
value => 'Save',
@ -73,7 +156,7 @@ has_field 'save' => (
has_block 'fields' => (
tag => 'div',
class => [qw/modal-body/],
render_list => [qw/vendor model front_image mac_image sync_uri sync_method sync_params/],
render_list => [qw/vendor model linerange linerange_add front_image mac_image sync_uri sync_method sync_params/],
);
has_block 'actions' => (

@ -26,7 +26,7 @@ has_field 'save' => (
has_block 'fields' => (
tag => 'div',
class => [qw/modal-body/],
render_list => [qw/reseller vendor model front_image mac_image sync_uri sync_method sync_params/],
render_list => [qw/reseller vendor model linerange linerange_add front_image mac_image sync_uri sync_method sync_params/],
);
has_block 'actions' => (

@ -70,6 +70,19 @@ div.ngcp-modal div.modal-body div.control-group.hfh-rep div.controls div.hfh-rep
margin-left: 180px;
}
div.ngcp-modal div.modal-body div.control-group.hfh-rep-block div.control-group.hfh-repinst div.controls {
margin-left: 0;
}
div.ngcp-modal div.modal-body div.control-group.hfh-rep-block div.control-group.hfh-repinst div.controls div.control-group {
margin-left: 0;
}
div.ngcp-modal div.modal-body div.control-group.hfh-rep-block div.control-group.hfh-repinst div.controls div.control-group div.controls {
margin-left: 180px;
}
/* align timeset elements in one row */
div.ngcp-timeset-row {

@ -191,6 +191,9 @@ $(document).ready(function() {
[% IF helper.edit_flag || helper.create_flag == 1 -%]
[%
IF helper.form_object.has_for_js;
helper.form_object.render_repeatable_js;
END;
PROCESS "helpers/modal.tt";
modal_header(m.create_flag=helper.create_flag,
m.name = helper.name);

Loading…
Cancel
Save