comparison app/controller/Filter.js @ 1007:23bfcbdb4527

merged.
author Raimund Renkert <raimund.renkert@intevation.de>
date Wed, 20 Jan 2016 17:33:33 +0100
parents 092e245b13a4 0a5fe163f1c8
children 9651def05ae6
comparison
equal deleted inserted replaced
1002:54179b6043b6 1007:23bfcbdb4527
54 }, 54 },
55 55
56 /** 56 /**
57 * Function called when the user selects a SQL query in the dropdownlist. 57 * Function called when the user selects a SQL query in the dropdownlist.
58 * The function will hide/display additional element related to the 58 * The function will hide/display additional element related to the
59 * selected search query 59 * selected search query.
60 * It also replaces the Store of the Filteresultgrid.
61 * Two possibilities exist to do so: Proben/Messprogramme where dynamic columns exist, but the
62 * content remains of the same type and Stammdaten, were columns are fixed but the type might
63 * vary between orte, kategorien, ...
60 */ 64 */
61 selectSql: function(element, record) { 65 selectSql: function(element, record) {
62 var filters = element.up('panel[name=main]').down('fieldset[name=filtervariables]'); 66 var filters = element.up('panel[name=main]').down('fieldset[name=filtervariables]');
63 var columns = element.up('fieldset').down('displayfield[name=columns]'); 67
68 // Set "Filter Auswahl" Description
64 var desc = element.up('fieldset').down('displayfield[name=description]'); 69 var desc = element.up('fieldset').down('displayfield[name=description]');
70 desc.setValue(record[0].data.description);
71
65 this.displayFields = record[0].data.results; 72 this.displayFields = record[0].data.results;
66 var filterFields = record[0].data.filters; 73 var filterFields = record[0].data.filters;
74 var contentPanel = element.up('panel[name=main]').down('panel[name=contentpanel]');
75 var queryType = record[0].get('type'); //The type of the query, might be proben, messprogramme,
76 // or a stammdatendtype
67 77
68 this.reset(element); 78 this.reset(element);
69 79
80 contentPanel.removeAll(); //clear the panel: make space for new grids
81
82 // Set "Filter Auswahl" Columns
83 var columns = element.up('fieldset').down('displayfield[name=columns]');
70 var columnString = []; 84 var columnString = [];
71 for (var i = 0; i < this.displayFields.length; i++) { 85 for (var i = 0; i < this.displayFields.length; i++) {
72 columnString.push(this.displayFields[i].header); 86 columnString.push(this.displayFields[i].header);
73 } 87 }
74 columns.setValue(columnString.join(', ')); 88 columns.setValue(columnString.join(', '));
75 desc.setValue(record[0].data.description); 89
76 90 // Setup Columns
77 // Setup Columns of the probenlist 91 if (this.displayFields) {
78 this.displayFields.reverse(); 92 this.displayFields.reverse();
79 93 }
80 /* Setup Filters of the probenlist 94
95 if (queryType == 'probe' || queryType == 'messprogramm') {
96 // Dynamic Grids
97 // We need to set both grid and Store.
98 var frgrid; // The Resultgrid
99 var gridstore; // The Store which will be used in the resultgrid.
100
101 switch (queryType) {
102 case 'probe':
103 gridstore = Ext.create('Lada.store.ProbenList');
104 frgrid = Ext.create('Lada.view.grid.ProbeList');
105 break;
106 case 'messprogramm':
107 gridstore = Ext.create('Lada.store.MessprogrammeList');
108 frgrid = Ext.create('Lada.view.grid.MessprogrammeList');
109 break;
110 }
111
112 if (gridstore) {
113 frgrid.setStore(gridstore);
114 }
115
116 contentPanel.add(frgrid);
117 }
118 else {
119 // Grids which are not build with dynamic columns
120 // The store is configured in each grid, hence we only need to set the
121 // grid
122 var resultGrid;
123 switch (queryType) {
124 case 'messprogrammkategorie':
125 resultGrid = Ext.create('Lada.view.grid.MessprogrammKategorie');
126 break;
127 case 'datensatzerzeuger':
128 resultGrid = Ext.create('Lada.view.grid.DatensatzErzeuger');
129 break;
130 case 'ort':
131 resultGrid = Ext.create('Lada.view.grid.Ort');
132 break;
133 case 'probenehmer':
134 resultGrid = Ext.create('Lada.view.grid.Probenehmer');
135 break;
136 }
137 if (resultGrid) {
138 contentPanel.add(resultGrid);
139 }
140 }
141 /* Setup Filters
81 * 142 *
82 * Allowed types are 143 * Allowed types are
83 * * text 144 * * text
84 * * number 145 * * number
85 * * datetime 146 * * datetime
186 }, 247 },
187 248
188 /** 249 /**
189 * Function is called when the user clicks the search button. The function 250 * Function is called when the user clicks the search button. The function
190 * will perform a search to the server on refreshes the result list. 251 * will perform a search to the server on refreshes the result list.
252 * To do so it replaces the store of the Resultgrids.
191 */ 253 */
192 search: function(element) { 254 search: function(element) {
193 var resultGrid = element.up('panel[name=main]').down('filterresultgrid'); 255 var resultGrid = element.up('panel[name=main]').down('panel[name=contentpanel]').down('grid');
194 var filters = element.up('panel[name=main]').down('fieldset[name=filtervariables]'); 256 var filters = element.up('panel[name=main]').down('fieldset[name=filtervariables]');
195 var search = element.up('fieldset').down('combobox[name=filter]'); 257 var search = element.up('fieldset').down('combobox[name=filter]');
258
259 //Type of the search Proben/Messprogramme/Stammdaten
260 var type = search.store.getById(search.getValue()).get('type')
196 261
197 // Get search parameters: 262 // Get search parameters:
198 var searchParams = {}; 263 var searchParams = {};
199 searchParams['qid'] = search.getValue(); 264 searchParams['qid'] = search.getValue();
200 for (var i = filters.items.length - 1; i >= 0; i--) { 265 for (var i = filters.items.length - 1; i >= 0; i--) {
203 if (value instanceof Array) { 268 if (value instanceof Array) {
204 value = value.join(','); 269 value = value.join(',');
205 } 270 }
206 searchParams[filter.getName()] = value; 271 searchParams[filter.getName()] = value;
207 } 272 }
208 // Retrieve the mode 273
209 var modes = element.up('panel[name=main]').down('radiogroup').getChecked(); 274 //Store depends of the Type...
210 var sname = modes[0].inputValue; 275 // TODO the switchcasese should be unified withj those in SelectSql
211 276 switch (type) {
212 if (sname === 'ProbeList') { 277 case 'probe':
213 sname = 'Lada.store.ProbenList'; 278 sname = 'Lada.store.ProbenList';
214 } 279 break;
215 else if (sname === 'MessprogrammList') { 280 case 'messprogramm':
216 sname = 'Lada.store.MessprogrammeList'; 281 sname = 'Lada.store.MessprogrammeList';
282 break;
283 case 'messprogrammkategorie':
284 sname = 'Lada.store.MessprogrammKategorie';
285 break;
286 case 'datensatzerzeuger':
287 sname = 'Lada.store.DatensatzErzeuger';
288 break;
289 case 'ort':
290 sname = 'Lada.store.Ort';
291 break;
292 case 'probenehmer':
293 sname = 'Lada.store.Probenehmer';
294 break;
217 } 295 }
218 296
219 // Find the store or create a new one. 297 // Find the store or create a new one.
220 var store = Ext.StoreManager.lookup(sname); 298 var store = Ext.StoreManager.lookup(sname);
221 if (!store) { 299 if (!store) {
222 store = Ext.create(sname); 300 store = Ext.create(sname);
223 } 301 }
224 if (store) { 302 if (store) {
225 store.addListener('beforeload', this.loadingAnimationOn, resultGrid); 303 store.addListener('beforeload', this.loadingAnimationOn, resultGrid);
226 store.addListener('load', this.loadingAnimationOff, resultGrid); 304 store.addListener('load', this.loadingAnimationOff, resultGrid);
305
227 resultGrid.setStore(store); 306 resultGrid.setStore(store);
228 resultGrid.setupColumns(this.displayFields); 307 //TODO: Check if this is still necessary, as a Grid exists
308 // for each Type.
309
310 if (resultGrid.isDynamic) {
311 //only the dynamic resultgrid can and needs to do the following:
312 resultGrid.setupColumns(this.displayFields);
313 }
314
229 resultGrid.getStore().proxy.extraParams = searchParams; 315 resultGrid.getStore().proxy.extraParams = searchParams;
230 resultGrid.getStore().load(); 316 resultGrid.getStore().load();
231 resultGrid.show(); 317 resultGrid.show();
232 } 318 }
233 }, 319 },

http://lada.wald.intevation.org