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