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');
23 var ouSettingValues = {};
28 function osInit(data) {
29 authtoken = new openils.CGI().param('ses') || dojo.cookie('ses');
30 user = new openils.User({authtoken:authtoken});
31 contextOrg = user.user.ws_ou();
32 openils.User.authtoken = authtoken;
34 var grps = new openils.PermaCrud({authtoken:authtoken}).retrieveAll('csg');
35 dojo.forEach(grps, function(grp) { osGroups[grp.name()] = grp.label(); });
38 var connect = function() {
39 dojo.connect(contextOrg, 'onChange', osChangeContext);
41 // don't draw the org settings grid unless the user has permission
42 // to view org settings in at least 1 org unit
43 osContextSelector.store.fetch({query: {}, start: 0, count: 0,
44 onBegin: function(size) {
45 if(size) { osDraw(); return; }
46 dojo.removeClass('no-perms', 'hide_me');
51 new openils.User().buildPermOrgSelector('VIEW_ORG_SETTINGS', osContextSelector, null, connect);
53 fieldmapper.standardRequest(
55 'open-ils.actor.permissions.retrieve'],
57 oncomplete: function(r) {
58 var data = r.recv().content();
59 if(e = openils.Event.parse(data))
62 perm_codes[data[key].id()] = data[key].code();
67 dojo.addOnLoad(osInit);
69 function osDraw(specific_setting) {
70 progressDialog.show(true, "Processing..."); /* FIXME: I18N */
73 if (specific_setting) {
75 for(var key in specific_setting)
79 var types = new openils.PermaCrud({authtoken:authtoken}).retrieveAll('coust');
83 osSettings[type.name()] = {
85 desc : type.description(),
86 type : type.datatype(),
87 fm_class : type.fm_class(),
88 update_perm : type.update_perm(),
89 grp : osGroups[type.grp()]
94 for(var key in osSettings)
98 fieldmapper.standardRequest(
100 'open-ils.actor.ou_setting.ancestor_default.batch'],
102 params: [contextOrg, names, authtoken],
103 oncomplete: function(r) {
104 var data = r.recv().content();
105 if(e = openils.Event.parse(data))
108 ouSettingValues[key] = data[key];
109 osLoadGrid(ouSettingValues);
110 progressDialog.hide();
116 function osChangeContext() {
117 if(contextOrg == osContextSelector.getValue())
119 contextOrg = osContextSelector.getValue();
123 function osLoadGrid(data) {
124 var gridData = {items:[]}
125 for(var key in data) {
126 var setting = osSettings[key];
127 setting.context = null;
128 setting.value = null;
130 setting.context = data[key].org;
131 setting.value = data[key].value;
133 gridData.items.push({name:key});
135 gridData.items = gridData.items.sort(
137 var seta = osSettings[a.name];
138 var setb = osSettings[b.name];
139 if(seta.label > setb.label) return 1;
140 if(seta.label < setb.label) return -1;
144 gridData.identifier = 'name';
145 var store = new dojo.data.ItemFileReadStore({data:gridData});
146 var model = new dojox.grid.data.DojoData(
147 null, store, {rowsPerPage: 100, clientSort: true, query:{name:'*'}});
149 osGrid.setModel(model);
150 osGrid.setStructure(osGridLayout);
154 function osGetGridData(rowIdx) {
155 var data = this.grid.model.getRow(rowIdx);
157 var setting = osSettings[data.name];
158 var value = setting[this.field];
159 if(value == null) return '';
163 return fieldmapper.aou.findOrgUnit(value).shortname();
165 if(setting.noInherit)
169 if(setting.fm_class) {
170 var autoWidget = new openils.widget.AutoFieldWidget(
172 fmClass : setting.fm_class,
173 selfReference : true,
180 if(autoWidget.getDisplayString())
181 return autoWidget.getDisplayString();
184 if(setting.type == 'bool') {
186 return dojo.byId('os-true').innerHTML;
187 return dojo.byId('os-false').innerHTML;
194 function osGetEditLink(rowIdx) {
195 var data = this.grid.model.getRow(rowIdx);
200 function osFormatEditLink(name) {
201 return this.value.replace(/SETTING/, name);
204 function osLaunchEditor(name) {
205 osEditDialog._osattr = name;
207 var perms = ['UPDATE_ORG_UNIT_SETTING_ALL'];
208 if(osSettings[name].update_perm && perm_codes[osSettings[name].update_perm]) {
209 perms.push(perm_codes[osSettings[name].update_perm]);
211 user.buildPermOrgSelector(
213 osEditContextSelector, osSettings[name].context
215 dojo.byId('os-edit-name').innerHTML = osSettings[name].label;
216 dojo.byId('os-edit-desc').innerHTML = osSettings[name].desc || '';
218 dojo.style(osEditTextBox.domNode, 'display', 'none');
219 dojo.style(osEditCurrencyTextBox.domNode, 'display', 'none');
220 dojo.style(osEditNumberTextBox.domNode, 'display', 'none');
221 dojo.style(osEditBoolSelect.domNode, 'display', 'none');
223 var fmClass = osSettings[name].fm_class;
227 if(osEditAutoWidget) {
228 osEditAutoWidget.domNode.parentNode.removeChild(osEditAutoWidget.domNode);
229 osEditAutoWidget.destroy();
232 var autoWidget = new openils.widget.AutoFieldWidget(
235 selfReference : true,
236 parentNode : dojo.create('div', null, dojo.byId('os-edit-auto-widget')),
237 widgetValue : osSettings[name].value
242 osEditAutoWidget = w;
248 switch(osSettings[name].type) {
250 widget = osEditNumberTextBox;
253 widget = osEditCurrencyTextBox;
256 widget = osEditBoolSelect;
259 widget = osEditTextBox;
262 dojo.style(widget.domNode, 'display', 'block');
263 widget.setValue(osSettings[name].value);
267 function osEditSetting(deleteMe) {
269 var name = osEditDialog._osattr;
277 if(osSettings[name].fm_class) {
278 var val = osEditAutoWidget.attr('value');
279 osEditAutoWidget.domNode.parentNode.removeChild(osEditAutoWidget.domNode);
280 osEditAutoWidget.destroy();
281 osEditAutoWidget = null;
282 if(val == null || val == '') return;
286 switch(osSettings[name].type) {
288 obj[name] = osEditNumberTextBox.getValue();
289 if(obj[name] == null) return;
292 obj[name] = osEditCurrencyTextBox.getValue();
293 if(obj[name] == null) return;
296 var val = osEditBoolSelect.getValue();
297 obj[name] = (val == 'true') ? true : false;
300 obj[name] = osEditTextBox.getValue();
301 if(obj[name] == null) return;
306 fieldmapper.standardRequest(
307 ['open-ils.actor', 'open-ils.actor.org_unit.settings.update'],
309 params: [authtoken, osEditContextSelector.getValue(), obj],
310 oncomplete: function(r) {
311 var res = r.recv().content();
312 if(e = openils.Event.parse(res))