Index: branches/HiveStatistics/sources/HeuristicLab.Services.WebApp.Statistics/3.3/WebApp/users/details/userDetails.cshtml
===================================================================
--- branches/HiveStatistics/sources/HeuristicLab.Services.WebApp.Statistics/3.3/WebApp/users/details/userDetails.cshtml	(revision 12516)
+++ branches/HiveStatistics/sources/HeuristicLab.Services.WebApp.Statistics/3.3/WebApp/users/details/userDetails.cshtml	(revision 12516)
@@ -0,0 +1,136 @@
+﻿@using HeuristicLab.Services.Access.DataTransfer
+@using HeuristicLab.Services.Hive
+@if (Request.IsAuthenticated && User.IsInRole(HiveRoles.Administrator)) {
+<header class="view-header">
+    <ul class="nav nav-list nav-list-topbar pull-left">
+        <li>
+            <a ng-href="#/statistics/jobs">Jobs</a>
+        </li>
+        <li class="active">
+            <a ng-href="#/statistics/users">Users</a>
+        </li>
+        <li>
+            <a ng-href="#/statistics/clients">Clients</a>
+        </li>
+    </ul>
+</header>
+
+<div class="default-view-container">
+    <div class="row">
+        <div class="col-lg-9 col-md-6">
+            <div class="panel panel-default">
+                <div class="panel-heading">
+                    <h3 class="panel-title">User Details</h3>
+                </div>
+                <div class="panel-body">
+                    <table class="table table-no-border table-condensed table-auto-width table-content">
+                        <tr>
+                            <td class="text-left">Name:</td>
+                            <td>{{user.Name}}</td>
+                        </tr>
+                    </table>
+                </div>
+            </div>
+        </div>
+
+        <div class="col-lg-3 col-md-6">
+            <div class="panel panel-default">
+                <div class="panel-heading">
+                    <h3 class="panel-title">Tasks Overview</h3>
+                </div>
+                <div class="panel-body">
+                    <table class="table table-no-border table-condensed table-auto-width table-content">
+                        <tr>
+                            <td class="text-left">Total:</td>
+                            <td class="text-right">{{totalJobTasks}}</td>
+                        </tr>
+                        <tr ng-repeat="state in states">
+                            <td class="text-left">{{state.State}}:</td>
+                            <td class="text-right">{{state.Count}}</td>
+                        </tr>
+                    </table>
+                </div>
+            </div>
+        </div>
+    </div>
+
+    <div class="row">
+        <div class="col-lg-12">
+            <div class="panel panel-default">
+                <div class="panel-heading">
+                    <h3 class="panel-title">Current Jobs</h3>
+                </div>
+                <div class="panel-body">
+                    <table class="table table-hover table-condensed">
+                        <thead>
+                            <tr>
+                                <th>#</th>
+                                <th>Job Name</th>
+                                <th>Date Created</th>
+                                <th>Progress</th>
+                                <th></th>
+                            </tr>
+                        </thead>
+                        <tr ng-repeat="job in jobs">
+                            <td>{{$index + 1}}</td>
+                            <td>{{job.Name}}</td>
+                            <td>{{job.DateCreated}}</td>
+                            <td>
+                                <progressbar class="progress active" max="job.TotalTasks" value="job.CompletedTasks" type="success"><i style="color:black; white-space:nowrap;">{{job.CompletedTasks}} / {{job.TotalTasks}}</i></progressbar>
+                            </td>
+                            <td>
+                                <a ng-href="#/statistics/jobs/{{job.Id}}">Details</a>
+                            </td>
+                        </tr>
+                        <tr ng-hide="jobs.length">
+                            <td colspan="5" class="text-center">No active jobs found!</td>
+                        </tr>
+                    </table>
+                </div>
+            </div>
+        </div>
+    </div>
+
+    <div class="row">
+        <div class="col-lg-12">
+            <div class="panel panel-default">
+                <div class="panel-heading">
+                    <h3 class="panel-title">Completed Jobs</h3>
+                </div>
+                <div class="panel-body">
+                    <table class="table table-hover table-condensed">
+                        <thead>
+                            <tr>
+                                <th>#</th>
+                                <th>Job Name</th>
+                                <th>Date Created</th>
+                                <th>Date Completed</th>
+                                <th>Tasks</th>
+                                <th></th>
+                            </tr>
+                        </thead>
+                        <tr ng-repeat="job in completedJobPage.Jobs">
+                            <td>{{($index + 1)+((completedJobCurPage-1)*(completedJobPageSize))}}</td>
+                            <td>{{job.Name}}</td>
+                            <td>{{job.DateCreated}}</td>
+                            <td>{{job.DateCompleted}}</td>
+                            <td>{{job.TotalTasks}}</td>
+                            <td><a ng-href="#/statistics/jobs/{{job.Id}}">Details</a></td>
+                        </tr>
+                        <tr ng-hide="completedJobPage.Jobs.length">
+                            <td colspan="6" class="text-center">No completed jobs found!</td>
+                        </tr>
+                    </table>
+                    <div class="row text-center" ng-show="completedJobPage.TotalJobs > completedJobPage.Jobs.length">
+                        <pagination max-size="10" total-items="completedJobPage.TotalJobs"
+                                    ng-model="completedJobCurPage" items-per-page="completedJobPageSize"
+                                    ng-change="changeCompletedJobPage()"
+                                    boundary-links="true" rotate="false" num-pages="numPages"></pagination>
+                    </div>
+                </div>
+            </div>
+        </div>
+    </div>
+
+</div>
+}
Index: branches/HiveStatistics/sources/HeuristicLab.Services.WebApp.Statistics/3.3/WebApp/users/details/userDetailsCtrl.js
===================================================================
--- branches/HiveStatistics/sources/HeuristicLab.Services.WebApp.Statistics/3.3/WebApp/users/details/userDetailsCtrl.js	(revision 12516)
+++ branches/HiveStatistics/sources/HeuristicLab.Services.WebApp.Statistics/3.3/WebApp/users/details/userDetailsCtrl.js	(revision 12516)
@@ -0,0 +1,58 @@
+﻿(function () {
+    var module = appStatisticsPlugin.getAngularModule();
+    module.controller('app.statistics.userDetailsCtrl',
+        ['$scope', '$stateParams', '$interval', 'app.statistics.userService', 'app.statistics.jobService',
+        function ($scope, $stateParams, $interval, userService, jobService) {
+            $scope.interval = defaultPageUpdateInterval;
+            $scope.completedJobCurPage = 1;
+            $scope.completedJobPageSize = 20;
+
+
+            var getUserDetails = function () {
+                userService.getUser({ id: $stateParams.id }, function(user) {
+                    $scope.user = user;
+                });
+            };
+
+            var getAllJobs = function () {
+                jobService.getAllJobsByUserId({ id: $stateParams.id, completed: false }, function (jobs) {
+                    $scope.jobs = jobs;
+                    var length = $scope.jobs.length;
+                    for (var i = 0; i < length; ++i) {
+                        $scope.jobs[i].DateCreated = CSharpDateToString($scope.jobs[i].DateCreated);
+                    }
+                });
+            };
+
+            var getCompletedJobs = function () {
+                jobService.getJobsByUserId({ id: $stateParams.id, page: $scope.completedJobCurPage, size: $scope.completedJobPageSize, completed: true },
+                    function (jobPage) {
+                        $scope.completedJobPage = jobPage;
+                        var length = $scope.completedJobPage.Jobs.length;
+                        for (var i = 0; i < length; ++i) {
+                            $scope.completedJobPage.Jobs[i].DateCreated = CSharpDateToString($scope.completedJobPage.Jobs[i].DateCreated);
+                            $scope.completedJobPage.Jobs[i].DateCompleted = CSharpDateToString($scope.completedJobPage.Jobs[i].DateCompleted);
+                        }
+                    }
+                );
+            };
+
+            $scope.changeCompletedJobPage = function () {
+                update();
+            };
+
+            var update = function () {
+                getUserDetails();
+                getAllJobs();
+                getCompletedJobs();
+            };
+
+            $scope.updateInterval = $interval(update, $scope.interval);
+            var cancelInterval = $scope.$on('$locationChangeSuccess', function () {
+                $interval.cancel($scope.updateInterval);
+                cancelInterval();
+            });
+            update(); // init page
+        }]
+    );
+})();
Index: branches/HiveStatistics/sources/HeuristicLab.Services.WebApp.Statistics/3.3/WebApp/users/users.cshtml
===================================================================
--- branches/HiveStatistics/sources/HeuristicLab.Services.WebApp.Statistics/3.3/WebApp/users/users.cshtml	(revision 12477)
+++ branches/HiveStatistics/sources/HeuristicLab.Services.WebApp.Statistics/3.3/WebApp/users/users.cshtml	(revision 12516)
@@ -17,5 +17,34 @@
 
 <div class="default-view-container">
