]> git.evergreen-ils.org Git - working/Evergreen.git/blob - Evergreen/staff_client/chrome/content/evergreen/patron/patron_display.js
debugging alerts for use in Window. cash drawer stub. bill pay call. redraws vs...
[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
111
112 }
113
114
115 function patron_display_clamshell_init(p) {
116         p.clamshell = clam_shell_init( { 'w' : p.w, 'node' : p.clamshell_node, 'debug' : p.app } );
117         p.left_panel = p.clamshell.first_deck;
118         p.right_panel = p.clamshell.second_deck;
119 }
120
121 function patron_display_patron_items_init(p) {
122         p.patron_items = patron_items_init( { 'w' : p.w, 'node' : p.patron_items_node, 'debug' : p.app } );
123
124         p.redraw_patron_items = function() {
125                 p.patron_items.clear_patron_items();
126                 if (!p._patron.checkouts()) patron_get_checkouts( p._patron );
127                 for (var i = 0; i < p._patron.checkouts().length; i++) {
128                         p.patron_items.add_patron_items( [ i ] );
129                 }
130         }
131
132         p.patron_items.register_patron_items_select_callback(
133                 function (ev) {
134                         sdump('D_PATRON_DISPLAY','Firing patron_items_select_callback\n');
135                         sdump('D_PATRON_DISPLAY','ev.target = ' + ev.target + '\n');
136                         var patron_items = get_list_from_tree_selection( p.patron_items.paged_tree.tree );
137                         /* grab cover art for selected item? */
138                 }
139         );
140         p.patron_items.register_flesh_patron_items_function(
141                 function (treeitem) {
142                         sdump('D_PATRON_DISPLAY','Firing flesh_patron_items_function\n');
143                         var record_id = treeitem.getAttribute('record_id'); 
144                         p.patron_items.map_patron_items_to_cols( p._patron.checkouts()[ record_id ], treeitem );
145                 }
146         );
147         p.patron_items.register_item_context_builder(
148                 function (ev) {
149                         sdump('D_PATRON_DISPLAY','Firing context_builder for patron_items\n');
150                         sdump('D_PATRON_DISPLAY','ev.target = ' + ev.target + '\np.patron_items.paged_tree.popup = ' + p.patron_items.paged_tree.popup + '\n');
151                         empty_widget(p.patron_items.paged_tree.popup);
152                         var patron_items = get_list_from_tree_selection( p.patron_items.paged_tree.tree );
153                         sdump('D_PATRON_DISPLAY','patron_items.length = ' + patron_items.length + '\n');
154
155                         /*** RENEW ***/
156                         var menuitem_pi_r = p.patron_items.paged_tree.w.document.createElement('menuitem');
157                         p.patron_items.paged_tree.popup.appendChild( menuitem_pi_r );
158                         menuitem_pi_r.setAttribute('label',getString('circ.context_renew'));
159                         menuitem_pi_r.addEventListener(
160                                 'command',
161                                 function (ev) {
162                                         sdump('D_PATRON_DISPLAY','Firing renew context for patron_items\n');
163                                         for (var i = 0; i < patron_items.length; i++) {
164                                                 try {
165                                                         var idx = patron_items[i].getAttribute('record_id'); 
166                                                         var circ = p._patron.checkouts()[ idx ].circ;
167                                                         alert( js2JSON(renew_by_circ_id( circ.id() )) );
168                                                         p.refresh();
169                                                 } catch(E) {
170                                                         alert(E);
171                                                 }
172                                         }
173                                 },
174                                 false
175                         );
176
177                         /*** CHECKIN ***/
178                         var menuitem_pi_c = p.patron_items.paged_tree.w.document.createElement('menuitem');
179                         p.patron_items.paged_tree.popup.appendChild( menuitem_pi_c );
180                         menuitem_pi_c.setAttribute('label',getString('circ.context_checkin'));
181                         menuitem_pi_c.addEventListener(
182                                 'command',
183                                 function (ev) {
184                                         sdump('D_PATRON_DISPLAY','Firing checkin context for patron_items\n');
185                                         for (var i = 0; i < patron_items.length; i++) {
186                                                 try {
187                                                         var idx = patron_items[i].getAttribute('record_id'); 
188                                                         var copy = p._patron.checkouts()[ idx ].copy;
189                                                         checkin_by_copy_barcode( copy.barcode(), null );
190                                                         p.refresh();
191                                                 } catch(E) {
192                                                         alert(E);
193                                                 }
194                                         }
195                                 },
196                                 false
197                         );
198
199                         /* separator */
200                         var menuitem_pi_s = p.patron_items.paged_tree.w.document.createElement('menuseparator');
201                         p.patron_items.paged_tree.popup.appendChild( menuitem_pi_s );
202                         
203
204                         /*** COPY EDITOR ***/
205                         var menuitem_pi_ce = p.patron_items.paged_tree.w.document.createElement('menuitem');
206                         p.patron_items.paged_tree.popup.appendChild( menuitem_pi_ce );
207                         menuitem_pi_ce.setAttribute('label',getString('circ.context_edit'));
208                         menuitem_pi_ce.addEventListener(
209                                 'command',
210                                 function (ev) {
211                                         sdump('D_PATRON_DISPLAY','Firing copy editor context for patron_items\n');
212                                         for (var i = 0; i < patron_items.length; i++) {
213                                                 sdump('D_PATRON_DISPLAY','Firing copy edit context\n');
214                                         }
215                                 },
216                                 false
217                         );
218
219                         /*** OPAC ***/
220                         var menuitem_pi_o = p.patron_items.paged_tree.w.document.createElement('menuitem');
221                         p.patron_items.paged_tree.popup.appendChild( menuitem_pi_o );
222                         menuitem_pi_o.setAttribute('label',getString('circ.context_opac'));
223                         menuitem_pi_o.addEventListener(
224                                 'command',
225                                 function (ev) {
226                                         sdump('D_PATRON_DISPLAY','Firing opac context for patron_items\n');
227                                         for (var i = 0; i < patron_items.length; i++) {
228                                                 sdump('D_PATRON_DISPLAY','Firing opac context\n');
229                                         }
230                                 },
231                                 false
232                         );
233                         
234                 }
235         );
236 }
237
238 function patron_display_patron_checkout_items_init(p) {
239         p.patron_checkout_items = patron_checkout_items_init( { 'w' : p.w, 'node' : p.patron_checkout_items_node, 'debug' : p.app } );
240         var tb = p.patron_checkout_items_node.getElementsByAttribute('id','patron_checkout_barcode_entry_textbox')[0];
241         var submit_button = p.patron_checkout_items_node.getElementsByAttribute('id','patron_checkout_submit_barcode_button')[0];
242
243         var checkouts = [];
244
245         p.w.document.getElementById('checkout_done').addEventListener(
246                 'command',
247                 function () {
248                         // print receipt call goes here
249                         checkouts = []; p.refresh(); tb.focus();
250                 },
251                 false
252         );
253         p.attempt_checkout = function(barcode) {
254                 try {
255                         //if (! is_barcode_valid(barcode) ) throw('Invalid Barcode');
256                         var permit_check = checkout_permit( barcode, p._patron.id(), 0 );
257                         if (permit_check.status == 0) {
258                                 var check = checkout_by_copy_barcode( barcode, p._patron.id() );
259                                 if (check) {
260                                         checkouts.push( check );
261                                         p.patron_checkout_items.add_checkout_items( [ checkouts.length - 1 ] );
262                                         var temp = p._patron.checkouts();
263                                         temp.push( check );
264                                         p._patron.checkouts( temp );
265                                         render_fm(p.w.document, { 'au' : p._patron }); // p.display_patron();
266                                         p.redraw_patron_items();
267                                         tb.value = '';
268                                 }
269                         } else {
270                                 throw(permit_check.text);
271                         }
272                 } catch(E) {
273                         tb.select();
274                         handle_error(E);
275                 }
276                 tb.focus();
277         }
278
279         tb.addEventListener(
280                 'keypress',
281                 function(ev) {
282                         if (ev.keyCode == 13 || ev.keyCode == 77 ) { p.attempt_checkout( tb.value ); }
283                 },
284                 false
285         );
286         submit_button.addEventListener(
287                 'command',
288                 function(ev) {
289                         p.attempt_checkout( tb.value );
290                 },
291                 false
292         );
293
294         p.redraw_patron_checkout_items = function() {
295                 p.patron_checkout_items.clear_checkout_items();
296                 for (var i = 0; i < checkouts.length; i++) {
297                         p.patron_checkout_items.add_checkout_items( [ i ] );
298                 }
299         }
300
301         p.patron_checkout_items.register_patron_checkout_items_select_callback(
302                 function (ev) {
303                         sdump('D_PATRON_DISPLAY','Firing patron_checkout_items_select_callback\n');
304                         sdump('D_PATRON_DISPLAY','ev.target = ' + ev.target + '\n');
305                         var patron_checkout_items = get_list_from_tree_selection( p.patron_checkout_items.paged_tree.tree );
306                         /* grab cover art for selected item? */
307                 }
308         );
309         p.patron_checkout_items.register_flesh_patron_checkout_items_function(
310                 function (treeitem) {
311                         sdump('D_PATRON_DISPLAY','Firing flesh_patron_checkout_items_function\n');
312                         var record_id = treeitem.getAttribute('record_id'); 
313                         p.patron_checkout_items.map_patron_checkout_items_to_cols( checkouts[ record_id ], treeitem );
314                 }
315         );
316         p.patron_checkout_items.register_checkout_context_builder(
317                 function (ev) {
318                         sdump('D_PATRON_DISPLAY','Firing context_builder for patron_checkout_items\n');
319                         sdump('D_PATRON_DISPLAY','ev.target = ' + ev.target + '\np.patron_checkout_items.paged_tree.popup = ' + p.patron_checkout_items.paged_tree.popup + '\n');
320                         empty_widget(p.patron_checkout_items.paged_tree.popup);
321                         var patron_checkout_items = get_list_from_tree_selection( p.patron_checkout_items.paged_tree.tree );
322
323                         /*** CHECKIN ***/
324                         var menuitem_pci_c = p.patron_checkout_items.paged_tree.w.document.createElement('menuitem');
325                         p.patron_checkout_items.paged_tree.popup.appendChild( menuitem_pci_c );
326                         menuitem_pci_c.setAttribute('label',getString('circ.context_checkin'));
327                         menuitem_pci_c.addEventListener(
328                                 'command',
329                                 function (ev) {
330                                         sdump('D_PATRON_DISPLAY','Firing checkin context for patron_checkout_items\n');
331                                         var keep_these = [];
332                                         for (var i = 0; i < patron_checkout_items.length; i++) {
333                                                 try {
334                                                         var idx = patron_checkout_items[i].getAttribute('record_id'); 
335                                                         var copy = checkouts[ idx ].copy;
336                                                         var status = checkin_by_copy_barcode( copy.barcode(), null );
337                                                         if (status == null) { // change this to whatever it takes
338                                                                 keep_these.push( checkouts[ idx ] );    
339                                                         }
340                                                         checkouts = keep_these;
341                                                         alert( js2JSON( status ) );
342                                                         p.refresh();
343                                                 } catch(E) {
344                                                         alert(E);
345                                                 }
346                                         }
347                                 },
348                                 false
349                         );
350
351                         /* separator */
352                         var menuitem_pci_s = p.patron_checkout_items.paged_tree.w.document.createElement('menuseparator');
353                         p.patron_checkout_items.paged_tree.popup.appendChild( menuitem_pci_s );
354                         
355
356                         /*** COPY EDITOR ***/
357                         var menuitem_pci_ce = p.patron_checkout_items.paged_tree.w.document.createElement('menuitem');
358                         p.patron_checkout_items.paged_tree.popup.appendChild( menuitem_pci_ce );
359                         menuitem_pci_ce.setAttribute('label',getString('circ.context_edit'));
360                         menuitem_pci_ce.addEventListener(
361                                 'command',
362                                 function (ev) {
363                                         sdump('D_PATRON_DISPLAY','Firing copy editor context for patron_checkout_items\n');
364                                         for (var i = 0; i < patron_checkout_items.length; i++) {
365                                                 var idx = patron_checkout_items[i].getAttribute('record_id');
366                                                 sdump('D_PATRON_DISPLAY','Firing copy edit context\n');
367                                         }
368                                 },
369                                 false
370                         );
371
372                         /*** OPAC ***/
373                         var menuitem_pci_o = p.patron_checkout_items.paged_tree.w.document.createElement('menuitem');
374                         p.patron_checkout_items.paged_tree.popup.appendChild( menuitem_pci_o );
375                         menuitem_pci_o.setAttribute('label',getString('circ.context_opac'));
376                         menuitem_pci_o.addEventListener(
377                                 'command',
378                                 function (ev) {
379                                         sdump('D_PATRON_DISPLAY','Firing opac context for patron_checkout_items\n');
380                                         for (var i = 0; i < patron_checkout_items.length; i++) {
381                                                 var idx = patron_checkout_items[i].getAttribute('record_id');
382                                                 sdump('D_PATRON_DISPLAY','Firing opac context\n');
383                                         }
384                                 },
385                                 false
386                         );
387                         
388                 }
389         );
390 }
391
392 function patron_display_patron_holds_init(p) {
393         p.patron_holds = patron_holds_init( { 'w' : p.w, 'node' : p.patron_holds_node, 'debug' : p.app } );
394
395         p.redraw_patron_holds = function() {
396                 p.patron_holds.clear_patron_holds();
397                 if (!p._patron.hold_requests()) patron_get_holds( p._patron );
398                 for (var i = 0; i < p._patron.hold_requests().length; i++) {
399                         p.patron_holds.add_patron_holds( [ i ] );
400                 }
401         }
402
403         p.patron_holds.register_patron_holds_select_callback(
404                 function (ev) {
405                         sdump('D_PATRON_DISPLAY','Firing patron_holds_select_callback\n');
406                         sdump('D_PATRON_DISPLAY','ev.target = ' + ev.target + '\n');
407                         var patron_holds = get_list_from_tree_selection( p.patron_holds.paged_tree.tree );
408                         /* grab cover art for selected item? */
409                 }
410         );
411         p.patron_holds.register_flesh_patron_holds_function(
412                 function (treeitem) {
413                         sdump('D_PATRON_DISPLAY','Firing flesh_patron_holds_function\n');
414                         var record_id = treeitem.getAttribute('record_id'); 
415                         var hold = p._patron.hold_requests()[ record_id ];
416                         patron_get_hold_status(
417                                 hold,
418                                 function (request) {
419                                         var result = request.getResultObject();
420                                         hold.status( hold_status_as_text( result ) );
421                                         p.patron_holds.map_patron_holds_to_cols( hold, treeitem );
422                                 }
423                         );
424                 }
425         );
426         p.patron_holds.register_item_context_builder(
427                 function (ev) {
428                         sdump('D_PATRON_DISPLAY','Firing context_builder for patron_holds\n');
429                         sdump('D_PATRON_DISPLAY','ev.target = ' + ev.target + '\np.patron_holds.paged_tree.popup = ' + p.patron_holds.paged_tree.popup + '\n');
430                         empty_widget(p.patron_holds.paged_tree.popup);
431                         var patron_holds = get_list_from_tree_selection( p.patron_holds.paged_tree.tree );
432                         sdump('D_PATRON_DISPLAY','patron_holds.length = ' + patron_holds.length + '\n');
433
434                         /*** CANCEL HOLD ***/
435                         var menuitem_ph_ce = p.patron_holds.paged_tree.w.document.createElement('menuitem');
436                         p.patron_holds.paged_tree.popup.appendChild( menuitem_ph_ce );
437                         menuitem_ph_ce.setAttribute('label',getString('circ.context_cancel_hold'));
438                         menuitem_ph_ce.addEventListener(
439                                 'command',
440                                 function (ev) {
441                                         sdump('D_PATRON_DISPLAY','Firing cancel hold context for patron_holds\n');
442                                         for (var i = 0; i < patron_holds.length; i++) {
443                                                 sdump('D_PATRON_DISPLAY','Firing cancel edit context\n');
444                                                 var record_id = patron_holds[i].getAttribute('record_id');
445                                                 var hold = p._patron.hold_requests()[ record_id ];
446                                                 cancel_hold( hold );
447                                         }
448                                         p.refresh();
449                                 },
450                                 false
451                         );
452
453                         /* separator */
454                         var menuitem_ph_s = p.patron_holds.paged_tree.w.document.createElement('menuseparator');
455                         p.patron_holds.paged_tree.popup.appendChild( menuitem_ph_s );
456                         
457                         /*** COPY EDITOR ***/
458                         var menuitem_ph_ce = p.patron_holds.paged_tree.w.document.createElement('menuitem');
459                         p.patron_holds.paged_tree.popup.appendChild( menuitem_ph_ce );
460                         menuitem_ph_ce.setAttribute('label',getString('circ.context_edit'));
461                         menuitem_ph_ce.addEventListener(
462                                 'command',
463                                 function (ev) {
464                                         sdump('D_PATRON_DISPLAY','Firing copy editor context for patron_holds\n');
465                                         for (var i = 0; i < patron_holds.length; i++) {
466                                                 sdump('D_PATRON_DISPLAY','Firing copy edit context\n');
467                                         }
468                                 },
469                                 false
470                         );
471
472                         /*** OPAC ***/
473                         var menuitem_ph_o = p.patron_holds.paged_tree.w.document.createElement('menuitem');
474                         p.patron_holds.paged_tree.popup.appendChild( menuitem_ph_o );
475                         menuitem_ph_o.setAttribute('label',getString('circ.context_opac'));
476                         menuitem_ph_o.addEventListener(
477                                 'command',
478                                 function (ev) {
479                                         sdump('D_PATRON_DISPLAY','Firing opac context for patron_holds\n');
480                                         for (var i = 0; i < patron_holds.length; i++) {
481                                                 sdump('D_PATRON_DISPLAY','Firing opac context\n');
482                                         }
483                                 },
484                                 false
485                         );
486                         
487                 }
488         );
489 }
490
491 function patron_display_patron_bills_init(p) {
492         p.patron_bills = patron_bills_init( { 
493                 'w' : p.w, 
494                 'node' : p.patron_bills_node, 
495                 'debug' : p.app 
496         } );
497
498         p.patron_bills.refresh = function() { p.refresh(); }
499
500         p.redraw_patron_bills = function() {
501                 try {
502                         p.patron_bills.clear_patron_bills();
503                         if (!p._patron.bills) patron_get_bills( p._patron );
504                         p.patron_bills.add_patron_bills( p._patron.bills );
505                 } catch(E) {
506                         sdump('D_ERROR',js2JSON(E) + '\n');
507                 }
508         }
509 }
510
511 function patron_display_patron_edit_init(p) {
512         p.patron_edit = patron_edit_init( { 
513                 'w' : p.w, 
514                 'node' : p.patron_edit_node, 
515                 'debug' : p.app
516         } );
517
518         p.patron_edit.redisplay = function() { p.display_patron( {'patron_edit':true} ); }
519         p.patron_edit.refresh = function() { p.refresh( {'patron_edit':true} ); }
520
521         p.redraw_patron_edit = function() {
522                 try {
523                         p.patron_edit.clear_patron_edit();
524                         p.patron_edit.add_rows( p._patron );
525                 } catch(E) {
526                         sdump('D_ERROR',js2JSON(E) + '\n');
527                 }
528         }
529 }
530