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