Implement call list.

agranig/1_0_subfix
Andreas Granig 12 years ago
parent cd2f79bfa1
commit 114742b366

@ -43,7 +43,7 @@ sub sub_list :Chained('/') :PathPart('subscriber') :CaptureArgs(0) {
template => 'subscriber/list.tt',
);
NGCP::Panel::Utils::Datatables::set_columns($c, [
$c->stash->{dt_columns} = NGCP::Panel::Utils::Datatables::set_columns($c, [
{ name => "id", search => 1, title => "#" },
{ name => "username", search => 1, title => "Username" },
{ name => "domain.domain", search => 1, title => "Domain" },
@ -201,7 +201,7 @@ sub ajax :Chained('sub_list') :PathPart('ajax') :Args(0) {
my $resultset = $self->$dispatch_to($c);
NGCP::Panel::Utils::Datatables::process($c, $resultset);
NGCP::Panel::Utils::Datatables::process($c, $resultset, $c->stash->{dt_columns});
$c->detach( $c->view("JSON") );
}
@ -1283,14 +1283,42 @@ sub load_preference_list :Private {
);
}
sub master :Chained('/') :PathPart('subscriber') :Args(1) {
my ($self, $c, $subscriber_id) = @_;
sub master :Chained('base') :PathPart('details') :CaptureArgs(0) {
my ($self, $c) = @_;
$c->stash->{calls_dt_columns} = NGCP::Panel::Utils::Datatables::set_columns($c, [
{ name => "source_user", search => 1, title => "Caller" },
{ name => "destination_user", search => 1, title => "Callee" },
{ name => "call_status", search => 1, title => "Status" },
{ name => "start_time", search => 1, title => "Start Time" },
{ name => "duration", search => 1, title => "Duration" },
]);
$c->stash(
template => 'subscriber/master.tt',
);
}
sub details :Chained('master') :PathPart('') :Args(0) {
my ($self, $c) = @_;
}
sub ajax_calls :Chained('master') :PathPart('calls/ajax') :Args(0) {
my ($self, $c) = @_;
my $out_rs = $c->model('DB')->resultset('cdr')->search({
source_user_id => $c->stash->{subscriber}->uuid,
});
my $in_rs = $c->model('DB')->resultset('cdr')->search({
destination_user_id => $c->stash->{subscriber}->uuid,
});
my $rs = $out_rs->union($in_rs);
NGCP::Panel::Utils::Datatables::process($c, $rs, $c->stash->{calls_dt_columns});
$c->detach( $c->view("JSON") );
}
=head1 AUTHOR
Andreas Granig,,,

@ -7,9 +7,7 @@ use List::Util qw/first/;
use Scalar::Util qw/blessed/;
sub process {
my ($c, $rs) = @_;
my $cols = $c->stash->{dt_columns};
my ($c, $rs, $cols) = @_;
my $aaData = [];
my $totalRecords = $rs->count;
@ -114,7 +112,7 @@ sub set_columns {
$c->{accessor} = $c->{name};
$c->{accessor} =~ s/\./_/g;
}
$c->stash->{dt_columns} = $cols;
return $cols;
}
sub _prune_row {
@ -124,7 +122,10 @@ sub _prune_row {
delete $row{$k};
next;
}
$row{$k} = $v->datetime if blessed($v) && $v->isa('DateTime');
if(blessed($v) && $v->isa('DateTime')) {
$row{$k} = $v->datetime;
$row{$k} .= '.'.$v->millisecond if $v->millisecond > 0.0;
}
}
return { %row };
}

@ -2,7 +2,7 @@
IF helper.dt_columns;
helper.column_titles = [];
helper.column_fields = [];
FOR col IN dt_columns;
FOR col IN helper.dt_columns;
NEXT UNLESS col.title;
helper.column_titles.push(col.title);
helper.column_fields.push(col.accessor);

@ -1,4 +1,4 @@
[% site_config.title = 'Subscriber' -%]
[% site_config.title = 'Subscriber ' _ subscriber.username _ '@' _ subscriber.domain.domain -%]
[% IF messages -%]
<div class="row">
@ -10,7 +10,157 @@
<div class="ngcp-separator"></div>
<h3>Master Data</h3>
<div class="accordion" id="subscriber_data">
<div class="accordion-group">
<div class="accordion-heading">
<a class="accordion-toggle" data-toggle="collapse" data-parent="#subscriber_data" href="#collapse_master">Master Data</a>
</div>
<div class="accordion-body collapse" id="collapse_master">
<div class="accordion-inner">
<table class="table table-bordered table-striped table-highlight table-hover" id="subscribers_table">
<thead>
<tr>
<th>Setting</th>
<th>Values</th>
<th class="ngcp-actions-column"></th>
</tr>
</thead>
<tbody>
<tr class="sw_action_row">
<td>Customer #</td>
<td>[% subscriber.contract.id %]</td>
<td class="ngcp-actions-column">
<div class="sw_actions">
<a class="btn btn-primary btn-small" href="[% c.uri_for_action("/customer/details", [subscriber.contract_id]) %]"><i class="icon-list"></i> Customer Details</a>
</div>
</td>
</tr>
<tr class="sw_action_row">
<td>CSC Username</td>
<td>[% subscriber.webusername %]</td>
<td class="ngcp-actions-column">
<div class="sw_actions">
<a class="btn btn-primary btn-small" href="[% c.uri_for_action("/subscriber/preferences", [subscriber.id]) %]"><i class="icon-list"></i> Preferences</a>
</div>
</td>
</tr>
<tr class="sw_action_row">
<td>CSC Password</td>
<td>[% subscriber.webpassword%]</td>
<td class="ngcp-actions-column">
<div class="sw_actions">
<a class="btn btn-primary btn-small" href="[% c.uri_for_action("/subscriber/preferences", [subscriber.id]) %]"><i class="icon-list"></i> Preferences</a>
</div>
</td>
</tr>
<tr class="sw_action_row">
<td>SIP URI</td>
<td>[% subscriber.username %]@[% subscriber.domain.domain %]</td>
<td class="ngcp-actions-column">
<div class="sw_actions">
<a class="btn btn-primary btn-small" href="[% c.uri_for_action("/subscriber/preferences", [subscriber.id]) %]"><i class="icon-list"></i> Preferences</a>
</div>
</td>
</tr>
<tr class="sw_action_row">
<td>SIP Password</td>
<td>[% subscriber.password %]</td>
<td class="ngcp-actions-column">
<div class="sw_actions">
<a class="btn btn-primary btn-small" href="[% c.uri_for_action("/subscriber/preferences", [subscriber.id]) %]"><i class="icon-list"></i> Preferences</a>
</div>
</td>
</tr>
<tr class="sw_action_row">
<td>Primary Number</td>
<td>[% subscriber.primary_number.cc %] [% subscriber.primary_number.ac %] [% subscriber.primary_number.sn %]</td>
<td class="ngcp-actions-column">
<div class="sw_actions">
<a class="btn btn-primary btn-small" href="[% c.uri_for_action("/subscriber/preferences", [subscriber.id]) %]"><i class="icon-list"></i> Preferences</a>
</div>
</td>
</tr>
<tr class="sw_action_row">
<td>Alias Numbers</td>
<td>[% subscriber.primary_number.cc %] [% subscriber.primary_number.ac %] [% subscriber.primary_number.sn %]</td>
<td class="ngcp-actions-column">
<div class="sw_actions">
<a class="btn btn-primary btn-small" href="[% c.uri_for_action("/subscriber/preferences", [subscriber.id]) %]"><i class="icon-list"></i> Preferences</a>
</div>
</td>
</tr>
<tr class="sw_action_row">
<td>Administrative</td>
<td>[% subscriber.administrative ? 'yes' : 'no' %]</td>
<td class="ngcp-actions-column">
<div class="sw_actions">
<a class="btn btn-primary btn-small" href="[% c.uri_for_action("/subscriber/preferences", [subscriber.id]) %]"><i class="icon-list"></i> Preferences</a>
</div>
</td>
</tr>
<tr class="sw_action_row">
<td>UUID</td>
<td>[% subscriber.uuid %]</td>
<td class="ngcp-actions-column">
<div class="sw_actions">
<a class="btn btn-primary btn-small" href="[% c.uri_for_action("/subscriber/preferences", [subscriber.id]) %]"><i class="icon-list"></i> Preferences</a>
</div>
</td>
</tr>
<tr class="sw_action_row">
<td>External #</td>
<td>[% subscriber.external_id %]</td>
<td class="ngcp-actions-column">
<div class="sw_actions">
<a class="btn btn-primary btn-small" href="[% c.uri_for_action("/subscriber/preferences", [subscriber.id]) %]"><i class="icon-list"></i> Preferences</a>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<div class="accordion-group">
<div class="accordion-heading">
<a class="accordion-toggle" data-toggle="collapse" data-parent="#subscriber_data" href="#collapse_calls">Call History</a>
</div>
<div class="accordion-body collapse" id="collapse_calls">
<div class="accordion-inner">
[%
helper.name = 'Calls';
helper.column_sort = 'status';
helper.dt_columns = calls_dt_columns;
helper.column_sort = 'start_time';
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_action('/subscriber/ajax_calls', [c.req.captures.0]);
PROCESS 'helpers/datatables.tt';
%]
</div>
</div>
</div>
<div class="accordion-group">
<div class="accordion-heading">
<a class="accordion-toggle" data-toggle="collapse" data-parent="#subscriber_data" href="#collapse_voicemail">Voice Mails</a>
</div>
<div class="accordion-body collapse" id="collapse_voicemail">
<div class="accordion-inner">
[% # render vm DT here %]
</div>
</div>
</div>
</div>
[% IF edit_flag == 1 -%]
[%

Loading…
Cancel
Save