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();
80 var failed_targets = [];
81 var failure_count = 0;
83 for (var i = 0; i < results.length; i++) {
84 var payload = results[i];
85 var target = payload.target;
86 var result = payload.result;
87 if (typeof result.length != 'undefined') {
88 // Array; grab first exception for simplicity
92 if (typeof result == 'string' || typeof result == 'number') {
93 successes.push( result ); // hold id's
96 if (typeof failures[ result.textcode ] == 'undefined') {
97 failures[ result.textcode ] = [];
99 failures[ result.textcode ].push( target );
100 failed_targets.push( target );
104 var msg = document.createElement('description');
106 document.createTextNode(
107 $('patronStrings').getFormattedString('staff.item.batch.hold.x_holds_created',[ successes.length ])
110 $('msgs').appendChild(msg);
112 if (failure_count>0) {
113 $('desc').hidden = false;
114 handle_failures(failures,failed_targets);
117 alert('Error in place_hold.js, handle_results(): ' + E);
121 function handle_failures(failures,failed_targets) {
123 for (k in failures) {
124 var err_box = document.createElement('hbox');
125 var err_msg = document.createElement('description');
126 err_box.appendChild(err_msg);
127 $('msgs').appendChild(err_box);
129 document.createTextNode(
130 $('patronStrings').getFormattedString('staff.item.batch.hold.x_failed_holds',[ failures[k].length, k ])
133 addCSSClass(err_msg,'click_link');
134 err_msg.addEventListener(
137 return function(ev) {
139 urls.XUL_COPY_STATUS,
142 'copy_ids' : copy_ids
149 var retry_btn = document.createElement('button');
150 retry_btn.setAttribute(
152 $('patronStrings').getString('staff.item.batch.hold.retry_btn_label')
154 err_box.appendChild(retry_btn);
156 retry_btn.addEventListener(
159 return function(ev) {
160 ev.target.disabled = true;
161 ev.target.hidden = true;
162 ev.target.nextSibling.disabled = true;
163 ev.target.nextSibling.hidden = true;
164 make_request(copy_ids,false);
170 var override_btn = document.createElement('button');
171 override_btn.setAttribute(
173 $('patronStrings').getString('staff.item.batch.hold.override_btn_label')
175 err_box.appendChild(override_btn);
177 override_btn.addEventListener(
180 return function(ev) {
181 ev.target.disabled = true;
182 ev.target.hidden = true;
183 ev.target.previousSibling.disabled = true;
184 ev.target.previousSibling.hidden = true;
185 make_request(copy_ids,true);
193 alert('Error in place_hold.js, handle_failures(): ' + E);
197 function set_remaining_event_listeners() {
200 $('hold_type_menu').addEventListener(
202 function(ev) { oils_lock_page(); },
206 $('cancel_btn').addEventListener(
208 function(ev) { xulG.close_tab(); },
213 alert('Error in place_hold.js, set_remaining_event_listeners(): ' + E);
217 function populate_hold_usr_textbox() {
218 JSAN.use('patron.util');
219 hold_usr = ses('staff_id');
220 var au_obj = patron.util.retrieve_fleshed_au_via_id(
224 $('hold_usr_textbox').value = au_obj.card().barcode();
225 $('hold_usr_textbox').select();
226 $('hold_usr_textbox').focus();
227 $('hold_usr_name').setAttribute(
229 patron.util.format_name(au_obj)
231 $('hold_usr_textbox').addEventListener(
236 var au_obj = patron.util.retrieve_fleshed_au_via_barcode(
240 if (typeof au_obj.textcode == 'undefined') {
241 hold_usr = au_obj.id();
242 $('hold_usr_name').setAttribute(
244 patron.util.format_name(au_obj)
246 removeCSSClass($('hold_usr_name'),'failure_text');
249 $('hold_usr_name').setAttribute(
251 $('patronStrings').getString('staff.item.batch.hold.user_not_found')
253 addCSSClass($('hold_usr_name'),'failure_text');
256 alert('Error in place_hold.js, hold_usr handler: ' + E);
263 function populate_pickup_lib_menu() {
265 JSAN.use('util.widgets');
266 JSAN.use('util.functional');
268 util.widgets.remove_children('pickup_lib_menu_placeholder');
270 var list = util.functional.map_list(
273 var sname = o.shortname();
274 for (i = sname.length; i < 20; i++) sname += ' ';
276 o.name() ? sname + ' ' + o.name() : o.shortname(),
278 ( !isTrue(data.hash.aout[ o.ou_type() ].can_have_users()) ),
279 ( data.hash.aout[ o.ou_type() ].depth() * 2),
283 ml = util.widgets.make_menulist( list, data.list.au[0].ws_ou() );
284 ml.setAttribute('id','pickup_lib_menu');
286 $('pickup_lib_menu_placeholder').appendChild(ml);
290 function(ev) { oils_lock_page(); },
295 alert('Error in place_hold.js, populate_pickup_lib_menu(): ' + E);
299 function ui_setup() {
300 netscape.security.PrivilegeManager.enablePrivilege(
301 "UniversalXPConnect");
302 if (typeof JSAN == 'undefined') {
303 throw( "The JSAN library object is missing.");
305 JSAN.errorLevel = "die"; // none, warn, or die
306 JSAN.addRepository('/xul/server/');
307 JSAN.use('util.error');
308 error = new util.error();
310 if (typeof xulG == 'object' && typeof xulG.set_tab_name == 'function') {
313 $('patronStrings').getString('staff.item.batch.hold.tab_name')