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