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');
24 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 fieldmapper.standardRequest(
35 'open-ils.actor.user.get_work_ous.ids'],
38 oncomplete: function(r) {
39 var list = r.recv().content();
40 if(e = openils.Event.parse(list))
43 buildMergedOrgSelector(list);
50 dojo.addOnLoad(osInit);
52 function osDraw(specific_setting) {
53 progressDialog.show(true, "Processing..."); /* FIXME: I18N */
56 if (specific_setting) {
58 for(var key in specific_setting)
63 var types = new openils.PermaCrud({authtoken:authtoken}).retrieveAll('coust');
67 osSettings[type.name()] = {
69 desc : type.description(),
70 type : type.datatype(),
71 fm_class : type.fm_class()
76 for(var key in osSettings)
80 fieldmapper.standardRequest(
82 'open-ils.actor.ou_setting.ancestor_default.batch'],
84 params: [contextOrg, names],
85 oncomplete: function(r) {
86 var data = r.recv().content();
87 if(e = openils.Event.parse(data))
90 ouSettingValues[key] = data[key];
91 osLoadGrid(ouSettingValues);
92 progressDialog.hide();
98 function buildMergedOrgSelector(orgList) {
100 for(var i = 0; i < orgList.length; i++) {
101 // add the work org parents
103 var node = fieldmapper.aou.findOrgUnit(orgList[i]);
104 while(node.parent_ou() != null) {
105 node = fieldmapper.aou.findOrgUnit(node.parent_ou());
108 orgNodeList = orgNodeList.concat(parents.reverse());
110 // add the work org children
111 orgNodeList = orgNodeList.concat(
112 fieldmapper.aou.descendantNodeList(orgList[i]));
116 dojo.forEach(orgNodeList, function(item) {
117 if(list.filter(function(i){return (i.id() == item.id())}).length == 0)
121 var store = new dojo.data.ItemFileReadStore({data:aou.toStoreData(list)});
122 osContextSelector.store = store;
123 osContextSelector.startup();
124 osContextSelector.setValue(user.user.ws_ou());
127 function osChangeContext() {
128 if(contextOrg == osContextSelector.getValue())
130 contextOrg = osContextSelector.getValue();
134 function osLoadGrid(data) {
135 var gridData = {items:[]}
136 for(var key in data) {
137 var setting = osSettings[key];
138 setting.context = null;
139 setting.value = null;
141 setting.context = data[key].org;
142 setting.value = data[key].value;
144 gridData.items.push({name:key});
146 gridData.items = gridData.items.sort(
148 var seta = osSettings[a.name];
149 var setb = osSettings[b.name];
150 if(seta.label > setb.label) return 1;
151 if(seta.label < setb.label) return -1;
155 gridData.identifier = 'name';
156 var store = new dojo.data.ItemFileReadStore({data:gridData});
157 var model = new dojox.grid.data.DojoData(
158 null, store, {rowsPerPage: 100, clientSort: true, query:{name:'*'}});
160 osGrid.setModel(model);
161 osGrid.setStructure(osGridLayout);
165 function osGetGridData(rowIdx) {
166 var data = this.grid.model.getRow(rowIdx);
168 var setting = osSettings[data.name];
169 var value = setting[this.field];
170 if(value == null) return '';
174 return fieldmapper.aou.findOrgUnit(value).shortname();
176 if(setting.noInherit)
180 if(setting.fm_class) {
181 var autoWidget = new openils.widget.AutoFieldWidget(
183 fmClass : setting.fm_class,
184 selfReference : true,
191 if(autoWidget.getDisplayString())
192 return autoWidget.getDisplayString();
195 if(setting.type == 'bool') {
197 return dojo.byId('os-true').innerHTML;
198 return dojo.byId('os-false').innerHTML;
205 function osGetEditLink(rowIdx) {
206 var data = this.grid.model.getRow(rowIdx);
211 function osFormatEditLink(name) {
212 return this.value.replace(/SETTING/, name);
215 function osLaunchEditor(name) {
216 osEditDialog._osattr = name;
218 user.buildPermOrgSelector(
219 ['UPDATE_ORG_UNIT_SETTING.' + name, 'UPDATE_ORG_UNIT_SETTING_ALL'],
220 osEditContextSelector, osSettings[name].context
222 dojo.byId('os-edit-name').innerHTML = osSettings[name].label;
223 dojo.byId('os-edit-desc').innerHTML = osSettings[name].desc || '';
225 dojo.style(osEditTextBox.domNode, 'display', 'none');
226 dojo.style(osEditCurrencyTextBox.domNode, 'display', 'none');
227 dojo.style(osEditNumberTextBox.domNode, 'display', 'none');
228 dojo.style(osEditBoolSelect.domNode, 'display', 'none');
230 var fmClass = osSettings[name].fm_class;
234 if(osEditAutoWidget) {
235 osEditAutoWidget.domNode.parentNode.removeChild(osEditAutoWidget.domNode);
236 osEditAutoWidget.destroy();
239 var autoWidget = new openils.widget.AutoFieldWidget(
242 selfReference : true,
243 parentNode : dojo.create('div', null, dojo.byId('os-edit-auto-widget')),
244 widgetValue : osSettings[name].value
249 osEditAutoWidget = w;
255 switch(osSettings[name].type) {
257 widget = osEditNumberTextBox;
260 widget = osEditCurrencyTextBox;
263 widget = osEditBoolSelect;
266 widget = osEditTextBox;
269 dojo.style(widget.domNode, 'display', 'block');
270 widget.setValue(osSettings[name].value);
274 function osEditSetting(deleteMe) {
276 var name = osEditDialog._osattr;
284 if(osSettings[name].fm_class) {
285 var val = osEditAutoWidget.attr('value');
286 osEditAutoWidget.domNode.parentNode.removeChild(osEditAutoWidget.domNode);
287 osEditAutoWidget.destroy();
288 osEditAutoWidget = null;
289 if(val == null || val == '') return;
293 switch(osSettings[name].type) {
295 obj[name] = osEditNumberTextBox.getValue();
296 if(obj[name] == null) return;
299 obj[name] = osEditCurrencyTextBox.getValue();
300 if(obj[name] == null) return;
303 var val = osEditBoolSelect.getValue();
304 obj[name] = (val == 'true') ? true : false;
307 obj[name] = osEditTextBox.getValue();
308 if(obj[name] == null) return;
313 fieldmapper.standardRequest(
314 ['open-ils.actor', 'open-ils.actor.org_unit.settings.update'],
316 params: [authtoken, osEditContextSelector.getValue(), obj],
317 oncomplete: function(r) {
318 var res = r.recv().content();
319 if(e = openils.Event.parse(res))