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