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