1 dump('entering circ.in_house_use.js\n');
3 if (typeof circ == 'undefined') circ = {};
4 circ.in_house_use = function (params) {
6 JSAN.use('util.error'); this.error = new util.error();
7 JSAN.use('util.network'); this.network = new util.network();
8 JSAN.use('util.barcode');
10 JSAN.use('OpenILS.data'); this.data = new OpenILS.data(); this.data.init({'via':'stash'});
13 circ.in_house_use.prototype = {
15 'init' : function( params ) {
19 JSAN.use('circ.util');
20 var columns = circ.util.columns(
22 'barcode' : { 'hidden' : false },
23 'title' : { 'hidden' : false },
24 'status' : { 'hidden' : false },
25 'location' : { 'hidden' : false },
26 'call_number' : { 'hidden' : false },
27 'uses' : { 'hidden' : false },
31 JSAN.use('util.list'); obj.list = new util.list('in_house_use_list');
35 'map_row_to_columns' : circ.util.std_map_row_to_columns(),
36 'on_select' : function() {
37 var sel = obj.list.retrieve_selection();
38 document.getElementById('clip_button').disabled = sel.length < 1;
43 JSAN.use('util.controller'); obj.controller = new util.controller();
47 'save_columns' : [ [ 'command' ], function() { obj.list.save_columns(); } ],
50 function() { obj.list.clipboard(); }
52 'in_house_use_menu_placeholder' : [
56 JSAN.use('util.widgets'); JSAN.use('util.functional'); JSAN.use('util.fm_utils');
57 var items = [ [ 'Barcode:' , 'barcode' ] ].concat(
58 util.functional.map_list(
59 util.functional.filter_list(
62 return util.fm_utils.compare_aou_a_is_b_or_ancestor(o.owning_lib(), obj.data.list.au[0].ws_ou());
68 return util.fm_utils.sort_func_aou_by_depth_and_then_string(
69 [ a.owning_lib(), a.name() ],
70 [ b.owning_lib(), b.name() ]
73 alert('error in noncat sorting: ' + E);
80 return [ obj.data.hash.aou[ o.owning_lib() ].shortname() + ' : ' + o.name(), o.id() ];
84 g.error.sdump('D_TRACE','items = ' + js2JSON(items));
85 util.widgets.remove_children( e );
86 var ml = util.widgets.make_menulist(
90 ml.setAttribute('id','in_house_use_menulist');
91 ml.setAttribute('accesskey','');
95 var tb = obj.controller.view.in_house_use_barcode_entry_textbox;
96 if (ev.target.value == 'barcode') {
102 tb.value = 'Non-Cataloged';
106 obj.controller.view.in_house_use_menu = ml;
110 'in_house_use_barcode_entry_textbox' : [
113 if (ev.keyCode && ev.keyCode == 13) {
118 'in_house_use_multiplier_label' : [
122 obj.controller.view.in_house_use_multiplier_textbox.select();
123 obj.controller.view.in_house_use_multiplier_textbox.value = 1;
127 'in_house_use_multiplier_textbox' : [
130 if (ev.target.nodeName == 'textbox') {
132 var value = Number(ev.target.value);
134 if (value > 99) ev.target.value = 99;
139 dump('in_house_use:multiplier: ' + E + '\n');
147 function() { alert('Not Yet Implemented'); }
149 'cmd_in_house_use_submit_barcode' : [
155 'cmd_in_house_use_print' : [
159 'template' : 'in_house_use'
164 'cmd_in_house_use_export' : [
167 obj.list.dump_csv_to_clipboard();
171 'cmd_in_house_use_reprint' : [
176 'cmd_in_house_use_done' : [
184 this.controller.render();
185 this.controller.view.in_house_use_barcode_entry_textbox.focus();
189 'test_barcode' : function(bc) {
191 var good = util.barcode.check(bc);
192 var x = document.getElementById('strict_barcode');
193 if (x && x.checked != true) return true;
197 if ( 1 == obj.error.yns_alert(
198 'Bad checkdigit; possible mis-scan. Use this barcode ("' + bc + '") anyway?',
203 'Check here to confirm this action',
204 '/xul/server/skin/media/images/bad_barcode.png'
213 'in_house_use' : function() {
217 if (obj.controller.view.in_house_use_menu.value == '' || obj.controller.view.in_house_use_menu.value == 'barcode') {
218 barcode = obj.controller.view.in_house_use_barcode_entry_textbox.value;
220 if ( obj.test_barcode(barcode) ) { /* good */ } else { /* bad */ return; }
223 barcode = ( obj.controller.view.in_house_use_menu.value );
224 //barcode = obj.data.hash.cnct[ obj.controller.view.in_house_use_menu.value ].name()
226 var multiplier = Number( obj.controller.view.in_house_use_multiplier_textbox.value );
229 obj.controller.view.in_house_use_barcode_entry_textbox.focus();
233 if (multiplier == 0 || multiplier > 99) {
234 obj.controller.view.in_house_use_multiplier_textbox.focus();
235 obj.controller.view.in_house_use_multiplier_textbox.select();
239 if (multiplier > 20) {
240 var r = obj.error.yns_alert('Are you sure you want to mark ' + barcode + ' as having been used ' + multiplier + ' times?','In-House Use Verification', 'Yes', 'No', null, 'Check here to confirm this message.');
242 obj.controller.view.in_house_use_multiplier_textbox.focus();
243 obj.controller.view.in_house_use_multiplier_textbox.select();
248 JSAN.use('circ.util');
250 if (obj.controller.view.in_house_use_menu.value == 'barcode') {
252 var copy = obj.network.simple_request('FM_ACP_RETRIEVE_VIA_BARCODE',[ barcode ]);
254 switch(copy.ilsevent) {
255 case -1 : obj.error.standard_network_error_alert('In House Use Failed. If you wish to use the offline interface, in the top menubar select Circulation -> Offline Interface'); break;
256 case 1502 /* ASSET_COPY_NOT_FOUND */ : obj.error.yns_alert(copy.textcode,'In House Use Failed','Ok',null,null,'Check here to confirm this message'); break;
257 default: throw(copy);
262 var mods = obj.network.simple_request('MODS_SLIM_RECORD_RETRIEVE_VIA_COPY',[ copy.id() ]);
263 var result = obj.network.simple_request('FM_AIHU_CREATE',
264 [ ses(), { 'copyid' : copy.id(), 'location' : obj.data.list.au[0].ws_ou(), 'count' : multiplier } ]
268 var result = obj.network.simple_request('FM_ANCIHU_CREATE',
269 [ ses(), { 'non_cat_type' : obj.controller.view.in_house_use_menu.value, 'location' : obj.data.list.au[0].ws_ou(), 'count' : multiplier } ]
271 mods = new mvr(); mods.title( obj.data.hash.cnct[ obj.controller.view.in_house_use_menu.value ].name());
272 copy = new acp(); copy.barcode( '' );
275 if (document.getElementById('trim_list')) {
276 var x = document.getElementById('trim_list');
277 if (x.checked) { obj.list.trim_list = 20; } else { obj.list.trim_list = null; }
285 'uses' : result.length,
289 //I could override map_row_to_column here
293 if (typeof obj.on_in_house_use == 'function') {
294 obj.on_in_house_use(result);
296 if (typeof window.xulG == 'object' && typeof window.xulG.on_in_house_use == 'function') {
297 obj.error.sdump('D_CIRC','circ.in_house_use: Calling external .on_in_house_use()\n');
298 window.xulG.on_in_house_use(result);
300 obj.error.sdump('D_CIRC','circ.in_house_use: No external .on_in_house_use()\n');
304 obj.error.standard_unexpected_error_alert('In House Use Failed',E);
305 if (typeof obj.on_failure == 'function') {
308 if (typeof window.xulG == 'object' && typeof window.xulG.on_failure == 'function') {
309 obj.error.sdump('D_CIRC','circ.in_house_use: Calling external .on_failure()\n');
310 window.xulG.on_failure(E);
312 obj.error.sdump('D_CIRC','circ.in_house_use: No external .on_failure()\n');
318 'on_in_house_use' : function() {
319 this.controller.view.in_house_use_multiplier_textbox.select();
320 this.controller.view.in_house_use_multiplier_textbox.value = '1';
321 this.controller.view.in_house_use_barcode_entry_textbox.value = '';
322 this.controller.view.in_house_use_barcode_entry_textbox.focus();
325 'on_failure' : function() {
326 this.controller.view.in_house_use_barcode_entry_textbox.select();
327 this.controller.view.in_house_use_barcode_entry_textbox.focus();
331 dump('exiting circ.in_house_use.js\n');