1 var RETRIEVE_CL = 'open-ils.circ:open-ils.circ.copy_location.retrieve.all';
2 var CREATE_CL = 'open-ils.circ:open-ils.circ.copy_location.create';
3 var UPDATE_CL = 'open-ils.circ:open-ils.circ.copy_location.update';
4 var DELETE_CL = 'open-ils.circ:open-ils.circ.copy_location.delete';
15 'CREATE_COPY_LOCATION',
16 'UPDATE_COPY_LOCATION',
17 'DELETE_COPY_LOCATION',
20 function clEditorInit() {
22 session = cgi.param('ses');
23 if(!session && (location.protocol == 'chrome:' || location.protocol == 'oils:')) {
25 var CacheClass = Components.classes["@open-ils.org/openils_data_cache;1"].getService();
26 session = CacheClass.wrappedJSObject.data.session.key;
28 console.log("Error loading XUL stash: " + e);
31 if(!session) throw "User session is not defined!";
33 $('user').appendChild(text(USER.usrname()));
34 YES = $('yes').innerHTML;
35 NO = $('no').innerHTML;
42 fetchHighestWorkPermOrgs( SESSION, USER.id(), myPerms );
43 $('cl_new_name').focus();
50 function clHoldMsg() {
51 alert($('cl_hold_msg').innerHTML);
55 setTimeout(function(){clGo2();}, 500);
60 var req = new Request(RETRIEVE_CL, focusOrg, true /* no i18n */);
61 req.request._last = true;
62 req.callback(clAppendLocation);
65 /* if we need to add view-all ability, can use this...
66 var org_list = OILS_WORK_PERMS['CREATE_COPY_LOCATION'];
67 for(var i = 0; i < org_list.length; i++) {
68 var req = new Request(RETRIEVE_CL, org_list[i]);
69 req.callback(clAppendLocation);
70 if(i == org_list.length - 1)
71 req.request._last = true;
77 function clAppendLocation(r) {
78 var cls = r.getResultObject();
79 if(checkILSEvent(cls)) throw cls;
80 for(var i = 0; i < cls.length; i++)
81 locationSet[cls[i].id()] = cls[i];
86 function clBuildNew() {
87 org_list = OILS_WORK_PERMS['CREATE_COPY_LOCATION'];
89 if(org_list.length == 0)
91 var selector = $('cl_new_owner');
92 var fselector = $('cl_org_filter');
93 buildMergedOrgSel(selector, org_list, 0, 'shortname');
94 buildMergedOrgSel(fselector, org_list, 0, 'shortname');
95 var org = findOrgUnit(org_list[0]);
96 if(org_list.length > 1 || (org.children() && org.children()[0])) {
97 selector.disabled = false;
98 fselector.disabled = false;
101 fselector.onchange = function() {
102 focusOrg = getSelectorVal(fselector);
106 focusOrg = USER.ws_ou();
107 if(!orgIsMineFromSet(org_list, USER.ws_ou()))
108 focusOrg = org_list[0];
109 setSelector(fselector, focusOrg);
112 var sub = $('sc_new_submit');
113 sub.disabled = false;
114 sub.onclick = clCreateNew;
117 function clCreateNew() {
119 cl.name( $('cl_new_name').value );
120 cl.owning_lib( getSelectorVal( $('cl_new_owner')));
121 cl.holdable( ($('cl_new_hold_yes').checked) ? 1 : 0 );
122 cl.hold_verify( ($('cl_new_hold_verify_yes').checked) ? 1 : 0 );
123 cl.opac_visible( ($('cl_new_vis_yes').checked) ? 1 : 0 );
124 cl.circulate( ($('cl_new_circulate_yes').checked) ? 1 : 0 );
125 cl.checkin_alert( $('cl_new_checkin_alert_yes').checked ? 1 : 0 );
126 cl.label_prefix( $('cl_new_label_prefix').value );
127 cl.label_suffix( $('cl_new_label_suffix').value );
129 var req = new Request(CREATE_CL, SESSION, cl);
131 var res = req.result();
132 if(checkILSEvent(res)) throw res;
133 alertId('cl_update_success');
141 for(var x in locationSet)
142 cls.push(locationSet[x]);
144 var tbody = $('cl_tbody');
146 rowTemplate = tbody.removeChild($('cl_row'));
147 removeChildren(tbody);
149 for(var i = 0; i < cls.length; i++) /* force stringify */
150 cls[i].name(new String(cls[i].name()));
152 cls = cls.sort( function(a,b) {
153 if( a.name().toLowerCase() > b.name().toLowerCase() ) return 1;
154 if( a.name().toLowerCase() < b.name().toLowerCase() ) return -1;
158 for( var c in cls ) {
160 var row = rowTemplate.cloneNode(true);
161 clBuildRow( tbody, row, cl );
162 tbody.appendChild(row);
166 function clBuildRow( tbody, row, cl ) {
167 $n( row, 'cl_name').appendChild(text(cl.name()));
168 $n( row, 'cl_owner').appendChild(text(findOrgUnit(cl.owning_lib()).shortname()));
170 appendClear($n( row, 'cl_holdable'), (isTrue(cl.holdable())) ? _TRUE.cloneNode(true) : _FALSE.cloneNode(true) );
171 appendClear($n( row, 'cl_hold_verify'), (isTrue(cl.hold_verify())) ? _TRUE.cloneNode(true) : _FALSE.cloneNode(true) );
172 appendClear($n( row, 'cl_visible'), (isTrue(cl.opac_visible())) ? _TRUE.cloneNode(true) : _FALSE.cloneNode(true) );
173 appendClear($n( row, 'cl_circulate'), (isTrue(cl.circulate())) ? _TRUE.cloneNode(true) : _FALSE.cloneNode(true) );
174 appendClear($n( row, 'cl_checkin_alert'), (isTrue(cl.checkin_alert())) ? _TRUE.cloneNode(true) : _FALSE.cloneNode(true) );
175 $n( row, 'cl_label_prefix').appendChild(text(cl.label_prefix() || ''));
176 $n( row, 'cl_label_suffix').appendChild(text(cl.label_suffix() || ''));
178 var edit = $n( row, 'cl_edit');
179 edit.onclick = function() { clEdit( cl, tbody, row ); };
180 checkPermOrgDisabled(edit, cl.owning_lib(), 'UPDATE_COPY_LOCATION');
182 if (!window._cl_per_row)
183 window._cl_per_row = [];
184 window._cl_per_row.push(cl);
185 new openils.widget.TranslatorPopup({
187 "window._cl_per_row[" + (window._cl_per_row.length - 1) + "]",
189 }, $n(row, "cl_xlate_popup"));
191 var del = $n( row, 'cl_delete' );
192 del.onclick = function() { clDelete( cl, tbody, row ); };
193 checkPermOrgDisabled(del, cl.owning_lib(), 'DELETE_COPY_LOCATION');
196 function clEdit( cl, tbody, row ) {
198 cleanTbody(tbody, 'edit');
199 var r = $('cl_edit').cloneNode(true);
200 r.setAttribute('edit','1');
202 var name = $n(r, 'cl_edit_name');
203 name.setAttribute('size', cl.name().length + 3);
204 name.value = cl.name();
206 $n(r, 'cl_edit_owner').appendChild(text(findOrgUnit(cl.owning_lib()).shortname()));
208 var arr = _clOptions(r);
209 if(isTrue(cl.holdable())) arr[0].checked = true;
210 else arr[1].checked = true;
211 if(isTrue(cl.opac_visible())) arr[2].checked = true;
212 else arr[3].checked = true;
213 if(isTrue(cl.circulate())) arr[4].checked = true;
214 else arr[5].checked = true;
215 if(isTrue(cl.hold_verify())) arr[6].checked = true;
216 else arr[7].checked = true;
217 if(isTrue(cl.checkin_alert())) arr[8].checked = true;
218 else arr[9].checked = true;
220 var label_prefix = $n(r, 'cl_edit_label_prefix');
221 if (cl.label_prefix()) {
222 label_prefix.setAttribute('size', cl.label_prefix().length + 3);
224 label_prefix.setAttribute('size', 3);
226 label_prefix.value = cl.label_prefix();
228 var label_suffix = $n(r, 'cl_edit_label_suffix');
229 if (cl.label_suffix()) {
230 label_suffix.setAttribute('size', cl.label_suffix().length + 3);
232 label_suffix.setAttribute('size', 3);
234 label_suffix.value = cl.label_suffix();
236 $n(r, 'cl_edit_cancel').onclick = function(){cleanTbody(tbody,'edit');}
237 $n(r, 'cl_edit_commit').onclick = function(){clEditCommit( tbody, r, cl ); }
239 insRow(tbody, row, r);
244 function _clOptions(r) {
246 arr[0] = $n( $n(r,'cl_edit_holdable_yes'), 'cl_edit_holdable');
247 arr[1] = $n( $n(r,'cl_edit_holdable_no'), 'cl_edit_holdable');
248 arr[2] = $n( $n(r,'cl_edit_visible_yes'), 'cl_edit_visible');
249 arr[3] = $n( $n(r,'cl_edit_visible_no'), 'cl_edit_visible');
250 arr[4] = $n( $n(r,'cl_edit_circulate_yes'), 'cl_edit_circulate');
251 arr[5] = $n( $n(r,'cl_edit_circulate_no'), 'cl_edit_circulate');
252 arr[6] = $n( $n(r,'cl_edit_hold_verify_yes'), 'cl_edit_hold_verify');
253 arr[7] = $n( $n(r,'cl_edit_hold_verify_no'), 'cl_edit_hold_verify');
254 arr[8] = $n( $n(r,'cl_edit_checkin_alert_yes'), 'cl_edit_checkin_alert');
255 arr[9] = $n( $n(r,'cl_edit_checkin_alert_no'), 'cl_edit_checkin_alert');
259 function clEditCommit( tbody, r, cl ) {
261 var arr = _clOptions(r);
262 if(arr[0].checked) cl.holdable(1);
264 if(arr[2].checked) cl.opac_visible(1);
265 else cl.opac_visible(0);
266 if(arr[4].checked) cl.circulate(1);
267 else cl.circulate(0);
268 if(arr[6].checked) cl.hold_verify(1);
269 else cl.hold_verify(0);
270 if(arr[8].checked) cl.checkin_alert(1);
271 else cl.checkin_alert(0);
272 cl.name($n(r, 'cl_edit_name').value);
273 cl.label_prefix($n(r, 'cl_edit_label_prefix').value);
274 cl.label_suffix($n(r, 'cl_edit_label_suffix').value);
276 var req = new Request( UPDATE_CL, SESSION, cl );
278 var res = req.result();
279 if(checkILSEvent(res)) throw res;
280 alertId('cl_update_success');
286 function clDelete( cl, tbody, row ) {
287 if(!confirm($('cl_delete_confirm').innerHTML)) return;
288 var req = new Request( DELETE_CL, SESSION, cl.id() );
290 var res = req.result();
291 if(checkILSEvent(res)) throw res;
292 alertId('cl_update_success');