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';
20 var opacVisible = false;
25 'CREATE_PATRON_STAT_CAT',
26 'UPDATE_PATRON_STAT_CAT',
27 'DELETE_PATRON_STAT_CAT',
28 'CREATE_PATRON_STAT_CAT_ENTRY',
29 'UPDATE_PATRON_STAT_CAT_ENTRY',
30 'DELETE_PATRON_STAT_CAT_ENTRY',
32 'CREATE_COPY_STAT_CAT',
33 'UPDATE_COPY_STAT_CAT',
34 'DELETE_COPY_STAT_CAT',
35 'CREATE_COPY_STAT_CAT_ENTRY',
36 'UPDATE_COPY_STAT_CAT_ENTRY',
37 'DELETE_COPY_STAT_CAT_ENTRY'
40 function scSetPerms() {
41 PERMS[ACTOR].create_stat_cat = OILS_WORK_PERMS.CREATE_PATRON_STAT_CAT;
42 PERMS[ACTOR].update_stat_cat = OILS_WORK_PERMS.UPDATE_PATRON_STAT_CAT;
43 PERMS[ACTOR].delete_stat_cat = OILS_WORK_PERMS.DELETE_PATRON_STAT_CAT;
44 PERMS[ACTOR].create_stat_cat_entry = OILS_WORK_PERMS.CREATE_PATRON_STAT_CAT_ENTRY;
45 PERMS[ACTOR].update_stat_cat_entry = OILS_WORK_PERMS.UPDATE_PATRON_STAT_CAT_ENTRY;
46 PERMS[ACTOR].delete_stat_cat_entry = OILS_WORK_PERMS.DELETE_PATRON_STAT_CAT_ENTRY;
48 PERMS[ASSET].create_stat_cat = OILS_WORK_PERMS.CREATE_COPY_STAT_CAT;
49 PERMS[ASSET].update_stat_cat = OILS_WORK_PERMS.UPDATE_COPY_STAT_CAT;
50 PERMS[ASSET].delete_stat_cat = OILS_WORK_PERMS.DELETE_COPY_STAT_CAT;
51 PERMS[ASSET].create_stat_cat_entry = OILS_WORK_PERMS.CREATE_COPY_STAT_CAT_ENTRY;
52 PERMS[ASSET].update_stat_cat_entry = OILS_WORK_PERMS.UPDATE_COPY_STAT_CAT_ENTRY;
53 PERMS[ASSET].delete_stat_cat_entry = OILS_WORK_PERMS.DELETE_COPY_STAT_CAT_ENTRY;
55 // set up the fitler select
56 var fselector = $('sc_org_filter');
57 var org_list = PERMS[currentlyVisible].update_stat_cat;
58 buildMergedOrgSel(fselector, org_list, 0, 'shortname');
59 var org = findOrgUnit(org_list[0]);
60 if(org_list.length > 1 || (org.children() && org.children()[0]))
61 fselector.disabled = false;
63 fselector.onchange = function() {
64 focusOrg = getSelectorVal(fselector);
65 scShow(currentlyVisible);
68 focusOrg = USER.ws_ou();
69 if(!orgIsMineFromSet(org_list, focusOrg))
70 focusOrg = org_list[0];
71 setSelector(fselector, focusOrg);
74 function scEditorInit() {
76 session = cgi.param('ses');
77 if(!session) throw "User session is not defined";
78 user = fetchUser(session);
79 $('sc_type_selector').onchange = scBuildNew;
82 fetchHighestWorkPermOrgs(
83 session, user.id(), myPerms, function(){scGo();});
89 var show = cgi.param('show');
90 if(!show) currentlyVisible = ASSET;
92 scShow(currentlyVisible);
94 $('sc_user').appendChild(text(user.usrname()));
97 function scFetchAll( session, type, orgid, callback, args ) {
98 var req = new Request(
99 SC_FETCH_ALL.replace(/TYPE/, type) , session, orgid );
104 function scShow(type) {
105 setTimeout(function(){_scShow(type)}, 500);
108 function _scShow(type) {
110 currentlyVisible = type;
112 if( type == ASSET ) {
113 addCSSClass($('sc_show_copy'), 'has_color');
114 removeCSSClass($('sc_show_actor'), 'has_color');
116 } else if( type == ACTOR ) {
117 addCSSClass($('sc_show_actor'), 'has_color');
118 removeCSSClass($('sc_show_copy'), 'has_color');
121 scCache[type] = scFetchAll(session, type, focusOrg); /* XXX */
122 scDraw( type, scCache[type] );
125 var scRow; var scCounter;
126 function scDraw( type, cats ) {
128 hideMe($('loading'));
130 var tbody = $('sc_tbody');
131 if(!scRow) scRow = tbody.removeChild($('sc_tr'));
132 removeChildren(tbody);
134 if(!cats || cats.length == 0) {
135 hideMe($('sc_table'));
136 unHideMe($('sc_none'));
140 hideMe($('sc_none'));
141 unHideMe($('sc_table'));
144 for( var c in cats ) scInsertCat( tbody, cats[c], type );
149 function scInsertCat( tbody, cat, type ) {
151 var row = scRow.cloneNode(true);
152 row.id = 'sc_tr_' + cat.id();
153 var name_td = $n(row, 'sc_name');
154 name_td.appendChild( text(cat.name()) );
155 if(scCounter++ % 2) addCSSClass(row, 'has_color');
157 $n(row, 'sc_new_entry').onclick = function() { scNewEntry(type, cat, tbody); }
158 $n(row, 'sc_edit').onclick = function(){ scEdit(tbody, type, cat); };
159 $n(row, 'sc_owning_lib').appendChild( text( findOrgUnit(cat.owner()).name() ));
161 if( cat.opac_visible() ) unHideMe($n(row, 'sc_opac_visible'));
162 else unHideMe($n(row, 'sc_opac_invisible'));
164 tbody.appendChild(row);
167 cat.entries().sort( /* sort the entries by value */
169 a = new String(a.value()).toLowerCase();
170 b = new String(b.value()).toLowerCase();
171 if( a > b ) return 1;
172 if( a < b ) return -1;
177 for( var e in cat.entries() )
178 scInsertEntry( cat, cat.entries()[e], $n(row, 'sc_entries_selector'), tbody, type );
182 function scInsertEntry( cat, entry, selector, tbody, type ) {
183 setSelectorVal( selector, scEntryCounter++, entry.value(), entry.id(),
184 function(){ scUpdateEntry( cat, entry, tbody, type );} );
189 function scDelete(type, id) {
190 if(!confirm($('sc_delete_confirm').innerHTML)) return;
191 var req = new Request( SC_DELETE.replace(/TYPE/,type), session, id );
193 var res = req.result();
194 if(checkILSEvent(res)) throw res;
195 alertId('sc_update_success');
199 function scCreateEntry( type, id, row ) {
200 var value = $n(row, 'sc_new_entry_name').value;
203 if( type == ACTOR ) entry = new actsce();
204 if( type == ASSET ) entry = new asce();
208 entry.owner(getSelectorVal($n(row, 'sc_new_entry_lib')));
211 var req = new Request( SC_ENTRY_CREATE.replace(/TYPE/, type), session, entry );
213 var res = req.result();
214 if(checkILSEvent(res)) throw res;
215 alertId('sc_update_success');
219 function scNewEntry( type, cat, tbody ) {
220 cleanTbody(tbody, 'edit');
221 var row = $('sc_new_entry_row').cloneNode(true);
222 row.setAttribute('edit', '1');
224 var r = $('sc_tr_' + cat.id());
225 if(r.nextSibling) tbody.insertBefore( row, r.nextSibling );
226 else{ tbody.appendChild(row); }
228 $n(row, 'sc_new_entry_create').onclick =
230 if( scCreateEntry( type, cat.id(), row ) )
231 tbody.removeChild(row); };
232 $n(row, 'sc_new_entry_cancel').onclick = function(){tbody.removeChild(row);}
234 var org_list = PERMS[type].create_stat_cat_entry;
235 if(org_list.length == 0) {
236 $n(row, 'sc_new_entry_create').disabled = true;
237 $n(row, 'sc_new_entry_lib').disabled = true;
241 var rootOrg = findReleventRootOrg(org_list, cat.owner());
243 $n(row, 'sc_new_entry_create').disabled = true;
244 $n(row, 'sc_new_entry_lib').disabled = true;
247 buildOrgSel($n(row, 'sc_new_entry_lib'), rootOrg, 0, 'shortname');
248 $n(row, 'sc_new_entry_name').focus();
252 function scBuildNew() {
253 var libSel = $('sc_owning_lib_selector');
254 var typeSel = $('sc_type_selector');
255 var type = getSelectorVal(typeSel);
256 var org_list = PERMS[type].create_stat_cat;
257 if(org_list.length == 0) { /* no create perms */
258 $('sc_new').disabled = true;
259 typeSel.disabled = true;
260 libSel.disabled = true;
263 buildMergedOrgSel(libSel, org_list, 0, 'shortname');
269 var name = $('sc_new_name').value;
270 var type = getSelectorVal($('sc_type_selector'));
273 if( $('sc_make_opac_visible').checked) visible = 1;
276 if( type == ACTOR ) cat = new actsc();
277 if( type == ASSET ) cat = new asc();
279 cat.opac_visible(visible);
281 cat.owner(getSelectorVal($('sc_owning_lib_selector')));
284 var req = new Request( SC_CREATE.replace(/TYPE/, type), session, cat );
287 var res = req.result();
288 if(checkILSEvent(res)) throw res;
289 alertId('sc_update_success');
294 function scEdit( tbody, type, cat ) {
296 cleanTbody(tbody, 'edit');
297 var row = $('sc_edit_row').cloneNode(true);
298 row.setAttribute('edit', '1');
300 var r = $('sc_tr_' + cat.id());
301 if(r.nextSibling) { tbody.insertBefore( row, r.nextSibling ); }
302 else{ tbody.appendChild(row); }
304 $n(row, 'sc_edit_name').value = cat.name();
306 var name = $n(row, 'sc_edit_cancel');
307 name.onclick = function() { tbody.removeChild(row); };
309 var show = $n(row, 'sc_edit_show_owning_lib');
311 var myorg = findOrgUnit(user.home_ou());
312 var ownerorg = findOrgUnit(cat.owner());
313 show.appendChild(text(ownerorg.name()));
316 if( myorg.children() && myorg.children().length > 0 ) {
317 selector = $n(row, 'sc_edit_owning_lib');
318 buildOrgSel( selector, myorg, findOrgDepth(myorg), 'shortname');
319 setSelector( selector, cat.owner() );
322 } else { unHideMe(show); }
327 if( cat.opac_visible() ) {
328 $n( $n(row, 'sc_edit_opac_vis'),
329 'sc_edit_opac_visibility').checked = true;
331 $n( $n(row, 'sc_edit_opac_invis'),
332 'sc_edit_opac_visibility').checked = true;
335 $n(row, 'sc_edit_submit').onclick =
336 function() { scEditGo( type, cat, row, selector ); };
338 $n(row, 'sc_edit_delete').onclick =
339 function(){ scDelete(type, cat.id()); };
341 var rootEditOrg = findReleventRootOrg(PERMS[type].update_stat_cat, cat.owner());
342 var rootDelOrg = findReleventRootOrg(PERMS[type].delete_stat_cat, cat.owner());
344 if(!rootEditOrg || rootEditOrg.id() != cat.owner())
345 $n(row,'sc_edit_submit').disabled = true;
347 if(!rootDelOrg || rootDelOrg.id() != cat.owner())
348 $n(row,'sc_edit_delete').disabled = true;
351 function scEditGo( type, cat, row, selector ) {
352 var name = $n(row, 'sc_edit_name').value;
354 $n( $n(row, 'sc_edit_opac_vis'), 'sc_edit_opac_visibility').checked;
356 var newlib = cat.owner();
357 if(selector) newlib = getSelectorVal( selector );
359 if(!name) return false;
361 var isvisible = false;
362 if( cat.opac_visible() ) isvisible = true;
364 if( (name == cat.name()) && (visible == isvisible)
365 && (newlib == cat.owner()) ) { return true; }
371 if( visible ) cat.opac_visible(1);
373 var req = new Request( SC_UPDATE.replace(/TYPE/,type), session, cat );
375 var res = req.result();
376 if(checkILSEvent(res)) throw res;
377 alertId('sc_update_success');
383 function scUpdateEntry( cat, entry, tbody, type ) {
384 cleanTbody(tbody, 'edit');
385 var row = $('sc_edit_entry_row').cloneNode(true);
386 row.setAttribute('edit', '1');
388 var r = $('sc_tr_' + cat.id());
389 if(r.nextSibling) tbody.insertBefore( row, r.nextSibling );
390 else{ tbody.appendChild(row); }
392 $n(row, 'sc_edit_entry_owner').appendChild(text(findOrgUnit(entry.owner()).name()));
394 var name = $n(row, 'sc_edit_entry_name');
395 name.value = entry.value();
399 $n(row,'sc_edit_entry_name_submit').onclick =
401 if( scEditEntry(cat, entry, name.value, type ) )
402 tbody.removeChild(row);
405 $n(row,'sc_edit_entry_cancel').onclick = function(){tbody.removeChild(row);};
406 $n(row,'sc_edit_entry_delete').onclick =
407 function(){ scEntryDelete( cat, entry, type ); }
409 var rootEditOrg = findReleventRootOrg(PERMS[type].update_stat_cat_entry, entry.owner());
410 var rootDelOrg = findReleventRootOrg(PERMS[type].delete_stat_cat_entry, entry.owner());
412 if(!rootEditOrg || rootEditOrg.id() != entry.owner())
413 $n(row,'sc_edit_submit').disabled = true;
415 if(!rootDelOrg || rootDelOrg.id() != entry.owner())
416 $n(row,'sc_edit_delete').disabled = true;
419 function scEntryDelete( cat, entry, type ) {
420 if(!confirm($('sc_entry_delete_confirm').innerHTML)) return;
421 var req = new Request( SC_ENTRY_DELETE.replace(/TYPE/,type), session, entry.id() );
423 var res = req.result();
424 if(checkILSEvent(res)) throw res;
425 alertId('sc_update_success');
429 function scEditEntry( cat, entry, newvalue, type ) {
430 if(entry.value() == newvalue) return;
431 entry.value( newvalue );
432 var req = new Request(
433 SC_ENTRY_UPDATE.replace(/TYPE/, type), session, entry );
435 var res = req.result();
436 if(checkILSEvent(res)) throw res;