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');
25 function osInit(data) {
26 authtoken = new openils.CGI().param('ses') || dojo.cookie('ses');
27 user = new openils.User({authtoken:authtoken});
28 contextOrg = user.user.ws_ou();
29 openils.User.authtoken = authtoken;
31 fieldmapper.standardRequest(
33 'open-ils.actor.user.get_work_ous.ids'],
36 oncomplete: function(r) {
37 var list = r.recv().content();
38 if(e = openils.Event.parse(list))
41 buildMergedOrgSelector(list);
48 dojo.addOnLoad(osInit);
51 var types = new openils.PermaCrud({authtoken:authtoken}).retrieveAll('coust');
55 osSettings[type.name()] = {
57 desc : type.description(),
58 type : type.datatype(),
59 fm_class : type.fm_class()
65 for(var key in osSettings)
68 fieldmapper.standardRequest(
70 'open-ils.actor.ou_setting.ancestor_default.batch'],
72 params: [contextOrg, names],
73 oncomplete: function(r) {
74 var data = r.recv().content();
75 if(e = openils.Event.parse(data))
83 function buildMergedOrgSelector(orgList) {
85 for(var i = 0; i < orgList.length; i++) {
86 // add the work org parents
88 var node = fieldmapper.aou.findOrgUnit(orgList[i]);
89 while(node.parent_ou() != null) {
90 node = fieldmapper.aou.findOrgUnit(node.parent_ou());
93 orgNodeList = orgNodeList.concat(parents.reverse());
95 // add the work org children
96 orgNodeList = orgNodeList.concat(
97 fieldmapper.aou.descendantNodeList(orgList[i]));
101 dojo.forEach(orgNodeList, function(item) {
102 if(list.filter(function(i){return (i.id() == item.id())}).length == 0)
106 var store = new dojo.data.ItemFileReadStore({data:aou.toStoreData(list)});
107 osContextSelector.store = store;
108 osContextSelector.startup();
109 osContextSelector.setValue(user.user.ws_ou());
112 function osChangeContext() {
113 if(contextOrg == osContextSelector.getValue())
115 contextOrg = osContextSelector.getValue();
119 function osLoadGrid(data) {
120 var gridData = {items:[]}
121 for(var key in data) {
122 var setting = osSettings[key];
123 setting.context = null;
124 setting.value = null;
126 setting.context = data[key].org;
127 setting.value = data[key].value;
129 gridData.items.push({name:key});
131 gridData.items = gridData.items.sort(
133 var seta = osSettings[a.name];
134 var setb = osSettings[b.name];
135 if(seta.label > setb.label) return 1;
136 if(seta.label < setb.label) return -1;
140 gridData.identifier = 'name';
141 var store = new dojo.data.ItemFileReadStore({data:gridData});
142 var model = new dojox.grid.data.DojoData(
143 null, store, {rowsPerPage: 100, clientSort: true, query:{name:'*'}});
145 osGrid.setModel(model);
146 osGrid.setStructure(osGridLayout);
150 function osGetGridData(rowIdx) {
151 var data = this.grid.model.getRow(rowIdx);
153 var setting = osSettings[data.name];
154 var value = setting[this.field];
155 if(value == null) return '';
159 return fieldmapper.aou.findOrgUnit(value).shortname();
161 if(setting.noInherit)
165 if(setting.fm_class) {
166 var autoWidget = new openils.widget.AutoFieldWidget(
168 fmClass : setting.fm_class,
169 selfReference : true,
176 if(autoWidget.getDisplayString())
177 return autoWidget.getDisplayString();
180 if(setting.type == 'bool') {
182 return dojo.byId('os-true').innerHTML;
183 return dojo.byId('os-false').innerHTML;
190 function osGetEditLink(rowIdx) {
191 var data = this.grid.model.getRow(rowIdx);
196 function osFormatEditLink(name) {
197 return this.value.replace(/SETTING/, name);
200 function osLaunchEditor(name) {
201 osEditDialog._osattr = name;
203 user.buildPermOrgSelector(
204 ['UPDATE_ORG_UNIT_SETTING.' + name, 'UPDATE_ORG_UNIT_SETTING_ALL'],
205 osEditContextSelector, osSettings[name].context
207 dojo.byId('os-edit-name').innerHTML = osSettings[name].label;
208 dojo.byId('os-edit-desc').innerHTML = osSettings[name].desc || '';
210 dojo.style(osEditTextBox.domNode, 'display', 'none');
211 dojo.style(osEditCurrencyTextBox.domNode, 'display', 'none');
212 dojo.style(osEditNumberTextBox.domNode, 'display', 'none');
213 dojo.style(osEditBoolSelect.domNode, 'display', 'none');
215 var fmClass = osSettings[name].fm_class;
219 if(osEditAutoWidget) {
220 osEditAutoWidget.domNode.parentNode.removeChild(osEditAutoWidget.domNode);
221 osEditAutoWidget.destroy();
224 var autoWidget = new openils.widget.AutoFieldWidget(
227 selfReference : true,
228 parentNode : dojo.create('div', null, dojo.byId('os-edit-auto-widget')),
229 widgetValue : osSettings[name].value
234 osEditAutoWidget = w;
240 switch(osSettings[name].type) {
242 widget = osEditNumberTextBox;
245 widget = osEditCurrencyTextBox;
248 widget = osEditBoolSelect;
251 widget = osEditTextBox;
254 dojo.style(widget.domNode, 'display', 'block');
255 widget.setValue(osSettings[name].value);
259 function osEditSetting(deleteMe) {
261 var name = osEditDialog._osattr;
269 if(osSettings[name].fm_class) {
270 var val = osEditAutoWidget.attr('value');
271 osEditAutoWidget.domNode.parentNode.removeChild(osEditAutoWidget.domNode);
272 osEditAutoWidget.destroy();
273 osEditAutoWidget = null;
274 if(val == null || val == '') return;
278 switch(osSettings[name].type) {
280 obj[name] = osEditNumberTextBox.getValue();
281 if(obj[name] == null) return;
284 obj[name] = osEditCurrencyTextBox.getValue();
285 if(obj[name] == null) return;
288 var val = osEditBoolSelect.getValue();
289 obj[name] = (val == 'true') ? true : false;
292 obj[name] = osEditTextBox.getValue();
293 if(obj[name] == null) return;
298 fieldmapper.standardRequest(
299 ['open-ils.actor', 'open-ils.actor.org_unit.settings.update'],
301 params: [authtoken, osEditContextSelector.getValue(), obj],
302 oncomplete: function(r) {
303 var res = r.recv().content();
304 if(e = openils.Event.parse(res))