]> git.evergreen-ils.org Git - Evergreen.git/blob - Open-ILS/xul/staff_client/server/admin/copy_locations.js
LP2061136 - Stamping 1405 DB upgrade script
[Evergreen.git] / Open-ILS / xul / staff_client / server / admin / copy_locations.js
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';
5
6
7 var YES;
8 var NO;
9 var _TRUE;
10 var _FALSE;
11 var locationSet;
12 var focusOrg;
13
14 var myPerms = [
15     'CREATE_COPY_LOCATION',
16     'UPDATE_COPY_LOCATION', 
17     'DELETE_COPY_LOCATION',
18     ];
19
20 function clEditorInit() {
21     cgi = new CGI();
22     session = cgi.param('ses');
23     if(!session && (location.protocol == 'chrome:' || location.protocol == 'oils:')) {
24         try {
25             var CacheClass = Components.classes["@open-ils.org/openils_data_cache;1"].getService();
26             session = CacheClass.wrappedJSObject.data.session.key;
27         } catch(e) {
28             console.log("Error loading XUL stash: " + e);
29         }
30     }
31     if(!session) throw "User session is not defined!";
32     fetchUser(session);
33     $('user').appendChild(text(USER.usrname()));
34     YES = $('yes').innerHTML;
35     NO = $('no').innerHTML;
36     _TRUE = $('true');
37     _FALSE = $('false');
38     locationSet = [];
39
40     setTimeout( 
41         function() { 
42             fetchHighestWorkPermOrgs( SESSION, USER.id(), myPerms ); 
43             $('cl_new_name').focus();
44             clBuildNew();
45             clGo(); 
46         }, 20 );
47 }
48
49
50 function clHoldMsg() {
51     alert($('cl_hold_msg').innerHTML);
52 }
53
54 function clGo() {    
55     setTimeout(function(){clGo2();}, 500);
56 }
57
58 function clGo2() {    
59     locationSet = {};
60     var req = new Request(RETRIEVE_CL, focusOrg, true /* no i18n */);
61     req.request._last = true;
62     req.callback(clAppendLocation);
63     req.send();
64
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;
72         req.send();
73     }
74     */
75 }
76
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];
82     if(r._last) 
83         clDraw();
84 }
85
86 function clBuildNew() {
87     org_list = OILS_WORK_PERMS['CREATE_COPY_LOCATION'];
88     var org;
89     if(org_list.length == 0)
90         return;
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;
99     }
100
101     fselector.onchange = function() {
102         focusOrg = getSelectorVal(fselector);
103         clGo();
104     }
105     
106     focusOrg = USER.ws_ou();
107     if(!orgIsMineFromSet(org_list, USER.ws_ou())) 
108         focusOrg = org_list[0];
109     setSelector(fselector, focusOrg);
110
111
112     var sub = $('sc_new_submit');
113     sub.disabled = false;
114     sub.onclick = clCreateNew;
115 }
116
117 function clCreateNew() {
118     var cl = new acpl();
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 );
128     cl.url( $('cl_new_url').value );
129
130     var req = new Request(CREATE_CL, SESSION, cl);
131     req.send(true);
132     var res = req.result();
133     if(checkILSEvent(res)) throw res;
134     alertId('cl_update_success');
135     clGo();
136 }
137
138 var rowTemplate;
139 function clDraw() {
140
141     var cls = [];
142     for(var x in locationSet)
143         cls.push(locationSet[x]);
144
145     var tbody = $('cl_tbody');
146     if(!rowTemplate)
147         rowTemplate = tbody.removeChild($('cl_row'));
148     removeChildren(tbody);
149
150     for(var i = 0; i < cls.length; i++) /* force stringify */
151         cls[i].name(new String(cls[i].name()));
152
153     cls = cls.sort( function(a,b) {
154             if( a.name().toLowerCase() > b.name().toLowerCase() ) return 1;
155             if( a.name().toLowerCase() < b.name().toLowerCase() ) return -1;
156             return 0;
157         });
158
159     for( var c in cls ) {
160         var cl = cls[c];
161         var row = rowTemplate.cloneNode(true);
162         clBuildRow( tbody, row, cl );
163         tbody.appendChild(row);
164     }
165 }
166
167 function clBuildRow( tbody, row, cl ) {
168     $n( row, 'cl_name').appendChild(text(cl.name()));
169     $n( row, 'cl_owner').appendChild(text(findOrgUnit(cl.owning_lib()).shortname()));
170
171     appendClear($n( row, 'cl_holdable'), (isTrue(cl.holdable())) ? _TRUE.cloneNode(true) : _FALSE.cloneNode(true) );
172     appendClear($n( row, 'cl_hold_verify'), (isTrue(cl.hold_verify())) ? _TRUE.cloneNode(true) : _FALSE.cloneNode(true) );
173     appendClear($n( row, 'cl_visible'), (isTrue(cl.opac_visible())) ? _TRUE.cloneNode(true) : _FALSE.cloneNode(true) );
174     appendClear($n( row, 'cl_circulate'), (isTrue(cl.circulate())) ? _TRUE.cloneNode(true) : _FALSE.cloneNode(true) );
175     appendClear($n( row, 'cl_checkin_alert'), (isTrue(cl.checkin_alert())) ? _TRUE.cloneNode(true) : _FALSE.cloneNode(true) );
176     $n( row, 'cl_label_prefix').appendChild(text(cl.label_prefix() || ''));
177     $n( row, 'cl_label_suffix').appendChild(text(cl.label_suffix() || ''));
178     $n( row, 'cl_url').appendChild(text(cl.url() || ''));
179
180     var edit = $n( row, 'cl_edit');
181     edit.onclick = function() { clEdit( cl, tbody, row ); };
182     checkPermOrgDisabled(edit, cl.owning_lib(), 'UPDATE_COPY_LOCATION');
183
184     if (!window._cl_per_row)
185         window._cl_per_row = [];
186     window._cl_per_row.push(cl);
187     new openils.widget.TranslatorPopup({
188         "targetObject":
189             "window._cl_per_row[" + (window._cl_per_row.length - 1) + "]",
190         "field": "name"
191     }, $n(row, "cl_xlate_popup"));
192
193     var del = $n( row, 'cl_delete' );
194     del.onclick = function() { clDelete( cl, tbody, row ); };
195     checkPermOrgDisabled(del, cl.owning_lib(), 'DELETE_COPY_LOCATION');
196 }
197
198 function clEdit( cl, tbody, row ) {
199
200     cleanTbody(tbody, 'edit');
201     var r = $('cl_edit').cloneNode(true);
202     r.setAttribute('edit','1');
203     
204     var name = $n(r, 'cl_edit_name');
205     name.setAttribute('size', cl.name().length + 3);
206     name.value = cl.name();
207
208     $n(r, 'cl_edit_owner').appendChild(text(findOrgUnit(cl.owning_lib()).shortname()));
209
210     var arr = _clOptions(r);
211     if(isTrue(cl.holdable())) arr[0].checked = true;
212     else arr[1].checked = true;
213     if(isTrue(cl.opac_visible())) arr[2].checked = true;
214     else arr[3].checked = true;
215     if(isTrue(cl.circulate())) arr[4].checked = true;
216     else arr[5].checked = true;
217     if(isTrue(cl.hold_verify())) arr[6].checked = true;
218     else arr[7].checked = true;
219     if(isTrue(cl.checkin_alert())) arr[8].checked = true;
220     else arr[9].checked = true;
221
222     var label_prefix = $n(r, 'cl_edit_label_prefix');
223     if (cl.label_prefix()) {
224         label_prefix.setAttribute('size', cl.label_prefix().length + 3);
225     } else {
226         label_prefix.setAttribute('size', 3);
227     }
228     label_prefix.value = cl.label_prefix();
229
230     var label_suffix = $n(r, 'cl_edit_label_suffix');
231     if (cl.label_suffix()) {
232         label_suffix.setAttribute('size', cl.label_suffix().length + 3);
233     } else {
234         label_suffix.setAttribute('size', 3);
235     }
236     label_suffix.value = cl.label_suffix();
237
238     var url = $n(r, 'cl_edit_url');
239     if (cl.url()) {
240         url.setAttribute('size', cl.url().length + 3);
241     } else {
242         url.setAttribute('size', 20);
243     }
244     url.value = cl.url();
245
246     $n(r, 'cl_edit_cancel').onclick = function(){cleanTbody(tbody,'edit');}
247     $n(r, 'cl_edit_commit').onclick = function(){clEditCommit( tbody, r, cl ); }
248
249     insRow(tbody, row, r);
250     name.focus();
251     name.select();
252 }
253
254 function _clOptions(r) {
255     var arr = [];
256     arr[0] = $n( $n(r,'cl_edit_holdable_yes'), 'cl_edit_holdable');
257     arr[1] = $n( $n(r,'cl_edit_holdable_no'), 'cl_edit_holdable');
258     arr[2] = $n( $n(r,'cl_edit_visible_yes'), 'cl_edit_visible');
259     arr[3] = $n( $n(r,'cl_edit_visible_no'), 'cl_edit_visible');
260     arr[4] = $n( $n(r,'cl_edit_circulate_yes'), 'cl_edit_circulate');
261     arr[5] = $n( $n(r,'cl_edit_circulate_no'), 'cl_edit_circulate');
262     arr[6] = $n( $n(r,'cl_edit_hold_verify_yes'), 'cl_edit_hold_verify');
263     arr[7] = $n( $n(r,'cl_edit_hold_verify_no'), 'cl_edit_hold_verify');
264     arr[8] = $n( $n(r,'cl_edit_checkin_alert_yes'), 'cl_edit_checkin_alert');
265     arr[9] = $n( $n(r,'cl_edit_checkin_alert_no'), 'cl_edit_checkin_alert');
266     return arr;
267 }
268
269 function clEditCommit( tbody, r, cl ) {
270
271     var arr = _clOptions(r);
272     if(arr[0].checked) cl.holdable(1);
273     else cl.holdable(0);
274     if(arr[2].checked) cl.opac_visible(1);
275     else cl.opac_visible(0);
276     if(arr[4].checked) cl.circulate(1);
277     else cl.circulate(0);
278     if(arr[6].checked) cl.hold_verify(1);
279     else cl.hold_verify(0);
280     if(arr[8].checked) cl.checkin_alert(1);
281     else cl.checkin_alert(0);
282     cl.name($n(r, 'cl_edit_name').value);
283     cl.label_prefix($n(r, 'cl_edit_label_prefix').value);
284     cl.label_suffix($n(r, 'cl_edit_label_suffix').value);
285     cl.url($n(r, 'cl_edit_url').value);
286
287     var req = new Request( UPDATE_CL, SESSION, cl );
288     req.send(true);
289     var res = req.result();
290     if(checkILSEvent(res)) throw res;
291     alertId('cl_update_success');
292
293     clGo();
294 }
295
296
297 function clDelete( cl, tbody, row ) {
298     if(!confirm($('cl_delete_confirm').innerHTML)) return;
299     var req = new Request( DELETE_CL, SESSION, cl.id() );
300     req.send(true);
301     var res = req.result();
302     if (checkILSEvent(res)) {
303         alertILSEvent(res);
304         return;
305     }
306     alertId('cl_update_success');
307     clGo();
308 }
309
310