1 dump('entering patron.holds.js\n');
3 if (typeof patron == 'undefined') patron = {};
4 patron.holds = function (params) {
6 JSAN.use('util.error'); this.error = new util.error();
7 JSAN.use('util.network'); this.network = new util.network();
8 JSAN.use('OpenILS.data'); this.data = new OpenILS.data(); this.data.init({'via':'stash'});
11 patron.holds.prototype = {
13 'foreign_shelf' : null,
19 'init' : function( params ) {
23 obj.patron_id = params['patron_id'];
24 obj.docid = params['docid'];
25 obj.shelf = params['shelf'];
27 JSAN.use('circ.util');
28 var columns = circ.util.hold_columns(
30 'title' : { 'hidden' : false, 'flex' : '3' },
31 'request_time' : { 'hidden' : false },
32 'pickup_lib_shortname' : { 'hidden' : false },
33 'hold_type' : { 'hidden' : false },
34 'current_copy' : { 'hidden' : false },
35 'capture_time' : { 'hidden' : false },
36 'notify_time' : { 'hidden' : false },
37 'notify_count' : { 'hidden' : false },
41 JSAN.use('util.list'); obj.list = new util.list('holds_list');
45 'map_row_to_column' : circ.util.std_map_row_to_column(),
46 'retrieve_row' : function(params) {
49 obj.network.simple_request('FM_AHR_STATUS',[ ses(), row.my.ahr.id() ],
50 function(status_req) {
51 var status_robj = status_req.getResultObject();
52 row.my.status = status_robj;
53 switch(row.my.ahr.hold_type()) {
56 api.MODS_SLIM_METARECORD_RETRIEVE.app,
57 api.MODS_SLIM_METARECORD_RETRIEVE.method,
58 [ row.my.ahr.target() ],
60 row.my.mvr = mvr_req.getResultObject();
61 if ( row.my.ahr.current_copy() && ! row.my.acp) {
62 obj.network.simple_request( 'FM_ACP_RETRIEVE', [ row.my.ahr.current_copy() ],
64 row.my.acp = acp_req.getResultObject();
65 if (typeof params.on_retrieve == 'function') { params.on_retrieve(row); }
69 if (typeof params.on_retrieve == 'function') { params.on_retrieve(row); }
76 api.MODS_SLIM_RECORD_RETRIEVE.app,
77 api.MODS_SLIM_RECORD_RETRIEVE.method,
78 [ row.my.ahr.target() ],
80 row.my.mvr = mvr_req.getResultObject();
81 if ( row.my.ahr.current_copy() && ! row.my.acp) {
82 obj.network.simple_request( 'FM_ACP_RETRIEVE', [ row.my.ahr.current_copy() ],
84 row.my.acp = acp_req.getResultObject();
85 if (typeof params.on_retrieve == 'function') { params.on_retrieve(row); }
89 if (typeof params.on_retrieve == 'function') { params.on_retrieve(row); }
96 row.my.acn = obj.network.simple_request( 'FM_ACN_RETRIEVE', [ row.my.ahr.target() ],
98 row.my.acn = acn_req.getResultObject();
100 api.MODS_SLIM_RECORD_RETRIEVE.app,
101 api.MODS_SLIM_RECORD_RETRIEVE.method,
102 [ row.my.acn.record() ],
104 try { row.my.mvr = mvr_req.getResultObject(); } catch(E) {}
105 if ( row.my.ahr.current_copy() && ! row.my.acp) {
106 obj.network.simple_request( 'FM_ACP_RETRIEVE', [ row.my.ahr.current_copy() ],
108 row.my.acp = acp_req.getResultObject();
109 if (typeof params.on_retrieve == 'function') { params.on_retrieve(row); }
113 if (typeof params.on_retrieve == 'function') { params.on_retrieve(row); }
121 obj.network.simple_request( 'FM_ACP_RETRIEVE', [ row.my.ahr.target() ],
123 row.my.acp = acp_req.getResultObject();
124 obj.network.simple_request( 'FM_ACN_RETRIEVE', [ typeof row.my.acp.call_number() == 'object' ? row.my.acp.call_number().id() : row.my.acp.call_number() ],
126 row.my.acn = acn_req.getResultObject();
128 api.MODS_SLIM_RECORD_RETRIEVE.app,
129 api.MODS_SLIM_RECORD_RETRIEVE.method,
130 [ row.my.acn.record() ],
132 try { row.my.mvr = mvr_req.getResultObject(); } catch(E) {}
133 if (typeof params.on_retrieve == 'function') { params.on_retrieve(row); }
145 obj.error.sdump('D_ERROR','retrieve_row: ' + E );
149 'on_select' : function(ev) {
150 JSAN.use('util.functional');
151 var sel = obj.list.retrieve_selection();
152 obj.controller.view.sel_clip.setAttribute('disabled',sel.length < 1);
153 obj.retrieve_ids = util.functional.map_list(
155 function(o) { return JSON2js( o.getAttribute('retrieve_id') ); }
157 if (obj.retrieve_ids.length > 0) {
158 obj.controller.view.sel_mark_items_damaged.setAttribute('disabled','false');
159 obj.controller.view.sel_mark_items_missing.setAttribute('disabled','false');
160 obj.controller.view.sel_copy_details.setAttribute('disabled','false');
161 obj.controller.view.sel_patron.setAttribute('disabled','false');
162 obj.controller.view.cmd_retrieve_patron.setAttribute('disabled','false');
163 obj.controller.view.cmd_holds_edit_pickup_lib.setAttribute('disabled','false');
164 obj.controller.view.cmd_holds_edit_phone_notify.setAttribute('disabled','false');
165 obj.controller.view.cmd_holds_edit_email_notify.setAttribute('disabled','false');
166 obj.controller.view.cmd_holds_edit_selection_depth.setAttribute('disabled','false');
167 obj.controller.view.cmd_show_notifications.setAttribute('disabled','false');
168 obj.controller.view.cmd_holds_retarget.setAttribute('disabled','false');
169 obj.controller.view.cmd_holds_cancel.setAttribute('disabled','false');
170 obj.controller.view.cmd_show_catalog.setAttribute('disabled','false');
172 obj.controller.view.sel_mark_items_damaged.setAttribute('disabled','true');
173 obj.controller.view.sel_mark_items_missing.setAttribute('disabled','true');
174 obj.controller.view.sel_copy_details.setAttribute('disabled','true');
175 obj.controller.view.sel_patron.setAttribute('disabled','true');
176 obj.controller.view.cmd_retrieve_patron.setAttribute('disabled','true');
177 obj.controller.view.cmd_holds_edit_pickup_lib.setAttribute('disabled','true');
178 obj.controller.view.cmd_holds_edit_phone_notify.setAttribute('disabled','true');
179 obj.controller.view.cmd_holds_edit_email_notify.setAttribute('disabled','true');
180 obj.controller.view.cmd_holds_edit_selection_depth.setAttribute('disabled','true');
181 obj.controller.view.cmd_show_notifications.setAttribute('disabled','true');
182 obj.controller.view.cmd_holds_retarget.setAttribute('disabled','true');
183 obj.controller.view.cmd_holds_cancel.setAttribute('disabled','true');
184 obj.controller.view.cmd_show_catalog.setAttribute('disabled','true');
191 JSAN.use('util.controller'); obj.controller = new util.controller();
195 'save_columns' : [ [ 'command' ], function() { obj.list.save_columns(); } ],
198 function() { obj.list.clipboard(); }
202 function() { alert('Not Yet Implemented'); }
207 JSAN.use('circ.util');
208 circ.util.show_last_few_circs(obj.retrieve_ids);
211 'sel_mark_items_damaged' : [
214 JSAN.use('cat.util'); JSAN.use('util.functional');
215 cat.util.mark_item_damaged( util.functional.map_list( obj.retrieve_ids, function(o) { return o.copy_id; } ) );
218 'sel_mark_items_missing' : [
221 JSAN.use('cat.util'); JSAN.use('util.functional');
222 cat.util.mark_item_missing( util.functional.map_list( obj.retrieve_ids, function(o) { return o.copy_id; } ) );
225 'sel_copy_details' : [
228 JSAN.use('circ.util');
229 for (var i = 0; i < obj.retrieve_ids.length; i++) {
230 if (obj.retrieve_ids[i].copy_id) circ.util.show_copy_details( obj.retrieve_ids[i].copy_id );
234 'cmd_holds_print' : [
238 dump(js2JSON(obj.list.dump_with_keys()) + '\n');
239 function flesh_callback() {
241 JSAN.use('patron.util');
243 'patron' : patron.util.retrieve_au_via_id(ses(),obj.patron_id),
244 'lib' : obj.data.hash.aou[ obj.data.list.au[0].ws_ou() ],
245 'staff' : obj.data.list.au[0],
246 'header' : obj.data.print_list_templates.holds.header,
247 'line_item' : obj.data.print_list_templates.holds.line_item,
248 'footer' : obj.data.print_list_templates.holds.footer,
249 'type' : obj.data.print_list_templates.holds.type,
250 'list' : obj.list.dump_with_keys(),
252 JSAN.use('util.print'); var print = new util.print();
253 print.tree_list( params );
254 setTimeout(function(){obj.list.on_all_fleshed = null;},0);
256 obj.error.standard_unexpected_error_alert('print 2',E);
259 obj.list.on_all_fleshed = flesh_callback;
260 obj.list.full_retrieve();
262 obj.error.standard_unexpected_error_alert('print 1',E);
266 'cmd_show_notifications' : [
270 JSAN.use('util.window'); var win = new util.window();
271 for (var i = 0; i < obj.retrieve_ids.length; i++) {
272 netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');
274 xulG.url_prefix(urls.XUL_HOLD_NOTICES)
275 + '?ahr_id=' + obj.retrieve_ids[i].id,
276 'hold_notices_' + obj.retrieve_ids[i].id,
281 obj.error.standard_unexpected_error_alert('Error rendering/retrieving hold notifications.',E);
285 'cmd_holds_edit_selection_depth' : [
289 JSAN.use('util.widgets'); JSAN.use('util.functional');
290 var ws_type = obj.data.hash.aout[ obj.data.hash.aou[ obj.data.list.au[0].ws_ou() ].ou_type() ];
291 var list = util.functional.map_list(
292 util.functional.filter_list(
295 if (o.depth() > ws_type.depth()) return false;
296 if (o.depth() < ws_type.depth()) return true;
297 return (o.id() == ws_type.id());
309 ml = util.widgets.make_menulist( list, obj.data.list.au[0].ws_ou() );
310 ml.setAttribute('id','selection');
311 ml.setAttribute('name','fancy_data');
312 var xml = '<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" flex="1" style="overflow: vertical">';
313 xml += '<description>Please choose a Hold Range:</description>';
314 xml += util.widgets.serialize_node(ml);
316 var bot_xml = '<hbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" flex="1" style="overflow: vertical">';
317 bot_xml += '<spacer flex="1"/><button label="Done" accesskey="D" name="fancy_submit"/>';
318 bot_xml += '<button label="Cancel" accesskey="C" name="fancy_cancel"/></hbox>';
319 netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserWrite');
320 obj.data.temp_mid = xml; obj.data.stash('temp_mid');
321 obj.data.temp_bot = bot_xml; obj.data.stash('temp_bot');
323 urls.XUL_FANCY_PROMPT
324 + '?xml_in_stash=temp_mid'
325 + '&bottom_xml_in_stash=temp_bot'
326 + '&title=' + window.escape('Choose a Pick Up Library'),
327 'fancy_prompt', 'chrome,resizable,modal'
329 obj.data.init({'via':'stash'});
330 if (obj.data.fancy_prompt_data == '') { return; }
331 var selection = obj.data.fancy_prompt_data.selection;
332 var msg = 'Are you sure you would like to change the Hold Range for hold' + ( obj.retrieve_ids.length > 1 ? 's ' : ' ') + util.functional.map_list( obj.retrieve_ids, function(o){return o.id;}).join(', ') + ' to "' + obj.data.hash.aout[selection].opac_label() + '"?';
333 var r = obj.error.yns_alert(msg,'Modifying Holds','Yes','No',null,'Check here to confirm this message');
335 for (var i = 0; i < obj.retrieve_ids.length; i++) {
336 var hold = obj.holds_map[ obj.retrieve_ids[i].id ];
337 hold.selection_depth( obj.data.hash.aout[selection].depth() ); hold.ischanged('1');
338 var robj = obj.network.simple_request('FM_AHR_UPDATE',[ ses(), hold ]);
339 if (typeof robj.ilsevent != 'undefined') throw(robj);
344 obj.error.standard_unexpected_error_alert('Holds not likely modified.',E);
349 'cmd_holds_edit_pickup_lib' : [
353 JSAN.use('util.widgets'); JSAN.use('util.functional');
354 var list = util.functional.map_list(
357 var sname = o.shortname(); for (i = sname.length; i < 20; i++) sname += ' ';
359 o.name() ? sname + ' ' + o.name() : o.shortname(),
361 ( obj.data.hash.aout[ o.ou_type() ].can_have_users() == 0),
362 ( obj.data.hash.aout[ o.ou_type() ].depth() * 2),
366 ml = util.widgets.make_menulist( list, obj.data.list.au[0].ws_ou() );
367 ml.setAttribute('id','lib');
368 ml.setAttribute('name','fancy_data');
369 var xml = '<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" flex="1" style="overflow: vertical">';
370 xml += '<description>Please choose a new Pickup Library:</description>';
371 xml += util.widgets.serialize_node(ml);
373 var bot_xml = '<hbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" flex="1" style="overflow: vertical">';
374 bot_xml += '<spacer flex="1"/><button label="Done" accesskey="D" name="fancy_submit"/>';
375 bot_xml += '<button label="Cancel" accesskey="C" name="fancy_cancel"/></hbox>';
376 netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserWrite');
377 obj.data.temp_mid = xml; obj.data.stash('temp_mid');
378 obj.data.temp_bot = bot_xml; obj.data.stash('temp_bot');
380 urls.XUL_FANCY_PROMPT
381 + '?xml_in_stash=temp_mid'
382 + '&bottom_xml_in_stash=temp_bot'
383 + '&title=' + window.escape('Choose a Pick Up Library'),
384 'fancy_prompt', 'chrome,resizable,modal'
386 obj.data.init({'via':'stash'});
387 if (obj.data.fancy_prompt_data == '') { return; }
388 var pickup_lib = obj.data.fancy_prompt_data.lib;
389 var msg = 'Are you sure you would like to change the Pick Up Lib for hold' + ( obj.retrieve_ids.length > 1 ? 's ' : ' ') + util.functional.map_list( obj.retrieve_ids, function(o){return o.id;}).join(', ') + ' to ' + obj.data.hash.aou[pickup_lib].shortname() + '?';
390 var r = obj.error.yns_alert(msg,'Modifying Holds','Yes','No',null,'Check here to confirm this message');
392 for (var i = 0; i < obj.retrieve_ids.length; i++) {
393 var hold = obj.holds_map[ obj.retrieve_ids[i].id ];
394 hold.pickup_lib( pickup_lib ); hold.ischanged('1');
395 var robj = obj.network.simple_request('FM_AHR_UPDATE',[ ses(), hold ]);
396 if (typeof robj.ilsevent != 'undefined') throw(robj);
401 obj.error.standard_unexpected_error_alert('Holds not likely modified.',E);
405 'cmd_holds_edit_phone_notify' : [
409 var xml = '<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" flex="1" style="overflow: vertical">';
410 xml += '<description>Please enter a new phone number for hold notification (leave the field empty to disable phone notification):</description>';
411 xml += '<textbox id="phone" name="fancy_data"/>';
413 var bot_xml = '<hbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" flex="1" style="overflow: vertical">';
414 bot_xml += '<spacer flex="1"/><button label="Done" accesskey="D" name="fancy_submit"/>';
415 bot_xml += '<button label="Cancel" accesskey="C" name="fancy_cancel"/></hbox>';
416 netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserWrite');
417 obj.data.temp_mid = xml; obj.data.stash('temp_mid');
418 obj.data.temp_bot = bot_xml; obj.data.stash('temp_bot');
420 urls.XUL_FANCY_PROMPT
421 + '?xml_in_stash=temp_mid'
422 + '&bottom_xml_in_stash=temp_bot'
423 + '&title=' + window.escape('Choose a Hold Notification Phone Number')
425 'fancy_prompt', 'chrome,resizable,modal'
427 obj.data.init({'via':'stash'});
428 if (obj.data.fancy_prompt_data == '') { return; }
429 var phone = obj.data.fancy_prompt_data.phone;
430 var msg = 'Are you sure you would like to change the Notification Phone Number for hold' + ( obj.retrieve_ids.length > 1 ? 's ' : ' ') + util.functional.map_list( obj.retrieve_ids, function(o){return o.id;}).join(', ') + ' to "' + phone + '"?';
431 var r = obj.error.yns_alert(msg,'Modifying Holds','Yes','No',null,'Check here to confirm this message');
433 for (var i = 0; i < obj.retrieve_ids.length; i++) {
434 var hold = obj.holds_map[ obj.retrieve_ids[i].id ];
435 hold.phone_notify( phone ); hold.ischanged('1');
436 var robj = obj.network.simple_request('FM_AHR_UPDATE',[ ses(), hold ]);
437 if (typeof robj.ilsevent != 'undefined') throw(robj);
442 obj.error.standard_unexpected_error_alert('Holds not likely modified.',E);
446 'cmd_holds_edit_email_notify' : [
450 var xml = '<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" flex="1" style="overflow: vertical">';
451 xml += '<description>Send email notifications (when appropriate)? The email address used is found in the hold recepient account.</description>';
452 xml += '<hbox><button value="email" label="Email" accesskey="E" name="fancy_submit"/>';
453 xml += '<button value="noemail" label="No Email" accesskey="N" name="fancy_submit"/></hbox>';
455 var bot_xml = '<hbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" flex="1" style="overflow: vertical">';
456 bot_xml += '<spacer flex="1"/><button label="Cancel" accesskey="C" name="fancy_cancel"/></hbox>';
457 netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserWrite');
458 obj.data.temp_mid = xml; obj.data.stash('temp_mid');
459 obj.data.temp_bot = bot_xml; obj.data.stash('temp_bot');
461 urls.XUL_FANCY_PROMPT
462 + '?xml_in_stash=temp_mid'
463 + '&bottom_xml_in_stash=temp_bot'
464 + '&title=' + window.escape('Set Email Notification for Holds'),
465 'fancy_prompt', 'chrome,resizable,modal'
467 obj.data.init({'via':'stash'});
468 if (obj.data.fancy_prompt_data == '') { return; }
469 var email = obj.data.fancy_prompt_data.fancy_submit == 'email' ? get_db_true() : get_db_false();
470 var msg = 'Are you sure you would like ' + ( get_bool( email ) ? 'enable' : 'disable' ) + ' email notification for hold' + ( obj.retrieve_ids.length > 1 ? 's ' : ' ') + util.functional.map_list( obj.retrieve_ids, function(o){return o.id;}).join(', ') + '?';
471 var r = obj.error.yns_alert(msg,'Modifying Holds','Yes','No',null,'Check here to confirm this message');
473 for (var i = 0; i < obj.retrieve_ids.length; i++) {
474 var hold = obj.holds_map[ obj.retrieve_ids[i].id ];
475 hold.email_notify( email ); hold.ischanged('1');
476 var robj = obj.network.simple_request('FM_AHR_UPDATE',[ ses(), hold ]);
477 if (typeof robj.ilsevent != 'undefined') throw(robj);
482 obj.error.standard_unexpected_error_alert('Holds not likely modified.',E);
488 'cmd_holds_retarget' : [
492 JSAN.use('util.functional');
493 var msg = 'Are you sure you would like to reset hold' + ( obj.retrieve_ids.length > 1 ? 's ' : ' ') + util.functional.map_list( obj.retrieve_ids, function(o){return o.id;}).join(', ') + '?';
494 var r = obj.error.yns_alert(msg,'Resetting Holds','Yes','No',null,'Check here to confirm this message');
496 for (var i = 0; i < obj.retrieve_ids.length; i++) {
497 var robj = obj.network.simple_request('FM_AHR_RESET',[ ses(), obj.retrieve_ids[i].id]);
498 if (typeof robj.ilsevent != 'undefined') throw(robj);
503 obj.error.standard_unexpected_error_alert('Holds not likely reset.',E);
509 'cmd_holds_cancel' : [
513 JSAN.use('util.functional');
514 var msg = 'Are you sure you would like to cancel hold' + ( obj.retrieve_ids.length > 1 ? 's ' : ' ') + util.functional.map_list( obj.retrieve_ids, function(o){return o.id;}).join(', ') + '?';
515 var r = obj.error.yns_alert(msg,'Cancelling Holds','Yes','No',null,'Check here to confirm this message');
517 for (var i = 0; i < obj.retrieve_ids.length; i++) {
518 var robj = obj.network.simple_request('FM_AHR_CANCEL',[ ses(), obj.retrieve_ids[i].id]);
519 if (typeof robj.ilsevent != 'undefined') throw(robj);
524 obj.error.standard_unexpected_error_alert('Holds not likely cancelled.',E);
528 'cmd_retrieve_patron' : [
533 for (var i = 0; i < obj.retrieve_ids.length; i++) {
534 var patron_id = obj.retrieve_ids[i].usr;
535 if (seen[patron_id]) continue; seen[patron_id] = true;
537 xulG.url_prefix(urls.XUL_PATRON_DISPLAY) + '?id=' + patron_id,
543 obj.error.standard_unexpected_error_alert('',E);
547 'cmd_show_catalog' : [
551 for (var i = 0; i < obj.retrieve_ids.length; i++) {
552 var htarget = obj.retrieve_ids[i].target;
553 var htype = obj.retrieve_ids[i].type;
557 opac_url = xulG.url_prefix( urls.opac_rresult ) + '?m=' + htarget;
560 opac_url = xulG.url_prefix( urls.opac_rdetail ) + '?r=' + htarget;
563 var my_acn = obj.network.simple_request( 'FM_ACN_RETRIEVE', [ htarget ]);
564 opac_url = xulG.url_prefix( urls.opac_rdetail) + '?r=' + my_acn.record();
567 var my_acp = obj.network.simple_request( 'FM_ACP_RETRIEVE', [ htarget ]);
569 if (typeof my_acp.call_number() == 'object') {
570 my_acn = my.acp.call_number();
572 my_acn = obj.network.simple_request( 'FM_ACN_RETRIEVE',
573 [ my_acp.call_number() ]);
575 opac_url = xulG.url_prefix( urls.opac_rdetail) + '?r=' + my_acn.record();
578 obj.error.standard_unexpected_error_alert("I don't understand the hold type of " + htype + ", so I can't jump to the appropriate record in the catalog.", obj.retrieve_ids[i]);
582 var content_params = {
584 'authtime' : ses('authtime'),
585 'opac_url' : opac_url,
588 xulG.url_prefix(urls.XUL_OPAC_WRAPPER),
589 {'tab_name': htype == 'M' ? 'Catalog' : 'Retrieving title...'},
594 obj.error.standard_unexpected_error_alert('',E);
601 obj.controller.render();
605 obj.controller.view.cmd_retrieve_patron.setAttribute('disabled','true');
606 obj.controller.view.cmd_holds_edit_pickup_lib.setAttribute('disabled','true');
607 obj.controller.view.cmd_holds_edit_phone_notify.setAttribute('disabled','true');
608 obj.controller.view.cmd_holds_edit_email_notify.setAttribute('disabled','true');
609 obj.controller.view.cmd_holds_edit_selection_depth.setAttribute('disabled','true');
610 obj.controller.view.cmd_show_notifications.setAttribute('disabled','true');
611 obj.controller.view.cmd_holds_retarget.setAttribute('disabled','true');
612 obj.controller.view.cmd_holds_cancel.setAttribute('disabled','true');
613 obj.controller.view.cmd_show_catalog.setAttribute('disabled','true');
616 'retrieve' : function(dont_show_me_the_list_change) {
618 if (window.xulG && window.xulG.holds) {
619 obj.holds = window.xulG.holds;
621 var method; var params = [ ses() ];
623 method = 'FM_AHR_RETRIEVE_VIA_AU';
624 params.push( obj.patron_id );
625 obj.controller.view.cmd_retrieve_patron.setAttribute('hidden','true');
626 } else if (obj.docid) {
627 method = 'FM_AHR_RETRIEVE_ALL_VIA_BRE';
628 params.push( obj.docid );
629 obj.controller.view.cmd_retrieve_patron.setAttribute('hidden','false');
630 } else if (obj.pull) {
631 method = 'FM_AHR_PULL_LIST';
632 params.push( 50 ); params.push( 0 );
633 } else if (obj.shelf) {
634 method = 'FM_AHR_ONSHELF_RETRIEVE';
635 params.push( obj.foreign_shelf || obj.data.list.au[0].ws_ou() );
636 obj.controller.view.cmd_retrieve_patron.setAttribute('hidden','false');
637 obj.render_lib_menu();
639 //method = 'FM_AHR_RETRIEVE_VIA_PICKUP_AOU';
640 method = 'FM_AHR_PULL_LIST';
641 params.push( 50 ); params.push( 0 );
642 obj.controller.view.cmd_retrieve_patron.setAttribute('hidden','false');
644 var robj = obj.network.simple_request( method, params );
645 if (typeof robj.ilsevent != 'undefined') throw(robj);
646 if (method == 'FM_AHR_RETRIEVE_ALL_VIA_BRE') {
648 obj.holds = obj.holds.concat( robj.copy_holds );
649 obj.holds = obj.holds.concat( robj.volume_holds );
650 obj.holds = obj.holds.concat( robj.title_holds );
651 obj.holds = obj.holds.sort();
657 function list_append(hold) {
658 obj.holds_map[ hold.id() ] = hold;
661 'retrieve_id' : js2JSON({
662 'copy_id':hold.current_copy(),
664 'type':hold.hold_type(),
665 'target':hold.target(),
677 function gen_list_append(hold) {
679 if (typeof hold == 'object') {
680 if (typeof obj.controller.view.lib_menu == 'undefined') {
683 var pickup_lib = hold.pickup_lib();
684 if (typeof pickup_lib == 'object') pickup_lib = pickup_lib.id();
685 if (pickup_lib == obj.controller.view.lib_menu.value) {
690 obj.network.simple_request('FM_AHR_RETRIEVE', [ ses(), hold ],
693 var robj = req.getResultObject();
694 if (typeof robj.ilsevent != 'undefined') throw(robj);
695 if (typeof obj.controller.view.lib_menu == 'undefined') {
696 list_append(robj[0]);
698 var pickup_lib = robj[0].pickup_lib();
699 if (typeof pickup_lib == 'object') pickup_lib = pickup_lib.id();
700 if (pickup_lib == obj.controller.view.lib_menu.value) {
701 list_append(robj[0]);
705 obj.error.standard_unexpected_error_alert('Error retrieving hold #' + hold, E);
715 JSAN.use('util.exec'); var exec = new util.exec(2);
717 for (var i in obj.holds) {
718 rows.push( gen_list_append(obj.holds[i]) );
722 if (!dont_show_me_the_list_change) {
723 if (window.xulG && typeof window.xulG.on_list_change == 'function') {
724 try { window.xulG.on_list_change(obj.holds); } catch(E) { this.error.sdump('D_ERROR',E); }
729 'render_lib_menu' : function() {
732 JSAN.use('util.widgets'); JSAN.use('util.functional'); JSAN.use('util.fm_utils');
733 var x = document.getElementById('menu_placeholder');
734 if (x.firstChild) return;
735 util.widgets.remove_children( x );
737 var ml = util.widgets.make_menulist(
738 util.functional.map_list(
739 obj.data.list.my_aou.concat(
740 util.functional.filter_list(
741 util.fm_utils.find_ou(
743 obj.data.hash.aou[ obj.data.list.au[0].ws_ou() ].parent_ou()
746 return o.id() != obj.data.list.au[0].ws_ou();
750 function(o) { return [
753 ( ! get_bool( obj.data.hash.aout[ o.ou_type() ].can_have_users() ) ),
754 ( obj.data.hash.aout[ o.ou_type() ].depth() ),
758 var A = obj.data.hash.aou[ a[1] ];
759 var B = obj.data.hash.aou[ b[1] ];
760 var X = obj.data.hash.aout[ A.ou_type() ];
761 var Y = obj.data.hash.aout[ B.ou_type() ];
762 if (X.depth() < Y.depth()) return -1;
763 if (X.depth() > Y.depth()) return 1;
764 if (A.shortname() < B.shortname()) return -1;
765 if (A.shortname() > B.shortname()) return 1;
769 obj.data.list.au[0].ws_ou()
776 obj.list.on_all_fleshed = function() {
778 obj.foreign_shelf = ev.target.value;
780 setTimeout( function() { obj.list.on_all_fleshed = null; }, 0);
782 obj.list.full_retrieve();
785 obj.foreign_shelf = ev.target.value;
790 obj.controller.view.lib_menu = ml;
792 this.error.standard_unexpected_error_alert('rendering lib menu',E);
797 dump('exiting patron.holds.js\n');