don't erase reception when editing student
[angular-drzb] / app / js / controllers.js
1 'use strict';
2
3 /* Controllers */
4
5
6 function RegistrationCtrl($scope, $log, Registration, $routeParams, $location, $route, View) {
7
8         $scope.$routeParams = $routeParams;
9         $scope.$location = $location;
10         $scope.organizations = [];
11
12         $scope.update = function(registration) {
13
14                 if ( ! $scope.has_work && registration.work ) {
15                         delete( registration.work );
16                         $log.info("removed work");
17                 }
18
19                 registration.$save( function(registration) {
20                         $log.info("saved", registration);
21                         $log.info('id =', registration.id);
22                         if ( registration.id ) {
23                                 $location.path( '/confirmation/' + registration.id );
24                         } else {
25                                 $log.error("can't find id in ", registration);
26                         }
27                 });
28         }
29
30         $scope.reset = function() {
31                 if ( $routeParams.registrationId ) {
32                         $scope.registration = new Registration();
33                         $scope.registration.$get({ registrationId: $routeParams.registrationId }, function(registration) {
34                                 $log.info("get Registration", registration);
35                                 $scope.user = registration.user;
36                                 $scope.work = registration.work;
37                         });
38                 } else {
39                         $scope.registration = new Registration({ user: {}, work: { persons: [] } });
40                         $scope.user = $scope.registration.user;
41                         $scope.work = $scope.registration.work;
42                         $scope.work.persons = [ $scope.user ]; // first author is person submitting work
43                         $log.info("new Registration", $scope.registration);
44                 }
45
46                 $log.info( $routeParams.registrationId );
47
48                 $scope.view = new View();
49 if(0){//FIXME
50                 $scope.view.$get({ view: 'organizations' }, function(result) {
51                         $log.info('View organizations', result);
52                         angular.forEach( result.rows, function(value, key) {
53                                 this.push( value.key ); // name of organization
54                         }, $scope.organizations );
55                         $log.info('organizations', $scope.organizations);
56                 });
57 }else{//FIXME
58                 $scope.view.$key_array({ view: 'organizations' }, function(result) {
59                         $log.info('key_array', result);
60 //                      $scope.organizations = result.rows; // FIXME doesn't refresh bs-typeahead
61                         angular.forEach( result.rows, function(o) {
62                                 this.push( o );
63                         }, $scope.organizations );
64                         $log.info('organizations', $scope.organizations);
65                 });
66         }
67 }//FIXME
68
69         $scope.$watch('user.registration_type', function( oldValue, newValue ) {
70                 $log.info("registration_type watch", oldValue, newValue );
71
72                 if ( oldValue === newValue ) return; // triggers on resource, so ignore it
73                 if ( ! $scope.user ) { // resource triggers watch before loading json
74                         $log.error("no user in scope");
75                         return;
76                 }
77
78                 if (
79                         $scope.user.registration_type == 'lecture' ||
80                         $scope.user.registration_type == 'poster' ||
81                         $scope.user.registration_type == 'symposium' ||
82                         $scope.user.registration_type == 'round'
83                 ) {
84                         $scope.work.type = $scope.user.registration_type;
85                         $scope.has_work = true;
86                         $log.info( $scope.user.registration_type, " type updated");
87
88                         if ( $scope.user.registration_type == 'symposium' && ! $scope.work.symposium_works ) {
89                                 // create 4 empty symposium works
90                                 $scope.work.symposium_works = [
91                                         { persons: [{}] },
92                                         { persons: [{}] },
93                                         { persons: [{}] },
94                                         { persons: [{}] }
95                                 ];
96                                 $log.info('created symposium_works');
97                         }
98
99                 } else {
100                         $log.info( $scope.user.registration_type, "NO work" );
101                         $scope.has_work = false;
102                 }
103         });
104
105         $scope.change_student = function() {
106                 if ( $scope.user.student ) {
107                         $scope.user.hpd_member = false;
108                         $scope.user.dinner = false;
109                 }
110         }
111
112         $scope.addPerson = function(persons) {
113                 $log.info('addPerson', persons);
114                 persons.push({ firstname: '' });
115         };
116  
117         $scope.removePerson = function(persons,person) {
118                 for (var i = 0, ii = persons.length; i < ii; i++) {
119                         if (person === persons[i]) {
120                                 persons.splice(i, 1);
121                                 $log.info('removePerson', i, person);
122                         }
123                 }
124         };
125
126         $scope.add_symposium_work = function(works) {
127                 works.push({ persons: [{}] });
128         }
129
130         $scope.reset();
131 }
132 //RegistrationCtrl.$inject = [ '$scope', '$log' ];
133
134 function ListCtrl($scope, $log, Registration, RegistrationTypes, $filter) {
135
136         $scope.list = [];
137         $scope.search = {};
138         $scope.ready = false;
139
140         $scope.all_registrations = Registration.query( function() {
141                 var RegistrationTypeCount = { '': 0 };
142                 angular.forEach( $scope.all_registrations, function(value, key) {
143                         var type = value.user.registration_type;
144                         if ( ! angular.isNumber( RegistrationTypeCount[type] ) ) {
145                                 RegistrationTypeCount[type] = 1;
146                         } else {
147                                 RegistrationTypeCount[type]++;
148                         }
149                         RegistrationTypeCount['']++;
150
151                         value.registration_type = type; // for search
152                         
153 //                      $log.info( key, value.user.registration_type, RegistrationTypeCount[type]  );
154                 });
155                 $log.info('RegistrationTypeCount', RegistrationTypeCount);
156                 $scope.RegistrationTypeCount = RegistrationTypeCount;
157
158 //              $scope.list = $scope.all_registrations; // FIXME show all registrations on page load
159                 $scope.ready = true;
160         });
161
162         $scope.filter_list = function(newVal, oldVal) {
163                 $scope.list = $filter('filter')($scope.all_registrations, $scope.search);
164                 $log.info('filter_list', newVal, oldVal, 'search', $scope.search, 'results', $scope.list);
165         };
166         $scope.$watch('search.registration_type', $scope.filter_list);
167         $scope.$watch('search.$', $scope.filter_list); // $ is skipped by search watch!!
168
169         $scope.RegistrationTypes = RegistrationTypes;
170         $log.info( "RegistrationTypes", RegistrationTypes );
171 }
172
173
174 function MyCtrl2() {
175 }
176 MyCtrl2.$inject = [];