reset pager.page if needed
[angular-drzb] / app / js / controllers.js
index b293089..fa87a48 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, RegistrationState) {
 
        $scope.$routeParams = $routeParams;
        $scope.$location = $location;
@@ -11,8 +11,11 @@ function RegistrationCtrl($scope, $log, Registration, $routeParams, $location, $
                $scope.organizations = data;
                $log.info('organizations promise ', $scope.organizations);
        });
+       $scope.RegistrationState = RegistrationState;
 
-       $scope.update = function(registration, state) {
+       $scope.info = { message: '', css_class: '' } ; // alert box
+
+       $scope.update = function(registration, state, info_message) {
 
                registration.state = state;
 
@@ -22,10 +25,13 @@ function RegistrationCtrl($scope, $log, Registration, $routeParams, $location, $
                }
 
                registration.$save( function(registration) {
-                       $log.info("saved", registration);
                        $log.info('id =', registration.id, 'state = ', registration.state);
                        if ( registration.id && registration.state ) {
-                               $location.path( '/' + registration.state + '/' + registration.id );
+                               if ( ! info_message ) {
+                                       $location.path( '/' + registration.state + '/' + registration.id );
+                               } else {
+                                       $scope.info = { message: info_message, css_class: 'alert-success' };
+                               }
                        } else {
                                $log.error("can't find id in ", registration);
                        }
@@ -145,9 +151,15 @@ function RegistrationCtrl($scope, $log, Registration, $routeParams, $location, $
                return abstract.length <= 2000 ? abstract.length : 2000 - abstract.length;
        }
 
+       $scope.change_state = function(new_state) {
+               if ( new_state == $scope.registration.state ) return;
+               $scope.info = { css_class: 'alert-warning', message: 'Changed state from "'+$scope.registration.state+'" to "'+new_state+'"' };
+               $scope.registration.state = new_state;
+       }
+
        $scope.reset();
 }
-RegistrationCtrl.$inject = [ '$scope', '$log', 'Registration', '$routeParams', '$location', '$route', 'Organizations' ];
+RegistrationCtrl.$inject = [ '$scope', '$log', 'Registration', '$routeParams', '$location', '$route', 'Organizations', 'RegistrationState' ];
 
 function ListCtrl($scope, $log, Registration, RegistrationTypes, $filter) {
 
@@ -156,12 +168,19 @@ function ListCtrl($scope, $log, Registration, RegistrationTypes, $filter) {
        $scope.pager = {
                page: 1,
                limit: 10,
-               results: 0,
-               last_page: 0
+               results: 1,
+               last_page: 1
        };
        $scope.search = {};
        $scope.ready = false;
        $scope.filters = [ 'student', 'hpd_member', 'reception', 'dinner' ];
+       $scope.show = {
+               registration_type: true,
+               filters: true,
+               search: true,
+               states: true,
+               pager_numeric: false
+       };
 
        $scope.all_registrations = Registration.query( function() {
                var Counts = {};
@@ -202,9 +221,10 @@ function ListCtrl($scope, $log, Registration, RegistrationTypes, $filter) {
                $log.info('Counts', Counts);
                $scope.Counts = Counts;
 
-//             $scope.list = $scope.all_registrations; // FIXME show all registrations on page loadyy
                $scope.ready = true;
 
+               $scope.reset();
+
        });
 
        $scope.filter_list = function(newVal, oldVal) {
@@ -213,35 +233,36 @@ function ListCtrl($scope, $log, Registration, RegistrationTypes, $filter) {
                var filtered =
                        $filter('filter')($scope.all_registrations, $scope.search);
 
-//             $scope.pager.page = 1;
+               $log.info('pager before apply', $scope.pager);
+
                $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;
-               }
+               if ( $scope.pager.page < 1 ) $scope.pager.page = 1;
+               if ( $scope.pager.page > $scope.pager.last_page ) $scope.pager.page = $scope.pager.last_page;
                $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;
+                       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);
-               $log.info('watch search.'+f);
-       });
-       $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.$watch('search', $scope.filter_list, true);
+       $scope.$watch('search.$', $scope.filter_list); // FIXME not included in search true because of $
+       $scope.$watch('pager', $scope.filter_list, true);
 
        $scope.RegistrationTypes = RegistrationTypes;
        $log.info( "RegistrationTypes", RegistrationTypes );
+
+       $scope.reset = function() {
+               $scope.search = { registration_type: '' };
+               $log.info('reset', $scope.search );
+               $scope.pager.page = 1;
+       }
 }