]> git.evergreen-ils.org Git - working/Evergreen.git/blob - Open-ILS/xul/staff_client/server/admin/org_unit_settings.js
Merge branch 'master' of git+ssh://yeti.esilibrary.com/home/evergreen/evergreen-equin...
[working/Evergreen.git] / Open-ILS / xul / staff_client / server / admin / org_unit_settings.js
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');
18
19 var authtoken;
20 var contextOrg;
21 var user;
22 var osSettings = {};
23 var ouSettingValues = {};
24 var osEditAutoWidget;
25
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;
31
32     var connect = function() { dojo.connect(contextOrg, 'onChange', osChangeContext); };
33     new openils.User().buildPermOrgSelector('STAFF_LOGIN', osContextSelector, null, connect);
34
35     osDraw();
36 }
37 dojo.addOnLoad(osInit);
38
39 function osDraw(specific_setting) {
40     progressDialog.show(true, "Processing..."); /* FIXME: I18N */
41
42     var names = [];
43     if (specific_setting) {
44
45         for(var key in specific_setting)
46             names.push(key);
47
48     } else {
49
50         var types = new openils.PermaCrud({authtoken:authtoken}).retrieveAll('coust');
51
52         dojo.forEach(types, 
53             function(type) {
54                 osSettings[type.name()] = {
55                     label : type.label(),
56                     desc : type.description(),
57                     type : type.datatype(),
58                     fm_class : type.fm_class()
59                 }
60             }
61         );
62         
63         for(var key in osSettings)
64             names.push(key);
65     }
66
67     fieldmapper.standardRequest(
68         [   'open-ils.actor', 
69             'open-ils.actor.ou_setting.ancestor_default.batch'],
70         {   async: true,
71             params: [contextOrg, names, authtoken],
72             oncomplete: function(r) {
73                 var data = r.recv().content();
74                 if(e = openils.Event.parse(data))
75                     return alert(e);
76                 for(var key in data)
77                     ouSettingValues[key] = data[key];
78                 osLoadGrid(ouSettingValues);
79                 progressDialog.hide();
80             }
81         }
82     );
83 }
84
85 function osChangeContext() {
86     if(contextOrg == osContextSelector.getValue())
87         return;
88     contextOrg = osContextSelector.getValue();
89     osDraw();
90 }
91
92 function osLoadGrid(data) {
93     var gridData = {items:[]}
94     for(var key in data) {
95         var setting = osSettings[key];
96         setting.context = null;
97         setting.value = null;
98         if(data[key]) {
99             setting.context = data[key].org;
100             setting.value = data[key].value;
101         }
102         gridData.items.push({name:key});
103     }
104     gridData.items = gridData.items.sort(
105         function(a, b) {
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;
110             return 0;
111         }
112     );
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:'*'}});
117
118     osGrid.setModel(model);
119     osGrid.setStructure(osGridLayout);
120     osGrid.update();
121 }
122
123 function osGetGridData(rowIdx) {
124     var data = this.grid.model.getRow(rowIdx);
125     if(!data) return '';
126     var setting = osSettings[data.name];
127     var value = setting[this.field];
128     if(value == null) return '';
129
130     switch(this.field) {
131         case 'context':
132             return fieldmapper.aou.findOrgUnit(value).shortname();
133         case 'label':
134             if(setting.noInherit)
135                 return value + ' *';
136             return value;
137         case 'value':
138             if(setting.fm_class) {
139                 var autoWidget = new openils.widget.AutoFieldWidget(
140                     {
141                         fmClass : setting.fm_class,
142                         selfReference : true,
143                         widgetValue : value,
144                         forceSync : true,
145                         readOnly : true
146                     }
147                 );
148                 autoWidget.build();
149                 if(autoWidget.getDisplayString())
150                     return autoWidget.getDisplayString();
151             }
152
153             if(setting.type == 'bool') {
154                 if(value) 
155                     return dojo.byId('os-true').innerHTML;
156                 return dojo.byId('os-false').innerHTML;
157             }
158         default:
159             return value;
160     }
161 }
162
163 function osGetEditLink(rowIdx) {
164     var data = this.grid.model.getRow(rowIdx);
165     if(!data) return '';
166     return data.name;
167 }
168
169 function osFormatEditLink(name) {
170     return this.value.replace(/SETTING/, name);
171 }
172
173 function osLaunchEditor(name) {
174     osEditDialog._osattr = name;
175     osEditDialog.show();
176     user.buildPermOrgSelector(
177         ['UPDATE_ORG_UNIT_SETTING.' + name, 'UPDATE_ORG_UNIT_SETTING_ALL'],
178         osEditContextSelector, osSettings[name].context
179     );
180     dojo.byId('os-edit-name').innerHTML = osSettings[name].label;
181     dojo.byId('os-edit-desc').innerHTML = osSettings[name].desc || '';
182
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');
187
188     var fmClass = osSettings[name].fm_class;
189
190     if(fmClass) {
191
192         if(osEditAutoWidget) {
193             osEditAutoWidget.domNode.parentNode.removeChild(osEditAutoWidget.domNode);
194             osEditAutoWidget.destroy();
195         }
196
197         var autoWidget = new openils.widget.AutoFieldWidget(
198             {
199                 fmClass : fmClass,
200                 selfReference : true,
201                 parentNode : dojo.create('div', null, dojo.byId('os-edit-auto-widget')),
202                 widgetValue : osSettings[name].value
203             }
204         );
205         autoWidget.build(
206             function(w) {
207                 osEditAutoWidget = w;
208             }
209         );
210
211     } else {
212         var widget;
213         switch(osSettings[name].type) {
214             case 'number':
215                 widget = osEditNumberTextBox; 
216                 break;
217             case 'currency':
218                 widget = osEditCurrencyTextBox; 
219                 break;
220             case 'bool':
221                 widget = osEditBoolSelect; 
222                 break;
223             default:
224                 widget = osEditTextBox;
225         }
226
227         dojo.style(widget.domNode, 'display', 'block');
228         widget.setValue(osSettings[name].value);
229     }
230 }
231
232 function osEditSetting(deleteMe) {
233     osEditDialog.hide();
234     var name = osEditDialog._osattr;
235
236     var obj = {};
237     if(deleteMe) {
238         obj[name] = null;
239
240     } else {
241
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;
248             obj[name] = val;
249
250         } else {
251             switch(osSettings[name].type) {
252                 case 'number':
253                     obj[name] = osEditNumberTextBox.getValue();
254                     if(obj[name] == null) return;
255                     break;
256                 case 'currency':
257                     obj[name] = osEditCurrencyTextBox.getValue();
258                     if(obj[name] == null) return;
259                     break;
260                 case 'bool':
261                     var val = osEditBoolSelect.getValue();
262                     obj[name] = (val == 'true') ? true : false;
263                     break;
264                 default:
265                     obj[name] = osEditTextBox.getValue();
266                     if(obj[name] == null) return;
267             }
268         }
269     }
270
271     fieldmapper.standardRequest(
272         ['open-ils.actor', 'open-ils.actor.org_unit.settings.update'],
273         {   async: true,
274             params: [authtoken, osEditContextSelector.getValue(), obj],
275             oncomplete: function(r) {
276                 var res = r.recv().content();
277                 if(e = openils.Event.parse(res))
278                     return alert(e);
279                 osDraw(obj);
280             }
281         }
282     );
283 }
284