]> git.evergreen-ils.org Git - working/Evergreen.git/blob - Open-ILS/xul/staff_client/server/patron/search_result.js
clipboard for patron search
[working/Evergreen.git] / Open-ILS / xul / staff_client / server / patron / search_result.js
1 dump('entering patron/search_result.js\n');
2
3 if (typeof patron == 'undefined') patron = {};
4 patron.search_result = 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_result.prototype = {
12
13         'init' : function( params ) {
14
15                 var obj = this;
16
17                 obj.query = params['query'];
18
19                 JSAN.use('OpenILS.data'); this.OpenILS = {}; 
20                 obj.OpenILS.data = new OpenILS.data(); obj.OpenILS.data.init({'via':'stash'});
21
22                 JSAN.use('util.list'); obj.list = new util.list('patron_list');
23                 function getString(s) { return obj.OpenILS.data.entities[s]; }
24
25                 JSAN.use('patron.util');
26                 var columns = patron.util.columns(
27                         {
28                                 /* 'active' : { 'hidden' : 'false' }, */
29                                 'barred' : { 'hidden' : 'false' },
30                                 'family_name' : { 'hidden' : 'false' },
31                                 'first_given_name' : { 'hidden' : 'false' },
32                                 'second_given_name' : { 'hidden' : 'false' },
33                                 'dob' : { 'hidden' : 'false' },
34                         }
35                 );
36                 obj.list.init(
37                         {
38                                 'columns' : columns,
39                                 'map_row_to_column' : patron.util.std_map_row_to_column(),
40                                 'retrieve_row' : function(params) {
41                                         var id = params.retrieve_id;
42                                         var au_obj = patron.util.retrieve_au_via_id( ses(), id,
43                                                 function(req) {
44                                                         try {
45                                                                 var row = params.row;
46                                                                 if (typeof row.my == 'undefined') row.my = {};
47                                                                 row.my.au = req.getResultObject();
48                                                                 if (typeof params.on_retrieve == 'function') {
49                                                                         params.on_retrieve(row);
50                                                                 } else {
51                                                                         alert('typeof params.on_retrieve == ' + typeof params.on_retrieve);
52                                                                 }
53                                                         } catch(E) {
54                                                                 alert('error: ' + E);
55                                                         }
56                                                 }
57                                         );
58                                 },
59                                 'on_select' : function(ev) {
60                                         JSAN.use('util.functional');
61                                         var sel = obj.list.retrieve_selection();
62                                         var list = util.functional.map_list(
63                                                 sel,
64                                                 function(o) { return o.getAttribute('retrieve_id'); }
65                                         );
66                                         obj.controller.view.cmd_sel_clip.setAttribute('disabled', list.length < 1 );
67                                         if (typeof obj.on_select == 'function') {
68                                                 obj.on_select(list);
69                                         }
70                                         if (typeof window.xulG == 'object' && typeof window.xulG.on_select == 'function') {
71                                                 obj.error.sdump('D_PATRON','patron.search_result: Calling external .on_select()\n');
72                                                 window.xulG.on_select(list);
73                                         } else {
74                                                 obj.error.sdump('D_PATRON','patron.search_result: No external .on_select()\n');
75                                         }
76                                 }
77                         }
78                 );
79                 JSAN.use('util.controller'); obj.controller = new util.controller();
80                 obj.controller.init(
81                         {
82                                 control_map : {
83                                         'cmd_broken' : [
84                                                 ['command'],
85                                                 function() { alert('Not Yet Implemented'); }
86                                         ],
87                                         'cmd_search_print' : [
88                                                 ['command'],
89                                                 function() {
90                                                         dump( js2JSON( obj.list.dump() ) );
91                                                         alert( js2JSON( obj.list.dump() ) );
92                                                 }
93                                         ],
94                                         'cmd_sel_clip' : [
95                                                 ['command'],
96                                                 function() {
97                                                         try {
98                                                                 obj.list.clipboard();
99                                                         } catch(E) {
100                                                                 obj.error.standard_unexpected_error_alert('patron search clipboard',E);
101                                                         }
102                                                 }
103                                         ],
104                                 }
105                         }
106                 );
107
108                 if (obj.query) obj.search(obj.query);
109         },
110
111         'search' : function(query) {
112                 var obj = this;
113                 var search_hash = {};
114                 obj.search_term_count = 0;
115                 var inactive = false;
116                 for (var i in query) {
117                         switch( i ) {
118                                 case 'phone': case 'ident': 
119                                 
120                                         search_hash[ i ] = {};
121                                         search_hash[ i ].value = query[i];
122                                         search_hash[i].group = 2; 
123                                         obj.search_term_count++;
124                                 break;
125
126                                 case 'street1': case 'street2': case 'city': case 'state': case 'post_code': 
127                                 
128                                         search_hash[ i ] = {};
129                                         search_hash[ i ].value = query[i];
130                                         search_hash[i].group = 1; 
131                                         obj.search_term_count++;
132                                 break;
133
134                                 case 'family_name': case 'first_given_name': case 'second_given_name': case 'email':
135
136                                         search_hash[ i ] = {};
137                                         search_hash[ i ].value = query[i];
138                                         search_hash[i].group = 0; 
139                                         obj.search_term_count++;
140                                 break;
141
142                                 case 'inactive':
143                                         if (query[i] == 'checked') inactive = true;
144                                 break;
145                         }
146                 }
147                 try {
148                         var results = [];
149
150                         var params = [ ses(), search_hash, 1000, [ 'family_name ASC', 'first_given_name ASC', 'second_given_name ASC', 'dob DESC' ] ];
151                         if (inactive) {
152                                 params.push(1);
153                                 if (document.getElementById('active')) {
154                                         document.getElementById('active').setAttribute('hidden','false');
155                                         document.getElementById('active').hidden = false;
156                                 }
157                         }
158                         if (obj.search_term_count > 0) {
159                                 results = this.network.simple_request( 'FM_AU_IDS_RETRIEVE_VIA_HASH', params );
160                                 if ( (results == null) || (typeof results.ilsevent != 'undefined') ) throw(results);
161                                 if (results.length == 0) {
162                                         alert('No patrons found matching search criteria.');
163                                         return;
164                                 }
165                         } else {
166                                 alert('Please enter some search terms.');
167                                 return;
168                         }
169
170                         //this.list.append( { 'retrieve_id' : results[i], 'row' : {} } );
171                         var funcs = [];
172
173                                 function gen_func(r) {
174                                         return function() {
175                                                 obj.list.append( { 'retrieve_id' : r, 'row' : {} } );
176                                         }
177                                 }
178
179                         for (var i = 0; i < results.length; i++) {
180                                 funcs.push( gen_func(results[i]) );
181                         }
182                         JSAN.use('util.exec'); var exec = new util.exec(4);
183                         exec.chain( funcs );
184
185                 } catch(E) {
186                         this.error.standard_unexpected_error_alert('patron.search_result.search',E);
187                 }
188         }
189
190 }
191
192 dump('exiting patron/search_result.js\n');