]> git.evergreen-ils.org Git - Evergreen.git/blob - Open-ILS/xul/staff_client/server/admin/stat_cat_editor.js
5e7637836123d96fe7730d6704c9faecd8ba6a9b
[Evergreen.git] / Open-ILS / xul / staff_client / server / admin / stat_cat_editor.js
1 var SC_FETCH_ALL                = 'open-ils.circ:open-ils.circ.stat_cat.TYPE.retrieve.all';
2 var SC_CREATE                   = 'open-ils.circ:open-ils.circ.stat_cat.TYPE.create';
3 var SC_UPDATE                   = 'open-ils.circ:open-ils.circ.stat_cat.TYPE.update';
4 var SC_DELETE                   = 'open-ils.circ:open-ils.circ.stat_cat.TYPE.delete';
5 var SC_ENTRY_CREATE     = 'open-ils.circ:open-ils.circ.stat_cat.TYPE.entry.create';
6 var SC_ENTRY_UPDATE     = 'open-ils.circ:open-ils.circ.stat_cat.TYPE.entry.update';
7 var SC_ENTRY_DELETE     = 'open-ils.circ:open-ils.circ.stat_cat.TYPE.entry.delete';
8 /*
9 var SC_MAP_CREATE               = 'open-ils.circ:open-ils.circ.stat_cat.TYPE.WHAT_map.create';
10 var SC_MAP_UPDATE               = 'open-ils.circ:open-ils.circ.stat_cat.TYPE.WHAT_map.update';
11 */
12
13 var ACTOR                               = 'actor';
14 var ASSET                               = 'asset';
15 var session                             = null;
16 var user                                        = null;
17
18 var scCache                             = {};
19 var currentlyVisible;
20 var opacVisible         = false;
21
22
23 function scEditorInit() {
24         var cgi = new CGI();
25         session = cgi.param('ses');
26         var show = cgi.param('show');
27         user = fetchUser(session);
28         if(show == ACTOR) scShow(ACTOR);
29         else scShow(ASSET);
30         scBuildNew();
31         $('sc_user').appendChild(text(user.usrname()));
32 }
33
34 function _cleanTbody(tbody) {
35         for( var c  = 0; c < tbody.childNodes.length; c++ ) {
36                 var child = tbody.childNodes[c];
37                 if(child && child.getAttribute('edit')) tbody.removeChild(child); 
38         }
39 }
40
41 function fetchUser(session) {
42         var request = new Request(FETCH_SESSION, session, 1 );
43         request.send(true);
44         var user = request.result();
45         if(checkILSEvent(user)) throw user;
46         return user;
47 }
48
49
50 function scFetchAll( session, type, orgid, callback, args ) {
51         var req = new Request( 
52                 SC_FETCH_ALL.replace(/TYPE/, type) , session, orgid );
53         req.send(true);
54         return req.result();
55 }
56
57 function scShow(type) { 
58
59         currentlyVisible = type;
60
61         if( type == ASSET ) {
62                 addCSSClass($('sc_show_copy'), 'has_color');
63                 removeCSSClass($('sc_show_actor'), 'has_color');
64
65         } else if( type == ACTOR ) {
66                 addCSSClass($('sc_show_actor'), 'has_color');
67                 removeCSSClass($('sc_show_copy'), 'has_color');
68         }
69
70         scCache[type] = scFetchAll( session, type, user.home_ou() );  
71         scDraw( type, scCache[type] );
72 }
73
74 var scRow; var scCounter;
75 function scDraw( type, cats ) {
76
77         if(!cats || cats.length == 0) return unHideMe($('sc_none'));
78         var tbody = $('sc_tbody');
79
80         if(!scRow) scRow = tbody.removeChild($('sc_tr'));
81         removeChildren(tbody);
82         unHideMe($('sc_table'));
83
84         scCounter = 0;
85         for( var c in cats ) scInsertCat( tbody, cats[c], type );
86 }
87
88
89 var scEntryCounter;
90 function scInsertCat( tbody, cat, type ) {
91
92         var row = scRow.cloneNode(true);
93         row.id = 'sc_tr_' + cat.id();
94         var name_td = $n(row, 'sc_name');
95         name_td.appendChild( text(cat.name()) );
96         if(scCounter++ % 2) addCSSClass(row, 'has_color');
97
98         $n(row, 'sc_new_entry').onclick = function() { scNewEntry(type, cat, tbody); }
99         $n(row, 'sc_edit').onclick = function(){ scEdit(tbody, type, cat); };
100         /*$n(row, 'sc_delete').onclick = function(){ scDelete(type, cat.id()); };*/
101         $n(row, 'sc_owning_lib').appendChild( text( findOrgUnit(cat.owner()).name() ));
102
103         if( cat.opac_visible() ) unHideMe($n(row, 'sc_opac_visible'));
104         else unHideMe($n(row, 'sc_opac_invisible'));
105
106         tbody.appendChild(row);
107         scEntryCounter = 0;
108
109         cat.entries().sort(  /* sort the entries by value */
110                 function( a, b ) { 
111                         if( a.value() > b.value()) return 1;
112                         if( a.value() < b.value()) return -1;
113                         return 0;
114                 }
115         );
116
117         for( var e in cat.entries() ) 
118                 scInsertEntry( cat, cat.entries()[e], $n(row, 'sc_entries_selector'), tbody, type );
119 }
120
121
122 function scInsertEntry( cat, entry, selector, tbody, type ) {
123         setSelectorVal( selector, scEntryCounter++, entry.value(), entry.id(), 
124                         function(){ scUpdateEntry( cat, entry, tbody, type );} );
125 }
126
127
128
129 function scDelete(type, id) {
130         if(!confirm($('sc_delete_confirm').innerHTML)) return;
131         var req = new Request( SC_DELETE.replace(/TYPE/,type), session, id );
132         req.send(true);
133         var res = req.result();
134         if(checkILSEvent(res)) throw res;
135         scShow(type);
136 }
137
138 function scCreateEntry( type, id, row ) {
139         var value = $n(row, 'sc_new_entry_name').value;
140         if(!value) return;
141         var entry;
142         if( type == ACTOR ) entry = new actsce();
143         if( type == ASSET ) entry = new asce();
144
145         entry.isnew(1);
146         entry.stat_cat(id);
147         entry.owner(user.home_ou());
148         entry.value(value);
149
150         var req = new Request( SC_ENTRY_CREATE.replace(/TYPE/, type), session, entry );
151         req.send(true);
152         var res = req.result();
153         if(checkILSEvent(res)) throw res;
154         scShow(type);
155 }
156
157 function scNewEntry( type, cat, tbody ) {
158         _cleanTbody(tbody);
159         var row = $('sc_new_entry_row').cloneNode(true);
160         row.setAttribute('edit', '1');
161
162         var r = $('sc_tr_' + cat.id());
163         if(r.nextSibling) tbody.insertBefore( row, r.nextSibling );
164         else{ tbody.appendChild(row); }
165
166         $n(row, 'sc_new_entry_create').onclick = 
167                 function() {
168                         if( scCreateEntry( type, cat.id(), row ) )
169                                 tbody.removeChild(row); };
170         $n(row, 'sc_new_entry_cancel').onclick = function(){tbody.removeChild(row);}
171
172         var org = findOrgUnit(cat.owner());
173         var myorg = findOrgUnit(user.home_ou());
174         var depth = findOrgDepth(org);
175         var mydepth = findOrgDepth(myorg);
176
177         if( depth < mydepth ) {
178                 depth = mydepth;
179                 org = myorg;
180         }
181
182
183         _scBuildOrgSelector( $n(row, 'sc_new_entry_lib'), org, findOrgDepth(org));
184         $n(row, 'sc_new_entry_name').focus();
185 }
186
187
188 function scBuildNew() {
189         var selector = $('sc_owning_lib_selector');
190         var org = findOrgUnit( user.home_ou() );
191         var offset = findOrgDepth(org);
192         _scBuildOrgSelector( selector, org, offset);
193 }
194
195 function _scBuildOrgSelector(selector, org, offset) {
196         insertSelectorVal( selector, -1, 
197                 org.name(), org.id(), null, findOrgDepth(org) - offset );
198         for( var c in org.children() )
199                 _scBuildOrgSelector( selector, org.children()[c], offset);
200 }
201
202 function scNew() {
203
204         var name = $('sc_new_name').value;
205         var type = getSelectorVal($('sc_type_selector'));
206
207         var visible = 0;
208         if( $('sc_make_opac_visible').checked) visible = 1;
209
210         var cat;
211         if( type == ACTOR ) cat = new actsc();
212         if( type == ASSET ) cat = new asc();
213
214         cat.opac_visible(visible);
215         cat.name(name);
216         cat.owner(getSelectorVal($('sc_owning_lib_selector')));
217         cat.isnew(1);
218
219         var req = new Request( SC_CREATE.replace(/TYPE/, type), session, cat );
220
221         req.send(true);
222         var res = req.result();
223         if(checkILSEvent(res)) throw res;
224
225         scShow(type);
226 }
227
228 function scEdit( tbody, type, cat ) {
229
230         _cleanTbody(tbody);
231         var row = $('sc_edit_row').cloneNode(true);
232         row.setAttribute('edit', '1');
233
234         var r = $('sc_tr_' + cat.id());
235         if(r.nextSibling) tbody.insertBefore( row, r.nextSibling );
236         else{ tbody.appendChild(row); }
237
238         $n(row, 'sc_edit_name').value = cat.name();
239
240         var name = $n(row, 'sc_edit_cancel');
241         name.onclick = function() { tbody.removeChild(row); };
242
243         var show = $n(row, 'sc_edit_show_owning_lib');
244         
245         var myorg = findOrgUnit(user.home_ou());
246         var ownerorg = findOrgUnit(cat.owner());
247         show.appendChild(text(ownerorg.name()));
248
249         var selector = null;
250         if( myorg.children() && myorg.children().length > 0 ) {
251                 selector = $n(row, 'sc_edit_owning_lib');
252                 _scBuildOrgSelector( selector, myorg, findOrgDepth(myorg) );
253                 setSelector( selector, cat.owner() );
254                 unHideMe(selector);
255
256         } else { unHideMe(show); }
257
258         name.focus();
259         name.select();
260
261         if( cat.opac_visible() ) {
262                 $n( $n(row, 'sc_edit_opac_vis'), 
263                         'sc_edit_opac_visibility').checked = true;
264         }
265         else 
266                 $n( $n(row, 'sc_edit_opac_invis'), 
267                         'sc_edit_opac_visibility').checked = true;
268
269         $n(row, 'sc_edit_submit').onclick = 
270                 function() { 
271                         if( scEditGo( type, cat, row, selector ) ) 
272                                 tbody.removeChild(row); };
273
274         $n(row, 'sc_edit_delete').onclick = function(){ scDelete(type, cat.id()); };
275
276         var o_depth = findOrgDepth(findOrgUnit(cat.owner()));
277         var m_depth = findOrgDepth(findOrgUnit(user.home_ou()));
278
279         if(  o_depth < m_depth ) {
280                 $n(row,'sc_edit_submit').disabled = true;
281                 $n(row,'sc_edit_delete').disabled = true;
282         }
283
284 }
285
286 function scEditGo( type, cat, row, selector ) {
287         var name = $n(row, 'sc_edit_name').value;
288         var visible = 
289                 $n( $n(row, 'sc_edit_opac_vis'), 'sc_edit_opac_visibility').checked;
290
291         var newlib = cat.owner();
292         if(selector) newlib = getSelectorVal( selector );
293
294         if(!name) return false;
295
296         var isvisible = false;
297         if( cat.opac_visible() ) isvisible = true;
298
299         if( (name == cat.name()) && (visible == isvisible) 
300                 && (newlib == cat.owner()) ) { return true; }
301
302         cat.name( name );
303         cat.owner( newlib );
304         cat.entries(null);
305         cat.opac_visible(0);
306         if( visible ) cat.opac_visible(1);
307
308         var req = new Request( SC_UPDATE.replace(/TYPE/,type), session, cat );
309         req.send(true);
310         var res = req.result();
311         if(checkILSEvent(res)) throw res;
312         scShow(type);
313
314         return true;
315 }
316
317 function scUpdateEntry( cat, entry, tbody, type ) {
318         _cleanTbody(tbody);
319         var row = $('sc_edit_entry_row').cloneNode(true);
320         row.setAttribute('edit', '1');
321
322         var r = $('sc_tr_' + cat.id());
323         if(r.nextSibling) tbody.insertBefore( row, r.nextSibling );
324         else{ tbody.appendChild(row); }
325
326         $n(row, 'sc_edit_entry_owner').appendChild(text(findOrgUnit(entry.owner()).name()));
327
328         var name = $n(row, 'sc_edit_entry_name');
329         name.value = entry.value();
330         name.focus();
331         name.select();
332
333         $n(row,'sc_edit_entry_name_submit').onclick = 
334                 function(){
335                         if( scEditEntry(cat, entry, name.value, type ) )
336                                 tbody.removeChild(row);
337                         };
338
339         $n(row,'sc_edit_entry_cancel').onclick = function(){tbody.removeChild(row);};
340         $n(row,'sc_edit_entry_delete').onclick = 
341                 function(){ scEntryDelete( cat, entry, type ); }
342
343         var o_depth = findOrgDepth( findOrgUnit(entry.owner()) );
344         var m_depth = findOrgDepth(findOrgUnit(user.home_ou()));
345
346         if(  o_depth < m_depth ) {
347                 $n(row,'sc_edit_entry_name_submit').disabled = true;
348                 $n(row,'sc_edit_entry_delete').disabled = true;
349         }
350                 
351 }
352
353 function scEntryDelete( cat, entry, type ) {
354         if(!confirm($('sc_entry_delete_confirm').innerHTML)) return;
355         var req = new Request( SC_ENTRY_DELETE.replace(/TYPE/,type), session, entry.id() );
356         req.send(true);
357         var res = req.result();
358         if(checkILSEvent(res)) throw res;
359         scShow(type);
360 }
361
362 function scEditEntry( cat, entry, newvalue, type ) {
363         if(entry.value() == newvalue) return;
364         entry.value( newvalue );
365         var req = new Request( 
366                 SC_ENTRY_UPDATE.replace(/TYPE/, type), session, entry );
367         req.send(true);
368         var res = req.result();
369         if(checkILSEvent(res)) throw res;
370         scShow(type);
371 }
372