1 dojo.require("dijit.layout.LayoutContainer");
2 dojo.require("dijit.layout.ContentPane");
3 dojo.require('dijit.form.FilteringSelect');
4 dojo.require('dijit.Dialog');
5 dojo.require("dojox.grid.Grid");
6 dojo.require("fieldmapper.Fieldmapper");
7 dojo.require("fieldmapper.dojoData");
8 dojo.require("fieldmapper.OrgUtils");
9 dojo.require('dojo.cookie');
10 dojo.require('openils.CGI');
11 dojo.require('openils.User');
12 dojo.require('openils.Event');
13 dojo.require('openils.widget.OrgUnitFilteringSelect');
14 dojo.require('openils.PermaCrud');
22 function osInit(data) {
23 authtoken = dojo.cookie('ses') || new openils.CGI().param('ses');
24 user = new openils.User({authtoken:authtoken});
25 contextOrg = user.user.ws_ou();
27 fieldmapper.standardRequest(
29 'open-ils.actor.user.get_work_ous.ids'],
32 oncomplete: function(r) {
33 var list = r.recv().content();
34 if(e = openils.Event.parse(list))
37 buildMergedOrgSelector(list);
44 dojo.addOnLoad(osInit);
47 var types = new openils.PermaCrud({authtoken:authtoken}).retrieveAll('coust');
51 osSettings[type.name()] = {
53 desc : type.description(),
54 type : type.datatype(),
55 fm_class : type.fm_class()
61 for(var key in osSettings)
64 fieldmapper.standardRequest(
66 'open-ils.actor.ou_setting.ancestor_default.batch'],
68 params: [contextOrg, names],
69 oncomplete: function(r) {
70 var data = r.recv().content();
71 if(e = openils.Event.parse(data))
79 function buildMergedOrgSelector(orgList) {
81 for(var i = 0; i < orgList.length; i++) {
82 // add the work org parents
84 var node = fieldmapper.aou.findOrgUnit(orgList[i]);
85 while(node.parent_ou() != null) {
86 node = fieldmapper.aou.findOrgUnit(node.parent_ou());
89 orgNodeList = orgNodeList.concat(parents.reverse());
91 // add the work org children
92 orgNodeList = orgNodeList.concat(
93 fieldmapper.aou.descendantNodeList(orgList[i]));
97 dojo.forEach(orgNodeList, function(item) {
98 if(list.filter(function(i){return (i.id() == item.id())}).length == 0)
102 var store = new dojo.data.ItemFileReadStore({data:aou.toStoreData(list)});
103 osContextSelector.store = store;
104 osContextSelector.startup();
105 osContextSelector.setValue(user.user.ws_ou());
108 function osChangeContext() {
109 if(contextOrg == osContextSelector.getValue())
111 contextOrg = osContextSelector.getValue();
115 function osLoadGrid(data) {
116 var gridData = {items:[]}
117 for(var key in data) {
118 var setting = osSettings[key];
119 setting.context = null;
120 setting.value = null;
122 setting.context = data[key].org;
123 setting.value = data[key].value;
125 gridData.items.push({name:key});
127 gridData.items = gridData.items.sort(
129 var seta = osSettings[a.name];
130 var setb = osSettings[b.name];
131 if(seta.label > setb.label) return 1;
132 if(seta.label < setb.label) return -1;
136 gridData.identifier = 'name';
137 var store = new dojo.data.ItemFileReadStore({data:gridData});
138 var model = new dojox.grid.data.DojoData(
139 null, store, {rowsPerPage: 100, clientSort: true, query:{name:'*'}});
141 osGrid.setModel(model);
142 osGrid.setStructure(osGridLayout);
146 function osGetGridData(rowIdx) {
147 var data = this.grid.model.getRow(rowIdx);
149 var setting = osSettings[data.name];
150 var value = setting[this.field];
151 if(value == null) return '';
154 return fieldmapper.aou.findOrgUnit(value).shortname();
156 if(setting.noInherit)
160 if(setting.type == 'bool') {
162 return dojo.byId('os-true').innerHTML;
163 return dojo.byId('os-false').innerHTML;
170 function osGetEditLink(rowIdx) {
171 var data = this.grid.model.getRow(rowIdx);
176 function osFormatEditLink(name) {
177 return this.value.replace(/SETTING/, name);
180 function osLaunchEditor(name) {
181 osEditDialog._osattr = name;
183 user.buildPermOrgSelector(
184 ['UPDATE_ORG_UNIT_SETTING.' + name, 'UPDATE_ORG_UNIT_SETTING_ALL'],
185 osEditContextSelector, osSettings[name].context
187 dojo.byId('os-edit-name').innerHTML = osSettings[name].label;
188 dojo.byId('os-edit-desc').innerHTML = osSettings[name].desc || '';
190 dojo.style(osEditTextBox.domNode, 'display', 'none');
191 dojo.style(osEditCurrencyTextBox.domNode, 'display', 'none');
192 dojo.style(osEditNumberTextBox.domNode, 'display', 'none');
193 dojo.style(osEditBoolSelect.domNode, 'display', 'none');
196 switch(osSettings[name].type) {
198 widget = osEditNumberTextBox;
201 widget = osEditCurrencyTextBox;
204 widget = osEditBoolSelect;
207 widget = osEditTextBox;
210 dojo.style(widget.domNode, 'display', 'block');
211 widget.setValue(osSettings[name].value);
214 function osEditSetting(deleteMe) {
216 var name = osEditDialog._osattr;
224 switch(osSettings[name].type) {
226 obj[name] = osEditNumberTextBox.getValue();
227 if(obj[name] == null) return;
230 obj[name] = osEditCurrencyTextBox.getValue();
231 if(obj[name] == null) return;
234 var val = osEditBoolSelect.getValue();
235 obj[name] = (val == 'true') ? true : false;
238 obj[name] = osEditTextBox.getValue();
239 if(obj[name] == null) return;
243 fieldmapper.standardRequest(
244 ['open-ils.actor', 'open-ils.actor.org_unit.settings.update'],
246 params: [authtoken, osEditContextSelector.getValue(), obj],
247 oncomplete: function(r) {
248 var res = r.recv().content();
249 if(e = openils.Event.parse(res))