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