TT#46955 reseller preferences

Change-Id: I42afc5d33827e121e6551d01d9a1bd477d89137a
changes/01/27601/6
Rene Krenn 6 years ago
parent c2292f347f
commit 78a134ef15

@ -0,0 +1,20 @@
package NGCP::Panel::Controller::API::ResellerPreferenceDefs;
use Sipwise::Base;
use parent qw/NGCP::Panel::Role::EntityPreferenceDefs NGCP::Panel::Role::API/;
use NGCP::Panel::Utils::Preferences;
sub allowed_methods{
return [qw/GET OPTIONS HEAD/];
}
__PACKAGE__->set_config({
preferences_group => 'reseller_pref',
allowed_roles => [qw/admin reseller/],
});
1;
# vim: set tabstop=4 expandtab:

@ -0,0 +1,41 @@
package NGCP::Panel::Controller::API::ResellerPreferences;
use NGCP::Panel::Utils::Generic qw(:all);
use Sipwise::Base;
use parent qw/NGCP::Panel::Role::Entities NGCP::Panel::Role::API::Preferences/;
__PACKAGE__->set_config({
allowed_roles => [qw/admin reseller/],
});
sub allowed_methods{
return [qw/GET OPTIONS HEAD/];
}
sub item_name{
return 'resellerpreference';
}
sub resource_name{
return 'resellerpreferences';
}
sub container_resource_type{
return 'resellers';
}
sub api_description {
return 'Specifies certain properties (preferences) for a <a href="#resellers">Reseller</a>. The full list of properties can be obtained via <a href="/api/resellerpreferencedefs/">ResellerPreferenceDefs</a>.';
};
sub documentation_sample {
return {
cdr_export_field_separator => ",",
cdr_export_sclidui_rwrs => "my cdr export rewrite rules",
};
}
1;
# vim: set tabstop=4 expandtab:

@ -0,0 +1,31 @@
package NGCP::Panel::Controller::API::ResellerPreferencesItem;
use NGCP::Panel::Utils::Generic qw(:all);
use Sipwise::Base;
use parent qw/NGCP::Panel::Role::EntitiesItem NGCP::Panel::Role::API::Preferences/;
__PACKAGE__->set_config({
PATCH => { ops => [qw/add replace remove copy/] },
allowed_roles => [qw/admin reseller/],
});
sub allowed_methods{
return [qw/GET OPTIONS HEAD PATCH PUT/];
}
sub item_name{
return 'resellerpreference';
}
sub resource_name{
return 'resellerpreferences';
}
sub container_resource_type{
return 'resellers';
}
1;
# vim: set tabstop=4 expandtab:

