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 unHideMe($('sc_usr_summary_label'));
145 hideMe($('sc_required_label'));
147 unHideMe($('sc_required_label'));
148 hideMe($('sc_usr_summary_label'));
152 for( var c in cats ) scInsertCat( tbody, cats[c], type );
157 function scInsertCat( tbody, cat, type ) {
159 var row = scRow.cloneNode(true);
160 row.id = 'sc_tr_' + cat.id();
161 var name_td = $n(row, 'sc_name');
162 name_td.appendChild( text(cat.name()) );
163 if(scCounter++ % 2) addCSSClass(row, 'has_color');
165 $n(row, 'sc_new_entry').onclick = function() { scNewEntry(type, cat, tbody); }
166 $n(row, 'sc_edit').onclick = function(){ scEdit(tbody, type, cat); };
167 $n(row, 'sc_owning_lib').appendChild( text( findOrgUnit(cat.owner()).name() ));
169 if(isTrue(cat.opac_visible()))
170 unHideMe($n(row, 'sc_opac_visible'));
172 unHideMe($n(row, 'sc_opac_invisible'));
175 if(isTrue(cat.usr_summary()))
176 unHideMe($n(row, 'sc_usr_summary_on'));
178 unHideMe($n(row, 'sc_usr_summary'));
180 hideMe($n(row, 'sc_required_td'));
182 if(isTrue(cat.required()))
183 unHideMe($n(row, 'sc_required_on'));
185 unHideMe($n(row, 'sc_required'));
187 hideMe($n(row, 'sc_usr_summary_td'));
190 tbody.appendChild(row);
193 cat.entries().sort( /* sort the entries by value */
195 a = new String(a.value()).toLowerCase();
196 b = new String(b.value()).toLowerCase();
197 if( a > b ) return 1;
198 if( a < b ) return -1;
203 for( var e in cat.entries() )
204 scInsertEntry( cat, cat.entries()[e], $n(row, 'sc_entries_selector'), tbody, type );
208 function scInsertEntry( cat, entry, selector, tbody, type ) {
209 setSelectorVal( selector, scEntryCounter++, entry.value(), entry.id(),
210 function(){ scUpdateEntry( cat, entry, tbody, type );} );
215 function scDelete(type, id) {
216 if(!confirm($('sc_delete_confirm').innerHTML)) return;
217 var req = new Request( SC_DELETE.replace(/TYPE/,type), session, id );
219 var res = req.result();
220 if(checkILSEvent(res)) throw res;
221 alertId('sc_update_success');
225 function scCreateEntry( type, id, row ) {
226 var value = $n(row, 'sc_new_entry_name').value;
229 if( type == ACTOR ) entry = new actsce();
230 if( type == ASSET ) entry = new asce();
234 entry.owner(getSelectorVal($n(row, 'sc_new_entry_lib')));
237 var req = new Request( SC_ENTRY_CREATE.replace(/TYPE/, type), session, entry );
239 var res = req.result();
240 if(checkILSEvent(res)) throw res;
241 alertId('sc_update_success');
245 function scNewEntry( type, cat, tbody ) {
246 cleanTbody(tbody, 'edit');
247 var row = $('sc_new_entry_row').cloneNode(true);
248 row.setAttribute('edit', '1');
250 var r = $('sc_tr_' + cat.id());
251 if(r.nextSibling) tbody.insertBefore( row, r.nextSibling );
252 else{ tbody.appendChild(row); }
254 $n(row, 'sc_new_entry_create').onclick =
256 if( scCreateEntry( type, cat.id(), row ) )
257 tbody.removeChild(row); };
258 $n(row, 'sc_new_entry_cancel').onclick = function(){tbody.removeChild(row);}
260 var org_list = PERMS[type].create_stat_cat_entry;
261 if(org_list.length == 0) {
262 $n(row, 'sc_new_entry_create').disabled = true;
263 $n(row, 'sc_new_entry_lib').disabled = true;
267 var rootOrg = findReleventRootOrg(org_list, cat.owner());
269 $n(row, 'sc_new_entry_create').disabled = true;
270 $n(row, 'sc_new_entry_lib').disabled = true;
273 buildOrgSel($n(row, 'sc_new_entry_lib'), rootOrg, 0, 'shortname');
274 $n(row, 'sc_new_entry_name').focus();
278 function scBuildNew() {
279 var libSel = $('sc_owning_lib_selector');
280 var typeSel = $('sc_type_selector');
281 var type = getSelectorVal(typeSel);
284 hideMe($('required_td1'));
285 hideMe($('required_td2'));
286 unHideMe($('usr_summary_td1'));
287 unHideMe($('usr_summary_td2'));
290 hideMe($('usr_summary_td1'));
291 hideMe($('usr_summary_td2'));
292 unHideMe($('required_td1'));
293 unHideMe($('required_td2'));
296 var org_list = PERMS[type].create_stat_cat;
297 if(org_list.length == 0) { /* no create perms */
298 $('sc_new').disabled = true;
299 typeSel.disabled = true;
300 libSel.disabled = true;
303 buildMergedOrgSel(libSel, org_list, 0, 'shortname');
309 var name = $('sc_new_name').value;
310 var type = getSelectorVal($('sc_type_selector'));
315 if( $('sc_make_opac_visible').checked) visible = 1;
316 if( $('sc_make_required').checked) required = 1;
317 if( $('sc_make_usr_summary').checked) usr_summary = 1;
320 if( type == ACTOR ) {
322 cat.usr_summary( usr_summary );
324 if( type == ASSET ) {
326 cat.required( required );
329 cat.opac_visible(visible);
331 cat.owner(getSelectorVal($('sc_owning_lib_selector')));
334 var req = new Request( SC_CREATE.replace(/TYPE/, type), session, cat );
337 var res = req.result();
338 if(checkILSEvent(res)) throw res;
339 alertId('sc_update_success');
344 function scEdit( tbody, type, cat ) {
346 cleanTbody(tbody, 'edit');
347 var row = $('sc_edit_row').cloneNode(true);
348 row.setAttribute('edit', '1');
350 var r = $('sc_tr_' + cat.id());
351 if(r.nextSibling) { tbody.insertBefore( row, r.nextSibling ); }
352 else{ tbody.appendChild(row); }
354 $n(row, 'sc_edit_name').value = cat.name();
357 var cb = $n(row, 'sc_edit_usr_summary');
358 cb.checked = isTrue(cat.usr_summary());
359 hideMe($n(row, 'sc_edit_required_td'));
360 unHideMe($n(row, 'sc_edit_usr_summary_td'));
362 var cb = $n(row, 'sc_edit_required');
363 cb.checked = isTrue(cat.required());
364 hideMe($n(row, 'sc_edit_usr_summary_td'));
365 unHideMe($n(row, 'sc_edit_required_td'));
368 var name = $n(row, 'sc_edit_cancel');
369 name.onclick = function() { tbody.removeChild(row); };
371 var show = $n(row, 'sc_edit_show_owning_lib');
373 var myorg = findOrgUnit(user.home_ou());
374 var ownerorg = findOrgUnit(cat.owner());
375 show.appendChild(text(ownerorg.name()));
378 if( myorg.children() && myorg.children().length > 0 ) {
379 selector = $n(row, 'sc_edit_owning_lib');
380 buildOrgSel( selector, myorg, findOrgDepth(myorg), 'shortname');
381 setSelector( selector, cat.owner() );
384 } else { unHideMe(show); }
389 if( cat.opac_visible() != 0 && cat.opac_visible() != '0' ) {
390 $n( $n(row, 'sc_edit_opac_vis'),
391 'sc_edit_opac_visibility').checked = true;
393 $n( $n(row, 'sc_edit_opac_invis'),
394 'sc_edit_opac_visibility').checked = true;
397 $n(row, 'sc_edit_submit').onclick =
398 function() { scEditGo( type, cat, row, selector ); };
400 $n(row, 'sc_edit_delete').onclick =
401 function(){ scDelete(type, cat.id()); };
403 var rootEditOrg = findReleventRootOrg(PERMS[type].update_stat_cat, cat.owner());
404 var rootDelOrg = findReleventRootOrg(PERMS[type].delete_stat_cat, cat.owner());
406 if(!rootEditOrg || rootEditOrg.id() != cat.owner())
407 $n(row,'sc_edit_submit').disabled = true;
409 if(!rootDelOrg || rootDelOrg.id() != cat.owner())
410 $n(row,'sc_edit_delete').disabled = true;
413 function scEditGo( type, cat, row, selector ) {
414 var name = $n(row, 'sc_edit_name').value;
416 $n( $n(row, 'sc_edit_opac_vis'), 'sc_edit_opac_visibility').checked;
418 var newlib = cat.owner();
419 if(selector) newlib = getSelectorVal( selector );
421 if(!name) return false;
423 var usr_summary = $n(row, 'sc_edit_usr_summary').checked;
424 var required = $n(row, 'sc_edit_required').checked;
430 if( visible ) cat.opac_visible(1);
433 cat.usr_summary( (usr_summary) ? 1 : 0 );
436 cat.required( (required) ? 1 : 0 );
440 var req = new Request( SC_UPDATE.replace(/TYPE/,type), session, cat );
442 var res = req.result();
443 if(checkILSEvent(res)) throw res;
444 alertId('sc_update_success');
450 function scUpdateEntry( cat, entry, tbody, type ) {
451 cleanTbody(tbody, 'edit');
452 var row = $('sc_edit_entry_row').cloneNode(true);
453 row.setAttribute('edit', '1');
455 var r = $('sc_tr_' + cat.id());
456 if(r.nextSibling) tbody.insertBefore( row, r.nextSibling );
457 else{ tbody.appendChild(row); }
459 $n(row, 'sc_edit_entry_owner').appendChild(text(findOrgUnit(entry.owner()).name()));
461 var name = $n(row, 'sc_edit_entry_name');
462 name.value = entry.value();
466 $n(row,'sc_edit_entry_name_submit').onclick =
468 if( scEditEntry(cat, entry, name.value, type ) )
469 tbody.removeChild(row);
472 $n(row,'sc_edit_entry_cancel').onclick = function(){tbody.removeChild(row);};
473 $n(row,'sc_edit_entry_delete').onclick =
474 function(){ scEntryDelete( cat, entry, type ); }
476 var rootEditOrg = findReleventRootOrg(PERMS[type].update_stat_cat_entry, entry.owner());
477 var rootDelOrg = findReleventRootOrg(PERMS[type].delete_stat_cat_entry, entry.owner());
479 if(!rootEditOrg || rootEditOrg.id() != entry.owner())
480 $n(row,'sc_edit_submit').disabled = true;
482 if(!rootDelOrg || rootDelOrg.id() != entry.owner())
483 $n(row,'sc_edit_delete').disabled = true;
486 function scEntryDelete( cat, entry, type ) {
487 if(!confirm($('sc_entry_delete_confirm').innerHTML)) return;
488 var req = new Request( SC_ENTRY_DELETE.replace(/TYPE/,type), session, entry.id() );
490 var res = req.result();
491 if(checkILSEvent(res)) throw res;
492 alertId('sc_update_success');
496 function scEditEntry( cat, entry, newvalue, type ) {
497 if(entry.value() == newvalue) return;
498 entry.value( newvalue );
499 var req = new Request(
500 SC_ENTRY_UPDATE.replace(/TYPE/, type), session, entry );
502 var res = req.result();
503 if(checkILSEvent(res)) throw res;