]> git.evergreen-ils.org Git - working/Evergreen.git/blob - Evergreen/staff_client/chrome/content/evergreen/patron/patron_display.js
holds interface
[working/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
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         // gives: p.patron_holds, p.redraw_patron_holds
18         patron_display_patron_holds_init(p);
19
20         p.set_patron = function (au) {
21                 return p._patron = au;
22         }
23
24         p.display_patron = function (au) {
25                 if (au) p.set_patron(au);
26                 p.redraw_patron_checkout_items();
27                 p.redraw_patron_items();
28                 p.redraw_patron_holds();
29                 return render_fm(p.w.document, { 'au' : p._patron });
30         }
31
32         p.retrieve_patron_via_barcode = function (barcode) {
33                 if (!barcode) barcode = patron_get_barcode( p._patron );
34                 p.set_patron( retrieve_patron_by_barcode( barcode ) );
35                 return p.display_patron();
36         }
37
38         p.retrieve_patron_via_id = function (id) {
39                 p.set_patron( retrieve_patron_by_id( id ) );
40                 return p.display_patron();
41         }
42
43         p.refresh = function() {
44                 if (p._patron) p.retrieve_patron_via_id( p._patron.id() );
45         }
46
47         set_patron_display_widgets(p);
48
49         if (p.patron) {
50                 if (typeof(p.patron) == 'object') {
51                         p._patron = p.patron;
52                         p.display_patron();
53                 } else
54                         p.retrieve_patron_via_barcode( p.patron );
55         }
56
57         sdump('D_TRACE_EXIT',arg_dump(arguments));
58         return p;
59 }
60
61 function set_patron_display_widgets(p) {
62         p.commandset_node.getElementsByAttribute('id','cmd_patron_refresh')[0].addEventListener(
63                 'command',
64                 function (ev) {
65                         p.refresh();
66                 },
67                 false
68         );
69
70         function gen_func(i) {
71                 // because otherwise i would be 5 for each closure
72                 return function(ev) {
73                         p.clamshell.set_second_deck(i);
74                 };
75         }
76         var cmds = [ 'cmd_patron_checkout', 'cmd_patron_items', 'cmd_patron_holds', 
77                 'cmd_patron_bills', 'cmd_patron_edit', 'cmd_patron_info' ]
78         for (var i in cmds) {
79                 p.commandset_node.getElementsByAttribute('id',cmds[i])[0].addEventListener(
80                         'command',
81                         gen_func(i),
82                         false
83                 );
84         }
85         p.commandset_node.getElementsByAttribute('id','cmd_patron_checkout')[0].addEventListener(
86                 'command',
87                 function () {
88                         focus_widget( p.w.document, 'patron_checkout_barcode_entry_textbox' );
89                 },
90                 false
91         );
92
93 }
94
95
96 function patron_display_clamshell_init(p) {
97         p.clamshell = clam_shell_init( { 'w' : p.w, 'node' : p.clamshell_node, 'debug' : p.app } );
98         p.left_panel = p.clamshell.first_deck;
99         p.right_panel = p.clamshell.second_deck;
100 }
101
102 function patron_display_patron_items_init(p) {
103         p.patron_items = patron_items_init( { 'w' : p.w, 'node' : p.patron_items_node, 'debug' : p.app } );
104
105         p.redraw_patron_items = function() {
106                 p.patron_items.clear_patron_items();
107                 if (!p._patron.checkouts()) patron_get_checkouts( p._patron );
108                 for (var i = 0; i < p._patron.checkouts().length; i++) {
109                         p.patron_items.add_patron_items( [ i ] );
110                 }
111         }
112
113         p.patron_items.register_patron_items_select_callback(
114                 function (ev) {
115                         sdump('D_PATRON_DISPLAY','Firing patron_items_select_callback\n');
116                         sdump('D_PATRON_DISPLAY','ev.target = ' + ev.target + '\n');
117                         var patron_items = get_list_from_tree_selection( p.patron_items.paged_tree.tree );
118                         /* grab cover art for selected item? */
119                 }
120         );
121         p.patron_items.register_flesh_patron_items_function(
122                 function (treeitem) {
123                         sdump('D_PATRON_DISPLAY','Firing flesh_patron_items_function\n');
124                         var record_id = treeitem.getAttribute('record_id'); 
125                         p.patron_items.map_patron_items_to_cols( p._patron.checkouts()[ record_id ], treeitem );
126                 }
127         );
128         p.patron_items.register_item_context_builder(
129                 function (ev) {
130                         sdump('D_PATRON_DISPLAY','Firing context_builder for patron_items\n');
131                         sdump('D_PATRON_DISPLAY','ev.target = ' + ev.target + '\np.patron_items.paged_tree.popup = ' + p.patron_items.paged_tree.popup + '\n');
132                         empty_widget(p.patron_items.paged_tree.popup);
133                         var patron_items = get_list_from_tree_selection( p.patron_items.paged_tree.tree );
134                         sdump('D_PATRON_DISPLAY','patron_items.length = ' + patron_items.length + '\n');
135
136                         /*** RENEW ***/
137                         var menuitem_pi_r = p.patron_items.paged_tree.w.document.createElement('menuitem');
138                         p.patron_items.paged_tree.popup.appendChild( menuitem_pi_r );
139                         menuitem_pi_r.setAttribute('label',getString('circ.context_renew'));
140                         menuitem_pi_r.addEventListener(
141                                 'command',
142                                 function (ev) {
143                                         sdump('D_PATRON_DISPLAY','Firing renew context for patron_items\n');
144                                         for (var i = 0; i < patron_items.length; i++) {
145                                                 try {
146                                                         var idx = patron_items[i].getAttribute('record_id'); 
147                                                         var circ = p._patron.checkouts()[ idx ].circ;
148                                                         alert( js2JSON(renew_by_circ_id( circ.id() )) );
149                                                         p.refresh();
150                                                 } catch(E) {
151                                                         alert(E);
152                                                 }
153                                         }
154                                 },
155                                 false
156                         );
157
158                         /*** CHECKIN ***/
159                         var menuitem_pi_c = p.patron_items.paged_tree.w.document.createElement('menuitem');
160                         p.patron_items.paged_tree.popup.appendChild( menuitem_pi_c );
161                         menuitem_pi_c.setAttribute('label',getString('circ.context_checkin'));
162                         menuitem_pi_c.addEventListener(
163                                 'command',
164                                 function (ev) {
165                                         sdump('D_PATRON_DISPLAY','Firing checkin context for patron_items\n');
166                                         for (var i = 0; i < patron_items.length; i++) {
167                                                 try {
168                                                         var idx = patron_items[i].getAttribute('record_id'); 
169                                                         var copy = p._patron.checkouts()[ idx ].copy;
170                                                         alert( js2JSON(checkin_by_copy_barcode( copy.barcode() )) );
171                                                         p.refresh();
172                                                 } catch(E) {
173                                                         alert(E);
174                                                 }
175                                         }
176                                 },
177                                 false
178                         );
179
180                         /* separator */
181                         var menuitem_pi_s = p.patron_items.paged_tree.w.document.createElement('menuseparator');
182                         p.patron_items.paged_tree.popup.appendChild( menuitem_pi_s );
183                         
184
185                         /*** COPY EDITOR ***/
186                         var menuitem_pi_ce = p.patron_items.paged_tree.w.document.createElement('menuitem');
187                         p.patron_items.paged_tree.popup.appendChild( menuitem_pi_ce );
188                         menuitem_pi_ce.setAttribute('label',getString('circ.context_edit'));
189                         menuitem_pi_ce.addEventListener(
190                                 'command',
191                                 function (ev) {
192                                         sdump('D_PATRON_DISPLAY','Firing copy editor context for patron_items\n');
193                                         for (var i = 0; i < patron_items.length; i++) {
194                                                 sdump('D_PATRON_DISPLAY','Firing copy edit context\n');
195                                         }
196                                 },
197                                 false
198                         );
199
200                         /*** OPAC ***/
201                         var menuitem_pi_o = p.patron_items.paged_tree.w.document.createElement('menuitem');
202                         p.patron_items.paged_tree.popup.appendChild( menuitem_pi_o );
203                         menuitem_pi_o.setAttribute('label',getString('circ.context_opac'));
204                         menuitem_pi_o.addEventListener(
205                                 'command',
206                                 function (ev) {
207                                         sdump('D_PATRON_DISPLAY','Firing opac context for patron_items\n');
208                                         for (var i = 0; i < patron_items.length; i++) {
209                                                 sdump('D_PATRON_DISPLAY','Firing opac context\n');
210                                         }
211                                 },
212                                 false
213                         );
214                         
215                 }
216         );
217 }
218
219 function patron_display_patron_checkout_items_init(p) {
220         p.patron_checkout_items = patron_checkout_items_init( { 'w' : p.w, 'node' : p.patron_checkout_items_node, 'debug' : p.app } );
221         var tb = p.patron_checkout_items_node.getElementsByAttribute('id','patron_checkout_barcode_entry_textbox')[0];
222         var submit_button = p.patron_checkout_items_node.getElementsByAttribute('id','patron_checkout_submit_barcode_button')[0];
223
224         var checkouts = [];
225
226         p.w.document.getElementById('checkout_done').addEventListener(
227                 'command',
228                 function () {
229                         // print receipt call goes here
230                         checkouts = []; p.refresh(); tb.focus();
231                 },
232                 false
233         );
234         p.attempt_checkout = function(barcode) {
235                 try {
236                         //if (! is_barcode_valid(barcode) ) throw('Invalid Barcode');
237                         var permit_check = checkout_permit( barcode, p._patron.id(), 0 );
238                         if (permit_check.status == 0) {
239                                 var check = checkout_by_copy_barcode( barcode, p._patron.id() );
240                                 if (check) {
241                                         checkouts.push( check );
242                                         p.patron_checkout_items.add_checkout_items( [ checkouts.length - 1 ] );
243                                         var temp = p._patron.checkouts();
244                                         temp.push( check );
245                                         p._patron.checkouts( temp );
246                                         p.display_patron();
247                                         tb.value = '';
248                                 }
249                         } else {
250                                 throw(permit_check.text);
251                         }
252                 } catch(E) {
253                         tb.select();
254                         handle_error(E);
255                 }
256                 tb.focus();
257         }
258
259         tb.addEventListener(
260                 'keypress',
261                 function(ev) {
262                         if (ev.keyCode == 13 || ev.keyCode == 77 ) { p.attempt_checkout( tb.value ); }
263                 },
264                 false
265         );
266         submit_button.addEventListener(
267                 'command',
268                 function(ev) {
269                         p.attempt_checkout( tb.value );
270                 },
271                 false
272         );
273
274         p.redraw_patron_checkout_items = function() {
275                 p.patron_checkout_items.clear_checkout_items();
276                 for (var i = 0; i < checkouts.length; i++) {
277                         p.patron_checkout_items.add_checkout_items( [ i ] );
278                 }
279         }
280
281         p.patron_checkout_items.register_patron_checkout_items_select_callback(
282                 function (ev) {
283                         sdump('D_PATRON_DISPLAY','Firing patron_checkout_items_select_callback\n');
284                         sdump('D_PATRON_DISPLAY','ev.target = ' + ev.target + '\n');
285                         var patron_checkout_items = get_list_from_tree_selection( p.patron_checkout_items.paged_tree.tree );
286                         /* grab cover art for selected item? */
287                 }
288         );
289         p.patron_checkout_items.register_flesh_patron_checkout_items_function(
290                 function (treeitem) {
291                         sdump('D_PATRON_DISPLAY','Firing flesh_patron_checkout_items_function\n');
292                         var record_id = treeitem.getAttribute('record_id'); 
293                         p.patron_checkout_items.map_patron_checkout_items_to_cols( checkouts[ record_id ], treeitem );
294                 }
295         );
296         p.patron_checkout_items.register_checkout_context_builder(
297                 function (ev) {
298                         sdump('D_PATRON_DISPLAY','Firing context_builder for patron_checkout_items\n');
299                         sdump('D_PATRON_DISPLAY','ev.target = ' + ev.target + '\np.patron_checkout_items.paged_tree.popup = ' + p.patron_checkout_items.paged_tree.popup + '\n');
300                         empty_widget(p.patron_checkout_items.paged_tree.popup);
301                         var patron_checkout_items = get_list_from_tree_selection( p.patron_checkout_items.paged_tree.tree );
302
303                         /*** CHECKIN ***/
304                         var menuitem_pci_c = p.patron_checkout_items.paged_tree.w.document.createElement('menuitem');
305                         p.patron_checkout_items.paged_tree.popup.appendChild( menuitem_pci_c );
306                         menuitem_pci_c.setAttribute('label',getString('circ.context_checkin'));
307                         menuitem_pci_c.addEventListener(
308                                 'command',
309                                 function (ev) {
310                                         sdump('D_PATRON_DISPLAY','Firing checkin context for patron_checkout_items\n');
311                                         var keep_these = [];
312                                         for (var i = 0; i < patron_checkout_items.length; i++) {
313                                                 try {
314                                                         var idx = patron_checkout_items[i].getAttribute('record_id'); 
315                                                         var copy = checkouts[ idx ].copy;
316                                                         var status = checkin_by_copy_barcode( copy.barcode() );
317                                                         if (status == null) { // change this to whatever it takes
318                                                                 keep_these.push( checkouts[ idx ] );    
319                                                         }
320                                                         checkouts = keep_these;
321                                                         alert( js2JSON( status ) );
322                                                         p.refresh();
323                                                 } catch(E) {
324                                                         alert(E);
325                                                 }
326                                         }
327                                 },
328                                 false
329                         );
330
331                         /* separator */
332                         var menuitem_pci_s = p.patron_checkout_items.paged_tree.w.document.createElement('menuseparator');
333                         p.patron_checkout_items.paged_tree.popup.appendChild( menuitem_pci_s );
334                         
335
336                         /*** COPY EDITOR ***/
337                         var menuitem_pci_ce = p.patron_checkout_items.paged_tree.w.document.createElement('menuitem');
338                         p.patron_checkout_items.paged_tree.popup.appendChild( menuitem_pci_ce );
339                         menuitem_pci_ce.setAttribute('label',getString('circ.context_edit'));
340                         menuitem_pci_ce.addEventListener(
341                                 'command',
342                                 function (ev) {
343                                         sdump('D_PATRON_DISPLAY','Firing copy editor context for patron_checkout_items\n');
344                                         for (var i = 0; i < patron_checkout_items.length; i++) {
345                                                 var idx = patron_checkout_items[i].getAttribute('record_id');
346                                                 sdump('D_PATRON_DISPLAY','Firing copy edit context\n');
347                                         }
348                                 },
349                                 false
350                         );
351
352                         /*** OPAC ***/
353                         var menuitem_pci_o = p.patron_checkout_items.paged_tree.w.document.createElement('menuitem');
354                         p.patron_checkout_items.paged_tree.popup.appendChild( menuitem_pci_o );
355                         menuitem_pci_o.setAttribute('label',getString('circ.context_opac'));
356                         menuitem_pci_o.addEventListener(
357                                 'command',
358                                 function (ev) {
359                                         sdump('D_PATRON_DISPLAY','Firing opac context for patron_checkout_items\n');
360                                         for (var i = 0; i < patron_checkout_items.length; i++) {
361                                                 var idx = patron_checkout_items[i].getAttribute('record_id');
362                                                 sdump('D_PATRON_DISPLAY','Firing opac context\n');
363                                         }
364                                 },
365                                 false
366                         );
367                         
368                 }
369         );
370 }
371
372 function patron_display_patron_holds_init(p) {
373         p.patron_holds = patron_holds_init( { 'w' : p.w, 'node' : p.patron_holds_node, 'debug' : p.app } );
374
375         p.redraw_patron_holds = function() {
376                 p.patron_holds.clear_patron_holds();
377                 if (!p._patron.hold_requests()) patron_get_holds( p._patron );
378                 for (var i = 0; i < p._patron.hold_requests().length; i++) {
379                         p.patron_holds.add_patron_holds( [ i ] );
380                 }
381         }
382
383         p.patron_holds.register_patron_holds_select_callback(
384                 function (ev) {
385                         sdump('D_PATRON_DISPLAY','Firing patron_holds_select_callback\n');
386                         sdump('D_PATRON_DISPLAY','ev.target = ' + ev.target + '\n');
387                         var patron_holds = get_list_from_tree_selection( p.patron_holds.paged_tree.tree );
388                         /* grab cover art for selected item? */
389                 }
390         );
391         p.patron_holds.register_flesh_patron_holds_function(
392                 function (treeitem) {
393                         sdump('D_PATRON_DISPLAY','Firing flesh_patron_holds_function\n');
394                         var record_id = treeitem.getAttribute('record_id'); 
395                         p.patron_holds.map_patron_holds_to_cols( p._patron.hold_requests()[ record_id ], treeitem );
396                 }
397         );
398         p.patron_holds.register_item_context_builder(
399                 function (ev) {
400                         sdump('D_PATRON_DISPLAY','Firing context_builder for patron_holds\n');
401                         sdump('D_PATRON_DISPLAY','ev.target = ' + ev.target + '\np.patron_holds.paged_tree.popup = ' + p.patron_holds.paged_tree.popup + '\n');
402                         empty_widget(p.patron_holds.paged_tree.popup);
403                         var patron_holds = get_list_from_tree_selection( p.patron_holds.paged_tree.tree );
404                         sdump('D_PATRON_DISPLAY','patron_holds.length = ' + patron_holds.length + '\n');
405
406                         /*** COPY EDITOR ***/
407                         var menuitem_pi_ce = p.patron_holds.paged_tree.w.document.createElement('menuitem');
408                         p.patron_holds.paged_tree.popup.appendChild( menuitem_pi_ce );
409                         menuitem_pi_ce.setAttribute('label',getString('circ.context_edit'));
410                         menuitem_pi_ce.addEventListener(
411                                 'command',
412                                 function (ev) {
413                                         sdump('D_PATRON_DISPLAY','Firing copy editor context for patron_holds\n');
414                                         for (var i = 0; i < patron_holds.length; i++) {
415                                                 sdump('D_PATRON_DISPLAY','Firing copy edit context\n');
416                                         }
417                                 },
418                                 false
419                         );
420
421                         /*** OPAC ***/
422                         var menuitem_pi_o = p.patron_holds.paged_tree.w.document.createElement('menuitem');
423                         p.patron_holds.paged_tree.popup.appendChild( menuitem_pi_o );
424                         menuitem_pi_o.setAttribute('label',getString('circ.context_opac'));
425                         menuitem_pi_o.addEventListener(
426                                 'command',
427                                 function (ev) {
428                                         sdump('D_PATRON_DISPLAY','Firing opac context for patron_holds\n');
429                                         for (var i = 0; i < patron_holds.length; i++) {
430                                                 sdump('D_PATRON_DISPLAY','Firing opac context\n');
431                                         }
432                                 },
433                                 false
434                         );
435                         
436                 }
437         );
438 }
439
440