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