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