@ -75,6 +75,7 @@ sub GET : Allow {
"CustomerPreferenceDefs" => 1,
"ProfilePreferenceDefs" => 1,
"PeeringServerPreferenceDefs" => 1,
"ResellerPreferenceDefs" => 1,
"PbxDevicePreferenceDefs" => 1,
"PbxDeviceProfilePreferenceDefs" => 1,
"PbxFieldDevicePreferenceDefs" => 1,

@ -19,6 +19,7 @@ use NGCP::Panel::Utils::Billing qw();
use NGCP::Panel::Utils::Admin;
use NGCP::Panel::Utils::Phonebook;
use NGCP::Panel::Utils::TimeSet;
use NGCP::Panel::Utils::Preferences qw();
sub auto :Private {
my ($self, $c) = @_;
@ -679,6 +680,89 @@ sub get_branding_css :Chained('base') :PathPart('css/download') :Args(0) {
$c->response->body($branding->css);
}
sub resellers_preferences_list :Chained('base') :PathPart('preferences') :CaptureArgs(0) {
my ($self, $c) = @_;
$c->stash->{reseller} = $c->stash->{reseller}->first;
my $x_pref_values = $c->model('DB')
->resultset('voip_preferences')
->search({
'reseller.id' => $c->stash->{reseller}->id,
},{
prefetch => {'reseller_preferences' => 'reseller'},
});
my %pref_values;
foreach my $value($x_pref_values->all) {
$pref_values{$value->attribute} =
[ map {$_->value} $value->reseller_preferences->all ];
}
my $rewrite_rule_sets_rs = $c->model('DB')
->resultset('voip_rewrite_rule_sets')->search_rs({
reseller_id => $c->stash->{reseller}->id,
},undef);
$c->stash(rwr_sets_rs => $rewrite_rule_sets_rs,
rwr_sets => [$rewrite_rule_sets_rs->all],);
NGCP::Panel::Utils::Preferences::load_preference_list( c => $c,
pref_values => \%pref_values,
reseller_pref => 1,
);
$c->stash(template => 'reseller/preferences.tt');
return;
}
sub resellers_preferences_root :Chained('resellers_preferences_list') :PathPart('') :Args(0) {
return;
}
sub resellers_preferences_base :Chained('resellers_preferences_list') :PathPart('') :CaptureArgs(1) {
my ($self, $c, $pref_id) = @_;
$c->stash->{preference_meta} = $c->model('DB')
->resultset('voip_preferences')
->search({
-or => ['voip_preferences_enums.reseller_pref' => 1,
'voip_preferences_enums.reseller_pref' => undef],
},{
prefetch => 'voip_preferences_enums',
})
->find({id => $pref_id});
$c->stash->{preference} = $c->model('DB')
->resultset('reseller_preferences')
->search({
attribute_id => $pref_id,
'reseller.id' => $c->stash->{reseller}->id,
},{
prefetch => 'reseller',
});
return;
}
sub resellers_preferences_edit :Chained('resellers_preferences_base') :PathPart('edit') :Args(0) {
my ($self, $c) = @_;
$c->stash(edit_preference => 1);
my @enums = $c->stash->{preference_meta}
->voip_preferences_enums
->all;
my $pref_rs = $c->stash->{reseller}->reseller_preferences;
NGCP::Panel::Utils::Preferences::create_preference_form( c => $c,
pref_rs => $pref_rs,
enums => \@enums,
base_uri => $c->uri_for_action('/reseller/resellers_preferences_root', [@{ $c->req->captures }[0]]),
edit_uri => $c->uri_for_action('/reseller/resellers_preferences_edit', $c->req->captures),
);
return;
}
sub phonebook_ajax :Chained('base') :PathPart('phonebook/ajax') :Args(0) :Does(ACL) :ACLDetachTo('/denied_page') :AllowedRole(admin) :AllowedRole(reseller) {
my ($self, $c) = @_;
NGCP::Panel::Utils::Datatables::process($c,
@ -896,7 +980,7 @@ sub timeset_create :Chained('base') :PathPart('timeset/create') :Args(0) :Does(A
try {
my $resource = $form->values;
$resource = NGCP::Panel::Utils::TimeSet::timeset_resource(
c => $c,
c => $c,
resource => $resource,
);
$resource->{reseller_id} = $reseller->id;
@ -985,7 +1069,7 @@ sub timeset_edit :Chained('timeset_base') :PathPart('edit') :Args(0) :Does(ACL)
$c->model('DB')->schema->txn_do( sub {
my $resource = $form->values;
$resource = NGCP::Panel::Utils::TimeSet::timeset_resource(
c => $c,
c => $c,
resource => $resource
);
$resource->{reseller_id} = $reseller->id;

@ -51,6 +51,15 @@ sub field_list {
type => 'Select',
options => \@options,
};
} elsif($meta->attribute eq "cdr_export_sclidui_rwrs") {
my @options = map {{label => $_->name, value => $_->id}}
defined $rwrs_rs ? $rwrs_rs->all : ();
unshift @options, {label => '', value => ''};
$field = {
name => $meta->attribute,
type => 'Select',
options => \@options,
};
} elsif ($meta->attribute eq "header_rule_set") {
my @options = map {{label => $_->name, value => $_->id}}
defined $hdrs_rs ? $hdrs_rs->all : ();
@ -153,9 +162,9 @@ sub validate {
my $attribute = 'codecs_list';
if(my $field = $self->field( $attribute )){
if( my $value = $field->value ){
#todo: 1.Should we allow only some particular separator?
#todo: 1.Should we allow only some particular separator?
#todo: 2.Lengths of the provisioning.voip_usr_preferences.value and kamailio.usr_preferences.value =128,all available values length is 141. We can't insert all codecs.
my $enum = { map { lc( $_ ) => 1 } qw/AMR AMR-WB CelB CLEARMODE CN DVI4 G722 G723 G728 G729 GSM H261 H263 H263-1998 h264
my $enum = { map { lc( $_ ) => 1 } qw/AMR AMR-WB CelB CLEARMODE CN DVI4 G722 G723 G728 G729 GSM H261 H263 H263-1998 h264
JPEG L16 MP2T MPA MPV nv opus PCMA PCMU QCELP speex telephone-event vp8 vp9/ };
my @codecs = split(/,/, $value);
my %codecs_dup;

@ -89,6 +89,8 @@ sub get_resource {
$prefs = $item->provisioning_voip_domain->voip_dom_preferences;
} elsif($type eq "peerings") {
$prefs = $item->voip_peer_preferences;
} elsif($type eq "resellers") {
$prefs = $item->reseller_preferences;
} elsif($type eq "contracts") {
$prefs = $item->voip_contract_preferences->search(
{ location_id => $c->request->param('location_id') || undef },
@ -146,6 +148,21 @@ sub get_resource {
$processed = 1;
last SWITCH;
};
/^cdr_export_sclidui_rwrs_id$/ && do {
my $pref_name = $pref->attribute->attribute;
$pref_name =~ s/_id$//;
my $rwr_set = $c->model('DB')->resultset('voip_rewrite_rule_sets')->find({
id => $pref->value,
});
if($rwr_set) {
$resource->{$pref_name} = $rwr_set->name;
} else {
$c->log->error("no rewrite rule set for '".$pref->attribute->attribute."' with value '".$pref->value."' found, although it's stored in preference id ".$pref->id);
# let it slip through
}
$processed = 1;
last SWITCH;
};
/^(adm_)?(cf_)?ncos_id$/ && do {
my $pref_name = $pref->attribute->attribute;
$pref_name =~ s/_id$//;
@ -265,6 +282,9 @@ sub get_resource {
} elsif($type eq "peerings") {
$resource->{peering_id} = int($item->id);
$resource->{id} = int($item->id);
} elsif($type eq "resellers") {
$resource->{reseller_id} = int($item->id);
$resource->{id} = int($item->id);
} elsif($type eq "pbxdevicemodels") {
$resource->{device_id} = int($item->id);
$resource->{id} = int($item->id);
@ -347,6 +367,17 @@ sub _item_rs {
} else {
return;
}
} elsif($type eq "resellers") {
if ($c->user->roles eq "admin") {
$item_rs = $c->model('DB')->resultset('resellers')->search_rs({
'me.status' => { '!=' => 'terminated' },
},);
} elsif ($c->user->roles eq "reseller") {
$item_rs = $c->model('DB')->resultset('resellers')->search_rs({
'me.id' => $c->user->reseller_id,
'me.status' => { '!=' => 'terminated' },
},);
}
} elsif($type eq "pbxdevicemodels") {
if($c->user->roles eq "admin") {
$item_rs = $c->model('DB')->resultset('autoprov_devices');
@ -413,6 +444,7 @@ sub get_preference_rs {
'profiles' => 'prof',
'subscribers' => 'usr',
'peerings' => 'peer',
'resellers' => 'reseller',
'pbxdevicemodels' => 'dev',
'pbxdeviceprofiles' => 'devprof',
'pbxdevices' => 'fielddev',
@ -496,6 +528,16 @@ sub update_item {
$full_rs = $elem->voip_peer_preferences;
$pref_type = 'peer_pref';
$reseller_id = 1;
} elsif($type eq "resellers") {
delete $resource->{reseller_id};
delete $resource->{resellerpreferences_id};
delete $old_resource->{reseller_id};
delete $old_resource->{resellerpreferences_id};
$accessor = $item->name;
$elem = $item;
$full_rs = $elem->reseller_preferences;
$pref_type = 'reseller_pref';
$reseller_id = $item->id;
} elsif($type eq "contracts") {
delete $resource->{customer_id};
delete $old_resource->{customer_id};
@ -554,6 +596,7 @@ sub update_item {
rewrite_caller_in_dpid rewrite_caller_out_dpid
rewrite_callee_in_dpid rewrite_callee_out_dpid
rewrite_caller_lnp_dpid rewrite_callee_lnp_dpid
cdr_export_sclidui_rwrs_id
ncos_id adm_ncos_id adm_cf_ncos_id
emergency_mapping_container_id
sound_set contract_sound_set
@ -596,6 +639,14 @@ sub update_item {
}
last SWITCH;
};
/^cdr_export_sclidui_rwrs/ && do {
unless(exists $resource->{$k}) {
my $rs = $self->get_preference_rs($c, $type, $elem, $k . '_id');
last SWITCH unless $rs; # unknown resource, just ignore
$rs->delete;
}
last SWITCH;
};
/^(adm_)?(cf_)?ncos$/ && do {
unless(exists $resource->{$k}) {
my $rs = $self->get_preference_rs($c, $type, $elem, $k . '_id');
@ -726,6 +777,25 @@ sub update_item {
}
last SWITCH;
};
/^cdr_export_sclidui_rwrs$/ && do {
my $pref_name = $pref . "_id";
my $rwr_set = $c->model('DB')->resultset('voip_rewrite_rule_sets')->find({
name => $resource->{$pref},
reseller_id => $reseller_id,
});
unless($rwr_set) {
$c->log->error("no rewrite rule set '".$resource->{$pref}."' for reseller id $reseller_id found");
$self->error($c, HTTP_UNPROCESSABLE_ENTITY, "Unknown rewrite_rule_set '".$resource->{$pref}."'");
return;
}
my $rs = $self->get_preference_rs($c, $type, $elem, $pref_name);
if($rs->first) {
$rs->first->update({ value => $rwr_set->id });
} else {
$rs->create({ value => $rwr_set->id });
}
last SWITCH;
};
/^header_rule_set$/ && do {
my $hdr_set = $c->model('DB')->resultset('voip_header_rule_sets')->find({
name => $resource->{$pref},

@ -38,6 +38,7 @@ sub load_preference_list {
my $c = $params{c};
my $pref_values = $params{pref_values};
my $peer_pref = $params{peer_pref};
my $reseller_pref = $params{reseller_pref};
my $dom_pref = $params{dom_pref};
my $dev_pref = $params{dev_pref};
my $devprof_pref = $params{devprof_pref};
@ -65,6 +66,9 @@ sub load_preference_list {
$peer_pref ? ('voip_preferences.peer_pref' => 1,
-or => ['voip_preferences_enums.peer_pref' => 1,
'voip_preferences_enums.peer_pref' => undef]) : (),
$reseller_pref ? ('voip_preferences.reseller_pref' => 1,
-or => ['voip_preferences_enums.reseller_pref' => 1,
'voip_preferences_enums.reseller_pref' => undef]) : (),
$dom_pref ? ('voip_preferences.dom_pref' => 1,
-or => ['voip_preferences_enums.dom_pref' => 1,
'voip_preferences_enums.dom_pref' => undef]) : (),
@ -117,50 +121,51 @@ sub load_preference_list {
my $tmp;
$pref->{rwrs_id} = $pref_values->{rewrite_caller_in_dpid} &&
($tmp = $c->stash->{rwr_sets_rs}->search({
caller_in_dpid =>$pref_values->{rewrite_caller_in_dpid}
caller_in_dpid => $pref_values->{rewrite_caller_in_dpid}
})->first) ?
$tmp->id
: undef;
}
elsif($pref->attribute eq "ncos") {
} elsif($pref->attribute eq "cdr_export_sclidui_rwrs") {
my $tmp;
$pref->{rwrs_id} = $pref_values->{$pref->attribute . '_id'} &&
($tmp = $c->stash->{rwr_sets_rs}->search({
id => $pref_values->{$pref->attribute . '_id'}
})->first) ?
$tmp->id
: undef;
} elsif($pref->attribute eq "ncos") {
if ($pref_values->{ncos_id} &&
(my $tmp = $c->stash->{ncos_levels_rs}
->find($pref_values->{ncos_id}) )) {
$pref->{ncos_id} = $tmp->id;
}
}
elsif($pref->attribute eq "adm_ncos") {
} elsif($pref->attribute eq "adm_ncos") {
if ($pref_values->{adm_ncos_id} &&
(my $tmp = $c->stash->{ncos_levels_rs}
->find($pref_values->{adm_ncos_id}) )) {
$pref->{adm_ncos_id} = $tmp->id;
}
}
elsif($pref->attribute eq "adm_cf_ncos") {
} elsif($pref->attribute eq "adm_cf_ncos") {
if ($pref_values->{adm_cf_ncos_id} &&
(my $tmp = $c->stash->{ncos_levels_rs}
->find($pref_values->{adm_cf_ncos_id}) )) {
$pref->{adm_cf_ncos_id} = $tmp->id;
}
}
elsif($pref->attribute eq "emergency_mapping_container") {
} elsif($pref->attribute eq "emergency_mapping_container") {
if ($pref_values->{emergency_mapping_container_id} &&
(my $tmp = $c->stash->{emergency_mapping_containers_rs}
->find($pref_values->{emergency_mapping_container_id}) )) {
$pref->{emergency_mapping_container_id} = $tmp->id;
}
}
elsif($pref->attribute eq "allowed_ips") {
} elsif($pref->attribute eq "allowed_ips") {
$pref->{allowed_ips_group_id} = $pref_values->{allowed_ips_grp};
$pref->{allowed_ips_rs} = $c->model('DB')->resultset('voip_allowed_ip_groups')
->search_rs({ group_id => $pref_values->{allowed_ips_grp} });
}
elsif($pref->attribute eq "man_allowed_ips") {
} elsif($pref->attribute eq "man_allowed_ips") {
$pref->{man_allowed_ips_group_id} = $pref_values->{man_allowed_ips_grp};
$pref->{man_allowed_ips_rs} = $c->model('DB')->resultset('voip_allowed_ip_groups')
->search_rs({ group_id => $pref_values->{man_allowed_ips_grp} });
}
elsif($c->stash->{subscriber} &&
} elsif($c->stash->{subscriber} &&
($pref->attribute eq "block_in_list" || $pref->attribute eq "block_out_list")) {
foreach my $v(@values) {
my $prefix = "";
@ -245,6 +250,20 @@ sub create_preference_form {
)) {
$preselected_value = $tmp->id;
}
} elsif ($c->stash->{preference_meta}->attribute eq "cdr_export_sclidui_rwrs") {
my $rwrs_id_pref = $pref_rs->search({
'attribute.attribute' => $c->stash->{preference_meta}->attribute . '_id'
},{
join => 'attribute'
})->first;
if (defined $rwrs_id_pref && (
my $tmp = $preselected_value = $c->stash->{rwr_sets_rs}->search({
id => $rwrs_id_pref->value,
})->first
)) {
$preselected_value = $tmp->id;
}
} elsif ($c->stash->{preference_meta}->attribute eq "ncos") {
my $ncos_id_preference = $pref_rs->search({
'attribute.attribute' => 'ncos_id'
@ -406,6 +425,11 @@ sub create_preference_form {
peer_host_id => $c->stash->{server}{id},
peer_host_name => $c->stash->{server}{name},
);
} elsif ($c->stash->{reseller}) {
%log_data = ( %log_data,
type => 'reseller',
reseller_id => $c->stash->{reseller}->id,
);
} elsif ($c->stash->{devmod}) {
%log_data = ( %log_data,
type => 'dev',
@ -614,6 +638,23 @@ sub create_preference_form {
);
$c->response->redirect($base_uri);
return 1;
} elsif ($attribute eq "cdr_export_sclidui_rwrs") {
my $selected_rwrs = $c->stash->{rwr_sets_rs}->find(
$form->field($attribute)->value
);
set_rewrite_id_preference(
c => $c,
rwrs_result => $selected_rwrs,
pref_rs => $pref_rs,
rwrs_pref_attribute => $attribute,
);
NGCP::Panel::Utils::Message::info(
c => $c,
data => \%log_data,
desc => $c->loc('Preference [_1] successfully updated', $attribute),
);
$c->response->redirect($base_uri);
return 1;
} elsif ($attribute eq "ncos" || $attribute eq "adm_ncos" || $attribute eq "adm_cf_ncos") {
my $selected_level = $c->stash->{ncos_levels_rs}->find(
$form->field($attribute)->value
@ -881,13 +922,13 @@ sub set_rewrite_preferences {
my $rwrs_result = $params{rwrs_result};
my $pref_rs = $params{pref_rs};
for my $rules(qw/
for my $dprules(qw/
callee_in_dpid caller_in_dpid
callee_out_dpid caller_out_dpid
callee_lnp_dpid caller_lnp_dpid/) {
my $attribute_id = $c->model('DB')->resultset('voip_preferences')
->find({attribute => "rewrite_$rules"})->id;
->find({attribute => "rewrite_$dprules"})->id;
my $preference = $pref_rs->search({
attribute_id => $attribute_id,
});
@ -895,14 +936,38 @@ sub set_rewrite_preferences {
if(!defined $rwrs_result) {
$preference->first->delete if $preference->first;
} elsif($preference->first) {
$preference->first->update({ value => $rwrs_result->$rules });
$preference->first->update({ value => $rwrs_result->$dprules });
} else {
$preference->create({ value => $rwrs_result->$rules });
$preference->create({ value => $rwrs_result->$dprules });
}
}
}
sub set_rewrite_id_preference {
my %params = @_;
my $c = $params{c};
my $rwrs_result = $params{rwrs_result};
my $pref_rs = $params{pref_rs};
my $rwrs_pref_attribute = $params{rwrs_pref_attribute};
my $attribute_id = $c->model('DB')->resultset('voip_preferences')
->find({attribute => $rwrs_pref_attribute . '_id'})->id;
my $preference = $pref_rs->search({
attribute_id => $attribute_id,
});
if(!defined $rwrs_result) {
$preference->first->delete if $preference->first;
} elsif($preference->first) {
$preference->first->update({ value => $rwrs_result->id });
} else {
$preference->create({ value => $rwrs_result->id });
}
}
sub get_usr_preferences_rs {
my %params = @_;
@ -911,7 +976,7 @@ sub get_usr_preferences_rs {
my $prov_subscriber = $params{prov_subscriber};
my $schema = $params{schema} // $c->model('DB');
my $get_rows = $params{get_rows};
my $pref_rs = $schema->resultset('voip_usr_preferences')->search({
'attribute.usr_pref' => 1,
$attribute ? ( 'attribute.attribute' => (('ARRAY' eq ref $attribute) ? { '-in' => $attribute } : $attribute ) ) : () ,
@ -939,6 +1004,7 @@ sub get_preferences_rs {
'dom' => [qw/voip_dom_preferences dom_pref domain_id/],
'prof' => [qw/voip_prof_preferences prof_pref profile_id/],
'peer' => [qw/voip_peer_preferences peer_pref peer_host_id/],
'reseller' => [qw/reseller_preferences reseller_pref reseller_id/],
'dev' => [qw/voip_dev_preferences dev_pref device_id/],
'devprof' => [qw/voip_devprof_preferences devprof_pref profile_id/],
'fielddev' => [qw/voip_fielddev_preferences fielddev_pref device_id/],
@ -990,6 +1056,12 @@ sub get_preference_rs {
attribute => $attr,
peer_host => $elem,
);
} elsif($type eq "reseller") {
$rs = get_reseller_preference_rs(
c => $c,
attribute => $attr,
reseller => $elem,
);
} elsif($type eq "dev") {
$rs = get_dev_preference_rs(
c => $c,
@ -1165,6 +1237,22 @@ sub get_peer_preference_rs {
});
}
sub get_reseller_preference_rs {
my %params = @_;
my $c = $params{c};
my $attribute = $params{attribute};
my $reseller = $params{reseller};
my $preference = $c->model('DB')->resultset('voip_preferences')->find({
attribute => $attribute, 'reseller_pref' => 1,
});
return unless($preference);
return $preference->reseller_preferences->search_rs({
reseller_id => $reseller->id,
});
}
sub get_dev_preference_rs {
my %params = @_;
@ -1358,7 +1446,7 @@ sub api_preferences_defs{
for my $pref($preferences->all) {
my $fields = { $pref->get_inflated_columns };
# remove internal fields
delete @{$fields}{qw/type attribute expose_to_customer internal peer_pref usr_pref dom_pref contract_pref contract_location_pref prof_pref voip_preference_groups_id id modify_timestamp/};
delete @{$fields}{qw/type attribute expose_to_customer internal peer_pref reseller_pref usr_pref dom_pref contract_pref contract_location_pref prof_pref voip_preference_groups_id id modify_timestamp/};
$fields->{max_occur} = int($fields->{max_occur});
$fields->{read_only} = JSON::Types::bool($fields->{read_only});
if($fields->{data_type} eq "enum") {
@ -1368,12 +1456,12 @@ sub api_preferences_defs{
$fields->{enum_values} = [];
foreach my $enum(@enums) {
my $efields = { $enum->get_inflated_columns };
delete @{$efields}{qw/id preference_id usr_pref prof_pref dom_pref peer_pref contract_pref contract_location_pref/};
delete @{$efields}{qw/id preference_id usr_pref prof_pref dom_pref peer_pref reseller_pref contract_pref contract_location_pref/};
$efields->{default_val} = JSON::Types::bool($efields->{default_val});
push @{ $fields->{enum_values} }, $efields;
}
}
if ($pref->attribute =~ m/^(rewrite_rule_set|ncos|adm_ncos|adm_cf_ncos|emergency_mapping_container|sound_set|contract_sound_set|header_rule_set)$/) {
if ($pref->attribute =~ m/^(cdr_export_sclidui_rwrs|rewrite_rule_set|ncos|adm_ncos|adm_cf_ncos|emergency_mapping_container|sound_set|contract_sound_set|header_rule_set)$/) {
$fields->{data_type} = 'string';
}
$resource->{$pref->attribute} = $fields;
@ -1455,7 +1543,7 @@ sub update_dynamic_preference {
if(defined $enums and ref $enums eq 'ARRAY'){
my $enums_rs = $preference->voip_preferences_enums;
$enums_rs->search_rs({
id => { -not_in => [ map { $_->{id} } @$enums ] },
id => { -not_in => [ map { $_->{id} } @$enums ] },
})->delete;
foreach my $enum (@$enums) {
my $id = delete $enum->{id};
@ -1495,7 +1583,7 @@ sub save_dynamic_preference_relations {
$preference->search_related_rs('voip_preference_relations')->update_or_create({
autoprov_device_id => undef,
reseller_id => $relations->{reseller_id},
});
});
}
}
}

@ -50,7 +50,7 @@
<a href="#" onclick="$.msgbox(
'[% c.loc(r.description.remove('[\[\]]')).squote | html %]',
{
type:'info',
type:'info',
buttons:[
{type:'cancel',value:'Close'}
]
@ -70,6 +70,13 @@
<option [% (r.rwrs_id.defined && r.rwrs_id == set.id) ? 'selected="selected"' : '' %]>[% set.name %]</option>
[% END -%]
</select>
[% ELSIF r.attribute == "cdr_export_sclidui_rwrs" -%]
<select disabled="disabled">
<option>&nbsp;</option>
[% FOR set IN helper.rewrite_rule_sets -%]
<option [% (r.rwrs_id.defined && r.rwrs_id == set.id) ? 'selected="selected"' : '' %]>[% set.name %]</option>
[% END -%]
</select>
[% ELSIF r.attribute == "header_rule_set" -%]
<select disabled="disabled">
<option>&nbsp;</option>
@ -265,4 +272,3 @@
[% END -%]
[% # vim: set tabstop=4 syntax=html expandtab: -%]

@ -3,6 +3,7 @@
<div class="row">
<span>
<a class="btn btn-primary btn-large" href="[% c.uri_for('/back') %]"><i class="icon-arrow-left"></i> [% c.loc('Back') %]</a>
<a class="btn btn-primary btn-large" href="[% c.uri_for_action('/reseller/resellers_preferences_root', [c.req.captures.0]) %]"><i class="icon-list"></i> [% c.loc('Preferences') %]</a>
</span>
</div>
@ -175,14 +176,14 @@
{ name = c.loc('Preferences'), uri = "/domain/'+full.id+'/preferences", class = 'btn-small btn-tertiary', icon = 'icon-list' },
];
END;
PROCESS 'helpers/datatables.tt';
-%]
</div>
</div>
</div>
</div>
<div class="accordion-group">
<div class="accordion-heading">
<a class="accordion-toggle" data-toggle="collapse" data-parent="#reseller_details" href="#collapse_profile">[% c.loc('Billing Profiles') %]</a>
@ -204,18 +205,18 @@
UNLESS c.user.read_only;
helper.dt_buttons = [
{ name = c.loc('Edit'), uri = "/billing/'+full[\"id\"]+'/edit", class = 'btn-small btn-primary', icon = 'icon-edit' },
{ name = c.loc('Edit'), uri = "/billing/'+full[\"id\"]+'/edit", class = 'btn-small btn-primary', icon = 'icon-edit' },
{ name = c.loc('Terminate'), uri = "/billing/'+full[\"id\"]+'/terminate", class = 'btn-small btn-secondary', icon = 'icon-remove', condition => 'full.contract_cnt == "0" && full.package_cnt == "0"' },
];
END;
PROCESS 'helpers/datatables.tt';
-%]
</div>
</div>
</div>
<div class="accordion-group">
<div class="accordion-heading">
<a class="accordion-toggle" data-toggle="collapse" data-parent="#reseller_details" href="#collapse_network">[% c.loc('Billing Networks') %]</a>
@ -241,13 +242,13 @@
{ name = c.loc('Terminate'), uri = "/network/'+full[\"id\"]+'/terminate", class = 'btn-small btn-secondary', icon = 'icon-remove', condition => 'full.contract_cnt == "0" && full.package_cnt == "0"' },
];
END;
PROCESS 'helpers/datatables.tt';
-%]
</div>
</div>
</div>
<div class="accordion-group">
<div class="accordion-heading">
<a class="accordion-toggle" data-toggle="collapse" data-parent="#reseller_details" href="#collapse_package">[% c.loc('Profile Packages') %]</a>
@ -273,13 +274,13 @@
{ name = c.loc('Delete'), uri = "/package/'+full[\"id\"]+'/delete", class = 'btn-small btn-secondary', icon = 'icon-remove', condition => 'full.contract_cnt == "0" && full.voucher_cnt == "0"' },
];
END;
PROCESS 'helpers/datatables.tt';
-%]
</div>
</div>
</div>
</div>
<div class="accordion-group">
<div class="accordion-heading">

@ -0,0 +1,20 @@
[% site_config.title = c.loc('Reseller "[_1]" - Preferences',reseller.name) -%]
[%
helper.messages = messages;
helper.edit_preference = edit_preference;
helper.preference = preference;
helper.preference_meta = preference_meta;
helper.preference_values = preference_values;
helper.pref_groups = pref_groups;
helper.form = form;
helper.base_uri = c.uri_for_action("/reseller/resellers_preferences_root", [c.req.captures.0]);
helper.rewrite_rule_sets = rwr_sets;
helper.top_buttons = [
{ name = c.loc('Back'), uri = c.uri_for(reseller.id, 'details'), icon = 'icon-arrow-left' },
];
PROCESS 'helpers/pref_table.tt';
%]

@ -10,18 +10,18 @@ use File::Find::Rule;
use File::Basename;
use Clone qw/clone/;
my($opt,$report,$api_config,$api_info,$config,$test_machine,$fake_data) =
my($opt,$report,$api_config,$api_info,$config,$test_machine,$fake_data) =
({},{},{},{} );
$opt = {
'collections' => {'billingzones' => 1,},
'collections' => {},
'ignore_existence' => 1,
'test_groups' => {
get2put => 1,
patch2get => 1,
post => 1,
get => 1,
'test_groups' => {
get2put => 1,
patch2get => 1,
post => 1,
get => 1,
bundle => 1,
},#post,get2put,get2patch,bundle
#'test_groups' => { post => 1 },#post,get2put,get2patch,bundle
@ -75,7 +75,7 @@ sub run{
if($opt->{test_groups}->{post}){
if($test_machine->{methods}->{collection}->{allowed}->{POST}){
print "collection: $collection: post;\n";
#load date
#load date
if($fake_data->{data}->{$collection}->{data}){
my $data = $fake_data->{data}->{$collection}->{data};
$fake_data->process($collection);
@ -111,7 +111,7 @@ sub run{
};
$test_machine->check_get2put( {
data_cb => $fake_data->{data}->{$collection}->{data_callbacks}->{get2put},
}, {
}, {
uri => $item->{location} ,
}, $params );
}
@ -133,7 +133,7 @@ sub run{
};
$test_machine->check_patch2get( {
data_cb => $fake_data->{data}->{$collection}->{data_callbacks}->{patch2get},
}, {
}, {
uri => $item->{location} ,
}, $params );
}
@ -177,17 +177,18 @@ sub get_opt{#get $opt
}
sub get_api_config{#get api_config
my $api_config = $test_machine->init_catalyst_config;
my $api_config = $test_machine->init_catalyst_config;
$api_info = $api_config->{meta}->{'collections'};
}
sub init_config{#init config
sub init_config{#init config
my %test_exclude = (
'metaconfigdefs' => 1,
'subscriberpreferencedefs' => 1,
'customerpreferencedefs' => 1,
'domainpreferencedefs' => 1,
'peeringserverpreferencedefs' => 1,
'resellerpreferencedefs' => 1,
'profilepreferencedefs' => 1,
'pbxdevicepreferencedefs' => 1,
'pbxdeviceprofilepreferencedefs' => 1,
@ -196,6 +197,7 @@ sub init_config{#init config
'customerpreferences' => 1,
'domainpreferences' => 1,
'peeringserverpreferences' => 1,
'resellerpreferences' => 1,
'profilepreferences' => 1,
'pbxdevicepreferences' => 1,
'pbxdeviceprofilepreferences' => 1,
@ -278,7 +280,7 @@ sub collection4testing{
#method excluded
$run_collection_test = 0;
} else {
$run_collection_test = 1;
$run_collection_test = 1;
}
} elsif (! ref $config->{tests_exclude}->{$collection}) {
$run_collection_test = 0 ;
@ -318,5 +320,5 @@ sub init_report{
#$test_machine->DATA_ITEM_STORE($item_post->{content});
#$test_machine->form_data_item();
##$test_machine->check_create_correct( 1, undef, );
# vim: set tabstop=4 expandtab:

@ -9,9 +9,9 @@ my $uri = $ENV{CATALYST_SERVER} || ('https://'.hostfqdn.':4443');
my ($ua, $req, $res);
#to eliminate 'Too many header lines (limit is 128) at /usr/share/perl5/Net/HTTP/Methods.pm line 383.
#on the curl -i -k --user administrator:administrator -X OPTIONS -H 'Content-Type: application/json' 'https://127.0.0.1:1443/api/?foo=bar&bla'
use LWP::Protocol::http;
#to eliminate 'Too many header lines (limit is 128) at /usr/share/perl5/Net/HTTP/Methods.pm line 383.
#on the curl -i -k --user administrator:administrator -X OPTIONS -H 'Content-Type: application/json' 'https://127.0.0.1:1443/api/?foo=bar&bla'
use LWP::Protocol::http;
push @LWP::Protocol::http::EXTRA_SOCK_OPTS, MaxHeaderLines => 256;
use Test::Collection;
@ -128,6 +128,8 @@ $ua = Test::Collection->new()->ua();
peeringserverpreferences => 1,
peeringservers => 1,
phonebookentries => 1,
resellerpreferencedefs => 1,
resellerpreferences => 1,
preferencesmetaentries => 1,
profilepackages => 1,
profilepreferencedefs => 1,

Loading…
Cancel
Save