comparison app/controller/Filter.js @ 1016:d6e259e76de6

Updated filter value handling. * Save and reset buttons for values * Reload and update query stores * set correct values on reset.
author Raimund Renkert <raimund.renkert@intevation.de>
date Tue, 02 Feb 2016 15:26:43 +0100
parents af9879d72310
children f4bd170f8ee6
comparison
equal deleted inserted replaced
1015:af9879d72310 1016:d6e259e76de6
48 }, 48 },
49 'filterpanel button[action=reset]': { 49 'filterpanel button[action=reset]': {
50 // Map click event on Button. 50 // Map click event on Button.
51 click: this.reset 51 click: this.reset
52 }, 52 },
53 'filterpanel button[action=details]': {
54 click: this.showDetails
55 },
56 'filterpanel button[action=manage]': {
57 click: this.showManagement
58 },
59 'filterpanel checkbox[name=favorites]': {
60 change: this.triggerFilterUpdate
61 },
62 'filterpanel button[action=savedefault]': {
63 click: this.saveFilterDefaults
64 },
65 'filterpanel button[action=resetdefault]': {
66 click: this.resetFilterDefaults
67 },
53 'menuitem[action=about]': { 68 'menuitem[action=about]': {
54 // Map click event on Button. 69 // Map click event on Button.
55 click: this.about 70 click: this.about
56 } 71 }
57 }); 72 });
66 * Two possibilities exist to do so: Proben/Messprogramme where dynamic columns exist, but the 81 * Two possibilities exist to do so: Proben/Messprogramme where dynamic columns exist, but the
67 * content remains of the same type and Stammdaten, were columns are fixed but the type might 82 * content remains of the same type and Stammdaten, were columns are fixed but the type might
68 * vary between orte, kategorien, ... 83 * vary between orte, kategorien, ...
69 */ 84 */
70 selectSql: function(element, record) { 85 selectSql: function(element, record) {
71 var filters = element.up('panel[name=main]').down('fieldset[name=filtervariables]'); 86 var filters = element.up('panel[name=main]').down('panel[name=filtervariables]');
87 var filterValues = element.up('panel[name=main]').down('panel[name=filtervalues]');
72 88
73 if (!record[0]) { 89 if (!record[0]) {
74 return; 90 return;
75 } 91 }
76 // Set "Filter Auswahl" Description 92 // Set "Filter Auswahl" Description
155 * 171 *
156 * Iterate over all configured filters and add filters dynamically 172 * Iterate over all configured filters and add filters dynamically
157 * 173 *
158 * 1. Empty filters 174 * 1. Empty filters
159 */ 175 */
160 filters.removeAll(); 176 filterValues.removeAll();
161 var hide = true; 177 var hide = true;
162 /* 2. Iterate over all configured filters */ 178 /* 2. Iterate over all configured filters */
163 var j; 179 var j;
164 for (j = 0; j < filterFields.length; j++) { 180 for (j = 0; j < filterFields.length; j++) {
165 var type = filterFields[j].type; 181 var type = filterFields[j].type;
166 var name = filterFields[j].dataIndex; 182 var name = filterFields[j].dataIndex;
167 var label = filterFields[j].label; 183 var label = filterFields[j].label;
168 var multi = filterFields[j].multiSelect; 184 var multi = filterFields[j].multiSelect;
185 var filterId = filterFields[j].id;
169 var field = null; 186 var field = null;
187 var value = filterFields[j].value;
170 if (type === 'text') { 188 if (type === 'text') {
171 field = Ext.create('Ext.form.field.Text', { 189 field = Ext.create('Ext.form.field.Text', {
172 name: name, 190 name: name,
173 fieldLabel: label 191 fieldLabel: label,
192 filterId: filterId,
193 value: value
174 }); 194 });
175 } 195 }
176 else if (type === 'number') { 196 else if (type === 'number') {
177 field = Ext.create('Ext.form.field.Number', { 197 field = Ext.create('Ext.form.field.Number', {
178 name: name, 198 name: name,
179 labelWidth: 135, 199 labelWidth: 135,
180 fieldLabel: label 200 fieldLabel: label,
201 filterId: filterId,
202 value: value
181 }); 203 });
182 } 204 }
183 else if (type === 'datetime') { 205 else if (type === 'datetime') {
184 field = Ext.create('Lada.view.widget.Datetime', { 206 field = Ext.create('Lada.view.widget.Datetime', {
185 name: name, 207 name: name,
186 labelWidth: 135, 208 labelWidth: 135,
187 fieldLabel: label 209 fieldLabel: label,
210 filterId: filterId,
211 value: value
188 }); 212 });
189 } 213 }
190 else if (type === 'bool') { 214 else if (type === 'bool') {
191 field = Ext.create('Lada.view.widget.Testdatensatz', { 215 field = Ext.create('Lada.view.widget.Testdatensatz', {
192 name: name, 216 name: name,
193 labelWidth: 135, 217 labelWidth: 135,
194 fieldLabel: label, 218 fieldLabel: label,
219 value: value,
220 filterId: filterId,
195 emptyText: '' 221 emptyText: ''
196 }); 222 });
197 } 223 }
198 else if (type === 'listmst') { 224 else if (type === 'listmst') {
199 field = Ext.create('Lada.view.widget.Messstelle', { 225 field = Ext.create('Lada.view.widget.Messstelle', {
200 name: name, 226 name: name,
201 labelWidth: 135, 227 labelWidth: 135,
202 fieldLabel: label, 228 fieldLabel: label,
203 multiSelect: multi 229 multiSelect: multi,
230 filterId: filterId,
231 value: value
204 }); 232 });
205 } 233 }
206 else if (type === 'listumw') { 234 else if (type === 'listumw') {
207 field = Ext.create('Lada.view.widget.Umwelt', { 235 field = Ext.create('Lada.view.widget.Umwelt', {
208 name: name, 236 name: name,
209 labelWidth: 135, 237 labelWidth: 135,
210 fieldLabel: label, 238 fieldLabel: label,
239 value: value,
240 filterId: filterId,
211 multiSelect: multi, 241 multiSelect: multi,
212 displayTpl: Ext.create('Ext.XTemplate', 242 displayTpl: Ext.create('Ext.XTemplate',
213 '<tpl for=".">{id} </tpl>') 243 '<tpl for=".">{id} </tpl>')
214 }); 244 });
215 } 245 }
216 else if (type === 'listdbasis') { 246 else if (type === 'listdbasis') {
217 field = Ext.create('Lada.view.widget.Datenbasis', { 247 field = Ext.create('Lada.view.widget.Datenbasis', {
218 name: name, 248 name: name,
219 labelWidth: 135, 249 labelWidth: 135,
220 fieldLabel: label, 250 fieldLabel: label,
251 value: value,
252 filterId: filterId,
221 multiSelect: multi 253 multiSelect: multi
222 }); 254 });
223 } 255 }
224 else if (type === 'listver') { 256 else if (type === 'listver') {
225 field = Ext.create('Lada.view.widget.Verwaltungseinheit', { 257 field = Ext.create('Lada.view.widget.Verwaltungseinheit', {
226 name: name, 258 name: name,
227 labelWidth: 135, 259 labelWidth: 135,
228 fieldLabel: label, 260 fieldLabel: label,
261 value: value,
262 filterId: filterId,
229 multiSelect: multi 263 multiSelect: multi
230 }); 264 });
231 } 265 }
232 else if (type === 'listnetz') { 266 else if (type === 'listnetz') {
233 field = Ext.create('Lada.view.widget.Netzbetreiber', { 267 field = Ext.create('Lada.view.widget.Netzbetreiber', {
234 name: name, 268 name: name,
235 labelWidth: 135, 269 labelWidth: 135,
236 fieldLabel: label, 270 fieldLabel: label,
271 value: value,
272 filterId: filterId,
237 multiSelect: multi 273 multiSelect: multi
238 }); 274 });
239 } 275 }
240 if (field) { 276 if (field) {
241 filters.add(field); 277 filterValues.add(field);
242 filters.show(); 278 filters.show();
243 hide = false; 279 hide = false;
244 } 280 }
245 } 281 }
246 if (hide) { 282 if (hide) {
253 * will perform a search to the server on refreshes the result list. 289 * will perform a search to the server on refreshes the result list.
254 * To do so it replaces the store of the Resultgrids. 290 * To do so it replaces the store of the Resultgrids.
255 */ 291 */
256 search: function(element) { 292 search: function(element) {
257 var resultGrid = element.up('panel[name=main]').down('panel[name=contentpanel]').down('grid'); 293 var resultGrid = element.up('panel[name=main]').down('panel[name=contentpanel]').down('grid');
258 var filters = element.up('panel[name=main]').down('fieldset[name=filtervariables]'); 294 var filters = element.up('panel[name=main]').down('panel[name=filtervalues]');
259 var search = element.up('fieldset').down('combobox[name=filter]'); 295 var search = element.up('fieldset').down('combobox[name=filter]');
260 296
261 //Type of the search Proben/Messprogramme/Stammdaten 297 //Type of the search Proben/Messprogramme/Stammdaten
262 var type = search.store.getById(search.getValue()).get('type') 298 var type = search.store.getById(search.getValue()).get('type');
263 299
264 // Get search parameters: 300 // Get search parameters:
265 var searchParams = {}; 301 var searchParams = {};
266 searchParams['qid'] = search.getValue(); 302 searchParams['qid'] = search.getValue();
267 for (var i = filters.items.length - 1; i >= 0; i--) { 303 for (var i = filters.items.length - 1; i >= 0; i--) {
338 374
339 /** 375 /**
340 * This function resets the filters 376 * This function resets the filters
341 */ 377 */
342 reset: function(element) { 378 reset: function(element) {
343 var filters = element.up('panel[name=main]').down('fieldset[name=filtervariables]'); 379 var filters = element.up('panel[name=main]').down('panel[name=filtervalues]');
380 var search = element.up('fieldset').down('combobox[name=filter]');
381
382 //Type of the search Proben/Messprogramme/Stammdaten
383 var qId = search.getValue();
384 var query = search.store.getById(qId);
344 for (var i = filters.items.length - 1; i >= 0; i--) { 385 for (var i = filters.items.length - 1; i >= 0; i--) {
345 var filter = filters.items.items[i]; 386 var filter = filters.items.items[i];
346 if (filter.clearValue) { 387 for (var j = 0; j < query.data.filters.length; j++) {
347 filter.clearValue(); 388 if (filter.filterId === query.data.filters[j].id) {
348 } 389 filter.setValue(query.data.filters[j].value);
349 else { 390 }
350 filter.setValue('');
351 } 391 }
352 } 392 }
353 }, 393 },
354 /** 394 /**
355 * This Function is supposed to handle the About action 395 * This Function is supposed to handle the About action
356 * It has no function yet. 396 * It has no function yet.
357 */ 397 */
358 about: function() { 398 about: function() {
359 var win = Ext.create('Lada.view.window.About'); 399 var win = Ext.create('Lada.view.window.About');
360 win.show(); 400 win.show();
401 },
402
403 showDetails: function(element) {
404 var search = element.up('fieldset').down('combobox[name=filter]');
405 var details = element.up('panel[name=main]').down('filterdetails');
406
407 //Type of the search Proben/Messprogramme/Stammdaten
408 var record = search.store.getById(search.getValue());
409 details.setRecord(record);
410 if (element.pressed) {
411 details.show();
412 }
413 else {
414 details.hide();
415 }
416 },
417
418 showManagement: function() {
419 if (!this.managementWindow) {
420 this.managementWindow = Ext.create('Lada.view.window.FilterManagement');
421 }
422 this.managementWindow.show();
423 },
424
425 triggerFilterUpdate: function(checkbox) {
426 var cbox = checkbox.up('fieldset').down('combobox[name=filter]');
427 this.updateFilter(cbox);
428 },
429
430 updateFilter: function(combobox) {
431 var store;
432 var entries;
433 var fav = combobox.up('fieldset').down('checkbox[name=favorites]');
434 if (this.mode === 'proben') {
435 store = Ext.StoreManager.get('probequeries');
436 }
437 else if (this.mode === 'messprogramme') {
438 store = Ext.StoreManager.get('messprogrammqueries');
439 }
440 else if (this.mode === 'stammdaten') {
441 store = Ext.StoreManager.get('stammdatenqueries');
442 }
443 else {
444 return;
445 }
446 if (fav.checked) {
447 entries = store.queryBy(function(record) {
448 if (record.get('favorite')) {
449 return true;
450 }
451 });
452 }
453 else {
454 entries = store.queryBy(function() {
455 return true;
456 });
457 }
458 combobox.store.removeAll();
459 combobox.store.add(entries.items);
460 combobox.select(combobox.store.getAt(0));
461 combobox.fireEvent('select', combobox, [combobox.store.getAt(0)]);
462 },
463
464 saveFilterDefaults: function(button) {
465 var filters = button.up('fieldset').down('panel[name=filtervalues]');
466
467 var search = button.up('fieldset').down('combobox[name=filter]');
468
469 //Type of the search Proben/Messprogramme/Stammdaten
470 var qId = search.getValue();
471 var query = search.store.getById(qId);
472 var ndx = 0;
473 for (var i = filters.items.length - 1; i >= 0; i--) {
474 var filter = filters.items.items[i];
475 var filterId = filter.filterId;
476 var value = filter.getValue();
477 if (value instanceof Array) {
478 value = value.join(',');
479 }
480 Ext.Ajax.request({
481 url: 'lada-server/rest/filter',
482 method: 'PUT',
483 jsonData: {
484 id: filterId,
485 value: value
486 },
487 success: function() {
488 ndx++;
489 for (var j = 0; j < query.data.filters.length; i++) {
490 if (query.data.filters[j].id === filterId) {
491 query.data.filters[j].value = value;
492 break;
493 }
494 }
495 if (ndx < filter.items.length - 1) {
496 return;
497 }
498 if (query.get('type') === 'probe') {
499 Ext.StoreManager.get('probequeries').load();
500 }
501 else if (query.get('type') === 'messprogramm') {
502 Ext.StoreManager.get('messprogrammqueries').load();
503 }
504 else {
505 Ext.StoreManager.get('stammdatenqueries').load();
506 }
507 }
508 });
509 }
510 },
511
512 resetFilterDefaults: function(button) {
513 var filters = button.up('fieldset').down('panel[name=filtervalues]');
514
515 var search = button.up('fieldset').down('combobox[name=filter]');
516
517 var qId = search.getValue();
518 var query = search.store.getById(qId);
519 for (var i = filters.items.length - 1; i >= 0; i--) {
520 var filter = filters.items.items[i];
521 var filterId = filter.filterId;
522 var value = filter.getValue();
523 if (value instanceof Array) {
524 value = value.join(',');
525 }
526 Ext.Ajax.request({
527 url: 'lada-server/rest/filter/' + filterId,
528 method: 'DELETE',
529 success: function(response) {
530 var json = Ext.decode(response.responseText);
531 if (!json.success) {
532 return;
533 }
534 filter.setValue(json.data.value);
535 for (var j = 0; j < query.data.filters.length; j++) {
536 if (query.data.filters[j].id === json.data.id) {
537 query.data.filters[j].value = json.data.value;
538 break;
539 }
540 }
541 if (query.get('type') === 'probe') {
542 Ext.StoreManager.get('probequeries').reload();
543 }
544 else if (query.get('type') === 'messprogramm') {
545 Ext.StoreManager.get('messprogrammqueries').reload();
546 }
547 else {
548 Ext.StoreManager.get('stammdatenqueries').reload();
549 }
550 }
551 });
552 }
361 } 553 }
362 }); 554 });

http://lada.wald.intevation.org