added RegistrationStatus array
[angular-drzb] / app / js / controllers.js
index a025606..0576a11 100644 (file)
@@ -2,12 +2,16 @@
 
 /* Controllers */
 
-
-function RegistrationCtrl($scope, $log, Registration, $routeParams, $location, $route, View) {
+function RegistrationCtrl($scope, $log, Registration, $routeParams, $location, $route, Organizations, RegistrationStatus) {
 
        $scope.$routeParams = $routeParams;
        $scope.$location = $location;
        $scope.organizations = [];
+       Organizations.getArrayPromise().then(function(data) {
+               $scope.organizations = data;
+               $log.info('organizations promise ', $scope.organizations);
+       });
+       $scope.RegistrationStatus = RegistrationStatus;
 
        $scope.update = function(registration, state) {
 
@@ -47,26 +51,7 @@ function RegistrationCtrl($scope, $log, Registration, $routeParams, $location, $
 
                $log.info( $routeParams.registrationId );
 
-               $scope.view = new View();
-if(0){//FIXME
-               $scope.view.$get({ view: 'organizations' }, function(result) {
-                       $log.info('View organizations', result);
-                       angular.forEach( result.rows, function(value, key) {
-                               this.push( value.key ); // name of organization
-                       }, $scope.organizations );
-                       $log.info('organizations', $scope.organizations);
-               });
-}else{//FIXME
-               $scope.view.$key_array({ view: 'organizations' }, function(result) {
-                       $log.info('key_array', result);
-//                     $scope.organizations = result.rows; // FIXME doesn't refresh bs-typeahead
-                       angular.forEach( result.rows, function(o) {
-                               this.push( o );
-                       }, $scope.organizations );
-                       $log.info('organizations', $scope.organizations);
-               });
        }
-}//FIXME
 
        $scope.$watch('user.registration_type', function( oldValue, newValue ) {
                $log.info("registration_type watch", oldValue, newValue );
@@ -150,10 +135,12 @@ if(0){//FIXME
        }
 
        $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;
@@ -161,11 +148,18 @@ if(0){//FIXME
 
        $scope.reset();
 }
-//RegistrationCtrl.$inject = [ '$scope', '$log' ];
+RegistrationCtrl.$inject = [ '$scope', '$log', 'Registration', '$routeParams', '$location', '$route', 'Organizations' ];
 
 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' ];
@@ -180,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
@@ -210,9 +209,28 @@ 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);
@@ -220,12 +238,12 @@ 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 );
 }
 
 
-function MyCtrl2() {
-}
-MyCtrl2.$inject = [];
+ListCtrl.$inject = [ '$scope', '$log', 'Registration', 'RegistrationTypes', '$filter' ];