-
+    <div class="row">
+        <div class="col-lg-12">
+            <div class="panel panel-default">
+                <div class="panel-heading">
+                    <h3 class="panel-title">Users</h3>
+                </div>
+                <div class="panel-body">
+                    <table class="table table-hover table-condensed">
+                        <thead>
+                            <tr>
+                                <th>#</th>
+                                <th>Username</th>
+                                <th></th>
+                            </tr>
+                        </thead>
+                        <tr ng-repeat="user in users">
+                            <td>{{$index + 1}}</td>
+                            <td>{{user.Name}}</td>
+                            <td>
+                                <a ng-href="#/statistics/users/{{user.Id}}">Details</a>
+                            </td>
+                        </tr>
+                        <tr ng-hide="users.length">
+                            <td colspan="4" class="text-center">No users found!</td>
+                        </tr>
+                    </table>
+                </div>
+            </div>
+        </div>
+    </div>
 </div>
 }
Index: branches/HiveStatistics/sources/HeuristicLab.Services.WebApp.Statistics/3.3/WebApp/users/usersCtrl.js
===================================================================
--- branches/HiveStatistics/sources/HeuristicLab.Services.WebApp.Statistics/3.3/WebApp/users/usersCtrl.js	(revision 12477)
+++ branches/HiveStatistics/sources/HeuristicLab.Services.WebApp.Statistics/3.3/WebApp/users/usersCtrl.js	(revision 12516)
@@ -2,6 +2,20 @@
     var module = appStatisticsPlugin.getAngularModule();
     module.controller('app.statistics.usersCtrl',
-        ['$scope', 'app.statistics.data.service', function($scope, statisticsService) {
-            
+        ['$scope', '$interval', 'app.statistics.userService', function ($scope, $interval, userService) {
+            $scope.interval = defaultPageUpdateInterval;
+
+            var getUsers = function() {
+                userService.getUsers({}, function(users) {
+                    users.splice(0, 1);
+                    $scope.users = users;
+                });
+            };
+
+            $scope.updateInterval = $interval(getUsers, $scope.interval);
+            var cancelInterval = $scope.$on('$locationChangeSuccess', function () {
+                $interval.cancel($scope.updateInterval);
+                cancelInterval();
+            });
+            getUsers(); // init page
         }]
     );
