MT#15399 allow editing profiles, networks, packages

Change-Id: Iaa989ee18d10a3ea7e871ae99d78d6a2e1e9d40a
changes/07/2907/4
Rene Krenn 10 years ago
parent aecc110bcf
commit 8545089145

@ -136,11 +136,13 @@ sub process_edit :Private {
$params = $params->merge($c->session->{created_objects});
if( $duplicate ) {
NGCP::Panel::Utils::Billing::get_billing_profile_uniq_params( params => $params );
}
if($c->user->is_superuser) {
$form = NGCP::Panel::Form::BillingProfile::Admin->new;
if($c->user->is_superuser) {
$form = NGCP::Panel::Form::BillingProfile::Admin->new(ctx => $c);
} else {
$form = NGCP::Panel::Form::BillingProfile::Reseller->new(ctx => $c);
}
} else {
$form = NGCP::Panel::Form::BillingProfile::Reseller->new;
$form = NGCP::Panel::Form::BillingProfile::Reseller->new(ctx => $c);
}
$form->process(
posted => $posted,
@ -169,13 +171,6 @@ sub process_edit :Private {
my $schema = $c->model('DB');
$schema->txn_do(sub {
unless($c->stash->{profile_result}->get_column('contract_cnt') == 0) {
die('Cannnot modify billing profile that is still used in profile mappings');
}
unless($c->stash->{profile_result}->get_column('package_cnt') == 0) {
die('Cannnot modify billing profile that is still used in profile packages');
}
$c->stash->{profile_result}->update($form->values);
NGCP::Panel::Utils::Billing::switch_prepaid(c => $c,

@ -164,7 +164,7 @@ sub edit :Chained('base') :PathPart('edit') :Args(0) {
my ($self, $c) = @_;
my $posted = ($c->request->method eq 'POST');
my $form = NGCP::Panel::Form::BillingNetwork::Reseller->new;
my $form = NGCP::Panel::Form::BillingNetwork::Reseller->new(ctx => $c);
my $params = $c->stash->{network};
$params->{blocks} = $c->stash->{network_blocks};
$params->{reseller}{id} = delete $params->{reseller_id};
@ -179,13 +179,6 @@ sub edit :Chained('base') :PathPart('edit') :Args(0) {
try {
$c->model('DB')->schema->txn_do( sub {
unless($c->stash->{network_result}->get_column('contract_cnt') == 0) {
die('Cannnot modify billing network that is still used in profile mappings');
}
unless($c->stash->{network_result}->get_column('package_cnt') == 0) {
die('Cannnot modify billing network that is still used in profile packages');
}
$c->stash->{'network_result'}->update({
name => $form->values->{name},
description => $form->values->{description},
@ -218,39 +211,6 @@ sub edit :Chained('base') :PathPart('edit') :Args(0) {
);
}
#sub delete :Chained('base') :PathPart('delete') :Args(0) {
# my ($self, $c) = @_;
#
# my $params = $c->stash->{network};
# try {
# $c->model('DB')->schema->txn_do( sub {
# if($c->user->is_superuser) {
# $c->stash->{'network_result'}->delete;
# } elsif ($c->user->reseller_id == $params->{reseller_id}) {
# $c->stash->{'network_result'}->delete;
# } else {
# die( ["Billing network belongs to other reseller", "showdetails"] );
# }
#
# });
# } catch ($e) {
# NGCP::Panel::Utils::Message->error(
# c => $c,
# error => $e,
# desc => $c->loc('Failed to delete billing network'),
# );
# $c->response->redirect($c->uri_for());
# return;
# }
#
# NGCP::Panel::Utils::Message->info(
# c => $c,
# data => $params,
# desc => $c->loc('Billing network successfully deleted'),
# );
# $c->response->redirect($c->uri_for());
#}
sub terminate :Chained('base') :PathPart('terminate') :Args(0) {
my ($self, $c) = @_;
my $network = $c->stash->{network_result};

@ -209,9 +209,7 @@ sub edit :Chained('base') :PathPart('edit') :Args(0) {
push(@mappings_to_create,@{delete $form->values->{underrun_profiles}});
push(@mappings_to_create,@{delete $form->values->{topup_profiles}});
$c->model('DB')->schema->txn_do( sub {
unless($c->stash->{'package_result'}->get_column('contract_cnt') == 0) {
die('Cannnot modify profile package that is still assigned to contracts');
}
my $profile_package = $c->stash->{'package_result'}->update($form->values);
$profile_package->profiles->delete;
foreach my $mapping (@mappings_to_create) {

@ -158,5 +158,27 @@ sub _inflate_blocks {
return (scalar @blocks == 0 ? undef : \@blocks);
}
sub validate {
my ($self) = @_;
my $c = $self->ctx;
return unless $c;
my $resource = Storable::dclone($self->values);
if (defined $resource->{reseller}) {
$resource->{reseller_id} = $resource->{reseller}{id};
delete $resource->{reseller};
} else {
$resource->{reseller_id} = ($c->user->is_superuser ? undef : $c->user->reseller_id);
}
NGCP::Panel::Utils::BillingNetworks::check_network_update_item($c,$resource,$c->stash->{network_result},sub {
my ($err,@fields) = @_;
foreach my $field (@fields) {
$self->field($field)->add_error($err);
}
});
}
1;
# vim: set tabstop=4 expandtab:

@ -6,6 +6,9 @@ use Moose::Util::TypeConstraints;
use HTML::FormHandler::Widget::Block::Bootstrap;
use Storable qw();
use NGCP::Panel::Utils::Billing qw();
has '+widget_wrapper' => ( default => 'Bootstrap' );
has_field 'submitid' => ( type => 'Hidden' );
sub build_render_list {[qw/submitid fields actions/]}
@ -200,5 +203,27 @@ sub validate_handle {
}
}
sub validate {
my ($self) = @_;
my $c = $self->ctx;
return unless $c;
my $resource = Storable::dclone($self->values);
if (defined $resource->{reseller}) {
$resource->{reseller_id} = $resource->{reseller}{id};
delete $resource->{reseller};
} else {
$resource->{reseller_id} = ($c->user->is_superuser ? undef : $c->user->reseller_id);
}
NGCP::Panel::Utils::Billing::check_profile_update_item($c,$resource,$c->stash->{profile_result},sub {
my ($err,@fields) = @_;
foreach my $field (@fields) {
$self->field($field)->add_error($err);
}
});
}
1
# vim: set tabstop=4 expandtab:

@ -3,6 +3,7 @@ use HTML::FormHandler::Moose;
use HTML::FormHandler::Widget::Block::Bootstrap;
use Moose::Util::TypeConstraints;
use Storable qw();
use NGCP::Panel::Utils::ProfilePackages qw();
extends 'HTML::FormHandler';
with 'NGCP::Panel::Render::RepeatableJs';
@ -405,6 +406,13 @@ sub validate {
}
});
NGCP::Panel::Utils::ProfilePackages::check_package_update_item($c,$resource,$c->stash->{'package_result'},sub {
my ($err,@fields) = @_;
foreach my $field (@fields) {
$self->field($field)->add_error($err);
}
});
my $mappings_to_create = [];
NGCP::Panel::Utils::ProfilePackages::prepare_profile_package(
c => $c,

@ -96,11 +96,6 @@ sub item_by_id {
sub update_item {
my ($self, $c, $item, $old_resource, $resource, $form) = @_;
if ($item->status eq 'terminated') {
$self->error($c, HTTP_UNPROCESSABLE_ENTITY, 'Billing network is already terminated and cannot be changed.');
return;
}
delete $resource->{id};
my $schema = $c->model('DB');
@ -119,18 +114,10 @@ sub update_item {
$self->error($c, HTTP_UNPROCESSABLE_ENTITY, $err);
});
#if(exists $resource->{status} && $resource->{status} eq 'terminated') {
unless($item->get_column('contract_cnt') == 0) {
$self->error($c, HTTP_UNPROCESSABLE_ENTITY,
"Cannnot modify or terminate billing_network that is still used in profile mappings of contracts)");
return;
}
unless($item->get_column('package_cnt') == 0) {
$self->error($c, HTTP_UNPROCESSABLE_ENTITY,
"Cannnot modify or terminate billing_network that is still used in profile sets of profile packages)");
return;
}
#}
return unless NGCP::Panel::Utils::BillingNetworks::check_network_update_item($c,$resource,$item,sub {
my ($err) = @_;
$self->error($c, HTTP_UNPROCESSABLE_ENTITY, $err);
});
return unless $self->prepare_blocks_resource($c,$resource);
my $blocks = delete $resource->{blocks};

@ -95,10 +95,10 @@ sub profile_by_id {
sub update_profile {
my ($self, $c, $profile, $old_resource, $resource, $form) = @_;
if ($profile->status eq 'terminated') {
$self->error($c, HTTP_UNPROCESSABLE_ENTITY, 'Billing profile is already terminated and cannot be changed.');
return;
}
#if ($profile->status eq 'terminated') {
# $self->error($c, HTTP_UNPROCESSABLE_ENTITY, 'Billing profile is already terminated and cannot be changed.');
# return;
#}
$form //= $self->get_form($c);
# TODO: for some reason, formhandler lets missing reseller slip thru
@ -114,18 +114,10 @@ sub update_profile {
$self->error($c, HTTP_UNPROCESSABLE_ENTITY, $err);
});
#if(exists $resource->{status} && $resource->{status} eq 'terminated') {
unless($profile->get_column('contract_cnt') == 0) {
$self->error($c, HTTP_UNPROCESSABLE_ENTITY,
"Cannnot modify or terminate billing_profile that is still used in profile mappings of contracts");
return;
}
unless($profile->get_column('package_cnt') == 0) {
$self->error($c, HTTP_UNPROCESSABLE_ENTITY,
"Cannnot modify or terminate billing_profile that is still used in profile sets of profile packages");
return;
}
#}
return unless NGCP::Panel::Utils::Billing::check_profile_update_item($c,$resource,$profile,sub {
my ($err) = @_;
$self->error($c, HTTP_UNPROCESSABLE_ENTITY, $err);
});
my $old_prepaid = $profile->prepaid;

@ -140,11 +140,10 @@ sub update_item {
$self->error($c, HTTP_UNPROCESSABLE_ENTITY, $err);
});
unless($item->get_column('contract_cnt') == 0) {
$self->error($c, HTTP_UNPROCESSABLE_ENTITY,
"Cannnot modify or terminate profile_package that is still assigned to contracts");
return;
}
return unless NGCP::Panel::Utils::ProfilePackages::check_package_update_item($c,$resource,$item,sub {
my ($err) = @_;
$self->error($c, HTTP_UNPROCESSABLE_ENTITY, $err);
});
my $mappings_to_create = [];
return unless NGCP::Panel::Utils::ProfilePackages::prepare_profile_package(

@ -7,6 +7,39 @@ use IO::String;
use NGCP::Schema;
use NGCP::Panel::Utils::Preferences qw();
sub check_profile_update_item {
my ($c,$new_resource,$old_item,$err_code) = @_;
return 1 unless $old_item;
if (!defined $err_code || ref $err_code ne 'CODE') {
$err_code = sub { return 0; };
}
if ($old_item->status eq 'terminated') {
return 0 unless &{$err_code}("Billing profile is already terminated and cannot be changed.",'status');
}
my $contract_cnt = $old_item->get_column('contract_cnt');
#my $package_cnt = $old_item->get_column('package_cnt');
if (($contract_cnt > 0)
&& defined $new_resource->{interval_charge} && $old_item->interval_charge != $new_resource->{interval_charge}) {
return 0 unless &{$err_code}("Interval charge cannot be changed (profile linked to $contract_cnt contracts).",'interval_charge');
}
if (($contract_cnt > 0)
&& defined $new_resource->{interval_free_time} && $old_item->interval_free_time != $new_resource->{interval_free_time}) {
return 0 unless &{$err_code}("Interval free time cannot be changed (profile linked to $contract_cnt contracts).",'interval_free_time');
}
if (($contract_cnt > 0)
&& defined $new_resource->{interval_free_cash} && $old_item->interval_free_cash != $new_resource->{interval_free_cash}) {
return 0 unless &{$err_code}("Interval free cash cannot be changed (profile linked to $contract_cnt contracts).",'interval_free_cash');
}
return 1;
}
sub process_billing_fees{
my(%params) = @_;
my ($c,$data,$profile,$schema) = @params{qw/c data profile schema/};

@ -11,6 +11,26 @@ use NGCP::Panel::Utils::IntervalTree::Simple;
use constant _CHECK_BLOCK_OVERLAPS => 1;
sub check_network_update_item {
my ($c,$new_resource,$old_item,$err_code) = @_;
return 1 unless $old_item;
if (!defined $err_code || ref $err_code ne 'CODE') {
$err_code = sub { return 0; };
}
if ($old_item->status eq 'terminated') {
return 0 unless &{$err_code}("Billing network is already terminated and cannot be changed.",'status');
}
#my $contract_cnt = $old_item->get_column('contract_cnt');
#my $package_cnt = $old_item->get_column('package_cnt');
return 1;
}
sub set_blocks_from_to {
my ($blocks,$err_code) = @_;
my $intersecter = (_CHECK_BLOCK_OVERLAPS ? NGCP::Panel::Utils::IntervalTree::Simple->new() : undef);

@ -1097,6 +1097,35 @@ sub check_profiles {
return 1;
}
sub check_package_update_item {
my ($c,$new_resource,$old_item,$err_code) = @_;
return 1 unless $old_item;
if (!defined $err_code || ref $err_code ne 'CODE') {
$err_code = sub { return 0; };
}
my $contract_cnt = $old_item->get_column('contract_cnt');
#my $voucher_cnt = $old_item->get_column('voucher_cnt');
if (($contract_cnt > 0)
&& defined $new_resource->{balance_interval_unit} && $old_item->balance_interval_unit ne $new_resource->{balance_interval_unit}) {
return 0 unless &{$err_code}("Balance interval unit cannot be changed (package linked to $contract_cnt contracts).",'balance_interval');
}
if (($contract_cnt > 0)
&& defined $new_resource->{balance_interval_value} && $old_item->balance_interval_value != $new_resource->{balance_interval_value}) {
return 0 unless &{$err_code}("Balance interval value cannot be changed (package linked to $contract_cnt contracts).",'balance_interval');
}
if (($contract_cnt > 0)
&& defined $new_resource->{balance_interval_start_mode} && $old_item->balance_interval_start_mode ne $new_resource->{balance_interval_start_mode}) {
return 0 unless &{$err_code}("Balance interval start mode cannot be changed (package linked to $contract_cnt contracts).",'balance_interval_start_mode');
}
return 1;
}
sub prepare_profile_package {
my (%params) = @_;

Loading…
Cancel
Save