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