diff --git a/lib/NGCP/Panel/Controller/Billing.pm b/lib/NGCP/Panel/Controller/Billing.pm index c5c8e0c328..b6ffa35676 100644 --- a/lib/NGCP/Panel/Controller/Billing.pm +++ b/lib/NGCP/Panel/Controller/Billing.pm @@ -70,6 +70,7 @@ sub edit :Chained('base') :PathPart('edit') { } $c->stash(form => $form); + $c->stash(edit_flag => 1); } sub create :Chained('list') :PathPart('create') :Args(0) { @@ -113,8 +114,6 @@ sub fees_list :Chained('base') :PathPart('fees') :CaptureArgs(0) { $c->stash(has_edit => 1); $c->stash(has_preferences => 0); $c->stash(template => 'billing/fees.tt'); - - } sub fees :Chained('fees_list') :PathPart('') :Args(0) { @@ -123,8 +122,25 @@ sub fees :Chained('fees_list') :PathPart('') :Args(0) { } sub fees_base :Chained('fees_list') :PathPart('') :CaptureArgs(1) { - my ($self, $c) = @_; + my ($self, $c, $fee_id) = @_; + unless($fee_id && $fee_id =~ /^\d+$/) { + $c->flash(messages => [{type => 'error', text => 'Invalid billing fee id detected!'}]); + $c->response->redirect($c->uri_for($c->stash->{profile}->{id}, 'fees')); + return; + } + + my $res = $c->stash->{'profile_result'}->billing_fees + ->search(undef, {join => 'billing_zone',}) + ->find($fee_id); + unless(defined($res)) { + $c->flash(messages => [{type => 'error', text => 'Billing Fee does not exist!'}]); + $c->response->redirect($c->uri_for($c->stash->{profile}->{id}, 'fees')); + return; + } + $c->stash(fee => {$res->get_columns}); #get_columns should not be used + $c->stash->{fee}->{'billing_zone.id'} = $res->billing_zone->id; + $c->stash(fee_result => $res); } sub fees_ajax :Chained('fees_list') :PathPart('ajax') :Args(0) { @@ -158,7 +174,7 @@ sub fees_create :Chained('fees_list') :PathPart('create') :Args(0) { if($form->validated) { $c->stash->{'profile_result'}->billing_fees ->create( - $form->fif() + $form->custom_get_values() ); $c->flash(messages => [{type => 'success', text => 'Billing Fee successfully created!'}]); $c->response->redirect($c->uri_for($c->stash->{profile}->{id}, 'fees')); @@ -171,13 +187,57 @@ sub fees_create :Chained('fees_list') :PathPart('create') :Args(0) { } sub fees_edit :Chained('fees_base') :PathPart('edit') :Args(0) { + my ($self, $c) = @_; + + my $posted = ($c->request->method eq 'POST'); + my $form = NGCP::Panel::Form::BillingFee->new; + $form->field('billing_zone')->field('id')->ajax_src('../../zones/ajax'); + $form->process( + posted => 1, + params => $posted ? $c->request->params : $c->stash->{fee}, + action => $c->uri_for($c->stash->{profile}->{id},'fees',$c->stash->{fee}->{id}, 'edit'), + ); + if($posted && $form->validated) { + $c->stash->{'fee_result'} + ->update($form->fif() ); + $c->flash(messages => [{type => 'success', text => 'Billing Profile successfully changed!'}]); + $c->response->redirect($c->uri_for($c->stash->{profile}->{id}, 'fees')); + return; + } + + $c->stash(edit_fee_flag => 1); + $c->stash(form => $form); + $c->stash(close_target => $c->uri_for($c->stash->{profile}->{id}, 'fees')); +} +sub fees_delete :Chained('fees_base') :PathPart('delete') :Args(0) { + my ($self, $c) = @_; + + unless ( defined($c->stash->{'fee_result'}) ) { + $c->flash(messages => [{type => 'error', text => 'Billing fee not found!'}]); + return; + } + $c->stash->{'fee_result'}->delete; + $c->flash(messages => [{type => 'success', text => 'Billing profile successfully deleted!'}]); + $c->response->redirect($c->uri_for($c->stash->{profile}->{id}, 'fees')); } -sub fees_delete :Chained('fees_base') :PathPart('delete') :Args(0) { +sub zones_list :Chained('base') :PathPart('zones') :CaptureArgs(0) { + + +} +sub zones_ajax :Chained('zones_list') :PathPart('ajax') :Args(0) { + my ($self, $c) = @_; + my $resultset = $c->stash->{'profile_result'}->billing_zones; + + $c->forward( "/ajax_process_resultset", [$resultset, + ["id", "zone", "detail",], + [1,2]]); + + $c->detach( $c->view("JSON") ); } __PACKAGE__->meta->make_immutable; diff --git a/lib/NGCP/Panel/Controller/Contact.pm b/lib/NGCP/Panel/Controller/Contact.pm index db2f938704..d9cdce16a7 100644 --- a/lib/NGCP/Panel/Controller/Contact.pm +++ b/lib/NGCP/Panel/Controller/Contact.pm @@ -107,6 +107,7 @@ sub edit :Chained('base') :PathPart('edit') :Args(0) { } $c->stash(form => $form); + $c->stash(edit_flag => 1); } sub delete :Chained('base') :PathPart('delete') :Args(0) { diff --git a/lib/NGCP/Panel/Controller/Contract.pm b/lib/NGCP/Panel/Controller/Contract.pm index bac5f7ded1..4d061e10d9 100644 --- a/lib/NGCP/Panel/Controller/Contract.pm +++ b/lib/NGCP/Panel/Controller/Contract.pm @@ -111,6 +111,7 @@ sub edit :Chained('base') :PathPart('edit') :Args(0) { } $c->stash(form => $form); + $c->stash(edit_flag => 1); } sub delete :Chained('base') :PathPart('delete') :Args(0) { diff --git a/lib/NGCP/Panel/Controller/Domain.pm b/lib/NGCP/Panel/Controller/Domain.pm index 6c19d92699..db03ff5943 100644 --- a/lib/NGCP/Panel/Controller/Domain.pm +++ b/lib/NGCP/Panel/Controller/Domain.pm @@ -104,6 +104,7 @@ sub edit :Chained('base') :PathPart('edit') :Args(0) { $c->stash(close_target => $c->uri_for()); $c->stash(form => $form); + $c->stash(edit_flag => 1); } sub delete :Chained('base') :PathPart('delete') :Args(0) { diff --git a/lib/NGCP/Panel/Controller/Reseller.pm b/lib/NGCP/Panel/Controller/Reseller.pm index 4bb70b2654..23c4054eea 100644 --- a/lib/NGCP/Panel/Controller/Reseller.pm +++ b/lib/NGCP/Panel/Controller/Reseller.pm @@ -118,6 +118,7 @@ sub edit :Chained('base') :PathPart('edit') :Args(0) { $c->stash(close_target => $c->uri_for()); $c->stash(form => $form); + $c->stash(edit_flag => 1); } sub delete :Chained('base') :PathPart('delete') :Args(0) { diff --git a/lib/NGCP/Panel/Field/BillingZone.pm b/lib/NGCP/Panel/Field/BillingZone.pm new file mode 100644 index 0000000000..85db1b5b5d --- /dev/null +++ b/lib/NGCP/Panel/Field/BillingZone.pm @@ -0,0 +1,33 @@ +package NGCP::Panel::Field::BillingZone; +use HTML::FormHandler::Moose; +extends 'HTML::FormHandler::Field::Compound'; + +has_field 'id' => ( + type => '+NGCP::Panel::Field::DataTable', + label => 'Zone', + do_label => 0, + do_wrapper => 0, + required => 1, + template => 'share/templates/helpers/datatables_field.tt', + ajax_src => '../zones/ajax', # /billing//zones/ajax + table_titles => ['#', 'Zone', 'Zone Detail'], + table_fields => ['id', 'zone', 'detail'], +); + +has_field 'create' => ( + type => 'Button', + label => 'or', + value => 'Create Zone', + element_class => [qw/btn btn-tertiary/], +); + +#sub validate { +# my $field = shift; +# my $value = $field->value; +# $field->value($field->value->{'id'}); +# return $field; +#} + +1; + +# vim: set tabstop=4 expandtab: diff --git a/lib/NGCP/Panel/Form/BillingFee.pm b/lib/NGCP/Panel/Form/BillingFee.pm index 4bbee6379b..f8538fe8c2 100644 --- a/lib/NGCP/Panel/Form/BillingFee.pm +++ b/lib/NGCP/Panel/Form/BillingFee.pm @@ -5,6 +5,7 @@ extends 'HTML::FormHandler'; use Moose::Util::TypeConstraints; use HTML::FormHandler::Widget::Block::Bootstrap; +use NGCP::Panel::Field::BillingZone; has '+widget_wrapper' => ( default => 'Bootstrap' ); sub build_render_list {[qw/fields actions/]} @@ -33,6 +34,12 @@ has_field 'direction' => ( ], ); +has_field 'billing_zone' => ( + type => '+NGCP::Panel::Field::BillingZone', + label => 'Zone', + not_nullable => 1, +); + has_field 'onpeak_init_rate' => ( type => 'Float', ); @@ -79,7 +86,7 @@ has_field 'save' => ( has_block 'fields' => ( tag => 'div', class => [qw/modal-body/], - render_list => [qw/id source destination direction + render_list => [qw/id source destination direction billing_zone onpeak_init_rate onpeak_init_interval onpeak_follow_rate onpeak_follow_interval offpeak_init_rate offpeak_init_interval offpeak_follow_rate offpeak_follow_interval use_free_time/], @@ -91,5 +98,15 @@ has_block 'actions' => ( render_list => [qw/save/], ); +sub custom_get_values { + my ($self) = @_; + #TODO: this has sideeffects: the value remains changed, is this bad? + my $hashvalues = $self->value; + foreach my $val(values %$hashvalues) { + $val = '' unless defined($val); + } + return $hashvalues; +} + 1; # vim: set tabstop=4 expandtab: diff --git a/share/templates/billing/fees.tt b/share/templates/billing/fees.tt index 4bd13bb8d7..ac8af70370 100644 --- a/share/templates/billing/fees.tt +++ b/share/templates/billing/fees.tt @@ -7,6 +7,7 @@ helper.close_target = close_target; helper.create_flag = create_flag; + helper.edit_flag = edit_fee_flag; helper.form_object = form; helper.has_edit = has_edit; helper.has_preferences = has_preferences; diff --git a/share/templates/billing/list.tt b/share/templates/billing/list.tt index d87304d96a..c8b1396de9 100644 --- a/share/templates/billing/list.tt +++ b/share/templates/billing/list.tt @@ -7,7 +7,7 @@ helper.close_target = close_target; helper.create_flag = create_flag; - helper.edit_object = profile; + helper.edit_flag = edit_flag; helper.form_object = form; helper.has_edit = has_edit; helper.has_preferences = has_preferences; diff --git a/share/templates/contact/list.tt b/share/templates/contact/list.tt index 94ec2f0dc0..4b873b6416 100644 --- a/share/templates/contact/list.tt +++ b/share/templates/contact/list.tt @@ -8,7 +8,7 @@ helper.close_target = close_target; helper.create_flag = create_flag; - helper.edit_object = contact; + helper.edit_flag = edit_flag; helper.form_object = form; helper.ajax_uri = c.uri_for( c.controller.action_for('ajax') ); helper.base_uri = c.uri_for( c.controller.action_for("") ); diff --git a/share/templates/contract/list.tt b/share/templates/contract/list.tt index 48f3ee5e8d..d365d7282b 100644 --- a/share/templates/contract/list.tt +++ b/share/templates/contract/list.tt @@ -8,7 +8,7 @@ helper.close_target = close_target; helper.create_flag = create_flag; - helper.edit_object = contract; + helper.edit_flag = edit_flag; helper.form_object = form; helper.ajax_uri = c.uri_for( c.controller.action_for('ajax') ); helper.base_uri = c.uri_for( c.controller.action_for("") ); diff --git a/share/templates/domain/list.tt b/share/templates/domain/list.tt index 17a99fea11..d46b49a598 100644 --- a/share/templates/domain/list.tt +++ b/share/templates/domain/list.tt @@ -8,7 +8,7 @@ helper.close_target = close_target; helper.create_flag = create_flag; - helper.edit_object = domain; + helper.edit_flag = edit_flag; helper.form_object = form; helper.has_edit = has_edit; helper.has_preferences = has_preferences; diff --git a/share/templates/helpers/datatables.tt b/share/templates/helpers/datatables.tt index 52502fb8cc..a9c7b4b272 100644 --- a/share/templates/helpers/datatables.tt +++ b/share/templates/helpers/datatables.tt @@ -229,7 +229,7 @@ $(document).ready(function() { -[% IF helper.edit_object || helper.create_flag == 1 -%] +[% IF helper.edit_flag || helper.create_flag == 1 -%]