]> git.evergreen-ils.org Git - Evergreen.git/blob - Evergreen/staff_client/chrome/content/evergreen/cat/volume.js
change the workflow. offer spine label on any volume update. Need to debug some
[Evergreen.git] / Evergreen / staff_client / chrome / content / evergreen / cat / volume.js
1 var data = {}; var data_backup; var cn_list = [];
2 var new_id = -1;
3
4 function my_init() {
5         mw.sdump('D_CAT','entering my_init for volume.js\n');
6         mw.sdump('D_CAT','TESTING: volume.js: ' + mw.G['main_test_variable'] + '\n');
7         mw.sdump('D_CAT','record_id = ' + record_id + '\n');
8         mw.sdump('D_CAT','tree_items: ' + tree_items + '\n');
9         if (params.shortcut == 'volume_add') {
10                 build_page_one();
11         } else if (params.shortcut == 'copy_add') {
12                 build_page_two();
13         } else {
14                 mw.sdump('D_CAT','broken\n');
15         }
16         listen_for_enter('volume_add');
17         mw.sdump('D_CAT','exiting my_init for volume.js\n');
18 }
19
20 function listen_for_enter(w) {
21         if (typeof(w) != 'object') {
22                 w = document.getElementById(w);
23         }
24         w.addEventListener('keypress',
25                 function (ev) {
26                         mw.sdump('D_CAT','wizard: ev.target.tagName = ' + ev.target.tagName + '\n');
27                         mw.sdump('D_CAT','\tev.keyCode = ' + ev.keyCode + '\n');
28                         mw.sdump('D_CAT','\tev.charCode = ' + ev.charCode + '\n');
29                         if ((ev.target.tagName == 'textbox') && (ev.keyCode == 13)) {
30                                 ev.preventDefault();
31                                 ev.stopPropagation(); // XBL bindings? bleh
32                                 fake_tab_for_textboxes(w,ev.target);
33                                 return true;
34                         }
35                 },
36                 true
37         );
38 }
39
40 function page1_add_volume_row(ou) {
41         var row = document.createElement('row');
42                 row.setAttribute('id','p1_' + ou.id());
43         document.getElementById('page1_rows').appendChild(row);
44         var label = document.createElement('label');
45                 label.setAttribute('value',ou.name());
46         row.appendChild(label);
47         var textbox = document.createElement('textbox');
48                 textbox.setAttribute('size','1');
49                 textbox.setAttribute('value','0');
50         row.appendChild(textbox);
51 }
52
53 function page2_add_volume_row(ou,ti) {
54         mw.sdump('D_CAT','page2_add_volume_row...\n');
55         var desired_volumes = 
56                 document.getElementById('p1_' + ou.id()).lastChild.value;
57         mw.sdump('D_CAT','ou = ' + ou.name() + '  desired = ' + desired_volumes + '\n');
58         if (desired_volumes > 0) { } else { return; }
59         var rows = document.getElementById('page2_rows');
60         var row = document.createElement('row');
61         rows.appendChild(row);
62         var label = document.createElement('label');
63                 label.setAttribute('value',ou.name());
64         row.appendChild(label);
65         for (var i = 0; i < desired_volumes; i++) {
66                 var cn_row = document.createElement('row');
67                         //cn_row.setAttribute('id','p2_'+ou.id());
68                         cn_row.setAttribute('ou_name',ou.name());
69                         cn_row.setAttribute('ou_id',ou.id());
70                         //cn_row.setAttribute('spine_row','1');
71                 rows.appendChild(cn_row);
72                 cn_row.appendChild( document.createElement('label') );
73                 var cn_text1 = document.createElement('textbox');
74                         cn_text1.setAttribute('size','20');
75                         cn_text1.setAttribute('value','A Call Number');
76                         //cn_text1.setAttribute('spine_cn','1');
77                 cn_row.appendChild( cn_text1 );
78                 var cn_text2 = document.createElement('textbox');
79                         cn_text2.setAttribute('size','4');
80                         cn_text2.setAttribute('value','0');
81                 cn_row.appendChild( cn_text2 );
82                 /*
83                 var cn_text3 = document.createElement('textbox');
84                         cn_text3.setAttribute('size','4');
85                         cn_text3.setAttribute('value','0');
86                         cn_text3.setAttribute('spine_label_count','1');
87                 cn_row.appendChild( cn_text3 );
88                 */
89         }
90 }
91
92 function copy_add_page2_add_volume_row(ou,ti) {
93         mw.sdump('D_CAT','copy_add_page2_add_volume_row...\n');
94         var rows = document.getElementById('page2_rows');
95         var row = document.getElementById('page2_row_cn_' + ou.id() );
96         if (!row) {
97                 row = document.createElement('row');
98                 row.setAttribute('id','page2_row_cn' + ou.id() );
99                 rows.appendChild(row);
100         }
101         var label = document.createElement('label');
102                 label.setAttribute('value',ou.name());
103         row.appendChild(label);
104                 var cn_row = document.createElement('row');
105                         //cn_row.setAttribute('id','p2_'+ou.id());
106                         cn_row.setAttribute('ou_name',ou.name());
107                         cn_row.setAttribute('ou_id',ou.id());
108                         cn_row.setAttribute('volume_id',ti.getAttribute('volume_id'));
109                         //cn_row.setAttribute('spine_row','1');
110                 rows.appendChild(cn_row);
111                 cn_row.appendChild( document.createElement('label') );
112                 var cn_text1 = document.createElement('textbox');
113                         cn_text1.setAttribute('size','20');
114                         cn_text1.setAttribute('volume_id',ti.getAttribute('volume_id'));
115                         cn_text1.setAttribute('value',ti.getAttribute('callnumber'));
116                         //cn_text1.setAttribute('spine_cn','1');
117                 cn_row.appendChild( cn_text1 );
118                 cn_text1.disabled = true;
119                 var cn_text2 = document.createElement('textbox');
120                         cn_text2.setAttribute('size','4');
121                         cn_text2.setAttribute('value','0');
122                 cn_row.appendChild( cn_text2 );
123                 /*
124                 var cn_text3 = document.createElement('textbox');
125                         cn_text3.setAttribute('size','4');
126                         cn_text3.setAttribute('value','0');
127                         cn_text3.setAttribute('spine_label_count','1');
128                 cn_row.appendChild( cn_text3 );
129                 */
130 }
131
132 function page3_add_volume_row(id,data) {
133         if (data.length>0) { } else { return; }
134         var rows = document.getElementById('page3_rows');
135         var org_row = document.createElement('row');
136         rows.appendChild(org_row);
137                 var org_label = document.createElement('label');
138                         org_label.setAttribute('value',data[0].name);
139                 org_row.appendChild(org_label);
140         for (var i in data) {
141                 var callnumber = data[i].callnumber;
142                 var desired_copies = data[i].copies;
143                 var cn_row = document.createElement('row');
144                 rows.appendChild(cn_row);
145                 var cn_box = document.createElement('hbox');
146                 cn_row.appendChild(cn_box);
147                 cn_box.appendChild( document.createElement('spacer') );
148                 var cn_label = document.createElement('label');
149                         cn_label.setAttribute('value',callnumber);
150                 cn_box.appendChild(cn_label);
151                 for (var c = 0; c < desired_copies; c++) {
152                         var bc_row = document.createElement('row');
153                         rows.appendChild(bc_row);
154                         bc_row.appendChild( document.createElement('label') );
155                         var bc_text = document.createElement('textbox');
156                                 bc_text.setAttribute('size','15');
157                                 bc_text.setAttribute('ou_name',data[i].name);
158                                 bc_text.setAttribute('ou_id',id);
159                                 bc_text.setAttribute('volume_id',data[i].volume_id);
160                                 bc_text.setAttribute('callnumber',callnumber);
161                         bc_row.appendChild(bc_text);
162                 }
163         }
164 }
165
166 function page_four_add_volume_row(name,callnumber,barcode) {
167         mw.sdump('D_CAT','xul: name = ' + name + ' cn = ' + callnumber + ' bc = ' + barcode + '\n');
168         var listbox = document.getElementById('ephemeral_listbox');
169         var listitem = document.createElement('listitem');
170         listbox.appendChild(listitem);
171         var listcell1 = document.createElement('listcell');
172                 listcell1.setAttribute('label',name);
173         listitem.appendChild(listcell1);
174         var listcell2 = document.createElement('listcell');
175                 listcell2.setAttribute('label',callnumber);
176         listitem.appendChild(listcell2);
177         var listcell3 = document.createElement('listcell');
178                 listcell3.setAttribute('label',barcode);
179         listitem.appendChild(listcell3);
180
181 }
182
183 function build_page_one() {
184         mw.sdump('D_CAT','build_page_one\n');
185         for (var i in tree_items) {
186                 var ti = tree_items[i];
187                 switch( ti.getAttribute('object_type') ) {
188                         case 'org_unit' :
189                                 if (params.shortcut == 'volume_add') {
190                                         var id = ti.getAttribute('id').split('_')[2];
191                                         var ou = mw.G.org_tree_hash[id];
192                                         var check_ou = check_volume_ou_perm( id );
193                                         if ( check_ou ) {
194                                                 page1_add_volume_row( check_ou );
195                                         }
196                                 }
197                         break;
198                 }
199         }
200 }
201
202 function build_page_two() {
203         mw.sdump('D_CAT','build_page_two\n');
204         for (var i in tree_items) {
205                 var ti = tree_items[i];
206                 mw.sdump('D_CAT','Considering item with object_type = ' + ti.getAttribute('object_type') + '\n');
207                 switch( ti.getAttribute('object_type') ) {
208                         case 'org_unit' :
209                                 var id = ti.getAttribute('id').split('_')[2];
210                                 var ou = mw.G.org_tree_hash[id];
211                                 var check_ou = check_volume_ou_perm( id );
212                                 if ( check_ou ) {
213                                         page2_add_volume_row( check_ou, ti );
214                                 }
215                         break;
216                         case 'volume' :
217                                 if (params.shortcut == 'copy_add') {
218                                         var check_ou = find_ou( mw.G.user_ou , ti.getAttribute('ou_id') );
219                                         if (check_ou) {
220                                                 copy_add_page2_add_volume_row( check_ou, ti );  
221                                         }
222                                 }
223                         break;
224                 }
225         }
226 }
227
228 function build_page_three() {
229         mw.sdump('D_CAT','build_page_three\n');
230         var rows = document.getElementById('page2_rows');
231         for (var i = 0; i < rows.childNodes.length; i++) {
232                 var row = rows.childNodes[i];
233                 mw.sdump('D_CAT',row + '\n');
234                 var ou_id = row.getAttribute('ou_id');
235                 var ou_name = row.getAttribute('ou_name');
236                 var volume_id = row.getAttribute('volume_id');
237                 if (ou_id) {
238                         var call_number = row.childNodes[1].value;
239                         if (!call_number) { continue; }
240                         var desired_copies = row.childNodes[2].value;
241                         if (!data[ou_id]) { data[ou_id] = []; }
242                         data[ou_id].push( 
243                                 { 
244                                         'callnumber' : call_number, 
245                                         'copies' : desired_copies,
246                                         'name' : ou_name,
247                                         'volume_id' : volume_id
248                                 } 
249                         );
250                 }
251         }
252         for (var i in data) {
253                 mw.sdump('D_CAT','i: ' + i + ' data[i]: ' + js2JSON(data[i]) + '\n');
254                 page3_add_volume_row( i, data[i]);
255         }
256 }
257
258 function build_page_four() {
259         mw.sdump('D_CAT','build page four\n');
260         document.getElementById('volume_add').canAdvance = false;
261         var new_data = [];
262         var rows = document.getElementById('page3_rows');
263         var nl = rows.getElementsByTagName('textbox');
264         for (var i in nl) {
265                 if (typeof(nl[i])=='object') {
266                         var t = nl[i];
267                         var ou_id = t.getAttribute('ou_id');
268                         var ou_name = t.getAttribute('ou_name');
269                         var callnumber = t.getAttribute('callnumber');
270                         var volume_id = t.getAttribute('volume_id');
271                         var barcode = t.value;
272                         //page_four_add_volume_row(ou_name,callnumber,barcode);
273                         mw.sdump('D_CAT','t.tagName = ' + t.tagName + ' ou_id = ' + ou_id + ' cn = ' + callnumber + ' volume_id = ' + volume_id + ' bc = ' + barcode + '\n');
274                         if (! new_data[ou_id] ) { new_data[ou_id] = {}; }
275                         if (! new_data[ou_id][callnumber] ) {
276                                 new_data[ou_id][callnumber] = [];
277                         }
278                         if (! new_data[ou_id][callnumber]['barcode'] ) {
279                                 new_data[ou_id][callnumber]['barcode'] = [];
280                         }
281                         new_data[ou_id][callnumber].barcode.push(barcode);
282                         if (params.shortcut == 'copy_add') {
283                                 new_data[ou_id][callnumber].volume_id = volume_id;
284                         }
285                 }
286         }
287         cn_list = [];
288         for (var ou_id in new_data) {
289                 for (var cnum in new_data[ou_id]) {
290                         //var ou_shortname = find_ou(mw.G['org_tree'],ou_id).shortname();
291                         //var ou_shortname = mw.G.org_tree_hash[ou_id].shortname();
292                         var cn = new acn();
293                         cn.label(cnum);
294                         cn.owning_lib(ou_id);
295                         cn.record(record_id);
296                         if (params.shortcut == 'volume_add') {
297                                 cn.isnew(1);
298                                 cn.id(new_id--);
299                         } else if (params.shortcut == 'copy_add') {
300                                 cn.id( new_data[ou_id][cnum].volume_id );
301                         }
302                         cn.copies([]);
303         
304                         for (var c in new_data[ou_id][cnum].barcode) {
305                                 var cp = new acp();
306                                 cp.id(new_id--);
307                                 cp.isnew(1);
308                                 cp.barcode(new_data[ou_id][cnum].barcode[c]);
309                                 cp.circ_lib(    mw.G.org_tree_hash[ ou_id ]);
310                                 cn.copies().push(cp);
311                                 cp.stat_cat_entries( [] );
312                         }
313
314                         cn_list.push(cn);
315                 }
316         }
317         mw.sdump('D_CAT','Final data object: ' + js2JSON(cn_list) + '\n');
318         mw.sdump('D_CAT','Final data object: ' + cn_list + '\n');
319         spawn_local_legacy_copy_editor();
320 }
321
322 function send_to_bill() {
323         mw.sdump('D_DEBUG','cn_list = \n' + js2JSON( cn_list ) + '\n');
324         try {
325                 var result = user_request(
326                                 'open-ils.cat',
327                                 'open-ils.cat.asset.volume_tree.fleshed.batch.update',
328                                 [ mw.G['auth_ses'][0], cn_list]
329                 );
330                 mw.sdump('D_CAT','volume_tree.fleshed.batch.update result: ' + js2JSON(result) + '\n');
331         } catch(E) {
332                 handle_error(E);
333         }
334         var spine_labels = mw.map_list( 
335                 cn_list, 
336                 function(cn) { 
337                         var label = cn.label(); var copies = cn.copies();
338                         if (copies) { copies = copies.length; } else { copies = 0; }
339                         return [ label, copies ]; 
340                 } 
341         );
342         alert( window.app_shell );
343         try {
344                 spawn_spine_label_wizard(document,'new_window','',{ 'spine_labels' : spine_labels }); 
345         } catch(E) {
346                 sdump('D_ERROR', 'spine label: ' + js2JSON(E) + '\n');
347         }
348         refresh_spawning_browse_list();
349 }
350
351 function refresh_spawning_browse_list() {
352         try {
353                 params.refresh_func();
354         } catch(E) {
355                 mw.sdump('D_CAT','refresh_spawning_browse_list error: ' + js2JSON(E) + '\n');
356         }
357 }
358
359 function spawn_local_legacy_copy_editor(tab) {
360         mw.sdump('D_CAT','trying to spawn_copy_editor()\n');
361         var params = { 'select_all' : true };
362         var chrome = 'chrome://evergreen/content/cat/copy.xul';
363         var frame = document.getElementById('page4_iframe');
364         frame.setAttribute('src',chrome);
365         frame.setAttribute('flex','1');
366         frame.contentWindow.cn_list = cn_list;
367         frame.contentWindow.mw = mw;
368         frame.contentWindow.real_parentWindow = this;
369         frame.contentWindow.parentWindow = window.app_shell;
370         frame.contentWindow.params = params;
371 }
372
373 function backup_data() {
374         data_backup = data;
375 }
376
377 function restore_data() {
378         data = data_backup;
379 }
380
381 function check_volume_ou_perm(id) {
382         var top_ou = mw.G.org_tree_hash[ mw.G.user_ou.id() ];
383         var check_ou = find_ou(top_ou, id);
384         return check_ou;
385 }
386
387 // ***************************************************** Batch Volume Edit
388
389 function volume_edit_init() {
390         mw.sdump('D_CAT','TESTING: volume.js: ' + mw.G['main_test_variable'] + '\n');
391         build_batch_edit_page1();
392         listen_for_enter('volume_edit');
393 }
394
395 function build_batch_edit_page1() {
396         var rows = document.getElementById('page1_rows');
397
398         var org = {};
399
400         for (var i = 0; i < tree_items.length; i++) {
401                 var volume = tree_items[i];
402                 if (!  org[ volume.getAttribute('ou_id') ] ) {
403                         org[ volume.getAttribute('ou_id') ] = new Array();
404                 }
405                 org[ volume.getAttribute('ou_id') ].push( volume );
406         }
407
408         for (var i in org) {
409                 var row = document.createElement('row');
410                 rows.appendChild(row);
411                 var lib = document.createElement('label');
412                 row.appendChild(lib);
413                         lib.setAttribute( 'value', mw.G.org_tree_hash[i].shortname() );
414
415                 for (var j = 0; j < org[i].length; j++) {
416                         var volume = org[i][j];
417
418                         var vrow = document.createElement('row');
419                         rows.appendChild(vrow);
420                         vrow.appendChild( document.createElement('label') );
421
422                         var t = document.createElement('textbox');
423                         vrow.appendChild( t );
424                         t.value = volume.getAttribute('callnumber');
425                         t.setAttribute( 'original', volume.getAttribute('callnumber') );
426                         t.setAttribute( 'volume_id', volume.getAttribute('volume_id') );
427                 }
428         }
429 }
430
431 function submit_edited_volumes() {
432         var nl = document.getElementsByTagName('textbox');
433         for (var i = 0; i < nl.length; i++) {
434                 var t = nl[i];
435                 if (t.getAttribute('original') == t.value) continue;
436                 var cn = new acn();
437                 cn.id( t.getAttribute('volume_id') );
438                 cn.label( t.value );
439                 cn.ischanged('1');
440                 cn_list.push( cn );
441         }
442         send_to_bill();
443         mw.sdump('D_DEBUG','cn_list = \n' + js2JSON(cn_list) + '\n');
444 }
445
446 function spine_labels() {
447         var nl = document.getElementsByTagName('row');
448         var spine_labels = [];
449         for (var i = 0; i < nl.length; i++) {
450                 var r = nl[i]; var cn = ''; var count = 0;
451                 if (! r.getAttribute('spine_row')) continue;
452                 for (var j = 0; j < r.childNodes.length; j++) {
453                         var c = r.childNodes[j];
454                         if (c.getAttribute('spine_cn')) cn = c.value;
455                         if (c.getAttribute('spine_label_count')) count = c.value;
456                 }
457                 spine_labels.push( [ cn, count ] );
458         }
459         mw.spawn_spine_label_wizard(document,'new_window','',{ 'spine_labels' : spine_labels }); 
460 }