]> git.evergreen-ils.org Git - Evergreen.git/blob - Open-ILS/xul/staff_client/server/cat/volume_editor.js
Merge remote branch 'working/user/shadowspar/ttopac-altcleanup' into template-toolkit...
[Evergreen.git] / Open-ILS / xul / staff_client / server / cat / volume_editor.js
1 const rel_vert_pos_call_number_classification = 1;
2 const rel_vert_pos_call_number_prefix = 2;
3 const rel_vert_pos_call_number = 3;
4 const rel_vert_pos_call_number_suffix = 4;
5
6 var xulG = {};
7
8 function my_init() {
9     try {
10         netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
11         if (typeof JSAN == 'undefined') { throw( $("commonStrings").getString('common.jsan.missing') ); }
12         JSAN.errorLevel = "die"; // none, warn, or die
13         JSAN.addRepository('/xul/server/');
14         JSAN.use('util.error'); g.error = new util.error();
15         g.error.sdump('D_TRACE','my_init() for cat/volume_editor.xul');
16
17         JSAN.use('OpenILS.data'); g.data = new OpenILS.data(); g.data.init({'via':'stash'});
18         JSAN.use('util.network'); g.network = new util.network();
19
20         JSAN.use('util.functional');
21
22         JSAN.use('cat.util');
23
24         g.volumes = xul_param('volumes',{'stash_name':'volumes_temp','clear_xpcom':true,'modal_xulG':true}); //JSON2js( g.data.volumes_temp );
25         //g.data.volumes_temp = ''; g.data.stash('volumes_temp');
26
27         var rows = document.getElementById('rows');
28
29         var first_tb;
30
31         for (var i = 0; i < g.volumes.length; i++) {
32             var row = document.createElement('row');
33                 rows.appendChild(row);
34             var lib_label = document.createElement('label');
35                 row.appendChild(lib_label);
36             var class_ml = g.render_class_menu(i);
37                 class_ml.setAttribute('class','cn_class');
38                 class_ml.setAttribute('rel_vert_pos', rel_vert_pos_call_number_classification);
39                 row.appendChild(class_ml);
40             var prefix_ml = g.render_prefix_menu(i);
41                 prefix_ml.setAttribute('class','cn_prefix');
42                 prefix_ml.setAttribute('rel_vert_pos', rel_vert_pos_call_number_prefix);
43                 row.appendChild(prefix_ml);
44             var label_tb = document.createElement('textbox');
45                 label_tb.setAttribute('rel_vert_pos', rel_vert_pos_call_number);
46                 row.appendChild(label_tb);
47             var suffix_ml = g.render_suffix_menu(i);
48                 suffix_ml.setAttribute('class','cn_suffix');
49                 suffix_ml.setAttribute('rel_vert_pos', rel_vert_pos_call_number_suffix);
50                 row.appendChild(suffix_ml);
51             if (!first_tb) { first_tb = label_tb; }
52
53             var lib_id = g.volumes[i].owning_lib();
54             var last_lib_seen;
55
56             if (last_lib_seen != lib_id ) {
57                 lib_label.setAttribute('value',g.data.hash.aou[ lib_id ].shortname() );
58                 last_lib_seen = lib_id;
59             }
60
61             label_tb.setAttribute('value',g.volumes[i].label());
62             label_tb.setAttribute('onchange','try { var v = g.volumes['+i+']; v.ischanged("1"); v.label( this.value ); } catch(E) { alert(E); }');
63         }
64
65         first_tb.select(); first_tb.focus();
66
67         // The batch menus
68         if (g.volumes.length > 0) {
69             JSAN.use('cat.util');
70             JSAN.use('util.fm_utils');
71
72             // Get the default callnumber classification scheme from OU settings
73             g.label_class = g.data.hash.aous['cat.default_classification_scheme'];
74
75             // Assign a default value if none was returned
76             if (!g.label_class) {
77                 g.label_class = g.data.list.acnc[0].id();
78             }
79
80             // Find the pertinent orgs
81             var ou_ids = [];
82             var seen_ou = {};
83             for (var i = 0; i < g.volumes.length; i++) {
84                 seen_ou[ g.volumes[i].owning_lib() ] = 1;
85             }
86             for (var i in seen_ou) {
87                 ou_ids.push(i);
88             }
89             g.ou_ids = [];
90             for (var i = 0; i < ou_ids.length; i++) {
91                 try {
92                     var org = g.data.hash.aou[ ou_ids[i] ];
93                     if ( get_bool( g.data.hash.aout[ org.ou_type() ].can_have_vols() ) ) {
94                         g.ou_ids.push( ou_ids[i] );
95                     }
96                 } catch(E) {
97                     g.error.sdump('D_ERROR',E);
98                 }
99             }
100             g.common_ancestor_ou_ids = util.fm_utils.find_common_aou_ancestors( g.ou_ids ).reverse();
101
102             // render the menus
103             g.list_classes();
104             g.list_prefixes();
105             cat.util.render_callnumbers_for_bib_menu('marc_cn',g.volumes[0].record(), g.label_class);
106             g.list_suffixes();
107
108             // render the button
109             g.render_batch_button();
110         }
111
112     } catch(E) {
113         var err_msg = $("commonStrings").getFormattedString('common.exception', ['cat/volume_editor.xul', E]);
114         try { g.error.sdump('D_ERROR',err_msg); } catch(E) { dump(err_msg); dump(js2JSON(E)); }
115         alert(err_msg);
116     }
117 }
118
119 g.stash_and_close = function() {
120     try {
121         //g.data.volumes_temp = js2JSON( g.volumes );
122         //g.error.sdump('D_CAT','in modal window, g.data.volumes_temp = \n' + g.data.volumes_temp + '\n');
123         //g.data.stash('volumes_temp');
124         xulG.volumes = g.volumes;
125         xulG.update_these_volumes = 1;
126         xulG.auto_merge = document.getElementById('auto_merge').checked;
127         update_modal_xulG(xulG);
128         window.close();
129     } catch(E) {
130         alert('FIXME: volume editor -> ' + E);
131     }
132 }
133
134 g.render_class_menu = function(vol_idx) {
135     var ml = cat.util.render_cn_class_menu(
136         [],
137         typeof g.volumes[vol_idx].label_class() == 'object'
138             ? g.volumes[vol_idx].label_class().id()
139             : g.volumes[vol_idx].label_class()
140     );
141     ml.addEventListener(
142         'command',
143         function(ev) {
144             g.volumes[vol_idx].ischanged(1);
145             g.volumes[vol_idx].label_class(ml.value);
146         },
147         false
148     );
149     return ml;
150 }
151
152 g.render_prefix_menu = function(vol_idx) {
153
154     var org = typeof g.volumes[vol_idx].owning_lib() == 'object'
155         ? g.volumes[vol_idx].owning_lib()
156         : g.data.hash.aou[ g.volumes[vol_idx].owning_lib() ];
157
158     var menulist = cat.util.render_cn_prefix_menu(
159         [ org.id() ],
160         [],
161         typeof g.volumes[vol_idx].prefix() == 'object'
162             ? g.volumes[vol_idx].prefix().id()
163             : g.volumes[vol_idx].prefix()
164     );
165
166     menulist.addEventListener(
167         'command',
168         function() {
169             g.volumes[vol_idx].ischanged(1);
170             g.volumes[vol_idx].prefix(menulist.value);
171         },
172         false
173     );
174     return menulist;
175 }
176
177 g.render_suffix_menu = function(vol_idx) {
178
179     var org = typeof g.volumes[vol_idx].owning_lib() == 'object'
180         ? g.volumes[vol_idx].owning_lib()
181         : g.data.hash.aou[ g.volumes[vol_idx].owning_lib() ];
182
183     var menulist = cat.util.render_cn_suffix_menu(
184         [ org.id() ],
185         [],
186         typeof g.volumes[vol_idx].suffix() == 'object'
187             ? g.volumes[vol_idx].suffix().id()
188             : g.volumes[vol_idx].suffix()
189     );
190
191     menulist.addEventListener(
192         'command',
193         function() {
194             g.volumes[vol_idx].ischanged(1);
195             g.volumes[vol_idx].suffix(menulist.value);
196         },
197         false
198     );
199     return menulist;
200 }
201
202 g.list_classes = function() {
203     var hbox = $('batch_class');
204     var ml = cat.util.render_cn_class_menu(
205         [
206             [ '<No Change>', false ]
207         ]
208     );
209     ml.setAttribute('id','batch_class_menulist');
210     hbox.appendChild(ml);
211 }
212
213 g.list_prefixes = function() {
214     var hbox = $('batch_prefix');
215     var ml = cat.util.render_cn_prefix_menu(
216         g.common_ancestor_ou_ids,
217         [
218             [ '<No Change>', false ]
219         ]
220     );
221     ml.setAttribute('id','batch_prefix_menulist');
222     hbox.appendChild(ml);
223 }
224
225 g.list_suffixes = function() {
226     var hbox = $('batch_suffix');
227     var ml = cat.util.render_cn_suffix_menu(
228         g.common_ancestor_ou_ids,
229         [
230             [ '<No Change>', false ]
231         ]
232     );
233     ml.setAttribute('id','batch_suffix_menulist');
234     hbox.appendChild(ml);
235 }
236
237 g.render_batch_button = function() {
238     var hbox = $('batch_button_box');
239     var btn = document.createElement('button');
240     btn.setAttribute('id','batch_button');
241     btn.setAttribute('label',$('catStrings').getString('staff.cat.volume_copy_creator.my_init.btn.label'));
242     btn.setAttribute('accesskey',$('catStrings').getString('staff.cat.volume_copy_creator.my_init.btn.accesskey'));
243     btn.setAttribute('image','/xul/server/skin/media/images/down_arrow.gif');
244     hbox.appendChild(btn);
245     btn.addEventListener(
246         'command',
247         function() {
248             var nl = document.getElementsByTagName('textbox');
249             for (var i = 0; i < nl.length; i++) {
250                 /* label */
251                 if (nl[i].getAttribute('rel_vert_pos')==rel_vert_pos_call_number && !nl[i].disabled) {
252                     var label =  $('marc_cn').firstChild.value;
253                     if (label != '') {
254                         nl[i].value = label;
255                         util.widgets.dispatch('change',nl[i]);
256                     }
257                 }
258             }
259             nl = document.getElementsByTagName('menulist');
260             for (var i = 0; i < nl.length; i++) {
261                 /* classification */
262                 if (nl[i].getAttribute('rel_vert_pos')==rel_vert_pos_call_number_classification && !nl[i].disabled) {
263                     var value =  $('batch_class_menulist').value;
264                     if (!isNaN( Number(value) )) {
265                         nl[i].value = value;
266                         util.widgets.dispatch('command',nl[i]);
267                     }
268                 }
269                 /* prefix */
270                 if (nl[i].getAttribute('rel_vert_pos')==rel_vert_pos_call_number_prefix && !nl[i].disabled) {
271                     var value =  $('batch_prefix_menulist').value;
272                     if (!isNaN( Number(value) )) {
273                         nl[i].value = value;
274                         util.widgets.dispatch('command',nl[i]);
275                     }
276                 }
277                 /* suffix */
278                 if (nl[i].getAttribute('rel_vert_pos')==rel_vert_pos_call_number_suffix && !nl[i].disabled) {
279                     var value =  $('batch_suffix_menulist').value;
280                     if (!isNaN( Number(value) )) {
281                         nl[i].value = value;
282                         util.widgets.dispatch('command',nl[i]);
283                     }
284                 }
285             }
286         },
287         false
288     );
289 }