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 = {};
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;
32 var connect = function() {
33 dojo.connect(contextOrg, 'onChange', osChangeContext);
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');
45 new openils.User().buildPermOrgSelector('VIEW_ORG_SETTINGS', osContextSelector, null, connect);
47 dojo.addOnLoad(osInit);
49 function osDraw(specific_setting) {
50 progressDialog.show(true, "Processing..."); /* FIXME: I18N */
53 if (specific_setting) {
55 for(var key in specific_setting)
60 var types = new openils.PermaCrud({authtoken:authtoken}).retrieveAll('coust');
64 osSettings[type.name()] = {
66 desc : type.description(),
67 type : type.datatype(),
68 fm_class : type.fm_class()
73 for(var key in osSettings)
77 fieldmapper.standardRequest(
79 'open-ils.actor.ou_setting.ancestor_default.batch'],
81 params: [contextOrg, names, authtoken],
82 oncomplete: function(r) {
83 var data = r.recv().content();
84 if(e = openils.Event.parse(data))
87 ouSettingValues[key] = data[key];
88 osLoadGrid(ouSettingValues);
89 progressDialog.hide();
95 function osChangeContext() {
96 if(contextOrg == osContextSelector.getValue())
98 contextOrg = osContextSelector.getValue();
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;
109 setting.context = data[key].org;
110 setting.value = data[key].value;
112 gridData.items.push({name:key});
114 gridData.items = gridData.items.sort(
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;
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:'*'}});
128 osGrid.setModel(model);
129 osGrid.setStructure(osGridLayout);
133 function osGetGridData(rowIdx) {
134 var data = this.grid.model.getRow(rowIdx);
136 var setting = osSettings[data.name];
137 var value = setting[this.field];
138 if(value == null) return '';
142 return fieldmapper.aou.findOrgUnit(value).shortname();
144 if(setting.noInherit)
148 if(setting.fm_class) {
149 var autoWidget = new openils.widget.AutoFieldWidget(
151 fmClass : setting.fm_class,
152 selfReference : true,
159 if(autoWidget.getDisplayString())
160 return autoWidget.getDisplayString();
163 if(setting.type == 'bool') {
165 return dojo.byId('os-true').innerHTML;
166 return dojo.byId('os-false').innerHTML;
173 function osGetEditLink(rowIdx) {
174 var data = this.grid.model.getRow(rowIdx);
179 function osFormatEditLink(name) {
180 return this.value.replace(/SETTING/, name);
183 function osLaunchEditor(name) {
184 osEditDialog._osattr = name;
186 user.buildPermOrgSelector(
187 ['UPDATE_ORG_UNIT_SETTING.' + name, 'UPDATE_ORG_UNIT_SETTING_ALL'],
188 osEditContextSelector, osSettings[name].context
190 dojo.byId('os-edit-name').innerHTML = osSettings[name].label;
191 dojo.byId('os-edit-desc').innerHTML = osSettings[name].desc || '';
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');
198 var fmClass = osSettings[name].fm_class;
202 if(osEditAutoWidget) {
203 osEditAutoWidget.domNode.parentNode.removeChild(osEditAutoWidget.domNode);
204 osEditAutoWidget.destroy();
207 var autoWidget = new openils.widget.AutoFieldWidget(
210 selfReference : true,
211 parentNode : dojo.create('div', null, dojo.byId('os-edit-auto-widget')),
212 widgetValue : osSettings[name].value
217 osEditAutoWidget = w;
223 switch(osSettings[name].type) {
225 widget = osEditNumberTextBox;
228 widget = osEditCurrencyTextBox;
231 widget = osEditBoolSelect;
234 widget = osEditTextBox;
237 dojo.style(widget.domNode, 'display', 'block');
238 widget.setValue(osSettings[name].value);
242 function osEditSetting(deleteMe) {
244 var name = osEditDialog._osattr;
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;
261 switch(osSettings[name].type) {
263 obj[name] = osEditNumberTextBox.getValue();
264 if(obj[name] == null) return;
267 obj[name] = osEditCurrencyTextBox.getValue();
268 if(obj[name] == null) return;
271 var val = osEditBoolSelect.getValue();
272 obj[name] = (val == 'true') ? true : false;
275 obj[name] = osEditTextBox.getValue();
276 if(obj[name] == null) return;
281 fieldmapper.standardRequest(
282 ['open-ils.actor', 'open-ils.actor.org_unit.settings.update'],
284 params: [authtoken, osEditContextSelector.getValue(), obj],
285 oncomplete: function(r) {
286 var res = r.recv().content();
287 if(e = openils.Event.parse(res))