]> git.evergreen-ils.org Git - working/Evergreen.git/blob - Open-ILS/xul/staff_client/server/cat/volume_editor.js
Monograph Parts; Unified vol/copy wizard; Call Number affixes; Instant Detail
[working/Evergreen.git] / Open-ILS / xul / staff_client / server / cat / volume_editor.js
1 var xulG = {};
2
3 function my_init() {
4     try {
5         netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
6         if (typeof JSAN == 'undefined') { throw( $("commonStrings").getString('common.jsan.missing') ); }
7         JSAN.errorLevel = "die"; // none, warn, or die
8         JSAN.addRepository('/xul/server/');
9         JSAN.use('util.error'); g.error = new util.error();
10         g.error.sdump('D_TRACE','my_init() for cat/volume_editor.xul');
11
12         JSAN.use('OpenILS.data'); g.data = new OpenILS.data(); g.data.init({'via':'stash'});
13         JSAN.use('util.network'); g.network = new util.network();
14
15         JSAN.use('util.functional');
16
17         g.volumes = xul_param('volumes',{'stash_name':'volumes_temp','clear_xpcom':true,'modal_xulG':true}); //JSON2js( g.data.volumes_temp );
18         //g.data.volumes_temp = ''; g.data.stash('volumes_temp');
19
20         var rows = document.getElementById('rows');
21
22         var first_tb;
23
24         for (var i = 0; i < g.volumes.length; i++) {
25             var row = document.createElement('row'); rows.appendChild(row);
26             var lib_label = document.createElement('label'); row.appendChild(lib_label);
27             var class_ml = g.render_class_menu(i); row.appendChild(class_ml);
28             var prefix_ml = g.render_prefix_menu(i); row.appendChild(prefix_ml);
29             var label_tb = document.createElement('textbox'); row.appendChild(label_tb);
30             var suffix_ml = g.render_suffix_menu(i); row.appendChild(suffix_ml);
31             if (!first_tb) { first_tb = label_tb; }
32
33             var lib_id = g.volumes[i].owning_lib();
34             var last_lib_seen;
35
36             if (last_lib_seen != lib_id ) {
37                 lib_label.setAttribute('value',g.data.hash.aou[ lib_id ].shortname() );
38                 last_lib_seen = lib_id;
39             }
40
41             label_tb.setAttribute('value',g.volumes[i].label());
42             label_tb.setAttribute('onchange','try { var v = g.volumes['+i+']; v.ischanged("1"); v.label( this.value ); } catch(E) { alert(E); }');
43         }
44
45         first_tb.select(); first_tb.focus();
46
47     } catch(E) {
48         var err_msg = $("commonStrings").getFormattedString('common.exception', ['cat/volume_editor.xul', E]);
49         try { g.error.sdump('D_ERROR',err_msg); } catch(E) { dump(err_msg); dump(js2JSON(E)); }
50         alert(err_msg);
51     }
52 }
53
54 g.stash_and_close = function() {
55     try {
56         //g.data.volumes_temp = js2JSON( g.volumes );
57         //g.error.sdump('D_CAT','in modal window, g.data.volumes_temp = \n' + g.data.volumes_temp + '\n');
58         //g.data.stash('volumes_temp');
59         xulG.volumes = g.volumes;
60         xulG.update_these_volumes = 1;
61         xulG.auto_merge = document.getElementById('auto_merge').checked;
62         update_modal_xulG(xulG);
63         window.close();
64     } catch(E) {
65         alert('FIXME: volume editor -> ' + E);
66     }
67 }
68
69 g.render_class_menu = function(vol_idx) {
70     var ml = util.widgets.make_menulist(
71         util.functional.map_list(
72             g.data.list.acnc,
73             function(o) {
74                 return [ o.name(), o.id() ];
75             }
76         ),
77         typeof g.volumes[vol_idx].label_class() == 'object'
78             ? g.volumes[vol_idx].label_class().id()
79             : g.volumes[vol_idx].label_class()
80     );
81     ml.addEventListener(
82         'command',
83         function(ev) {
84             g.volumes[vol_idx].ischanged(1);
85             g.volumes[vol_idx].label_class(ml.value);
86         },
87         false
88     );
89     return ml;
90 }
91
92 g.render_prefix_menu = function(vol_idx) {
93     var org = typeof g.volumes[vol_idx].owning_lib() == 'object'
94         ? g.volumes[vol_idx].owning_lib()
95         : g.data.hash.aou[ g.volumes[vol_idx].owning_lib() ];
96     var menulist = document.createElement('menulist');
97         var menupopup = document.createElement('menupopup');
98         menulist.appendChild(menupopup);
99         var org_list = []; // order from top of consortium to owning lib
100         while(org) {
101             org_list.unshift(org.id());
102             org = org.parent_ou();
103             if (org && typeof org != 'object') {
104                 org = g.data.hash.aou[ org ];
105             }
106         }
107         for (var i = 0; i < org_list.length; i++) {
108             g.render_prefix_menu_items(menupopup,org_list[i]);
109         }
110         menulist.setAttribute('value',
111             typeof g.volumes[vol_idx].prefix() == 'object'
112                 ? g.volumes[vol_idx].prefix().id()
113                 : g.volumes[vol_idx].prefix()
114         );
115
116     menulist.addEventListener(
117         'command',
118         function() {
119             g.volumes[vol_idx].ischanged(1);
120             g.volumes[vol_idx].prefix(menulist.value);
121         },
122         false
123     );
124     return menulist;
125 }
126
127 g.render_prefix_menu_items = function(menupopup,ou_id) {
128     if (typeof g.data.list['acnp_for_lib_'+ou_id] == 'undefined') {
129         g.data.list['acnp_for_lib_'+ou_id] = g.network.simple_request(
130             'FM_ACNP_RETRIEVE_VIA_PCRUD',
131             [ ses(), {"owning_lib":{"=":ou_id}}, {"order_by":{"acnp":"label_sortkey"}} ]
132         );
133         g.data.stash('list');
134     }
135     for (var i = 0; i < g.data.list['acnp_for_lib_'+ou_id].length; i++) {
136         var my_acnp = g.data.list['acnp_for_lib_'+ou_id][i];
137         var menuitem = document.createElement('menuitem');
138         menupopup.appendChild(menuitem);
139             menuitem.setAttribute(
140                 'label',
141                 my_acnp.id() == -1 ? '' :
142                 $('catStrings').getFormattedString(
143                     'staff.cat.volume_copy_creator.call_number_prefix.menuitem_label',
144                     [
145                         my_acnp.label(),
146                         g.data.hash.aou[ ou_id ].shortname()
147                     ]
148                 )
149             );
150             menuitem.setAttribute('value',my_acnp.id());
151     }
152 }
153
154
155 g.render_suffix_menu = function(vol_idx) {
156     var org = typeof g.volumes[vol_idx].owning_lib() == 'object'
157         ? g.volumes[vol_idx].owning_lib()
158         : g.data.hash.aou[ g.volumes[vol_idx].owning_lib() ];
159     var menulist = document.createElement('menulist');
160         var menupopup = document.createElement('menupopup');
161         menulist.appendChild(menupopup);
162         var org_list = []; // order from top of consortium to owning lib
163         while(org) {
164             org_list.unshift(org.id());
165             org = org.parent_ou();
166             if (org && typeof org != 'object') {
167                 org = g.data.hash.aou[ org ];
168             }
169         }
170         for (var i = 0; i < org_list.length; i++) {
171             g.render_suffix_menu_items(menupopup,org_list[i]);
172         }
173         menulist.setAttribute('value',
174             typeof g.volumes[vol_idx].suffix() == 'object'
175                 ? g.volumes[vol_idx].suffix().id()
176                 : g.volumes[vol_idx].suffix()
177         );
178
179     menulist.addEventListener(
180         'command',
181         function() {
182             g.volumes[vol_idx].ischanged(1);
183             g.volumes[vol_idx].suffix(menulist.value);
184         },
185         false
186     );
187     return menulist;
188 }
189
190 g.render_suffix_menu_items = function(menupopup,ou_id) {
191     if (typeof g.data.list['acns_for_lib_'+ou_id] == 'undefined') {
192         g.data.list['acns_for_lib_'+ou_id] = g.network.simple_request(
193             'FM_ACNS_RETRIEVE_VIA_PCRUD',
194             [ ses(), {"owning_lib":{"=":ou_id}}, {"order_by":{"acns":"label_sortkey"}} ]
195         );
196         g.data.stash('list');
197     }
198     for (var i = 0; i < g.data.list['acns_for_lib_'+ou_id].length; i++) {
199         var my_acns = g.data.list['acns_for_lib_'+ou_id][i];
200         var menuitem = document.createElement('menuitem');
201         menupopup.appendChild(menuitem);
202             menuitem.setAttribute(
203                 'label',
204                 my_acns.id() == -1 ? '' :
205                 $('catStrings').getFormattedString(
206                     'staff.cat.volume_copy_creator.call_number_suffix.menuitem_label',
207                     [
208                         my_acns.label(),
209                         g.data.hash.aou[ ou_id ].shortname()
210                     ]
211                 )
212             );
213             menuitem.setAttribute('value',my_acns.id());
214     }
215 }
216
217