]> git.evergreen-ils.org Git - working/Evergreen.git/blob - Open-ILS/xul/staff_client/server/patron/search_form.js
add "alias" column to actor.usr; add patron search field for new "alias" column;...
[working/Evergreen.git] / Open-ILS / xul / staff_client / server / patron / search_form.js
1 dump('entering patron/search_form.js\n');
2
3 if (typeof patron == 'undefined') patron = {};
4 patron.search_form = function (params) {
5
6         JSAN.use('util.error'); this.error = new util.error();
7         JSAN.use('util.network'); this.network = new util.network();
8         this.w = window;
9 }
10
11 patron.search_form.prototype = {
12
13         'init' : function( params ) {
14
15                 var obj = this;
16
17                 JSAN.use('OpenILS.data'); this.OpenILS = {}; 
18                 obj.OpenILS.data = new OpenILS.data(); obj.OpenILS.data.init({'via':'stash'});
19
20                 JSAN.use('util.controller'); obj.controller = new util.controller();
21                 obj.controller.init(
22                         {
23                                 control_map : {
24                                         'cmd_broken' : [
25                                                 ['command'],
26                                                 function() { alert($("commonStrings").getString('common.unimplemented')); }
27                                         ],
28                                         'cmd_patron_search_submit' : [
29                                                 ['command'],
30                                                 function() {
31                                                         obj.submit();
32                                                 }
33                                         ],
34                                         'cmd_patron_search_clear' : [
35                                                 ['command'],
36                                                 function() { 
37                                                         obj.controller.render(); 
38                                                         window.xulG.clear_left_deck();
39                                                 }
40                                         ],
41                                         'family_name' : [
42                                                 ['render'],
43                                                 function(e) {
44                                                         return function() {
45                                                                 if (params.query&&params.query.family_name) {
46                                                                         e.setAttribute('value',params.query.family_name);
47                                                                         e.value = params.query.family_name;
48                                                                 } else {
49                                                                         e.value = '';
50                                                                 }
51                                                         };
52                                                 }
53                                         ],
54                                         'first_given_name' : [
55                                                 ['render'],
56                                                 function(e) {
57                                                         return function() {
58                                                                 if (params.query&&params.query.first_given_name) {
59                                                                         e.setAttribute('value',params.query.first_given_name);
60                                                                         e.value = params.query.first_given_name;
61                                                                 } else {
62                                                                         e.value = '';
63                                                                 }
64                                                         };
65                                                 }
66                                         ],
67                                         'second_given_name' : [
68                                                 ['render'],
69                                                 function(e) {
70                                                         return function() {
71                                                                 if (params.query&&params.query.second_given_name) {
72                                                                         e.setAttribute('value',params.query.second_given_name);
73                                                                         e.value = params.query.second_given_name;
74                                                                 } else {
75                                                                         e.value = '';
76                                                                 }
77                                                         };
78                                                 }
79                                         ],
80                                         'alias' : [
81                                                 ['render'],
82                                                 function(e) {
83                                                         return function() {
84                                                                 if (params.query&&params.query.alias) {
85                                                                         e.setAttribute('value',params.query.alias);
86                                                                         e.value = params.query.alias;
87                                                                 } else {
88                                                                         e.value = '';
89                                                                 }
90                                                         };
91                                                 }
92                                         ],
93                                         'email' : [
94                                                 ['render'],
95                                                 function(e) {
96                                                         return function() {
97                                                                 if (params.query&&params.query.email) {
98                                                                         e.setAttribute('value',params.query.email);
99                                                                         e.value = params.query.email;
100                                                                 } else {
101                                                                         e.value = '';
102                                                                 }
103                                                         };
104                                                 }
105                                         ],
106                                         'phone' : [
107                                                 ['render'],
108                                                 function(e) {
109                                                         return function() {
110                                                                 if (params.query&&params.query.phone) {
111                                                                         e.setAttribute('value',params.query.phone);
112                                                                         e.value = params.query.phone;
113                                                                 } else {
114                                                                         e.value = '';
115                                                                 }
116                                                         };
117                                                 }
118                                         ],
119                                         'ident' : [
120                                                 ['render'],
121                                                 function(e) {
122                                                         return function() {
123                                                                 if (params.query&&params.query.ident) {
124                                                                         e.setAttribute('value',params.query.ident);
125                                                                         e.value = params.query.ident;
126                                                                 } else if (params.query&&params.query.ident_value) {
127                                                                         e.setAttribute('value',params.query.ident_value);
128                                                                         e.value = params.query.ident_value;
129                                                                 } else if (params.query&&params.query.ident_value2) {
130                                                                         e.setAttribute('value',params.query.ident_value2);
131                                                                         e.value = params.query.ident_value2;
132                                                                 } else {
133                                                                         e.value = '';
134                                                                 }
135                                                         };
136                                                 }
137                                         ],
138                                         'street1' : [
139                                                 ['render'],
140                                                 function(e) {
141                                                         return function() {
142                                                                 if (params.query&&params.query.street1) {
143                                                                         e.setAttribute('value',params.query.street1);
144                                                                         e.value = params.query.street1;
145                                                                 } else {
146                                                                         e.value = '';
147                                                                 }
148                                                         };
149                                                 }
150                                         ],
151                                         'street2' : [
152                                                 ['render'],
153                                                 function(e) {
154                                                         return function() {
155                                                                 if (params.query&&params.query.street2) {
156                                                                         e.setAttribute('value',params.query.street2);
157                                                                         e.value = params.query.street2;
158                                                                 } else {
159                                                                         e.value = '';
160                                                                 }
161                                                         };
162                                                 }
163                                         ],
164                                         'city' : [
165                                                 ['render'],
166                                                 function(e) {
167                                                         return function() {
168                                                                 if (params.query&&params.query.city) {
169                                                                         e.setAttribute('value',params.query.city);
170                                                                         e.value = params.query.city;
171                                                                 } else {
172                                                                         e.value = '';
173                                                                 }
174                                                         };
175                                                 }
176                                         ],
177                                         'state' : [
178                                                 ['render'],
179                                                 function(e) {
180                                                         return function() {
181                                                                 if (params.query&&params.query.state) {
182                                                                         e.setAttribute('value',params.query.state);
183                                                                         e.value = params.query.state;
184                                                                 } else {
185                                                                         e.value = '';
186                                                                 }
187                                                         };
188                                                 }
189                                         ],
190                                         'post_code' : [
191                                                 ['render'],
192                                                 function(e) {
193                                                         return function() {
194                                                                 if (params.query&&params.query.post_code) {
195                                                                         e.setAttribute('value',params.query.post_code);
196                                                                         e.value = params.query.post_code;
197                                                                 } else {
198                                                                         e.value = '';
199                                                                 }
200                                                         };
201                                                 }
202                                         ],
203                                         'inactive' : [ ['render'], function(e) { 
204                             return function() {}; 
205                         } 
206                     ],
207                     'search_depth' : [ ['render'],function(e) {
208                             return function() {};
209                         }
210                     ],
211                                 }
212                         }
213                 );
214
215                 obj.controller.render();
216                 var nl = document.getElementsByTagName('textbox');
217                 for (var i = 0; i < nl.length; i++) {
218                         nl[i].addEventListener('keypress',function(ev){
219                                 if (ev.target.tagName != 'textbox') return;
220                                 if (ev.keyCode == 13 /* enter */ || ev.keyCode == 77 /* enter on a mac */) setTimeout( function() { obj.submit(); }, 0);
221                         },false);
222                 }
223                 document.getElementById('family_name').focus();
224
225         JSAN.use('util.file'); JSAN.use('util.widgets'); JSAN.use('util.functional');
226         util.widgets.remove_children(obj.controller.view.search_depth);
227         var ml = util.widgets.make_menulist(
228             util.functional.map_list( obj.OpenILS.data.list.aout, 
229                 function(el,idx) {
230                     return [ el.opac_label(), el.depth() ]
231                 }
232             ).sort(
233                 function(a,b) {
234                     if (a[1] < b[1]) return -1;
235                     if (a[1] > b[1]) return 1;
236                     return 0;
237                 }
238             )
239         );
240         ml.addEventListener('command', function() {
241                 ml.parentNode.setAttribute('value',ml.value);
242                 var file = new util.file('patron_search_prefs.'+obj.OpenILS.data.server_unadorned);
243                 util.widgets.save_attributes(file, { 'search_depth_ml' : [ 'value' ], 'inactive' : [ 'value' ] });
244             }, false
245         );
246         ml.setAttribute('id','search_depth_ml');
247         obj.controller.view.search_depth.appendChild(ml);
248
249                 var file = new util.file('patron_search_prefs.'+obj.OpenILS.data.server_unadorned);
250                 util.widgets.load_attributes(file);
251                 ml.value = ml.getAttribute('value');
252                 if (! ml.value) {
253                         ml.value = 0
254                         ml.setAttribute('value',ml.value);
255                 }
256
257         var cb = obj.controller.view.inactive;
258         cb.addEventListener('command',function() { 
259                 cb.setAttribute('value',cb.checked ? "true" : "false");
260                 var file = new util.file('patron_search_prefs.'+obj.OpenILS.data.server_unadorned);
261                 util.widgets.save_attributes(file, { 'search_depth_ml' : [ 'value' ], 'inactive' : [ 'value' ] });
262             }, false
263         );
264         cb.checked = cb.getAttribute('value') == "true" ? true : false;
265
266         },
267
268         'on_submit' : function(q) {
269                 var msg = 'Query = ' + q;
270                 this.error.sdump('D_PATRON', msg);
271         },
272
273         'submit' : function() {
274                 window.xulG.clear_left_deck();
275                 var obj = this;
276                 var query = {};
277                 for (var i = 0; i < obj.controller.render_list.length; i++) {
278                 var id = obj.controller.render_list[i][0];
279                 var node = document.getElementById(id);
280                         if (node && node.value != '') {
281                                 if (id == 'inactive') {
282                                         query[id] = node.getAttribute('value');
283                                         obj.error.sdump('D_DEBUG','id = ' + id + '  value = ' + node.getAttribute('value') + '\n');
284                 } else {
285                     if (id == 'search_depth') {
286                         query[id] = node.firstChild.getAttribute('value'); 
287                                 } else {
288                                         var value = node.value.replace(/^\s+/,'').replace(/[\\\s]+$/,'');
289                                         //value = value.replace(/\d/g,'');
290                                         switch(id) {
291                                                 case 'family_name' :
292                                                 case 'first_given_name' :
293                                                 case 'second_given_name' :
294                                                         value = value.replace(/^\W+/g,'').replace(/\W+$/g,'');
295                                                 break;
296                                         }
297                                         if (value != '') {
298                                                 query[id] = value;
299                                                 obj.error.sdump('D_DEBUG','id = ' + id + '  value = ' + value + '\n');
300                                         }
301                                 }
302                 }
303                         }
304                 }
305                 if (typeof obj.on_submit == 'function') {
306                         obj.on_submit(query);
307                 }
308                 if (typeof window.xulG == 'object' 
309                         && typeof window.xulG.on_submit == 'function') {
310                         obj.error.sdump('D_PATRON','patron.search_form: Calling external .on_submit()\n');
311                         window.xulG.on_submit(query);
312                 } else {
313                         obj.error.sdump('D_PATRON','patron.search_form: No external .on_query()\n');
314                 }
315         },
316
317 }
318
319 dump('exiting patron/search_form.js\n');