Align domain handling to new DT mechanism.

While we're at it, show reseller domains in reseller details.
agranig/1_0_subfix
Andreas Granig 13 years ago
parent b7840b05c1
commit 01b3856ee7

@ -4,7 +4,8 @@ use Sipwise::Base;
BEGIN { extends 'Catalyst::Controller'; }
use NGCP::Panel::Form::Domain;
use NGCP::Panel::Form::Domain::Reseller;
use NGCP::Panel::Form::Domain::Admin;
use NGCP::Panel::Utils::Navigation;
sub auto :Does(ACL) :ACLDetachTo('/denied_page') :AllowedRole(admin) :AllowedRole(reseller) {
@ -20,6 +21,12 @@ sub dom_list :Chained('/') :PathPart('domain') :CaptureArgs(0) {
my $dispatch_to = '_dom_resultset_' . $c->user->auth_realm;
my $dom_rs = $self->$dispatch_to($c);
$c->stash->{domain_dt_columns} = NGCP::Panel::Utils::Datatables::set_columns($c, [
{ name => 'id', search => 1, title => '#' },
{ name => 'domain', search => 1, title => 'Domain' },
{ name => 'domain_resellers.reseller.name', search => 1, title => 'Reseller' },
]);
$c->stash(dom_rs => $dom_rs,
template => 'domain/list.tt');
}
@ -46,45 +53,51 @@ sub root :Chained('dom_list') :PathPart('') :Args(0) {
sub create :Chained('dom_list') :PathPart('create') :Args(0) {
my ($self, $c) = @_;
my $form = NGCP::Panel::Form::Domain->new;
my $posted = ($c->request->method eq 'POST');
my $form;
if($c->user->is_superuser) {
$form = NGCP::Panel::Form::Domain::Admin->new;
} else {
$form = NGCP::Panel::Form::Domain::Reseller->new;
}
my $params = {};
$params = $params->merge($c->session->{created_objects});
$form->process(
posted => ($c->request->method eq 'POST'),
posted => $posted,
params => $c->request->params,
action => $c->uri_for('create'),
item => $params,
);
if($form->validated) {
if($posted && $form->validated) {
try {
$c->model('DB')->schema->txn_do( sub {
$c->model('DB')->resultset('voip_domains')
->create({domain => $form->value->{domain}});
my $new_dom = $c->stash->{dom_rs}
->create({domain => $form->value->{domain}});
my $reseller_id = $c->user->is_superuser ? $form->values->{reseller}{id} :
$c->user->reseller_id;
if( $c->user->auth_realm eq 'reseller' ) {
my $reseller = $c->model('DB')->resultset('admins')
->find($c->user->id)->reseller;
$new_dom->create_related('domain_resellers', {
reseller => $reseller
$new_dom->create_related('domain_resellers', {
reseller_id => $reseller_id
});
}
delete $c->session->{created_objects}->{reseller};
});
} catch ($e) {
$c->flash(messages => [{type => 'error', text => 'Creation of Domain failed!'}]);
$c->log->error("Create failed: $e");
$c->response->redirect($c->uri_for());
return;
$c->flash(messages => [{type => 'error', text => 'Failed to create domain'}]);
$c->log->error("failed to create domain: $e");
NGCP::Panel::Utils::Navigation::back_or($c, $c->uri_for('/domain'));
}
$self->_sip_domain_reload;
$c->flash(messages => [{type => 'success', text => 'Domain successfully created!'}]);
$c->response->redirect($c->uri_for());
return;
$c->flash(messages => [{type => 'success', text => 'Domain successfully created'}]);
NGCP::Panel::Utils::Navigation::back_or($c, $c->uri_for('/domain'));
}
$c->stash(close_target => $c->uri_for());
$c->stash(create_flag => 1);
$c->stash(form => $form);
$c->stash(
close_target => $c->uri_for,
create_flag => 1,
form => $form
);
}
sub base :Chained('/domain/dom_list') :PathPart('') :CaptureArgs(1) {
@ -178,10 +191,7 @@ sub ajax :Chained('dom_list') :PathPart('ajax') :Args(0) {
my ($self, $c) = @_;
my $resultset = $c->stash->{dom_rs};
$c->forward( "/ajax_process_resultset", [$resultset,
["id", "domain"],
["domain"]]);
NGCP::Panel::Utils::Datatables::process($c, $resultset, $c->stash->{domain_dt_columns});
$c->detach( $c->view("JSON") );
}

@ -134,6 +134,11 @@ sub base :Chained('list_reseller') :PathPart('') :CaptureArgs(1) {
{ name => "contact.email", search => 1, title => "Contact Email" },
{ name => "status", search => 1, title => "Status" },
]);
$c->stash->{domain_dt_columns} = NGCP::Panel::Utils::Datatables::set_columns($c, [
{ name => "id", search => 1, title => "#" },
{ name => "domain", search => 1, title => "Domain" },
{ name => "domain_resellers.reseller.name", search => 1, title => "Reseller" },
]);
$c->stash(reseller => $c->stash->{resellers}->search_rs({ id => $reseller_id }));
}
@ -259,6 +264,9 @@ sub terminate :Chained('base') :PathPart('terminate') :Args(0) {
c => $c,
contract => $contract,
);
for my $admin($reseller->admins->all) {
$admin->delete;
}
}
});
$c->flash(messages => [{type => 'success', text => 'Successfully terminated reseller'}]);

@ -0,0 +1,19 @@
package NGCP::Panel::Form::Domain::Admin;
use HTML::FormHandler::Moose;
extends 'NGCP::Panel::Form::Domain::Reseller';
use Moose::Util::TypeConstraints;
has_field 'reseller' => (
type => '+NGCP::Panel::Field::Reseller',
not_nullable => 1,
);
has_block 'fields' => (
tag => 'div',
class => [qw/modal-body/],
render_list => [qw/id reseller domain/],
);
1;
# vim: set tabstop=4 expandtab:

@ -1,4 +1,4 @@
package NGCP::Panel::Form::Domain;
package NGCP::Panel::Form::Domain::Reseller;
use HTML::FormHandler::Moose;
extends 'HTML::FormHandler';

@ -91,10 +91,16 @@ sub recursively_lock_contract {
# remove domains in case of reseller termination
if($status eq 'terminated') {
for my $domain($reseller->domain_resellers->all) {
$domain->domain->delete;
$domain->delete;
}
}
# remove admin logins in case of reseller termination
for my $admin($reseller->admins->all) {
$admin->delete;
}
# fetch sub-contracts of this contract
my $customers = $c->model('DB')->resultset('contracts')->search({
'contact.reseller_id' => $reseller->id,

@ -9,6 +9,8 @@ sub check_redirect_chain {
# TODO: check for missing fields
my $c = $params{c};
$c->session->{redirect_targets} = []
unless(defined $c->session->{redirect_targets});
if($c->request->params->{back}) {
my $back_uri = URI->new(uri_decode($c->request->params->{back}));

@ -3,8 +3,7 @@
helper.name = 'Domain';
helper.data = domains;
helper.messages = messages;
helper.column_titles = [ '#', 'Domain' ];
helper.column_fields = [ 'id', 'domain' ];
helper.dt_columns = domain_dt_columns;
helper.close_target = close_target;
helper.create_flag = create_flag;
@ -12,13 +11,19 @@
helper.form_object = form;
helper.ajax_uri = c.uri_for( c.controller.action_for('ajax') );
helper.dt_buttons = [
{ name = 'Delete', uri = "/domain/'+full.id+'/delete", class = 'btn-small btn-secondary', icon = 'icon-trash' },
{ name = 'Preferences', uri = "/domain/'+full.id+'/preferences", class = 'btn-small btn-tertiary', icon = 'icon-list' },
];
helper.top_buttons = [
{ name = 'Create Domain', uri = c.uri_for('/domain/create'), icon = 'icon-star' },
];
UNLESS c.user.read_only;
helper.dt_buttons = [
{ name = 'Delete', uri = "/domain/'+full.id+'/delete", class = 'btn-small btn-secondary', icon = 'icon-trash' },
{ name = 'Preferences', uri = "/domain/'+full.id+'/preferences", class = 'btn-small btn-tertiary', icon = 'icon-list' },
];
helper.top_buttons = [
{ name = 'Create Domain', uri = c.uri_for('/domain/create'), icon = 'icon-star' },
];
ELSE;
helper.dt_buttons = [
{ name = 'Preferences', uri = "/domain/'+full.id+'/preferences", class = 'btn-small btn-tertiary', icon = 'icon-list' },
];
END;
PROCESS 'helpers/datatables.tt';
-%]

@ -1,10 +1,11 @@
[% META title = 'Reseller Details' -%]
[% site_config.title = 'Reseller Details for ' _ reseller.first.name -%]
<div class="row">
<span>
<a class="btn btn-primary btn-large" href="[% c.uri_for('/back') %]"><i class="icon-arrow-left"></i> Back</a>
</span>
</div>
[% back_created = 1 -%]
<div class="ngcp-separator"></div>
@ -113,6 +114,42 @@
</div>
</div>
</div>
<div class="accordion-group">
<div class="accordion-heading">
<a class="accordion-toggle" data-toggle="collapse" data-parent="#reseller_details" href="#collapse_domain">Domains</a>
</div>
<div class="accordion-body collapse" id="collapse_domain">
<div class="accordion-inner">
[%
helper.name = 'Domain';
helper.messages = messages;
helper.dt_columns = domain_dt_columns;
helper.paginate = 'true';
helper.filter = 'true';
helper.close_target = close_target;
helper.create_flag = create_flag;
helper.edit_flag = edit_flag;
helper.form_object = form;
helper.ajax_uri = c.uri_for('/domain/ajax');
UNLESS c.user.read_only;
helper.dt_buttons = [
{ name = 'Delete', uri = "/domain/'+full.id+'/delete", class = 'btn-small btn-secondary', icon = 'icon-trash' },
{ name = 'Preferences', uri = "/domain/'+full.id+'/preferences", class = 'btn-small btn-tertiary', icon = 'icon-list' },
];
ELSE;
helper.dt_buttons = [
{ name = 'Preferences', uri = "/domain/'+full.id+'/preferences", class = 'btn-small btn-tertiary', icon = 'icon-list' },
];
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_customer">Customers</a>
@ -148,5 +185,6 @@
</div>
</div>
</div>
</div>
[% # vim: set tabstop=4 syntax=html expandtab: -%]

Loading…
Cancel
Save