]> git.evergreen-ils.org Git - working/Evergreen.git/blob - Open-ILS/xul/staff_client/server/admin/copy_locations.js
253942ff6869de7833f1dff9ec860e92c33f6a03
[working/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) throw "User session is not defined!";
24     fetchUser(session);
25     $('user').appendChild(text(USER.usrname()));
26     YES = $('yes').innerHTML;
27     NO = $('no').innerHTML;
28     _TRUE = $('true');
29     _FALSE = $('false');
30     locationSet = [];
31
32     setTimeout( 
33         function() { 
34             fetchHighestWorkPermOrgs( SESSION, USER.id(), myPerms ); 
35             $('cl_new_name').focus();
36             clBuildNew();
37             clGo(); 
38         }, 20 );
39 }
40
41
42 function clHoldMsg() {
43     alert($('cl_hold_msg').innerHTML);
44 }
45
46 function clGo() {    
47     setTimeout(function(){clGo2();}, 500);
48 }
49
50 function clGo2() {    
51     locationSet = {};
52     var req = new Request(RETRIEVE_CL, focusOrg);
53     req.request._last = true;
54     req.callback(clAppendLocation);
55     req.send();
56
57     /*  if we need to add view-all ability, can use this... 
58     var org_list = OILS_WORK_PERMS['CREATE_COPY_LOCATION'];
59     for(var i = 0; i < org_list.length; i++) {
60         var req = new Request(RETRIEVE_CL, org_list[i]);
61         req.callback(clAppendLocation);
62         if(i == org_list.length - 1) 
63             req.request._last = true;
64         req.send();
65     }
66     */
67 }
68
69 function clAppendLocation(r) {
70     var cls = r.getResultObject();
71     if(checkILSEvent(cls)) throw cls;
72     for(var i = 0; i < cls.length; i++) 
73         locationSet[cls[i].id()] = cls[i];
74     if(r._last) 
75         clDraw();
76 }
77
78 function clBuildNew() {
79     org_list = OILS_WORK_PERMS['CREATE_COPY_LOCATION'];
80     var org;
81     if(org_list.length == 0)
82         return;
83     var selector = $('cl_new_owner');
84     var fselector = $('cl_org_filter');
85     buildMergedOrgSel(selector, org_list, 0, 'shortname');
86     buildMergedOrgSel(fselector, org_list, 0, 'shortname');
87     var org = findOrgUnit(org_list[0]);
88     if(org_list.length > 1 || (org.children() &&  org.children()[0])) {
89         selector.disabled = false;
90         fselector.disabled = false;
91     }
92
93     fselector.onchange = function() {
94         focusOrg = getSelectorVal(fselector);
95         clGo();
96     }
97     
98     focusOrg = USER.ws_ou();
99     if(!orgIsMineFromSet(org_list, USER.ws_ou())) 
100         focusOrg = org_list[0];
101     setSelector(fselector, focusOrg);
102
103
104     var sub = $('sc_new_submit');
105     sub.disabled = false;
106     sub.onclick = clCreateNew;
107 }
108
109 function clCreateNew() {
110     var cl = new acpl();
111     cl.name( $('cl_new_name').value );
112     cl.owning_lib( getSelectorVal( $('cl_new_owner')));
113     cl.holdable( ($('cl_new_hold_yes').checked) ? 1 : 0 );
114     cl.hold_verify( ($('cl_new_hold_verify_yes').checked) ? 1 : 0 );
115     cl.opac_visible( ($('cl_new_vis_yes').checked) ? 1 : 0 );
116     cl.circulate( ($('cl_new_circulate_yes').checked) ? 1 : 0 );
117
118     var req = new Request(CREATE_CL, SESSION, cl);
119     req.send(true);
120     var res = req.result();
121     if(checkILSEvent(res)) throw res;
122     alertId('cl_update_success');
123     clGo();
124 }
125
126 var rowTemplate;
127 function clDraw() {
128
129     var cls = [];
130     for(var x in locationSet)
131         cls.push(locationSet[x]);
132
133     var tbody = $('cl_tbody');
134     if(!rowTemplate)
135         rowTemplate = tbody.removeChild($('cl_row'));
136     removeChildren(tbody);
137
138     for(var i = 0; i < cls.length; i++) /* force stringify */
139         cls[i].name(new String(cls[i].name()));
140
141     cls = cls.sort( function(a,b) {
142             if( a.name().toLowerCase() > b.name().toLowerCase() ) return 1;
143             if( a.name().toLowerCase() < b.name().toLowerCase() ) return -1;
144             return 0;
145         });
146
147     for( var c in cls ) {
148         var cl = cls[c];
149         var row = rowTemplate.cloneNode(true);
150         clBuildRow( tbody, row, cl );
151         tbody.appendChild(row);
152     }
153 }
154
155 function clBuildRow( tbody, row, cl ) {
156     $n( row, 'cl_name').appendChild(text(cl.name()));
157     $n( row, 'cl_owner').appendChild(text(findOrgUnit(cl.owning_lib()).shortname()));
158
159     appendClear($n( row, 'cl_holdable'), (isTrue(cl.holdable())) ? _TRUE.cloneNode(true) : _FALSE.cloneNode(true) );
160     appendClear($n( row, 'cl_hold_verify'), (isTrue(cl.hold_verify())) ? _TRUE.cloneNode(true) : _FALSE.cloneNode(true) );
161     appendClear($n( row, 'cl_visible'), (isTrue(cl.opac_visible())) ? _TRUE.cloneNode(true) : _FALSE.cloneNode(true) );
162     appendClear($n( row, 'cl_circulate'), (isTrue(cl.circulate())) ? _TRUE.cloneNode(true) : _FALSE.cloneNode(true) );
163
164     var edit = $n( row, 'cl_edit');
165     edit.onclick = function() { clEdit( cl, tbody, row ); };
166     checkPermOrgDisabled(edit, cl.owning_lib(), 'UPDATE_COPY_LOCATION');
167
168     var del = $n( row, 'cl_delete' );
169     del.onclick = function() { clDelete( cl, tbody, row ); };
170     checkPermOrgDisabled(del, cl.owning_lib(), 'DELETE_COPY_LOCATION');
171 }
172
173 function clEdit( cl, tbody, row ) {
174
175     cleanTbody(tbody, 'edit');
176     var r = $('cl_edit').cloneNode(true);
177     r.setAttribute('edit','1');
178     
179     var name = $n(r, 'cl_edit_name');
180     name.setAttribute('size', cl.name().length + 3);
181     name.value = cl.name();
182
183     $n(r, 'cl_edit_owner').appendChild(text(findOrgUnit(cl.owning_lib()).shortname()));
184
185     var arr = _clOptions(r);
186     if(isTrue(cl.holdable())) arr[0].checked = true;
187     else arr[1].checked = true;
188     if(isTrue(cl.opac_visible())) arr[2].checked = true;
189     else arr[3].checked = true;
190     if(isTrue(cl.circulate())) arr[4].checked = true;
191     else arr[5].checked = true;
192     if(isTrue(cl.hold_verify())) arr[6].checked = true;
193     else arr[7].checked = true;
194
195     $n(r, 'cl_edit_cancel').onclick = function(){cleanTbody(tbody,'edit');}
196     $n(r, 'cl_edit_commit').onclick = function(){clEditCommit( tbody, r, cl ); }
197
198     insRow(tbody, row, r);
199     name.focus();
200     name.select();
201 }
202
203 function _clOptions(r) {
204     var arr = [];
205     arr[0] = $n( $n(r,'cl_edit_holdable_yes'), 'cl_edit_holdable');
206     arr[1] = $n( $n(r,'cl_edit_holdable_no'), 'cl_edit_holdable');
207     arr[2] = $n( $n(r,'cl_edit_visible_yes'), 'cl_edit_visible');
208     arr[3] = $n( $n(r,'cl_edit_visible_no'), 'cl_edit_visible');
209     arr[4] = $n( $n(r,'cl_edit_circulate_yes'), 'cl_edit_circulate');
210     arr[5] = $n( $n(r,'cl_edit_circulate_no'), 'cl_edit_circulate');
211     arr[6] = $n( $n(r,'cl_edit_hold_verify_yes'), 'cl_edit_hold_verify');
212     arr[7] = $n( $n(r,'cl_edit_hold_verify_no'), 'cl_edit_hold_verify');
213     return arr;
214 }
215
216 function clEditCommit( tbody, r, cl ) {
217
218     var arr = _clOptions(r);
219     if(arr[0].checked) cl.holdable(1);
220     else cl.holdable(0);
221     if(arr[2].checked) cl.opac_visible(1);
222     else cl.opac_visible(0);
223     if(arr[4].checked) cl.circulate(1);
224     else cl.circulate(0);
225     if(arr[6].checked) cl.hold_verify(1);
226     else cl.hold_verify(0);
227     cl.name($n(r, 'cl_edit_name').value);
228
229     var req = new Request( UPDATE_CL, SESSION, cl );
230     req.send(true);
231     var res = req.result();
232     if(checkILSEvent(res)) throw res;
233     alertId('cl_update_success');
234
235     clGo();
236 }
237
238
239 function clDelete( cl, tbody, row ) {
240     if(!confirm($('cl_delete_confirm').innerHTML)) return;
241     var req = new Request( DELETE_CL, SESSION, cl.id() );
242     req.send(true);
243     var res = req.result();
244     if(checkILSEvent(res)) throw res;
245     alertId('cl_update_success');
246     clGo();
247 }
248
249