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