]> git.evergreen-ils.org Git - working/Evergreen.git/blob - Open-ILS/xul/staff_client/server/admin/org_unit_settings.js
fetch org setting types from server now. yay.
[working/Evergreen.git] / Open-ILS / xul / staff_client / server / admin / org_unit_settings.js
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');
15
16 var authtoken;
17 var contextOrg;
18 var user;
19 var workOrgs;
20 var osSettings = {};
21
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();
26
27     fieldmapper.standardRequest(
28         [   'open-ils.actor',
29             'open-ils.actor.user.get_work_ous.ids'],
30         {   async: true,
31             params: [authtoken],
32             oncomplete: function(r) {
33                 var list = r.recv().content();
34                 if(e = openils.Event.parse(list))
35                     return alert(e);
36                 workOrgs = list;
37                 buildMergedOrgSelector(list);
38             }
39         }
40     );
41
42     osDraw();
43 }
44 dojo.addOnLoad(osInit);
45
46 function osDraw() {
47     var types = new openils.PermaCrud({authtoken:authtoken}).retrieveAll('coust');
48
49     dojo.forEach(types, 
50         function(type) {
51             osSettings[type.name()] = {
52                 label : type.label(),
53                 desc : type.description(),
54                 type : type.datatype(),
55                 fm_class : type.fm_class()
56             }
57         }
58     );
59     
60     var names = [];
61     for(var key in osSettings)
62         names.push(key);
63
64     fieldmapper.standardRequest(
65         [   'open-ils.actor', 
66             'open-ils.actor.ou_setting.ancestor_default.batch'],
67         {   async: true,
68             params: [contextOrg, names],
69             oncomplete: function(r) {
70                 var data = r.recv().content();
71                 if(e = openils.Event.parse(data))
72                     return alert(e);
73                 osLoadGrid(data);
74             }
75         }
76     );
77 }
78
79 function buildMergedOrgSelector(orgList) {
80     var orgNodeList = [];
81     for(var i = 0; i < orgList.length; i++) {
82         // add the work org parents
83         var parents = [];
84         var node = fieldmapper.aou.findOrgUnit(orgList[i]);
85         while(node.parent_ou() != null) {
86             node = fieldmapper.aou.findOrgUnit(node.parent_ou());
87             parents.push(node);
88         }
89         orgNodeList = orgNodeList.concat(parents.reverse());
90
91         // add the work org children
92         orgNodeList = orgNodeList.concat(
93             fieldmapper.aou.descendantNodeList(orgList[i]));
94     }
95
96     var list = [];
97     dojo.forEach(orgNodeList, function(item) {
98         if(list.filter(function(i){return (i.id() == item.id())}).length == 0)
99             list.push(item);
100     });
101
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());
106 }
107
108 function osChangeContext() {
109     if(contextOrg == osContextSelector.getValue())
110         return;
111     contextOrg = osContextSelector.getValue();
112     osDraw();
113 }
114
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;
121         if(data[key]) {
122             setting.context = data[key].org;
123             setting.value = data[key].value;
124         }
125         gridData.items.push({name:key});
126     }
127     gridData.items = gridData.items.sort(
128         function(a, b) {
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;
133             return 0;
134         }
135     );
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:'*'}});
140
141     osGrid.setModel(model);
142     osGrid.setStructure(osGridLayout);
143     osGrid.update();
144 }
145
146 function osGetGridData(rowIdx) {
147     var data = this.grid.model.getRow(rowIdx);
148     if(!data) return '';
149     var setting = osSettings[data.name];
150     var value = setting[this.field];
151     if(value == null) return '';
152     switch(this.field) {
153         case 'context':
154             return fieldmapper.aou.findOrgUnit(value).shortname();
155         case 'label':
156             if(setting.noInherit)
157                 return value + ' *';
158             return value;
159         case 'value':
160             if(setting.type == 'bool') {
161                 if(value) 
162                     return dojo.byId('os-true').innerHTML;
163                 return dojo.byId('os-false').innerHTML;
164             }
165         default:
166             return value;
167     }
168 }
169
170 function osGetEditLink(rowIdx) {
171     var data = this.grid.model.getRow(rowIdx);
172     if(!data) return '';
173     return data.name;
174 }
175
176 function osFormatEditLink(name) {
177     return this.value.replace(/SETTING/, name);
178 }
179
180 function osLaunchEditor(name) {
181     osEditDialog._osattr = name;
182     osEditDialog.show();
183     user.buildPermOrgSelector(
184         ['UPDATE_ORG_UNIT_SETTING.' + name, 'UPDATE_ORG_UNIT_SETTING_ALL'],
185         osEditContextSelector, osSettings[name].context
186     );
187     dojo.byId('os-edit-name').innerHTML = osSettings[name].label;
188     dojo.byId('os-edit-desc').innerHTML = osSettings[name].desc || '';
189
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');
194
195     var widget;
196     switch(osSettings[name].type) {
197         case 'number':
198             widget = osEditNumberTextBox; 
199             break;
200         case 'currency':
201             widget = osEditCurrencyTextBox; 
202             break;
203         case 'bool':
204             widget = osEditBoolSelect; 
205             break;
206         default:
207             widget = osEditTextBox;
208     }
209
210     dojo.style(widget.domNode, 'display', 'block');
211     widget.setValue(osSettings[name].value);
212 }
213
214 function osEditSetting(deleteMe) {
215     osEditDialog.hide();
216     var name = osEditDialog._osattr;
217
218     var obj = {};
219     if(deleteMe) {
220         obj[name] = null;
221
222     } else {
223
224         switch(osSettings[name].type) {
225             case 'number':
226                 obj[name] = osEditNumberTextBox.getValue();
227                 if(obj[name] == null) return;
228                 break;
229             case 'currency':
230                 obj[name] = osEditCurrencyTextBox.getValue();
231                 if(obj[name] == null) return;
232                 break;
233             case 'bool':
234                 var val = osEditBoolSelect.getValue();
235                 obj[name] = (val == 'true') ? true : false;
236                 break;
237             default:
238                 obj[name] = osEditTextBox.getValue();
239                 if(obj[name] == null) return;
240         }
241     }
242
243     fieldmapper.standardRequest(
244         ['open-ils.actor', 'open-ils.actor.org_unit.settings.update'],
245         {   async: true,
246             params: [authtoken, osEditContextSelector.getValue(), obj],
247             oncomplete: function(r) {
248                 var res = r.recv().content();
249                 if(e = openils.Event.parse(res))
250                     return alert(e);
251                 osDraw();
252             }
253         }
254     );
255 }
256