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 = {};
27 function osInit(data) {
28 authtoken = new openils.CGI().param('ses') || dojo.cookie('ses');
29 user = new openils.User({authtoken:authtoken});
30 contextOrg = user.user.ws_ou();
31 openils.User.authtoken = authtoken;
33 var connect = function() {
34 dojo.connect(contextOrg, 'onChange', osChangeContext);
36 // don't draw the org settings grid unless the user has permission
37 // to view org settings in at least 1 org unit
38 osContextSelector.store.fetch({query: {}, start: 0, count: 0,
39 onBegin: function(size) {
40 if(size) { osDraw(); return; }
41 dojo.removeClass('no-perms', 'hide_me');
46 new openils.User().buildPermOrgSelector('VIEW_ORG_SETTINGS', osContextSelector, null, connect);
48 fieldmapper.standardRequest(
50 'open-ils.actor.permissions.retrieve'],
52 oncomplete: function(r) {
53 var data = r.recv().content();
54 if(e = openils.Event.parse(data))
57 perm_codes[data[key].id()] = data[key].code();
62 dojo.addOnLoad(osInit);
64 function osDraw(specific_setting) {
65 progressDialog.show(true, "Processing..."); /* FIXME: I18N */
68 if (specific_setting) {
70 for(var key in specific_setting)
75 var types = new openils.PermaCrud({authtoken:authtoken}).retrieveAll('coust');
79 osSettings[type.name()] = {
81 desc : type.description(),
82 type : type.datatype(),
83 fm_class : type.fm_class(),
84 update_perm : type.update_perm()
89 for(var key in osSettings)
93 fieldmapper.standardRequest(
95 'open-ils.actor.ou_setting.ancestor_default.batch'],
97 params: [contextOrg, names, authtoken],
98 oncomplete: function(r) {
99 var data = r.recv().content();
100 if(e = openils.Event.parse(data))
103 ouSettingValues[key] = data[key];
104 osLoadGrid(ouSettingValues);
105 progressDialog.hide();
111 function osChangeContext() {
112 if(contextOrg == osContextSelector.getValue())
114 contextOrg = osContextSelector.getValue();
118 function osLoadGrid(data) {
119 var gridData = {items:[]}
120 for(var key in data) {
121 var setting = osSettings[key];
122 setting.context = null;
123 setting.value = null;
125 setting.context = data[key].org;
126 setting.value = data[key].value;
128 gridData.items.push({name:key});
130 gridData.items = gridData.items.sort(
132 var seta = osSettings[a.name];
133 var setb = osSettings[b.name];
134 if(seta.label > setb.label) return 1;
135 if(seta.label < setb.label) return -1;
139 gridData.identifier = 'name';
140 var store = new dojo.data.ItemFileReadStore({data:gridData});
141 var model = new dojox.grid.data.DojoData(
142 null, store, {rowsPerPage: 100, clientSort: true, query:{name:'*'}});
144 osGrid.setModel(model);
145 osGrid.setStructure(osGridLayout);
149 function osGetGridData(rowIdx) {
150 var data = this.grid.model.getRow(rowIdx);
152 var setting = osSettings[data.name];
153 var value = setting[this.field];
154 if(value == null) return '';
158 return fieldmapper.aou.findOrgUnit(value).shortname();
160 if(setting.noInherit)
164 if(setting.fm_class) {
165 var autoWidget = new openils.widget.AutoFieldWidget(
167 fmClass : setting.fm_class,
168 selfReference : true,
175 if(autoWidget.getDisplayString())
176 return autoWidget.getDisplayString();
179 if(setting.type == 'bool') {
181 return dojo.byId('os-true').innerHTML;
182 return dojo.byId('os-false').innerHTML;
189 function osGetEditLink(rowIdx) {
190 var data = this.grid.model.getRow(rowIdx);
195 function osFormatEditLink(name) {
196 return this.value.replace(/SETTING/, name);
199 function osLaunchEditor(name) {
200 osEditDialog._osattr = name;
202 var perms = ['UPDATE_ORG_UNIT_SETTING_ALL'];
203 if(osSettings[name].update_perm && perm_codes[osSettings[name].update_perm]) {
204 perms.push(perm_codes[osSettings[name].update_perm]);
206 user.buildPermOrgSelector(
208 osEditContextSelector, osSettings[name].context
210 dojo.byId('os-edit-name').innerHTML = osSettings[name].label;
211 dojo.byId('os-edit-desc').innerHTML = osSettings[name].desc || '';
213 dojo.style(osEditTextBox.domNode, 'display', 'none');
214 dojo.style(osEditCurrencyTextBox.domNode, 'display', 'none');
215 dojo.style(osEditNumberTextBox.domNode, 'display', 'none');
216 dojo.style(osEditBoolSelect.domNode, 'display', 'none');
218 var fmClass = osSettings[name].fm_class;
222 if(osEditAutoWidget) {
223 osEditAutoWidget.domNode.parentNode.removeChild(osEditAutoWidget.domNode);
224 osEditAutoWidget.destroy();
227 var autoWidget = new openils.widget.AutoFieldWidget(
230 selfReference : true,
231 parentNode : dojo.create('div', null, dojo.byId('os-edit-auto-widget')),
232 widgetValue : osSettings[name].value
237 osEditAutoWidget = w;
243 switch(osSettings[name].type) {
245 widget = osEditNumberTextBox;
248 widget = osEditCurrencyTextBox;
251 widget = osEditBoolSelect;
254 widget = osEditTextBox;
257 dojo.style(widget.domNode, 'display', 'block');
258 widget.setValue(osSettings[name].value);
262 function osEditSetting(deleteMe) {
264 var name = osEditDialog._osattr;
272 if(osSettings[name].fm_class) {
273 var val = osEditAutoWidget.attr('value');
274 osEditAutoWidget.domNode.parentNode.removeChild(osEditAutoWidget.domNode);
275 osEditAutoWidget.destroy();
276 osEditAutoWidget = null;
277 if(val == null || val == '') return;
281 switch(osSettings[name].type) {
283 obj[name] = osEditNumberTextBox.getValue();
284 if(obj[name] == null) return;
287 obj[name] = osEditCurrencyTextBox.getValue();
288 if(obj[name] == null) return;
291 var val = osEditBoolSelect.getValue();
292 obj[name] = (val == 'true') ? true : false;
295 obj[name] = osEditTextBox.getValue();
296 if(obj[name] == null) return;
301 fieldmapper.standardRequest(
302 ['open-ils.actor', 'open-ils.actor.org_unit.settings.update'],
304 params: [authtoken, osEditContextSelector.getValue(), obj],
305 oncomplete: function(r) {
306 var res = r.recv().content();
307 if(e = openils.Event.parse(res))