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