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