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() { dojo.connect(contextOrg, 'onChange', osChangeContext); };
33 new openils.User().buildPermOrgSelector('STAFF_LOGIN', osContextSelector, null, connect);
37 dojo.addOnLoad(osInit);
39 function osDraw(specific_setting) {
40 progressDialog.show(true, "Processing..."); /* FIXME: I18N */
43 if (specific_setting) {
45 for(var key in specific_setting)
50 var types = new openils.PermaCrud({authtoken:authtoken}).retrieveAll('coust');
54 osSettings[type.name()] = {
56 desc : type.description(),
57 type : type.datatype(),
58 fm_class : type.fm_class()
63 for(var key in osSettings)
67 fieldmapper.standardRequest(
69 'open-ils.actor.ou_setting.ancestor_default.batch'],
71 params: [contextOrg, names, authtoken],
72 oncomplete: function(r) {
73 var data = r.recv().content();
74 if(e = openils.Event.parse(data))
77 ouSettingValues[key] = data[key];
78 osLoadGrid(ouSettingValues);
79 progressDialog.hide();
85 function osChangeContext() {
86 if(contextOrg == osContextSelector.getValue())
88 contextOrg = osContextSelector.getValue();
92 function osLoadGrid(data) {
93 var gridData = {items:[]}
94 for(var key in data) {
95 var setting = osSettings[key];
96 setting.context = null;
99 setting.context = data[key].org;
100 setting.value = data[key].value;
102 gridData.items.push({name:key});
104 gridData.items = gridData.items.sort(
106 var seta = osSettings[a.name];
107 var setb = osSettings[b.name];
108 if(seta.label > setb.label) return 1;
109 if(seta.label < setb.label) return -1;
113 gridData.identifier = 'name';
114 var store = new dojo.data.ItemFileReadStore({data:gridData});
115 var model = new dojox.grid.data.DojoData(
116 null, store, {rowsPerPage: 100, clientSort: true, query:{name:'*'}});
118 osGrid.setModel(model);
119 osGrid.setStructure(osGridLayout);
123 function osGetGridData(rowIdx) {
124 var data = this.grid.model.getRow(rowIdx);
126 var setting = osSettings[data.name];
127 var value = setting[this.field];
128 if(value == null) return '';
132 return fieldmapper.aou.findOrgUnit(value).shortname();
134 if(setting.noInherit)
138 if(setting.fm_class) {
139 var autoWidget = new openils.widget.AutoFieldWidget(
141 fmClass : setting.fm_class,
142 selfReference : true,
149 if(autoWidget.getDisplayString())
150 return autoWidget.getDisplayString();
153 if(setting.type == 'bool') {
155 return dojo.byId('os-true').innerHTML;
156 return dojo.byId('os-false').innerHTML;
163 function osGetEditLink(rowIdx) {
164 var data = this.grid.model.getRow(rowIdx);
169 function osFormatEditLink(name) {
170 return this.value.replace(/SETTING/, name);
173 function osLaunchEditor(name) {
174 osEditDialog._osattr = name;
176 user.buildPermOrgSelector(
177 ['UPDATE_ORG_UNIT_SETTING.' + name, 'UPDATE_ORG_UNIT_SETTING_ALL'],
178 osEditContextSelector, osSettings[name].context
180 dojo.byId('os-edit-name').innerHTML = osSettings[name].label;
181 dojo.byId('os-edit-desc').innerHTML = osSettings[name].desc || '';
183 dojo.style(osEditTextBox.domNode, 'display', 'none');
184 dojo.style(osEditCurrencyTextBox.domNode, 'display', 'none');
185 dojo.style(osEditNumberTextBox.domNode, 'display', 'none');
186 dojo.style(osEditBoolSelect.domNode, 'display', 'none');
188 var fmClass = osSettings[name].fm_class;
192 if(osEditAutoWidget) {
193 osEditAutoWidget.domNode.parentNode.removeChild(osEditAutoWidget.domNode);
194 osEditAutoWidget.destroy();
197 var autoWidget = new openils.widget.AutoFieldWidget(
200 selfReference : true,
201 parentNode : dojo.create('div', null, dojo.byId('os-edit-auto-widget')),
202 widgetValue : osSettings[name].value
207 osEditAutoWidget = w;
213 switch(osSettings[name].type) {
215 widget = osEditNumberTextBox;
218 widget = osEditCurrencyTextBox;
221 widget = osEditBoolSelect;
224 widget = osEditTextBox;
227 dojo.style(widget.domNode, 'display', 'block');
228 widget.setValue(osSettings[name].value);
232 function osEditSetting(deleteMe) {
234 var name = osEditDialog._osattr;
242 if(osSettings[name].fm_class) {
243 var val = osEditAutoWidget.attr('value');
244 osEditAutoWidget.domNode.parentNode.removeChild(osEditAutoWidget.domNode);
245 osEditAutoWidget.destroy();
246 osEditAutoWidget = null;
247 if(val == null || val == '') return;
251 switch(osSettings[name].type) {
253 obj[name] = osEditNumberTextBox.getValue();
254 if(obj[name] == null) return;
257 obj[name] = osEditCurrencyTextBox.getValue();
258 if(obj[name] == null) return;
261 var val = osEditBoolSelect.getValue();
262 obj[name] = (val == 'true') ? true : false;
265 obj[name] = osEditTextBox.getValue();
266 if(obj[name] == null) return;
271 fieldmapper.standardRequest(
272 ['open-ils.actor', 'open-ils.actor.org_unit.settings.update'],
274 params: [authtoken, osEditContextSelector.getValue(), obj],
275 oncomplete: function(r) {
276 var res = r.recv().content();
277 if(e = openils.Event.parse(res))