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 window.place_hold_event_listeners = new EventListenerList();
24 window.place_hold_event_listeners.add($('request_btn'),
27 make_request(copy_ids,false);
32 set_remaining_event_listeners();
35 alert('Error in place_hold.js, my_init(): ' + E);
39 function my_cleanup() {
41 window.place_hold_event_listeners.removeAll();
43 alert('Error in place_hold.js, my_init(): ' + E);
47 function make_request(copy_ids,override) {
51 alert( $('patronStrings').getString('staff.item.batch.hold.user_not_found') );
56 'hold_type' : $('hold_type_menu').value,
57 'patronid' : hold_usr,
59 'pickup_lib' : $('pickup_lib_menu').value
63 $('progress_meter').hidden = false;
64 $('request_btn').disabled = true;
65 $('cancel_btn').disabled = true;
69 ? 'FM_AHR_CHECK_AND_CREATE.batch.override'
70 : 'FM_AHR_CHECK_AND_CREATE.batch',
71 [ ses(), args, copy_ids ],
76 alert('Error in place_hold.js, make_request(): ' + E);
80 function handle_results(req) {
83 $('progress_meter').hidden = true;
85 var results = req.getResultObject();
86 if(typeof(results.length) != "number") {
92 var failed_targets = [];
93 var failure_count = 0;
95 for (var i = 0; i < results.length; i++) {
96 var payload = results[i];
97 var target = payload.target;
98 var result = payload.result;
99 if (typeof result.length != 'undefined') {
100 // Array; grab first exception for simplicity
104 if (typeof result == 'string' || typeof result == 'number') {
105 successes.push( result ); // hold id's
108 if (typeof failures[ result.textcode ] == 'undefined') {
109 failures[ result.textcode ] = [];
111 failures[ result.textcode ].push( target );
112 failed_targets.push( target );
116 var msg = document.createElement('description');
118 document.createTextNode(
119 $('patronStrings').getFormattedString('staff.item.batch.hold.x_holds_created',[ successes.length ])
122 $('msgs').appendChild(msg);
124 if (failure_count>0) {
125 $('desc').hidden = false;
126 handle_failures(failures,failed_targets);
129 alert('Error in place_hold.js, handle_results(): ' + E);
133 function handle_failures(failures,failed_targets) {
135 for (k in failures) {
136 var err_box = document.createElement('hbox');
137 var err_msg = document.createElement('description');
138 err_box.appendChild(err_msg);
139 $('msgs').appendChild(err_box);
141 document.createTextNode(
142 $('patronStrings').getFormattedString('staff.item.batch.hold.x_failed_holds',[ failures[k].length, k ])
145 addCSSClass(err_msg,'click_link');
146 window.place_hold_event_listeners.add(err_msg,
149 return function(ev) {
151 urls.XUL_COPY_STATUS,
154 'copy_ids' : copy_ids
161 var retry_btn = document.createElement('button');
162 retry_btn.setAttribute(
164 $('patronStrings').getString('staff.item.batch.hold.retry_btn_label')
166 err_box.appendChild(retry_btn);
168 window.place_hold_event_listeners.add(retry_btn,
171 return function(ev) {
172 ev.target.disabled = true;
173 ev.target.hidden = true;
174 ev.target.nextSibling.disabled = true;
175 ev.target.nextSibling.hidden = true;
176 make_request(copy_ids,false);
182 var override_btn = document.createElement('button');
183 override_btn.setAttribute(
185 $('patronStrings').getString('staff.item.batch.hold.override_btn_label')
187 err_box.appendChild(override_btn);
189 window.place_hold_event_listeners.add(override_btn,
192 return function(ev) {
193 ev.target.disabled = true;
194 ev.target.hidden = true;
195 ev.target.previousSibling.disabled = true;
196 ev.target.previousSibling.hidden = true;
197 make_request(copy_ids,true);
205 alert('Error in place_hold.js, handle_failures(): ' + E);
209 function set_remaining_event_listeners() {
212 window.place_hold_event_listeners.add($('hold_type_menu'),
214 function(ev) { oils_lock_page(); },
218 window.place_hold_event_listeners.add($('cancel_btn'),
220 function(ev) { xulG.close_tab(); },
225 alert('Error in place_hold.js, set_remaining_event_listeners(): ' + E);
229 function populate_hold_usr_textbox() {
230 JSAN.use('patron.util');
231 hold_usr = ses('staff_id');
232 var au_obj = patron.util.retrieve_fleshed_au_via_id(
236 $('hold_usr_textbox').value = au_obj.card().barcode();
237 $('hold_usr_textbox').select();
238 $('hold_usr_textbox').focus();
239 $('hold_usr_name').setAttribute(
241 patron.util.format_name(au_obj)
243 window.place_hold_event_listeners.add($('hold_usr_textbox'),
248 var au_obj = patron.util.retrieve_fleshed_au_via_barcode(
252 if (typeof au_obj.textcode == 'undefined') {
253 hold_usr = au_obj.id();
254 $('hold_usr_name').setAttribute(
256 patron.util.format_name(au_obj)
258 removeCSSClass($('hold_usr_name'),'failure_text');
261 $('hold_usr_name').setAttribute(
263 $('patronStrings').getString('staff.item.batch.hold.user_not_found')
265 addCSSClass($('hold_usr_name'),'failure_text');
268 alert('Error in place_hold.js, hold_usr handler: ' + E);
275 function populate_pickup_lib_menu() {
277 JSAN.use('util.widgets');
278 JSAN.use('util.functional');
280 util.widgets.remove_children('pickup_lib_menu_placeholder');
282 var list = util.functional.map_list(
285 var sname = o.shortname();
286 for (i = sname.length; i < 20; i++) sname += ' ';
288 o.name() ? sname + ' ' + o.name() : o.shortname(),
290 ( !isTrue(data.hash.aout[ o.ou_type() ].can_have_users()) ),
291 ( data.hash.aout[ o.ou_type() ].depth() * 2),
295 ml = util.widgets.make_menulist( list, data.list.au[0].ws_ou() );
296 ml.setAttribute('id','pickup_lib_menu');
298 $('pickup_lib_menu_placeholder').appendChild(ml);
300 window.place_hold_event_listeners.add(ml,
302 function(ev) { oils_lock_page(); },
307 alert('Error in place_hold.js, populate_pickup_lib_menu(): ' + E);
311 function ui_setup() {
312 if (typeof JSAN == 'undefined') {
313 throw( "The JSAN library object is missing.");
315 JSAN.errorLevel = "die"; // none, warn, or die
316 JSAN.addRepository('/xul/server/');
317 JSAN.use('util.error');
318 error = new util.error();
320 if (typeof xulG == 'object' && typeof xulG.set_tab_name == 'function') {
323 $('patronStrings').getString('staff.item.batch.hold.tab_name')