]> git.evergreen-ils.org Git - Evergreen.git/blob - Evergreen/staff_client/chrome/content/evergreen/patron/patron_display.js
focus and selection for scanbox
[Evergreen.git] / Evergreen / staff_client / chrome / content / evergreen / patron / patron_display.js
1 sdump('D_TRACE','Loading patron_display.js\n');
2
3 function patron_display_init(p) {
4         sdump('D_PATRON_DISPLAY',"TESTING: patron_display.js: " + mw.G['main_test_variable'] + '\n');
5         sdump('D_CONSTRUCTOR',arg_dump(arguments));
6
7
8         // gives: p.clamshell, p.right_panel, p.left_panel, p.inner_left_clamshell, p.inner_top_panel, p.inner_bottom_panel
9         patron_display_clamshell_init(p);
10
11         // gives: p.patron_items, p.redraw_patron_items
12         patron_display_patron_items_init(p);
13
14         // gives: p.patron_checkout_items, p.redraw_patron_checkout_items
15         patron_display_patron_checkout_items_init(p);
16
17         p.set_patron = function (au) {
18                 return p._patron = au;
19         }
20
21         p.display_patron = function (au) {
22                 if (au) p.set_patron(au);
23                 p.redraw_patron_items();
24                 return render_fm(p.w.document, { 'au' : p._patron });
25         }
26
27         p.retrieve_patron_via_barcode = function (barcode) {
28                 if (!barcode) barcode = patron_get_barcode( p._patron );
29                 p.set_patron( retrieve_patron_by_barcode( barcode ) );
30                 return p.display_patron();
31         }
32
33         p.retrieve_patron_via_id = function (id) {
34                 p.set_patron( retrieve_patron_by_id( id ) );
35                 return p.display_patron();
36         }
37
38         p.refresh = function() {
39                 if (p._patron) p.retrieve_patron_via_id( p._patron.id() );
40         }
41
42         p.commandset_node.getElementsByAttribute('id','cmd_patron_refresh')[0].addEventListener(
43                 'command',
44                 function (ev) {
45                         p.refresh();
46                 },
47                 false
48         );
49
50         function gen_func(i) {
51                 // because otherwise i would be 5 for each closure
52                 return function(ev) {
53                         dump('i = ' + i + '\n');
54                         p.clamshell.set_second_deck(i);
55                 };
56         }
57         var cmds = [ 'cmd_patron_checkout', 'cmd_patron_items', 'cmd_patron_holds', 
58                 'cmd_patron_bills', 'cmd_patron_edit', 'cmd_patron_info' ]
59         for (var i in cmds) {
60                 p.commandset_node.getElementsByAttribute('id',cmds[i])[0].addEventListener(
61                         'command',
62                         gen_func(i),
63                         false
64                 );
65         }
66
67         if (p.patron) {
68                 if (typeof(p.patron) == 'object') {
69                         p._patron = p.patron;
70                         p.display_patron();
71                 } else
72                         p.retrieve_patron_via_barcode( p.patron );
73         }
74
75         sdump('D_TRACE_EXIT',arg_dump(arguments));
76         return p;
77 }
78
79 function patron_display_clamshell_init(p) {
80         p.clamshell = clam_shell_init( { 'w' : p.w, 'node' : p.clamshell_node, 'debug' : p.app } );
81         p.left_panel = p.clamshell.first_deck;
82         p.right_panel = p.clamshell.second_deck;
83
84         p.inner_left_clamshell = clam_shell_init( { 'w' : p.w, 'node' : p.left_panel.firstChild, 'debug' : p.app } );
85         p.inner_top_panel = p.inner_left_clamshell.first_deck;
86         p.inner_bottom_panel = p.inner_left_clamshell.second_deck;
87 }
88
89 function patron_display_patron_items_init(p) {
90         p.patron_items = patron_items_init( { 'w' : p.w, 'node' : p.patron_items_node, 'popupset_node' : p.popupset_node, 'debug' : p.app } );
91
92         p.redraw_patron_items = function() {
93                 p.patron_items.clear_patron_items();
94                 if (!p._patron.checkouts()) patron_get_checkouts( p._patron );
95                 for (var i = 0; i < p._patron.checkouts().length; i++) {
96                         p.patron_items.add_patron_items( [ i ] );
97                 }
98         }
99
100         p.patron_items.register_patron_items_select_callback(
101                 function (ev) {
102                         sdump('D_PATRON_DISPLAY','Firing patron_items_select_callback\n');
103                         var patron_items = get_list_from_tree_selection( p.patron_items.paged_tree.tree );
104                         /* grab cover art for selected item? */
105                 }
106         );
107         p.patron_items.register_flesh_patron_items_function(
108                 function (treeitem) {
109                         sdump('D_PATRON_DISPLAY','Firing flesh_patron_items_function\n');
110                         var record_id = treeitem.getAttribute('record_id'); 
111                         p.patron_items.map_patron_items_to_cols( p._patron.checkouts()[ record_id ], treeitem );
112                 }
113         );
114         p.patron_items.register_context_builder(
115                 function (ev) {
116                         sdump('D_PATRON_DISPLAY','Firing context_builder\n');
117                         empty_widget(p.patron_items.paged_tree.popup);
118                         var patron_items = get_list_from_tree_selection( p.patron_items.paged_tree.tree );
119                         var menuitem;
120
121                         /*** RENEW ***/
122                         menuitem = p.patron_items.paged_tree.w.document.createElement('menuitem');
123                         p.patron_items.paged_tree.popup.appendChild( menuitem );
124                         menuitem.setAttribute('label',getString('circ.context_renew'));
125                         menuitem.addEventListener(
126                                 'command',
127                                 function (ev) {
128                                         sdump('D_PATRON_DISPLAY','Firing renew context\n');
129                                         for (var i = 0; i < patron_items.length; i++) {
130                                                 try {
131                                                         var idx = patron_items[i].getAttribute('record_id'); 
132                                                         var circ = p._patron.checkouts()[ idx ].circ;
133                                                         alert( js2JSON(renew_by_circ_id( circ.id() )) );
134                                                         p.refresh();
135                                                 } catch(E) {
136                                                         alert(E);
137                                                 }
138                                         }
139                                 },
140                                 false
141                         );
142
143                         /*** CHECKIN ***/
144                         menuitem = p.patron_items.paged_tree.w.document.createElement('menuitem');
145                         p.patron_items.paged_tree.popup.appendChild( menuitem );
146                         menuitem.setAttribute('label',getString('circ.context_checkin'));
147                         menuitem.addEventListener(
148                                 'command',
149                                 function (ev) {
150                                         sdump('D_PATRON_DISPLAY','Firing checkin context\n');
151                                         for (var i = 0; i < patron_items.length; i++) {
152                                                 try {
153                                                         var idx = patron_items[i].getAttribute('record_id'); 
154                                                         var copy = p._patron.checkouts()[ idx ].copy;
155                                                         alert( js2JSON(checkin_by_copy_barcode( copy.barcode() )) );
156                                                         p.refresh();
157                                                 } catch(E) {
158                                                         alert(E);
159                                                 }
160                                         }
161                                 },
162                                 false
163                         );
164
165                         /* separator */
166                         menuitem = p.patron_items.paged_tree.w.document.createElement('menuseparator');
167                         p.patron_items.paged_tree.popup.appendChild( menuitem );
168                         
169
170                         /*** COPY EDITOR ***/
171                         menuitem = p.patron_items.paged_tree.w.document.createElement('menuitem');
172                         p.patron_items.paged_tree.popup.appendChild( menuitem );
173                         menuitem.setAttribute('label',getString('circ.context_edit'));
174                         menuitem.addEventListener(
175                                 'command',
176                                 function (ev) {
177                                         for (var i = 0; i < patron_items.length; i++) {
178                                                 sdump('D_PATRON_DISPLAY','Firing copy edit context\n');
179                                         }
180                                 },
181                                 false
182                         );
183
184                         /*** OPAC ***/
185                         menuitem = p.patron_items.paged_tree.w.document.createElement('menuitem');
186                         p.patron_items.paged_tree.popup.appendChild( menuitem );
187                         menuitem.setAttribute('label',getString('circ.context_opac'));
188                         menuitem.addEventListener(
189                                 'command',
190                                 function (ev) {
191                                         for (var i = 0; i < patron_items.length; i++) {
192                                                 sdump('D_PATRON_DISPLAY','Firing opac context\n');
193                                         }
194                                 },
195                                 false
196                         );
197                         
198                 }
199         );
200 }
201
202 function patron_display_patron_checkout_items_init(p) {
203         p.patron_checkout_items = patron_checkout_items_init( { 'w' : p.w, 'node' : p.patron_checkout_items_node, 'popupset_node' : p.popupset_node, 'debug' : p.app } );
204         var tb = p.patron_checkout_items_node.getElementsByAttribute('id','patron_checkout_barcode_entry_textbox')[0];
205         var submit_button = p.patron_checkout_items_node.getElementsByAttribute('id','patron_checkout_submit_barcode_button')[0];
206
207         var checkouts = [];
208
209         p.attempt_checkout = function(barcode) {
210                 try {
211                         if (! is_barcode_valid(barcode) ) throw('Invalid Barcode');
212                         var permit_check = checkout_permit( barcode, p._patron.id(), 0 );
213                         if (permit_check.status == 0) {
214                                 var check = checkout_by_barcode( barcode, p._patron.id() );
215                                 if (check) {
216                                         checkouts.push( check );
217                                         p.patron_checkout_items.add_patron_checkout_items( [ checkouts.length - 1 ] );
218                                         tb.value = '';
219                                 }
220                         } else {
221                                 throw(permit_check.text);
222                         }
223                 } catch(E) {
224                         tb.select();
225                         handle_error(E);
226                 }
227                 tb.focus();
228         }
229
230         tb.addEventListener(
231                 'keypress',
232                 function(ev) {
233                         if (ev.keyCode == 13 || ev.keyCode == 77 ) { p.attempt_checkout( tb.value ); }
234                 },
235                 false
236         );
237         submit_button.addEventListener(
238                 'command',
239                 function(ev) {
240                         p.attempt_checkout( tb.value );
241                 },
242                 false
243         );
244
245         p.redraw_patron_checkout_items = function() {
246                 p.patron_checkout_items.clear_patron_checkout_items();
247                 for (var i = 0; i < checkouts.length; i++) {
248                         p.patron_checkout_items.add_patron_checkout_items( [ i ] );
249                 }
250         }
251
252         p.patron_checkout_items.register_patron_checkout_items_select_callback(
253                 function (ev) {
254                         sdump('D_PATRON_DISPLAY','Firing patron_checkout_items_select_callback\n');
255                         var patron_checkout_items = get_list_from_tree_selection( p.patron_checkout_items.paged_tree.tree );
256                         /* grab cover art for selected item? */
257                 }
258         );
259         p.patron_checkout_items.register_flesh_patron_checkout_items_function(
260                 function (treeitem) {
261                         sdump('D_PATRON_DISPLAY','Firing flesh_patron_checkout_items_function\n');
262                         var record_id = treeitem.getAttribute('record_id'); 
263                         p.patron_checkout_items.map_patron_checkout_items_to_cols( checkouts[ record_id ], treeitem );
264                 }
265         );
266         p.patron_checkout_items.register_context_builder(
267                 function (ev) {
268                         sdump('D_PATRON_DISPLAY','Firing context_builder\n');
269                         empty_widget(p.patron_checkout_items.paged_tree.popup);
270                         var patron_checkout_items = get_list_from_tree_selection( p.patron_checkout_items.paged_tree.tree );
271                         var menuitem;
272
273                         /*** CHECKIN ***/
274                         menuitem = p.patron_checkout_items.paged_tree.w.document.createElement('menuitem');
275                         p.patron_checkout_items.paged_tree.popup.appendChild( menuitem );
276                         menuitem.setAttribute('label',getString('circ.context_checkin'));
277                         menuitem.addEventListener(
278                                 'command',
279                                 function (ev) {
280                                         sdump('D_PATRON_DISPLAY','Firing checkin context\n');
281                                         var keep_these = [];
282                                         for (var i = 0; i < patron_checkout_items.length; i++) {
283                                                 try {
284                                                         var idx = patron_checkout_items[i].getAttribute('record_id'); 
285                                                         var copy = checkouts[ idx ].copy;
286                                                         var status = checkin_by_copy_barcode( copy.barcode() );
287                                                         if (!status) { // change this to whatever it takes
288                                                                 keep_these.push( checkouts[ idx ] );    
289                                                         }
290                                                         checkouts = keep_these;
291                                                         alert( js2JSON( status ) );
292                                                         p.refresh();
293                                                 } catch(E) {
294                                                         alert(E);
295                                                 }
296                                         }
297                                 },
298                                 false
299                         );
300
301                         /* separator */
302                         menuitem = p.patron_checkout_items.paged_tree.w.document.createElement('menuseparator');
303                         p.patron_checkout_items.paged_tree.popup.appendChild( menuitem );
304                         
305
306                         /*** COPY EDITOR ***/
307                         menuitem = p.patron_checkout_items.paged_tree.w.document.createElement('menuitem');
308                         p.patron_checkout_items.paged_tree.popup.appendChild( menuitem );
309                         menuitem.setAttribute('label',getString('circ.context_edit'));
310                         menuitem.addEventListener(
311                                 'command',
312                                 function (ev) {
313                                         for (var i = 0; i < patron_checkout_items.length; i++) {
314                                                 var idx = patron_checkout_items[i].getAttribute('record_id');
315                                                 sdump('D_PATRON_DISPLAY','Firing copy edit context\n');
316                                         }
317                                 },
318                                 false
319                         );
320
321                         /*** OPAC ***/
322                         menuitem = p.patron_checkout_items.paged_tree.w.document.createElement('menuitem');
323                         p.patron_checkout_items.paged_tree.popup.appendChild( menuitem );
324                         menuitem.setAttribute('label',getString('circ.context_opac'));
325                         menuitem.addEventListener(
326                                 'command',
327                                 function (ev) {
328                                         for (var i = 0; i < patron_checkout_items.length; i++) {
329                                                 var idx = patron_checkout_items[i].getAttribute('record_id');
330                                                 sdump('D_PATRON_DISPLAY','Firing opac context\n');
331                                         }
332                                 },
333                                 false
334                         );
335                         
336                 }
337         );
338 }
339
340