comparison app/controller/Filter.js @ 975:fb99332bb48e stammdatengrids

Severe changes concerning the Resultgrids. - Intrduced "Stammdaten" which can be selected in the Mode Field on the left side, - Added Stores and Models for the Stammdaten - Removed the FilterResultgrid and replaced it with a model which uses inheritance. Dynamic Grid Columns can now be derived from app/view/widget/DynamicGrid.js For Proben and Messprogramme this is already done. - There might be some REGRESSION concerning the buttons in the ProbeList and MessprogrammeList grid, as those are not disabled properly. This needs to be fixed in future commits.
author Dustin Demuth <dustin@intevation.de>
date Wed, 02 Dec 2015 17:39:04 +0100
parents 96e04c258b8f
children 3c770fc7cf19
comparison
equal deleted inserted replaced
974:ea477f62a667 975:fb99332bb48e
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 var columns = element.up('fieldset').down('displayfield[name=columns]');
64 var desc = element.up('fieldset').down('displayfield[name=description]'); 68 var desc = element.up('fieldset').down('displayfield[name=description]');
65 this.displayFields = record[0].data.results; 69 this.displayFields = record[0].data.results;
66 var filterFields = record[0].data.filters; 70 var filterFields = record[0].data.filters;
71 var contentPanel = element.up('panel[name=main]').down('panel[name=contentpanel]');
72 var queryType = record[0].get('type'); //The type of the query, might be proben, messprogramme,
73 // or a stammdatendtype
67 74
68 this.reset(element); 75 this.reset(element);
69 76
70 var columnString = []; 77 contentPanel.removeAll();
71 for (var i = 0; i < this.displayFields.length; i++) { 78
72 columnString.push(this.displayFields[i].header); 79 /// THIS IS INTERMEDIARY CODE AND CAN BE REMOVED WHEN TYPES ARE SENT FOR PROBEN AND MESSPROGRAMME
73 } 80 console.log('remove this intermediary code...');
74 columns.setValue(columnString.join(', ')); 81 var modes = element.up('panel[name=main]').down('radiogroup').getChecked();
75 desc.setValue(record[0].data.description); 82 queryType = (queryType) ? queryType : modes[0].inputValue;
76 83 /// END OF INTERMEDIARY CODE
77 // Setup Columns of the probenlist 84
78 this.displayFields.reverse(); 85
79 86 if (queryType == 'proben' || queryType == 'messprogramme') {
80 /* Setup Filters of the probenlist 87 var frgrid; // The Resultgrid
88 var gridstore; // The Store which will be used in the resultgrid.
89
90 switch (queryType) {
91 case 'proben':
92 gridstore = Ext.create('Lada.store.ProbenList');
93 frgrid = Ext.create('Lada.view.grid.ProbeList');
94 break;
95 case 'messprogramme':
96 gridstore = Ext.create('Lada.store.MessprogrammeList');
97 frgrid = Ext.create('Lada.view.grid.MessprogrammeList');
98 break;
99 }
100
101 var columnString = [];
102 for (var i = 0; i < this.displayFields.length; i++) {
103 columnString.push(this.displayFields[i].header);
104 }
105 columns.setValue(columnString.join(', '));
106 desc.setValue(record[0].data.description);
107
108 // Setup Columns
109 if (this.displayFields) {
110 this.displayFields.reverse();
111 }
112
113 if (gridstore) {
114 frgrid.setStore(gridstore);
115 }
116
117 contentPanel.add(frgrid);
118 }
119 else {
120 // Grids which are not build with dynamic columns
121 var resultGrid;
122 switch (queryType) {
123 case 'MessprogrammKategorie':
124 resultGrid = Ext.create('Lada.view.grid.MessprogrammKategorie');
125 break;
126 case 'DatensatzErzeuger':
127 resultGrid = Ext.create('Lada.view.grid.DatensatzErzeuger');
128 break;
129 }
130 if (resultGrid) {
131 contentPanel.add(resultGrid);
132 }
133 }
134 /* Setup Filters
81 * 135 *
82 * Allowed types are 136 * Allowed types are
83 * * text 137 * * text
84 * * number 138 * * number
85 * * datetime 139 * * datetime
186 }, 240 },
187 241
188 /** 242 /**
189 * Function is called when the user clicks the search button. The function 243 * 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. 244 * will perform a search to the server on refreshes the result list.
245 * To do so it replaces the store of the Resultgrids.
191 */ 246 */
192 search: function(element) { 247 search: function(element) {
193 var resultGrid = element.up('panel[name=main]').down('filterresultgrid'); 248 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]'); 249 var filters = element.up('panel[name=main]').down('fieldset[name=filtervariables]');
195 var search = element.up('fieldset').down('combobox[name=filter]'); 250 var search = element.up('fieldset').down('combobox[name=filter]');
251
252 //Type of the search Proben/Messprogramme/Stammdaten
253 var type = search.store.getById(search.getValue()).get('type')
196 254
197 // Get search parameters: 255 // Get search parameters:
198 var searchParams = {}; 256 var searchParams = {};
199 searchParams['qid'] = search.getValue(); 257 searchParams['qid'] = search.getValue();
200 for (var i = filters.items.length - 1; i >= 0; i--) { 258 for (var i = filters.items.length - 1; i >= 0; i--) {
207 } 265 }
208 // Retrieve the mode 266 // Retrieve the mode
209 var modes = element.up('panel[name=main]').down('radiogroup').getChecked(); 267 var modes = element.up('panel[name=main]').down('radiogroup').getChecked();
210 var sname = modes[0].inputValue; 268 var sname = modes[0].inputValue;
211 269
212 if (sname === 'ProbeList') { 270 // Todo: Migragte away from sname, use type instead
271 if (sname === 'proben') {
213 sname = 'Lada.store.ProbenList'; 272 sname = 'Lada.store.ProbenList';
214 } 273 }
215 else if (sname === 'MessprogrammList') { 274 else if (sname === 'messprogramme') {
216 sname = 'Lada.store.MessprogrammeList'; 275 sname = 'Lada.store.MessprogrammeList';
276 }
277 else if (sname === 'stammdaten') {
278 //Store depends of the Type...
279 // TODO the switchcasese should be unified
280 switch (type) {
281 case 'MessprogrammKategorie':
282 sname = 'Lada.store.MessprogrammKategorie';
283 break;
284 case 'DatensatzErzeuger':
285 sname = 'Lada.store.DatensatzErzeuger';
286 break;
287 }
217 } 288 }
218 289
219 // Find the store or create a new one. 290 // Find the store or create a new one.
220 var store = Ext.StoreManager.lookup(sname); 291 var store = Ext.StoreManager.lookup(sname);
221 if (!store) { 292 if (!store) {
222 store = Ext.create(sname); 293 store = Ext.create(sname);
223 } 294 }
295 console.log(store);
224 if (store) { 296 if (store) {
225 store.addListener('beforeload', this.loadingAnimationOn, resultGrid); 297 store.addListener('beforeload', this.loadingAnimationOn, resultGrid);
226 store.addListener('load', this.loadingAnimationOff, resultGrid); 298 store.addListener('load', this.loadingAnimationOff, resultGrid);
227 resultGrid.setStore(store); 299 resultGrid.setStore(store);
228 resultGrid.setupColumns(this.displayFields); 300 resultGrid.setupColumns(this.displayFields);

http://lada.wald.intevation.org