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 window.place_hold_event_listeners = new EventListenerList();
22 populate_hold_usr_textbox();
23 populate_pickup_lib_menu();
25 window.place_hold_event_listeners.add($('request_btn'),
28 make_request(copy_ids,false);
33 set_remaining_event_listeners();
36 alert('Error in place_hold.js, my_init(): ' + E);
40 function my_cleanup() {
42 window.place_hold_event_listeners.removeAll();
44 alert('Error in place_hold.js, my_init(): ' + E);
48 function make_request(copy_ids,override) {
52 alert( $('patronStrings').getString('staff.item.batch.hold.user_not_found') );
57 'hold_type' : $('hold_type_menu').value,
58 'patronid' : hold_usr,
60 'pickup_lib' : $('pickup_lib_menu').value
64 $('progress_meter').hidden = false;
65 $('request_btn').disabled = true;
66 $('cancel_btn').disabled = true;
70 ? 'FM_AHR_CHECK_AND_CREATE.batch.override'
71 : 'FM_AHR_CHECK_AND_CREATE.batch',
72 [ ses(), args, copy_ids ],
77 alert('Error in place_hold.js, make_request(): ' + E);
81 function handle_results(req) {
84 $('progress_meter').hidden = true;
86 var results = req.getResultObject();
87 if(typeof(results.length) != "number") {
93 var failed_targets = [];
94 var failure_count = 0;
96 for (var i = 0; i < results.length; i++) {
97 var payload = results[i];
98 var target = payload.target;
99 var result = payload.result;
100 if (typeof result.length != 'undefined') {
101 // Array; grab first exception for simplicity
105 if (typeof result == 'string' || typeof result == 'number') {
106 successes.push( result ); // hold id's
109 if (typeof failures[ result.textcode ] == 'undefined') {
110 failures[ result.textcode ] = [];
112 failures[ result.textcode ].push( target );
113 failed_targets.push( target );
117 var msg = document.createElement('description');
119 document.createTextNode(
120 $('patronStrings').getFormattedString('staff.item.batch.hold.x_holds_created',[ successes.length ])
123 $('msgs').appendChild(msg);
125 if (failure_count>0) {
126 $('desc').hidden = false;
127 handle_failures(failures,failed_targets);
130 alert('Error in place_hold.js, handle_results(): ' + E);
134 function handle_failures(failures,failed_targets) {
136 for (k in failures) {
137 var err_box = document.createElement('hbox');
138 var err_msg = document.createElement('description');
139 err_box.appendChild(err_msg);
140 $('msgs').appendChild(err_box);
142 document.createTextNode(
143 $('patronStrings').getFormattedString('staff.item.batch.hold.x_failed_holds',[ failures[k].length, k ])
146 addCSSClass(err_msg,'click_link');
147 window.place_hold_event_listeners.add(err_msg,
150 return function(ev) {
152 urls.XUL_COPY_STATUS,
155 'copy_ids' : copy_ids
162 var retry_btn = document.createElement('button');
163 retry_btn.setAttribute(
165 $('patronStrings').getString('staff.item.batch.hold.retry_btn_label')
167 err_box.appendChild(retry_btn);
169 window.place_hold_event_listeners.add(retry_btn,
172 return function(ev) {
173 ev.target.disabled = true;
174 ev.target.hidden = true;
175 ev.target.nextSibling.disabled = true;
176 ev.target.nextSibling.hidden = true;
177 make_request(copy_ids,false);
183 var override_btn = document.createElement('button');
184 override_btn.setAttribute(
186 $('patronStrings').getString('staff.item.batch.hold.override_btn_label')
188 err_box.appendChild(override_btn);
190 window.place_hold_event_listeners.add(override_btn,
193 return function(ev) {
194 ev.target.disabled = true;
195 ev.target.hidden = true;
196 ev.target.previousSibling.disabled = true;
197 ev.target.previousSibling.hidden = true;
198 make_request(copy_ids,true);
206 alert('Error in place_hold.js, handle_failures(): ' + E);
210 function set_remaining_event_listeners() {
213 window.place_hold_event_listeners.add($('hold_type_menu'),
215 function(ev) { oils_lock_page(); },
219 window.place_hold_event_listeners.add($('cancel_btn'),
221 function(ev) { xulG.close_tab(); },
226 alert('Error in place_hold.js, set_remaining_event_listeners(): ' + E);
230 function populate_hold_usr_textbox() {
231 JSAN.use('patron.util');
232 hold_usr = ses('staff_id');
233 var au_obj = patron.util.retrieve_fleshed_au_via_id(
237 $('hold_usr_textbox').value = au_obj.card().barcode();
238 $('hold_usr_textbox').select();
239 $('hold_usr_textbox').focus();
240 $('hold_usr_name').setAttribute(
242 patron.util.format_name(au_obj)
244 window.place_hold_event_listeners.add($('hold_usr_textbox'),
249 var au_obj = patron.util.retrieve_fleshed_au_via_barcode(
253 if (typeof au_obj.textcode == 'undefined') {
254 hold_usr = au_obj.id();
255 $('hold_usr_name').setAttribute(
257 patron.util.format_name(au_obj)
259 removeCSSClass($('hold_usr_name'),'failure_text');
262 $('hold_usr_name').setAttribute(
264 $('patronStrings').getString('staff.item.batch.hold.user_not_found')
266 addCSSClass($('hold_usr_name'),'failure_text');
269 alert('Error in place_hold.js, hold_usr handler: ' + E);
276 function populate_pickup_lib_menu() {
278 JSAN.use('util.widgets');
279 JSAN.use('util.functional');
281 util.widgets.remove_children('pickup_lib_menu_placeholder');
283 var list = util.functional.map_list(
286 var sname = o.shortname();
287 for (i = sname.length; i < 20; i++) sname += ' ';
289 o.name() ? sname + ' ' + o.name() : o.shortname(),
291 ( !isTrue(data.hash.aout[ o.ou_type() ].can_have_users()) ),
292 ( data.hash.aout[ o.ou_type() ].depth() * 2),
296 ml = util.widgets.make_menulist( list, data.list.au[0].ws_ou() );
297 ml.setAttribute('id','pickup_lib_menu');
299 $('pickup_lib_menu_placeholder').appendChild(ml);
301 window.place_hold_event_listeners.add(ml,
303 function(ev) { oils_lock_page(); },
308 alert('Error in place_hold.js, populate_pickup_lib_menu(): ' + E);
312 function ui_setup() {
313 if (typeof JSAN == 'undefined') {
314 throw( "The JSAN library object is missing.");
316 JSAN.errorLevel = "die"; // none, warn, or die
317 JSAN.addRepository('/xul/server/');
318 JSAN.use('util.error');
319 error = new util.error();
321 if (typeof xulG == 'object' && typeof xulG.set_tab_name == 'function') {
324 $('patronStrings').getString('staff.item.batch.hold.tab_name')