added RegistrationStatus array
[angular-drzb] / app / js / controllers.js
index 2440bae..0576a11 100644 (file)
@@ -2,7 +2,7 @@
 
 /* Controllers */
 
-function RegistrationCtrl($scope, $log, Registration, $routeParams, $location, $route, Organizations) {
+function RegistrationCtrl($scope, $log, Registration, $routeParams, $location, $route, Organizations, RegistrationStatus) {
 
        $scope.$routeParams = $routeParams;
        $scope.$location = $location;
@@ -11,6 +11,7 @@ function RegistrationCtrl($scope, $log, Registration, $routeParams, $location, $
                $scope.organizations = data;
                $log.info('organizations promise ', $scope.organizations);
        });
+       $scope.RegistrationStatus = RegistrationStatus;
 
        $scope.update = function(registration, state) {
 
@@ -134,10 +135,12 @@ function RegistrationCtrl($scope, $log, Registration, $routeParams, $location, $
        }
 
        $scope.abstract_class = function(work) {
+               if ( work === undefined ) return;
                var abstract = work.abstract;
                return angular.isString(abstract) && abstract.length <= 2000 ? 'ok' : 'ng-invalid';
        }
        $scope.abstract_length = function(work) {
+               if ( work === undefined ) return;
                var abstract = work.abstract;
                if ( ! abstract ) return 0;
                return abstract.length <= 2000 ? abstract.length : 2000 - abstract.length;
@@ -150,6 +153,13 @@ RegistrationCtrl.$inject = [ '$scope', '$log', 'Registration', '$routeParams', '
 function ListCtrl($scope, $log, Registration, RegistrationTypes, $filter) {
 
        $scope.list = [];
+       $scope.list_results = 0;
+       $scope.pager = {
+               page: 1,
+               limit: 10,
+               results: 0,
+               last_page: 0
+       };
        $scope.search = {};
        $scope.ready = false;
        $scope.filters = [ 'student', 'hpd_member', 'reception', 'dinner' ];
@@ -164,6 +174,11 @@ function ListCtrl($scope, $log, Registration, RegistrationTypes, $filter) {
                        }
                };
                angular.forEach( $scope.all_registrations, function(value, key) {
+                       if ( ! value.user ) {
+                               $log.error("all_registrations user corrupted for registration", key, value);
+                               return;
+                       }
+
                        var type = value.user.registration_type;
                        inc_count( type );
                        inc_count( '' ); // total
@@ -196,8 +211,26 @@ function ListCtrl($scope, $log, Registration, RegistrationTypes, $filter) {
        $scope.filter_list = function(newVal, oldVal) {
                if ( newVal == oldVal ) return;
                $log.info('filter_list', newVal, oldVal, 'search', $scope.search);
-               $scope.list = $filter('filter')($scope.all_registrations, $scope.search);
-               $log.info('list', $scope.list);
+               var filtered =
+                       $filter('filter')($scope.all_registrations, $scope.search);
+
+//             $scope.pager.page = 1;
+               $scope.pager.results = filtered.length;
+               $scope.pager.last_page = Math.ceil( $scope.pager.results / $scope.pager.limit );
+               if ( $scope.pager.page > $scope.pager.last_page ) {
+                       $scope.pager.page = 1;
+               }
+               $log.info('pager', $scope.pager);
+
+               var from = ( $scope.pager.page - 1 ) * $scope.pager.limit;
+               $scope.list = [];
+               angular.forEach( filtered, function(v,k) {
+                       if ( k >= from && k < from + $scope.pager.limit ) {
+                               v.nr = k + 1;
+                               this.push(v);
+                       }
+               }, $scope.list );
+               $log.info('list length=', $scope.list.length, "offset=", from);
        };
        angular.forEach( $scope.filters, function(f) {
                $scope.$watch('search.'+f, $scope.filter_list);
@@ -205,6 +238,8 @@ function ListCtrl($scope, $log, Registration, RegistrationTypes, $filter) {
        });
        $scope.$watch('search.registration_type', $scope.filter_list);
        $scope.$watch('search.$', $scope.filter_list);
+       $scope.$watch('pager.page', $scope.filter_list);
+       $scope.$watch('pager.limit', $scope.filter_list);
 
        $scope.RegistrationTypes = RegistrationTypes;
        $log.info( "RegistrationTypes", RegistrationTypes );