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