]> git.evergreen-ils.org Git - working/Evergreen.git/blob - Open-ILS/xul/staff_client/server/admin/org_unit_settings.js
TPac: first try audience_group SVF for audience maps
[working/Evergreen.git] / Open-ILS / xul / staff_client / server / admin / org_unit_settings.js
1 dojo.require('fieldmapper.AutoIDL');
2 dojo.require("dijit.layout.LayoutContainer");
3 dojo.require("dijit.layout.ContentPane");
4 dojo.require('dijit.form.FilteringSelect');
5 dojo.require('dijit.Dialog');
6 dojo.require("dojox.grid.Grid");
7 dojo.require("fieldmapper.Fieldmapper");
8 dojo.require("fieldmapper.dojoData");
9 dojo.require("fieldmapper.OrgUtils");
10 dojo.require('dojo.cookie');
11 dojo.require('openils.CGI');
12 dojo.require('openils.User');
13 dojo.require('openils.Event');
14 dojo.require('openils.widget.OrgUnitFilteringSelect');
15 dojo.require('openils.PermaCrud');
16 dojo.require('openils.widget.AutoFieldWidget');
17 dojo.require('openils.widget.ProgressDialog');
18
19 var authtoken;
20 var contextOrg;
21 var user;
22 var osSettings = {};
23 var ouSettingValues = {};
24 var osEditAutoWidget;
25
26 function osInit(data) {
27     authtoken = new openils.CGI().param('ses') || dojo.cookie('ses');
28     user = new openils.User({authtoken:authtoken});
29     contextOrg = user.user.ws_ou();
30     openils.User.authtoken = authtoken;
31
32     var connect = function() { 
33         dojo.connect(contextOrg, 'onChange', osChangeContext); 
34
35         // don't draw the org settings grid unless the user has permission
36         // to view org settings in at least 1 org unit
37         osContextSelector.store.fetch({query: {}, start: 0, count: 0, 
38             onBegin: function(size) { 
39                 if(size) { osDraw();  return; }
40                 dojo.removeClass('no-perms', 'hide_me');
41             }
42         });
43     };
44
45     new openils.User().buildPermOrgSelector('VIEW_ORG_SETTINGS', osContextSelector, null, connect);
46 }
47 dojo.addOnLoad(osInit);
48
49 function osDraw(specific_setting) {
50     progressDialog.show(true, "Processing..."); /* FIXME: I18N */
51
52     var names = [];
53     if (specific_setting) {
54
55         for(var key in specific_setting)
56             names.push(key);
57
58     } else {
59
60         var types = new openils.PermaCrud({authtoken:authtoken}).retrieveAll('coust');
61
62         dojo.forEach(types, 
63             function(type) {
64                 osSettings[type.name()] = {
65                     label : type.label(),
66                     desc : type.description(),
67                     type : type.datatype(),
68                     fm_class : type.fm_class()
69                 }
70             }
71         );
72         
73         for(var key in osSettings)
74             names.push(key);
75     }
76
77     fieldmapper.standardRequest(
78         [   'open-ils.actor', 
79             'open-ils.actor.ou_setting.ancestor_default.batch'],
80         {   async: true,
81             params: [contextOrg, names, authtoken],
82             oncomplete: function(r) {
83                 var data = r.recv().content();
84                 if(e = openils.Event.parse(data))
85                     return alert(e);
86                 for(var key in data)
87                     ouSettingValues[key] = data[key];
88                 osLoadGrid(ouSettingValues);
89                 progressDialog.hide();
90             }
91         }
92     );
93 }
94
95 function osChangeContext() {
96     if(contextOrg == osContextSelector.getValue())
97         return;
98     contextOrg = osContextSelector.getValue();
99     osDraw();
100 }
101
102 function osLoadGrid(data) {
103     var gridData = {items:[]}
104     for(var key in data) {
105         var setting = osSettings[key];
106         setting.context = null;
107         setting.value = null;
108         if(data[key]) {
109             setting.context = data[key].org;
110             setting.value = data[key].value;
111         }
112         gridData.items.push({name:key});
113     }
114     gridData.items = gridData.items.sort(
115         function(a, b) {
116             var seta = osSettings[a.name];
117             var setb = osSettings[b.name];
118             if(seta.label > setb.label) return 1;
119             if(seta.label < setb.label) return -1;
120             return 0;
121         }
122     );
123     gridData.identifier = 'name';
124     var store = new dojo.data.ItemFileReadStore({data:gridData});
125     var model = new dojox.grid.data.DojoData(
126         null, store, {rowsPerPage: 100, clientSort: true, query:{name:'*'}});
127
128     osGrid.setModel(model);
129     osGrid.setStructure(osGridLayout);
130     osGrid.update();
131 }
132
133 function osGetGridData(rowIdx) {
134     var data = this.grid.model.getRow(rowIdx);
135     if(!data) return '';
136     var setting = osSettings[data.name];
137     var value = setting[this.field];
138     if(value == null) return '';
139
140     switch(this.field) {
141         case 'context':
142             return fieldmapper.aou.findOrgUnit(value).shortname();
143         case 'label':
144             if(setting.noInherit)
145                 return value + ' *';
146             return value;
147         case 'value':
148             if(setting.fm_class) {
149                 var autoWidget = new openils.widget.AutoFieldWidget(
150                     {
151                         fmClass : setting.fm_class,
152                         selfReference : true,
153                         widgetValue : value,
154                         forceSync : true,
155                         readOnly : true
156                     }
157                 );
158                 autoWidget.build();
159                 if(autoWidget.getDisplayString())
160                     return autoWidget.getDisplayString();
161             }
162
163             if(setting.type == 'bool') {
164                 if(value) 
165                     return dojo.byId('os-true').innerHTML;
166                 return dojo.byId('os-false').innerHTML;
167             }
168         default:
169             return value;
170     }
171 }
172
173 function osGetEditLink(rowIdx) {
174     var data = this.grid.model.getRow(rowIdx);
175     if(!data) return '';
176     return data.name;
177 }
178
179 function osFormatEditLink(name) {
180     return this.value.replace(/SETTING/, name);
181 }
182
183 function osLaunchEditor(name) {
184     osEditDialog._osattr = name;
185     osEditDialog.show();
186     user.buildPermOrgSelector(
187         ['UPDATE_ORG_UNIT_SETTING.' + name, 'UPDATE_ORG_UNIT_SETTING_ALL'],
188         osEditContextSelector, osSettings[name].context
189     );
190     dojo.byId('os-edit-name').innerHTML = osSettings[name].label;
191     dojo.byId('os-edit-desc').innerHTML = osSettings[name].desc || '';
192
193     dojo.style(osEditTextBox.domNode, 'display', 'none');
194     dojo.style(osEditCurrencyTextBox.domNode, 'display', 'none');
195     dojo.style(osEditNumberTextBox.domNode, 'display', 'none');
196     dojo.style(osEditBoolSelect.domNode, 'display', 'none');
197
198     var fmClass = osSettings[name].fm_class;
199
200     if(fmClass) {
201
202         if(osEditAutoWidget) {
203             osEditAutoWidget.domNode.parentNode.removeChild(osEditAutoWidget.domNode);
204             osEditAutoWidget.destroy();
205         }
206
207         var autoWidget = new openils.widget.AutoFieldWidget(
208             {
209                 fmClass : fmClass,
210                 selfReference : true,
211                 parentNode : dojo.create('div', null, dojo.byId('os-edit-auto-widget')),
212                 widgetValue : osSettings[name].value
213             }
214         );
215         autoWidget.build(
216             function(w) {
217                 osEditAutoWidget = w;
218             }
219         );
220
221     } else {
222         var widget;
223         switch(osSettings[name].type) {
224             case 'number':
225                 widget = osEditNumberTextBox; 
226                 break;
227             case 'currency':
228                 widget = osEditCurrencyTextBox; 
229                 break;
230             case 'bool':
231                 widget = osEditBoolSelect; 
232                 break;
233             default:
234                 widget = osEditTextBox;
235         }
236
237         dojo.style(widget.domNode, 'display', 'block');
238         widget.setValue(osSettings[name].value);
239     }
240 }
241
242 function osEditSetting(deleteMe) {
243     osEditDialog.hide();
244     var name = osEditDialog._osattr;
245
246     var obj = {};
247     if(deleteMe) {
248         obj[name] = null;
249
250     } else {
251
252         if(osSettings[name].fm_class) {
253             var val = osEditAutoWidget.attr('value');
254             osEditAutoWidget.domNode.parentNode.removeChild(osEditAutoWidget.domNode);
255             osEditAutoWidget.destroy();
256             osEditAutoWidget = null;
257             if(val == null || val == '') return;
258             obj[name] = val;
259
260         } else {
261             switch(osSettings[name].type) {
262                 case 'number':
263                     obj[name] = osEditNumberTextBox.getValue();
264                     if(obj[name] == null) return;
265                     break;
266                 case 'currency':
267                     obj[name] = osEditCurrencyTextBox.getValue();
268                     if(obj[name] == null) return;
269                     break;
270                 case 'bool':
271                     var val = osEditBoolSelect.getValue();
272                     obj[name] = (val == 'true') ? true : false;
273                     break;
274                 default:
275                     obj[name] = osEditTextBox.getValue();
276                     if(obj[name] == null) return;
277             }
278         }
279     }
280
281     fieldmapper.standardRequest(
282         ['open-ils.actor', 'open-ils.actor.org_unit.settings.update'],
283         {   async: true,
284             params: [authtoken, osEditContextSelector.getValue(), obj],
285             oncomplete: function(r) {
286                 var res = r.recv().content();
287                 if(e = openils.Event.parse(res))
288                     return alert(e);
289                 osDraw(obj);
290             }
291         }
292     );
293 }
294