1 dump('entering cat/util.js\n');
3 function $(id) { return document.getElementById(id); }
5 if (typeof cat == 'undefined') var cat = {};
9 'spawn_copy_editor', 'add_copies_to_bucket', 'show_in_opac', 'spawn_spine_editor', 'transfer_copies',
10 'mark_item_missing', 'mark_item_damaged', 'replace_barcode',
12 cat.util.EXPORT_TAGS = { ':all' : cat.util.EXPORT_OK };
14 cat.util.replace_barcode = function(old_bc) {
16 JSAN.use('util.network');
17 var network = new util.network();
19 if (!old_bc) old_bc = window.prompt($("catStrings").getString('staff.cat.util.replace_barcode.old_bc_window_prompt.prompt'),
21 $("catStrings").getString('staff.cat.util.replace_barcode.old_bc_window_prompt.title'));
26 copy = network.simple_request('FM_ACP_RETRIEVE_VIA_BARCODE',[ old_bc ]);
27 if (typeof copy.ilsevent != 'undefined') throw(copy);
28 if (!copy) throw(copy);
30 alert($("catStrings").getFormattedString('staff.cat.util.replace_barcode.error_alert', [old_bc]) + '\n');
34 // Why did I want to do this twice? Because this copy is more fleshed?
36 copy = network.simple_request('FM_ACP_RETRIEVE',[ copy.id() ]);
37 if (typeof copy.ilsevent != 'undefined') throw(copy);
38 if (!copy) throw(copy);
41 alert($("catStrings").getFormattedString('staff.cat.util.replace_barcode.error_alert', [old_bc]) +
42 '\n' + (typeof E.ilsevent == 'undefined' ? '' : E.textcode + ' : ' + E.desc));
49 var new_bc = window.prompt($("catStrings").getString('staff.cat.util.replace_barcode.new_bc_window_prompt.prompt'),
51 $("catStrings").getString('staff.cat.util.replace_barcode.new_bc_window_prompt.title'));
52 new_bc = String( new_bc ).replace(/\s/g,'');
54 alert($("catStrings").getString('staff.cat.util.replace_barcode.new_bc.failed'));
58 var test = network.simple_request('FM_ACP_RETRIEVE_VIA_BARCODE',[ new_bc ]);
59 if (typeof test.ilsevent == 'undefined') {
60 alert('Rename aborted. Another copy has barcode "' + new_bc + '".');
63 if (test.ilsevent != 1502 /* ASSET_COPY_NOT_FOUND */) {
64 obj.error.standard_unexpected_error_alert($("catStrings").getFormattedString('staff.cat.util.replace_barcode.testing_error', [new_bc]), test);
69 copy.barcode(new_bc); copy.ischanged('1');
70 var r = network.simple_request('FM_ACP_FLESHED_BATCH_UPDATE', [ ses(), [ copy ] ]);
71 if (typeof r.ilsevent != 'undefined') {
72 if (r.ilsevent != 0) {
73 if (r.ilsevent == 5000 /* PERM_FAILURE */) {
74 alert($("catStrings").getString('staff.cat.util.replace_barcode.insufficient_permission_for_rename'));
77 obj.error.standard_unexpected_error_alert($("catStrings").getString('staff.cat.util.replace_barcode.item_rename_error'),r);
85 JSAN.use('util.error'); var error = new util.error();
86 error.standard_unexpected_error_alert($("catStrings").getString('staff.cat.util.replace_barcode.rename_error'),E);
91 cat.util.transfer_copies = function(params) {
92 JSAN.use('util.error'); var error = new util.error();
93 JSAN.use('OpenILS.data'); var data = new OpenILS.data();
94 JSAN.use('util.network'); var network = new util.network();
96 data.stash_retrieve();
97 if (!data.marked_volume) {
98 alert($("catStrings").getString('staff.cat.util.transfer_copies.unmarked_volume_alert'));
101 netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserWrite');
102 var xml = '<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" flex="1" style="overflow: auto">';
103 if (!params.message) {
104 params.message = $("catStrings").getFormattedString('staff.cat.util.transfer_copies.params_message', [data.hash.aou[ params.owning_lib ].shortname(), params.volume_label]);
105 //params.message = 'Transfer items from their original volumes to ';
106 //params.message += data.hash.aou[ params.owning_lib ].shortname() + "'s volume labelled ";
107 //params.message += '"' + params.volume_label + '" on the following record (and change their circ libs to match)?';
110 xml += '<description>' + params.message.replace(/&/g,'&').replace(/</g,'<').replace(/>/g,'>') + '</description>';
111 xml += '<hbox><button label="' + $("catStrings").getString('staff.cat.util.transfer_copies.transfer.label')+ '" name="fancy_submit"/>';
112 xml += '<button label="' + $("catStrings").getString('staff.cat.util.transfer_copies.cancel.label');
113 xml += '" accesskey="'+ $("catStrings").getString('staff.cat.util.transfer_copies.cancel.accesskey') +'" name="fancy_cancel"/></hbox>';
114 xml += '<iframe style="overflow: scroll" flex="1" src="' + urls.XUL_BIB_BRIEF + '?docid=' + params.docid + '"/>';
116 //data.temp_transfer = xml; data.stash('temp_transfer');
117 JSAN.use('util.window'); var win = new util.window();
118 var fancy_prompt_data = win.open(
119 urls.XUL_FANCY_PROMPT,
120 //+ '?xml_in_stash=temp_transfer'
121 //+ '&title=' + window.escape('Item Transfer'),
122 'fancy_prompt', 'chrome,resizable,modal,width=500,height=300',
123 { 'xml' : xml, 'title' : $("catStrings").getString('staff.cat.util.transfer_copies.window_title') }
125 if (fancy_prompt_data.fancy_status == 'incomplete') { alert($("catStrings").getString('staff.cat.util.transfer_copies.aborted_transfer')); return; }
127 JSAN.use('util.functional');
129 var copies = network.simple_request('FM_ACP_FLESHED_BATCH_RETRIEVE.authoritative', [ params.copy_ids ]);
131 for (var i = 0; i < copies.length; i++) {
132 copies[i].call_number( data.marked_volume );
133 copies[i].circ_lib( params.owning_lib );
134 copies[i].ischanged( 1 );
137 var robj = network.simple_request(
138 'FM_ACP_FLESHED_BATCH_UPDATE',
139 [ ses(), copies, true ],
142 'title' : $("catStrings").getString('staff.cat.util.transfer_copies.override_transfer_failure'),
143 'overridable_events' : [
144 1208 /* TITLE_LAST_COPY */,
145 1227 /* COPY_DELETE_WARNING */,
150 if (typeof robj.ilsevent != 'undefined') {
153 alert($("catStrings").getString('staff.cat.util.transfer_copies.successful_transfer'));
157 error.standard_unexpected_error_alert($("catStrings").getString('staff.cat.util.transfer_copies.transfer_error'),E);
161 cat.util.spawn_spine_editor = function(selection_list) {
162 JSAN.use('util.error'); var error = new util.error();
164 JSAN.use('util.functional');
165 JSAN.use('OpenILS.data'); var data = new OpenILS.data(); data.stash_retrieve();
166 data.temp_barcodes_for_labels = util.functional.map_list( selection_list, function(o){return o.barcode;}) ;
167 data.stash('temp_barcodes_for_labels');
169 xulG.url_prefix( urls.XUL_SPINE_LABEL ),
170 { 'tab_name' : $("catStrings").getString('staff.cat.util.spine_editor.tab_name') },
174 error.standard_unexpected_error_alert($("catStrings").getString('staff.cat.util.spine_editor.spine_editor_error'),E);
178 cat.util.show_in_opac = function(selection_list) {
179 JSAN.use('util.error'); var error = new util.error();
180 var doc_id; var seen = {};
182 for (var i = 0; i < selection_list.length; i++) {
183 doc_id = selection_list[i].doc_id;
185 alert($("catStrings").getFormattedString('staff.cat.util.show_in_opac.unknown_barcode', [selection_list[i].barcode]));
188 if (typeof seen[doc_id] != 'undefined') {
192 var opac_url = xulG.url_prefix( urls.opac_rdetail ) + '?r=' + doc_id;
193 var content_params = {
195 'authtime' : ses('authtime'),
196 'opac_url' : opac_url,
199 xulG.url_prefix(urls.XUL_OPAC_WRAPPER),
200 {'tab_name':'Retrieving title...'},
205 error.standard_unexpected_error_alert($("catStrings").getFormattedString('staff.cat.util.show_in_opac.catalog_error_for_doc_id', [doc_id]),E);
209 cat.util.add_copies_to_bucket = function(selection_list) {
210 JSAN.use('util.functional');
211 JSAN.use('util.window'); var win = new util.window();
212 JSAN.use('OpenILS.data'); var data = new OpenILS.data(); data.init({'via':'stash'});
213 data.cb_temp_copy_ids = js2JSON(
214 util.functional.map_list(
217 if (typeof o.copy_id != 'undefined' && o.copy_id != null) {
225 data.stash('cb_temp_copy_ids');
227 xulG.url_prefix(urls.XUL_COPY_BUCKETS_QUICK),
228 'sel_bucket_win' + win.window_name_increment(),
229 'chrome,resizable,center'
233 cat.util.spawn_copy_editor = function(params) {
235 if (!params.copy_ids && !params.copies) return;
236 if (params.copy_ids && params.copy_ids.length == 0) return;
237 if (params.copies && params.copies.length == 0) return;
238 if (params.copy_ids) params.copy_ids = js2JSON(params.copy_ids); // legacy
239 if (!params.caller_handles_update) params.handle_update = 1; // legacy
242 JSAN.use('util.network'); obj.network = new util.network();
243 JSAN.use('util.error'); obj.error = new util.error();
246 if (params.copy_ids && params.copy_ids.length > 1 && params.edit == 1)
247 title = $("catStrings").getString('staff.cat.util.copy_editor.batch_edit');
248 else if(params.copies && params.copies.length > 1 && params.edit == 1)
249 title = $("catStrings").getString('staff.cat.util.copy_editor.batch_view');
250 else if(params.copy_ids && params.copy_ids.length == 1)
251 title = $("catStrings").getString('staff.cat.util.copy_editor.edit');
253 title = $("catStrings").getString('staff.cat.util.copy_editor.view');
255 JSAN.use('util.window'); var win = new util.window();
256 var my_xulG = win.open(
257 (urls.XUL_COPY_EDITOR),
259 'chrome,modal,resizable',
262 if (!my_xulG.copies && params.edit) {
263 alert(typeof params.no_copies_modified_msg != 'undefined' ? params.no_copies_modified_msg : $("catStrings").getString('staff.cat.util.copy_editor.not_modified'));
265 return my_xulG.copies;
269 JSAN.use('util.error'); var error = new util.error();
270 error.standard_unexpected_error_alert('error in cat.util.spawn_copy_editor',E);
274 cat.util.mark_item_damaged = function(copy_ids) {
277 JSAN.use('util.error'); error = new util.error();
278 JSAN.use('util.functional');
279 JSAN.use('util.network'); var network = new util.network();
280 var copies = network.simple_request('FM_ACP_FLESHED_BATCH_RETRIEVE.authoritative', [ copy_ids ]);
281 if (typeof copies.ilsevent != 'undefined') throw(copies);
282 var magic_status = false;
283 for (var i = 0; i < copies.length; i++) {
284 var status = copies[i].status(); if (typeof status == 'object') status = status.id();
285 if (typeof my_constants.magical_statuses[ status ] != 'undefined')
286 if (my_constants.magical_statuses[ status ].block_mark_item_action) magic_status = true;
290 error.yns_alert($("catStrings").getString('staff.cat.util.mark_item_damaged.af_message'),
291 $("catStrings").getString('staff.cat.util.mark_item_damaged.af_title'),
292 $("catStrings").getString('staff.cat.util.mark_item_damaged.af_ok_label'), null, null,
293 $("catStrings").getString('staff.cat.util.mark_item_damaged.af_confirm_action'));
297 var r = error.yns_alert($("catStrings").getFormattedString('staff.cat.util.mark_item_damaged.md_message', [util.functional.map_list( copies, function(o) { return o.barcode(); } ).join(", ")]),
298 $("catStrings").getString('staff.cat.util.mark_item_damaged.md_title'),
299 $("catStrings").getString('staff.cat.util.mark_item_damaged.md_ok_label'),
300 $("catStrings").getString('staff.cat.util.mark_item_damaged.md_cancel_label'), null,
301 $("catStrings").getString('staff.cat.util.mark_item_damaged.md_confirm_action'));
305 for (var i = 0; i < copies.length; i++) {
307 var robj = network.simple_request('MARK_ITEM_DAMAGED',[ses(),copies[i].id()]);
308 if (typeof robj.ilsevent != 'undefined') {
309 switch(robj.textcode) {
310 case 'DAMAGE_CHARGE' :
311 JSAN.use('patron.util'); JSAN.use('util.money');
312 var patron_obj = patron.util.retrieve_fleshed_au_via_id( ses(), robj.payload.usr );
313 var patron_name = ( patron_obj.prefix() ? patron_obj.prefix() + ' ' : '') +
314 patron_obj.family_name() + ', ' +
315 patron_obj.first_given_name() + ' ' +
316 ( patron_obj.second_given_name() ? patron_obj.second_given_name() + ' ' : '' ) +
317 ( patron_obj.suffix() ? patron_obj.suffix() : '')
318 + ' : ' + patron_obj.card().barcode()
320 var r1 = error.yns_alert(
321 $("catStrings").getFormattedString('staff.cat.util.mark_item_damaged.charge_patron_prompt.message', [ copies[i].barcode(), patron_name, util.money.sanitize(robj.payload.charge) ]),
322 $("catStrings").getString('staff.cat.util.mark_item_damaged.charge_patron_prompt.title'),
323 $("catStrings").getString('staff.cat.util.mark_item_damaged.charge_patron_prompt.ok_label'),
324 $("catStrings").getString('staff.cat.util.mark_item_damaged.charge_patron_prompt.cancel_label'), null,
325 $("catStrings").getString('staff.cat.util.mark_item_damaged.charge_patron_prompt.confirm_action'));
327 robj = network.simple_request('MARK_ITEM_DAMAGED',[ ses(), copies[i].id(), {'apply_fines' : r1 == 0 ? 'apply' : 'noapply'} ]);
328 if (typeof robj.ilsevent != 'undefined') { throw(robj); }
330 default: throw(robj);
335 error.standard_unexpected_error_alert($("catStrings").getFormattedString('staff.cat.util.mark_item_damaged.marking_error', [copies[i].barcode()]),E);
338 alert(count == 1 ? $("catStrings").getString('staff.cat.util.mark_item_damaged.one_item_damaged') :
339 $("catStrings").getFormattedString('staff.cat.util.mark_item_damaged.multiple_item_damaged', [count]));
344 if (error) error.standard_unexpected_error_alert('cat.util.mark_item_damaged',E); else alert('FIXME: ' + E);
348 cat.util.mark_item_missing = function(copy_ids) {
351 JSAN.use('util.error'); error = new util.error();
352 JSAN.use('util.functional');
353 JSAN.use('util.network'); var network = new util.network();
354 var copies = network.simple_request('FM_ACP_FLESHED_BATCH_RETRIEVE.authoritative', [ copy_ids ]);
355 if (typeof copies.ilsevent != 'undefined') throw(copies);
356 var magic_status = false;
357 for (var i = 0; i < copies.length; i++) {
358 var status = copies[i].status(); if (typeof status == 'object') status = status.id();
359 if (typeof my_constants.magical_statuses[ status ] != 'undefined')
360 if (my_constants.magical_statuses[ status ].block_mark_item_action) magic_status = true;
364 error.yns_alert($("catStrings").getString('staff.cat.util.mark_item_missing.af_message'),
365 $("catStrings").getString('staff.cat.util.mark_item_missing.af_title'),
366 $("catStrings").getString('staff.cat.util.mark_item_missing.af_ok_label'), null, null,
367 $("catStrings").getString('staff.cat.util.mark_item_missing.af_confirm_action'));
371 var r = error.yns_alert($("catStrings").getFormattedString('staff.cat.util.mark_item_missing.ms_message', [util.functional.map_list( copies, function(o) { return o.barcode(); } ).join(", ")]),
372 $("catStrings").getString('staff.cat.util.mark_item_missing.ms_title'),
373 $("catStrings").getString('staff.cat.util.mark_item_missing.ms_ok_label'),
374 $("catStrings").getString('staff.cat.util.mark_item_missing.ms_cancel_label'), null,
375 $("catStrings").getString('staff.cat.util.mark_item_missing.ms_confirm_action'));
379 for (var i = 0; i < copies.length; i++) {
381 var robj = network.simple_request('MARK_ITEM_MISSING',[ses(),copies[i].id()]);
382 if (typeof robj.ilsevent != 'undefined') throw(robj);
385 error.standard_unexpected_error_alert($("catStrings").getFormattedString('staff.cat.util.mark_item_missing.marking_error', [copies[i].barcode()]),E);
388 alert(count == 1 ? $("catStrings").getString('staff.cat.util.mark_item_missing.one_item_missing') :
389 $("catStrings").getFormattedString('staff.cat.util.mark_item_missing.multiple_item_missing', [count]));
394 if (error) error.standard_unexpected_error_alert('cat.util.mark_item_missing',E); else alert('FIXME: ' + E);
399 dump('exiting cat/util.js\n');