From 114742b366efb5fa8a6269e330ceaee654487c44 Mon Sep 17 00:00:00 2001 From: Andreas Granig Date: Fri, 19 Jul 2013 14:55:00 +0200 Subject: [PATCH] Implement call list. --- lib/NGCP/Panel/Controller/Subscriber.pm | 36 +++++- lib/NGCP/Panel/Utils/Datatables.pm | 11 +- share/templates/helpers/datatables.tt | 2 +- share/templates/subscriber/master.tt | 154 +++++++++++++++++++++++- 4 files changed, 191 insertions(+), 12 deletions(-) diff --git a/lib/NGCP/Panel/Controller/Subscriber.pm b/lib/NGCP/Panel/Controller/Subscriber.pm index 193eff294d..27c9d6504f 100644 --- a/lib/NGCP/Panel/Controller/Subscriber.pm +++ b/lib/NGCP/Panel/Controller/Subscriber.pm @@ -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,,, diff --git a/lib/NGCP/Panel/Utils/Datatables.pm b/lib/NGCP/Panel/Utils/Datatables.pm index 7998d8a1f5..8d22b11dbc 100644 --- a/lib/NGCP/Panel/Utils/Datatables.pm +++ b/lib/NGCP/Panel/Utils/Datatables.pm @@ -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 }; } diff --git a/share/templates/helpers/datatables.tt b/share/templates/helpers/datatables.tt index 7608559f49..a41ace05b8 100644 --- a/share/templates/helpers/datatables.tt +++ b/share/templates/helpers/datatables.tt @@ -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); diff --git a/share/templates/subscriber/master.tt b/share/templates/subscriber/master.tt index b7a8ea1b1a..14b696290b 100644 --- a/share/templates/subscriber/master.tt +++ b/share/templates/subscriber/master.tt @@ -1,4 +1,4 @@ -[% site_config.title = 'Subscriber' -%] +[% site_config.title = 'Subscriber ' _ subscriber.username _ '@' _ subscriber.domain.domain -%] [% IF messages -%]
@@ -10,7 +10,157 @@
-

Master Data

+
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SettingValues
Customer #[% subscriber.contract.id %] + +
CSC Username[% subscriber.webusername %] + +
CSC Password[% subscriber.webpassword%] + +
SIP URI[% subscriber.username %]@[% subscriber.domain.domain %] + +
SIP Password[% subscriber.password %] + +
Primary Number[% subscriber.primary_number.cc %] [% subscriber.primary_number.ac %] [% subscriber.primary_number.sn %] + +
Alias Numbers[% subscriber.primary_number.cc %] [% subscriber.primary_number.ac %] [% subscriber.primary_number.sn %] + +
Administrative[% subscriber.administrative ? 'yes' : 'no' %] + +
UUID[% subscriber.uuid %] + +
External #[% subscriber.external_id %] + +
+
+
+
+ + +
+ +
+
+[% + 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'; +%] +
+
+
+ + +
+ +
+
+ + [% # render vm DT here %] +
+
+
+
[% IF edit_flag == 1 -%] [%