8 ui_setup(); // JSAN, tab name, etc.
9 error.sdump('D_TRACE','my_init() for place_hold.xul');
11 JSAN.use('OpenILS.data');
12 data = new OpenILS.data();
13 data.stash_retrieve();
15 JSAN.use('util.network');
16 net = new util.network();
18 var copy_ids = xul_param('copy_ids');
20 populate_hold_usr_textbox();
21 populate_pickup_lib_menu();
23 $('request_btn').addEventListener(
26 make_request(copy_ids,false);
31 set_remaining_event_listeners();
34 alert('Error in place_hold.js, my_init(): ' + E);
38 function make_request(copy_ids,override) {
42 alert( $('patronStrings').getString('staff.item.batch.hold.user_not_found') );
47 'hold_type' : $('hold_type_menu').value,
48 'patronid' : hold_usr,
50 'pickup_lib' : $('pickup_lib_menu').value
54 $('progress_meter').hidden = false;
55 $('request_btn').disabled = true;
56 $('cancel_btn').disabled = true;
60 ? 'FM_AHR_CHECK_AND_CREATE.batch.override'
61 : 'FM_AHR_CHECK_AND_CREATE.batch',
62 [ ses(), args, copy_ids ],
67 alert('Error in place_hold.js, make_request(): ' + E);
71 function handle_results(req) {
74 $('progress_meter').hidden = true;
76 var results = req.getResultObject();
77 if(typeof(results.length) != "number") {
83 var failed_targets = [];
84 var failure_count = 0;
86 for (var i = 0; i < results.length; i++) {
87 var payload = results[i];
88 var target = payload.target;
89 var result = payload.result;
90 if (typeof result.length != 'undefined') {
91 // Array; grab first exception for simplicity
95 if (typeof result == 'string' || typeof result == 'number') {
96 successes.push( result ); // hold id's
99 if (typeof failures[ result.textcode ] == 'undefined') {
100 failures[ result.textcode ] = [];
102 failures[ result.textcode ].push( target );
103 failed_targets.push( target );
107 var msg = document.createElement('description');
109 document.createTextNode(
110 $('patronStrings').getFormattedString('staff.item.batch.hold.x_holds_created',[ successes.length ])
113 $('msgs').appendChild(msg);
115 if (failure_count>0) {
116 $('desc').hidden = false;
117 handle_failures(failures,failed_targets);
120 alert('Error in place_hold.js, handle_results(): ' + E);
124 function handle_failures(failures,failed_targets) {
126 for (k in failures) {
127 var err_box = document.createElement('hbox');
128 var err_msg = document.createElement('description');
129 err_box.appendChild(err_msg);
130 $('msgs').appendChild(err_box);
132 document.createTextNode(
133 $('patronStrings').getFormattedString('staff.item.batch.hold.x_failed_holds',[ failures[k].length, k ])
136 addCSSClass(err_msg,'click_link');
137 err_msg.addEventListener(
140 return function(ev) {
142 urls.XUL_COPY_STATUS,
145 'copy_ids' : copy_ids
152 var retry_btn = document.createElement('button');
153 retry_btn.setAttribute(
155 $('patronStrings').getString('staff.item.batch.hold.retry_btn_label')
157 err_box.appendChild(retry_btn);
159 retry_btn.addEventListener(
162 return function(ev) {
163 ev.target.disabled = true;
164 ev.target.hidden = true;
165 ev.target.nextSibling.disabled = true;
166 ev.target.nextSibling.hidden = true;
167 make_request(copy_ids,false);
173 var override_btn = document.createElement('button');
174 override_btn.setAttribute(
176 $('patronStrings').getString('staff.item.batch.hold.override_btn_label')
178 err_box.appendChild(override_btn);
180 override_btn.addEventListener(
183 return function(ev) {
184 ev.target.disabled = true;
185 ev.target.hidden = true;
186 ev.target.previousSibling.disabled = true;
187 ev.target.previousSibling.hidden = true;
188 make_request(copy_ids,true);
196 alert('Error in place_hold.js, handle_failures(): ' + E);
200 function set_remaining_event_listeners() {
203 $('hold_type_menu').addEventListener(
205 function(ev) { oils_lock_page(); },
209 $('cancel_btn').addEventListener(
211 function(ev) { xulG.close_tab(); },
216 alert('Error in place_hold.js, set_remaining_event_listeners(): ' + E);
220 function populate_hold_usr_textbox() {
221 JSAN.use('patron.util');
222 hold_usr = ses('staff_id');
223 var au_obj = patron.util.retrieve_fleshed_au_via_id(
227 $('hold_usr_textbox').value = au_obj.card().barcode();
228 $('hold_usr_textbox').select();
229 $('hold_usr_textbox').focus();
230 $('hold_usr_name').setAttribute(
232 patron.util.format_name(au_obj)
234 $('hold_usr_textbox').addEventListener(
239 var au_obj = patron.util.retrieve_fleshed_au_via_barcode(
243 if (typeof au_obj.textcode == 'undefined') {
244 hold_usr = au_obj.id();
245 $('hold_usr_name').setAttribute(
247 patron.util.format_name(au_obj)
249 removeCSSClass($('hold_usr_name'),'failure_text');
252 $('hold_usr_name').setAttribute(
254 $('patronStrings').getString('staff.item.batch.hold.user_not_found')
256 addCSSClass($('hold_usr_name'),'failure_text');
259 alert('Error in place_hold.js, hold_usr handler: ' + E);
266 function populate_pickup_lib_menu() {
268 JSAN.use('util.widgets');
269 JSAN.use('util.functional');
271 util.widgets.remove_children('pickup_lib_menu_placeholder');
273 var list = util.functional.map_list(
276 var sname = o.shortname();
277 for (i = sname.length; i < 20; i++) sname += ' ';
279 o.name() ? sname + ' ' + o.name() : o.shortname(),
281 ( !isTrue(data.hash.aout[ o.ou_type() ].can_have_users()) ),
282 ( data.hash.aout[ o.ou_type() ].depth() * 2),
286 ml = util.widgets.make_menulist( list, data.list.au[0].ws_ou() );
287 ml.setAttribute('id','pickup_lib_menu');
289 $('pickup_lib_menu_placeholder').appendChild(ml);
293 function(ev) { oils_lock_page(); },
298 alert('Error in place_hold.js, populate_pickup_lib_menu(): ' + E);
302 function ui_setup() {
303 netscape.security.PrivilegeManager.enablePrivilege(
304 "UniversalXPConnect");
305 if (typeof JSAN == 'undefined') {
306 throw( "The JSAN library object is missing.");
308 JSAN.errorLevel = "die"; // none, warn, or die
309 JSAN.addRepository('/xul/server/');
310 JSAN.use('util.error');
311 error = new util.error();
313 if (typeof xulG == 'object' && typeof xulG.set_tab_name == 'function') {
316 $('patronStrings').getString('staff.item.batch.hold.tab_name')