]> git.evergreen-ils.org Git - Evergreen.git/blob - Open-ILS/xul/staff_client/server/circ/in_house_use.js
14d4b65e8d77a1a9a423e0c73538dae626bc12b3
[Evergreen.git] / Open-ILS / xul / staff_client / server / circ / in_house_use.js
1 dump('entering circ.in_house_use.js\n');
2
3 if (typeof circ == 'undefined') circ = {};
4 circ.in_house_use = function (params) {
5
6         JSAN.use('util.error'); this.error = new util.error();
7         JSAN.use('util.network'); this.network = new util.network();
8         JSAN.use('util.date');
9         JSAN.use('OpenILS.data'); this.data = new OpenILS.data(); this.data.init({'via':'stash'});
10 }
11
12 circ.in_house_use.prototype = {
13
14         'init' : function( params ) {
15
16                 var obj = this;
17
18                 JSAN.use('circ.util');
19                 var columns = circ.util.columns( 
20                         { 
21                                 'barcode' : { 'hidden' : false },
22                                 'title' : { 'hidden' : false },
23                                 'status' : { 'hidden' : false },
24                                 'location' : { 'hidden' : false },
25                                 'call_number' : { 'hidden' : false },
26                                 'uses' : { 'hidden' : false },
27                         } 
28                 );
29
30                 JSAN.use('util.list'); obj.list = new util.list('in_house_use_list');
31                 obj.list.init(
32                         {
33                                 'columns' : columns,
34                                 'map_row_to_column' : circ.util.std_map_row_to_column(),
35                                 'on_select' : function() {
36                                         var sel = obj.list.retrieve_selection();
37                                         document.getElementById('clip_button').disabled = sel.length < 1;
38                                 }
39                         }
40                 );
41                 
42                 JSAN.use('util.controller'); obj.controller = new util.controller();
43                 obj.controller.init(
44                         {
45                                 'control_map' : {
46                                         'save_columns' : [ [ 'command' ], function() { obj.list.save_columns(); } ],
47                                         'sel_clip' : [
48                                                 ['command'],
49                                                 function() { obj.list.clipboard(); }
50                                         ],
51                                         'in_house_use_menu_placeholder' : [
52                                                 ['render'],
53                                                 function(e) {
54                                                         return function() {
55                                                                 JSAN.use('util.widgets'); JSAN.use('util.functional'); JSAN.use('util.fm_utils');
56                                                                 var items = [ [ 'Barcode:' , 'barcode' ] ].concat(
57                                                                         util.functional.map_list(
58                                                                                 util.functional.filter_list(
59                                                                                         obj.data.list.cnct,
60                                                                                         function(o) {
61                                                                                                 return util.fm_utils.compare_aou_a_is_b_or_ancestor(o.owning_lib(), obj.data.list.au[0].ws_ou());
62                                                                                         }
63                                                                                 ),
64                                                                                 function(o) {
65                                                                                         return [ o.name(), o.id() ];
66                                                                                 }
67                                                                         ).sort()
68                                                                 );
69                                                                 g.error.sdump('D_TRACE','items = ' + js2JSON(items));
70                                                                 util.widgets.remove_children( e );
71                                                                 var ml = util.widgets.make_menulist(
72                                                                         items
73                                                                 );
74                                                                 e.appendChild( ml );
75                                                                 ml.setAttribute('id','in_house_use_menulist');
76                                                                 ml.setAttribute('accesskey','');
77                                                                 ml.addEventListener(
78                                                                         'command',
79                                                                         function(ev) {
80                                                                                 var tb = obj.controller.view.in_house_use_barcode_entry_textbox;
81                                                                                 if (ev.target.value == 'barcode') {
82                                                                                         tb.disabled = false;
83                                                                                         tb.value = '';
84                                                                                         tb.focus();
85                                                                                 } else {
86                                                                                         tb.disabled = true;
87                                                                                         tb.value = 'Non-Cataloged';
88                                                                                 }
89                                                                         }, false
90                                                                 );
91                                                                 obj.controller.view.in_house_use_menu = ml;
92                                                         };
93                                                 },
94                                         ],
95                                         'in_house_use_barcode_entry_textbox' : [
96                                                 ['keypress'],
97                                                 function(ev) {
98                                                         if (ev.keyCode && ev.keyCode == 13) {
99                                                                 obj.in_house_use();
100                                                         }
101                                                 }
102                                         ],
103                                         'in_house_use_multiplier_label' : [
104                                                 ['render'],
105                                                 function(e) {
106                                                         return function() {
107                                                                 obj.controller.view.in_house_use_multiplier_textbox.select();
108                                                                 obj.controller.view.in_house_use_multiplier_textbox.value = 1;
109                                                         };
110                                                 }
111                                         ],
112                                         'in_house_use_multiplier_textbox' : [
113                                                 ['change'],
114                                                 function(ev) {
115                                                         if (ev.target.nodeName == 'textbox') {
116                                                                 try {
117                                                                         var value = Number(ev.target.value);
118                                                                         if (value > 0) {
119                                                                                 if (value > 99) ev.target.value = 99;
120                                                                         } else {
121                                                                                 ev.target.value = 1;
122                                                                         }
123                                                                 } catch(E) {
124                                                                         dump('in_house_use:multiplier: ' + E + '\n');
125                                                                         ev.target.value = 1;
126                                                                 }
127                                                         }
128                                                 }
129                                         ],
130                                         'cmd_broken' : [
131                                                 ['command'],
132                                                 function() { alert('Not Yet Implemented'); }
133                                         ],
134                                         'cmd_in_house_use_submit_barcode' : [
135                                                 ['command'],
136                                                 function() {
137                                                         obj.in_house_use();
138                                                 }
139                                         ],
140                                         'cmd_in_house_use_print' : [
141                                                 ['command'],
142                                                 function() {
143                                                         obj.list.on_all_fleshed = function() {
144                                                                 try {
145                                                                         dump( js2JSON( obj.list.dump_with_keys() ) + '\n' );
146                                                                         obj.data.stash_retrieve();
147                                                                         var lib = obj.data.hash.aou[ obj.data.list.au[0].ws_ou() ];
148                                                                         lib.children(null);
149                                                                         var p = { 
150                                                                                 'lib' : lib,
151                                                                                 'staff' : obj.data.list.au[0],
152                                                                                 'header' : obj.data.print_list_templates.in_house_use.header,
153                                                                                 'line_item' : obj.data.print_list_templates.in_house_use.line_item,
154                                                                                 'footer' : obj.data.print_list_templates.in_house_use.footer,
155                                                                                 'type' : obj.data.print_list_templates.in_house_use.type,
156                                                                                 'list' : obj.list.dump_with_keys(),
157                                                                         };
158                                                                         JSAN.use('util.print'); var print = new util.print();
159                                                                         print.tree_list( p );
160                                                                         setTimeout(function(){obj.list.on_all_fleshed = null;},0);
161                                                                 } catch(E) {
162                                                                         alert(E); 
163                                                                 }
164                                                         }
165                                                         obj.list.full_retrieve();
166                                                 }
167                                         ],
168                                         'cmd_in_house_use_reprint' : [
169                                                 ['command'],
170                                                 function() {
171                                                 }
172                                         ],
173                                         'cmd_in_house_use_done' : [
174                                                 ['command'],
175                                                 function() {
176                                                 }
177                                         ],
178                                 }
179                         }
180                 );
181                 this.controller.render();
182                 this.controller.view.in_house_use_barcode_entry_textbox.focus();
183
184         },
185
186         'in_house_use' : function() {
187                 var obj = this;
188                 try {
189                         var barcode;
190                         if (obj.controller.view.in_house_use_menu.value == '' || obj.controller.view.in_house_use_menu.value == 'barcode') {
191                                 barcode = obj.controller.view.in_house_use_barcode_entry_textbox.value;
192                         } else {
193                                 barcode = ( obj.controller.view.in_house_use_menu.value );
194                                 //barcode = obj.data.hash.cnct[ obj.controller.view.in_house_use_menu.value ].name()
195                         }
196                         var multiplier = Number( obj.controller.view.in_house_use_multiplier_textbox.value );
197
198                         if (barcode == '') {
199                                 obj.controller.view.in_house_use_barcode_entry_textbox.focus();
200                                 return; 
201                         }
202
203                         if (multiplier == 0 || multiplier > 99) {
204                                 obj.controller.view.in_house_use_multiplier_textbox.focus();
205                                 obj.controller.view.in_house_use_multiplier_textbox.select();
206                                 return;
207                         }
208
209                         if (multiplier > 20) {
210                                 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.');
211                                 if (r != 0) {
212                                         obj.controller.view.in_house_use_multiplier_textbox.focus();
213                                         obj.controller.view.in_house_use_multiplier_textbox.select();
214                                         return;
215                                 }
216                         }
217
218                         JSAN.use('circ.util');
219
220                         if (obj.controller.view.in_house_use_menu.value == 'barcode') {
221
222                                 var copy = obj.network.simple_request('FM_ACP_RETRIEVE_VIA_BARCODE',[ barcode ]); 
223                                 if (copy.ilsevent) { 
224                                         switch(copy.ilsevent) {
225                                                 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;
226                                                 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;
227                                                 default: throw(copy);
228                                         }
229                                         return; 
230                                 }
231         
232                                 var mods = obj.network.simple_request('MODS_SLIM_RECORD_RETRIEVE_VIA_COPY',[ copy.id() ]);
233                                 var result = obj.network.simple_request('FM_AIHU_CREATE',
234                                         [ ses(), { 'copyid' : copy.id(), 'location' : obj.data.list.au[0].ws_ou(), 'count' : multiplier } ]
235                                 );
236
237                         } else {
238                                 var result = obj.network.simple_request('FM_ANCIHU_CREATE',
239                                         [ ses(), { 'non_cat_type' : obj.controller.view.in_house_use_menu.value, 'location' : obj.data.list.au[0].ws_ou(), 'count' : multiplier } ]
240                                 );
241                                 mods = new mvr(); mods.title( obj.data.hash.cnct[ obj.controller.view.in_house_use_menu.value ].name()); 
242                                 copy = new acp(); copy.barcode( '' );
243                         }
244
245                         obj.list.append(
246                                 {
247                                         'row' : {
248                                                 'my' : {
249                                                         'mvr' : mods,
250                                                         'acp' : copy,
251                                                         'uses' : result.length,
252                                                 }
253                                         },
254                                         'to_top' : true,
255                                 //I could override map_row_to_column here
256                                 }
257                         );
258
259                         if (typeof obj.on_in_house_use == 'function') {
260                                 obj.on_in_house_use(result);
261                         }
262                         if (typeof window.xulG == 'object' && typeof window.xulG.on_in_house_use == 'function') {
263                                 obj.error.sdump('D_CIRC','circ.in_house_use: Calling external .on_in_house_use()\n');
264                                 window.xulG.on_in_house_use(result);
265                         } else {
266                                 obj.error.sdump('D_CIRC','circ.in_house_use: No external .on_in_house_use()\n');
267                         }
268
269                 } catch(E) {
270                         obj.error.standard_unexpected_error_alert('In House Use Failed',E);
271                         if (typeof obj.on_failure == 'function') {
272                                 obj.on_failure(E);
273                         }
274                         if (typeof window.xulG == 'object' && typeof window.xulG.on_failure == 'function') {
275                                 obj.error.sdump('D_CIRC','circ.in_house_use: Calling external .on_failure()\n');
276                                 window.xulG.on_failure(E);
277                         } else {
278                                 obj.error.sdump('D_CIRC','circ.in_house_use: No external .on_failure()\n');
279                         }
280                 }
281
282         },
283
284         'on_in_house_use' : function() {
285                 this.controller.view.in_house_use_multiplier_textbox.select();
286                 this.controller.view.in_house_use_multiplier_textbox.value = '1';
287                 this.controller.view.in_house_use_barcode_entry_textbox.value = '';
288                 this.controller.view.in_house_use_barcode_entry_textbox.focus();
289         },
290
291         'on_failure' : function() {
292                 this.controller.view.in_house_use_barcode_entry_textbox.select();
293                 this.controller.view.in_house_use_barcode_entry_textbox.focus();
294         }
295 }
296
297 dump('exiting circ.in_house_use.js\n');