diff 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
line wrap: on
line diff
--- a/app/controller/Filter.js	Wed Jan 13 15:29:09 2016 +0100
+++ b/app/controller/Filter.js	Wed Jan 20 17:33:33 2016 +0100
@@ -56,28 +56,89 @@
     /**
      * Function called when the user selects a SQL query in the dropdownlist.
      * The function will hide/display additional element related to the
-     * selected search query
+     * selected search query.
+     * It also replaces the Store of the Filteresultgrid.
+     * Two possibilities exist to do so: Proben/Messprogramme where dynamic columns exist, but the
+     * content remains of the same type and Stammdaten, were columns are fixed but the type might
+     * vary between orte, kategorien, ...
      */
     selectSql: function(element, record) {
         var filters = element.up('panel[name=main]').down('fieldset[name=filtervariables]');
-        var columns = element.up('fieldset').down('displayfield[name=columns]');
+
+        // Set "Filter Auswahl" Description
         var desc = element.up('fieldset').down('displayfield[name=description]');
+        desc.setValue(record[0].data.description);
+
         this.displayFields = record[0].data.results;
         var filterFields = record[0].data.filters;
+        var contentPanel = element.up('panel[name=main]').down('panel[name=contentpanel]');
+        var queryType = record[0].get('type'); //The type of the query, might be proben, messprogramme,
+            // or a stammdatendtype
 
         this.reset(element);
 
+        contentPanel.removeAll(); //clear the panel: make space for new grids
+
+        // Set "Filter Auswahl" Columns
+        var columns = element.up('fieldset').down('displayfield[name=columns]');
         var columnString = [];
         for (var i = 0; i < this.displayFields.length; i++) {
             columnString.push(this.displayFields[i].header);
         }
         columns.setValue(columnString.join(', '));
-        desc.setValue(record[0].data.description);
 
-        // Setup Columns of the probenlist
-        this.displayFields.reverse();
+        // Setup Columns
+        if (this.displayFields) {
+            this.displayFields.reverse();
+        }
 
-        /* Setup Filters of the probenlist
+        if (queryType == 'probe' || queryType == 'messprogramm') {
+            // Dynamic Grids
+            // We need to set both grid and Store.
+            var frgrid; // The Resultgrid
+            var gridstore; // The Store which will be used in the resultgrid.
+
+            switch (queryType) {
+                case 'probe':
+                    gridstore = Ext.create('Lada.store.ProbenList');
+                    frgrid = Ext.create('Lada.view.grid.ProbeList');
+                    break;
+                case 'messprogramm':
+                    gridstore = Ext.create('Lada.store.MessprogrammeList');
+                    frgrid = Ext.create('Lada.view.grid.MessprogrammeList');
+                    break;
+            }
+
+            if (gridstore) {
+                frgrid.setStore(gridstore);
+            }
+
+            contentPanel.add(frgrid);
+        }
+        else {
+            // Grids which are not build with dynamic columns
+            // The store is configured in each grid, hence we only need to set the
+            // grid
+            var resultGrid;
+            switch (queryType) {
+                case 'messprogrammkategorie':
+                    resultGrid = Ext.create('Lada.view.grid.MessprogrammKategorie');
+                    break;
+                case 'datensatzerzeuger':
+                    resultGrid = Ext.create('Lada.view.grid.DatensatzErzeuger');
+                    break;
+                case 'ort':
+                    resultGrid = Ext.create('Lada.view.grid.Ort');
+                    break;
+                case 'probenehmer':
+                    resultGrid = Ext.create('Lada.view.grid.Probenehmer');
+                    break;
+            }
+            if (resultGrid) {
+                contentPanel.add(resultGrid);
+            }
+        }
+        /* Setup Filters
          *
          * Allowed types are
          * * text
@@ -188,12 +249,16 @@
     /**
      * Function is called when the user clicks the search button. The function
      * will perform a search to the server on refreshes the result list.
+     * To do so it replaces the store of the Resultgrids.
      */
     search: function(element) {
-        var resultGrid = element.up('panel[name=main]').down('filterresultgrid');
+        var resultGrid = element.up('panel[name=main]').down('panel[name=contentpanel]').down('grid');
         var filters = element.up('panel[name=main]').down('fieldset[name=filtervariables]');
         var search = element.up('fieldset').down('combobox[name=filter]');
 
+        //Type of the search Proben/Messprogramme/Stammdaten
+        var type = search.store.getById(search.getValue()).get('type')
+
         // Get search parameters:
         var searchParams = {};
         searchParams['qid'] = search.getValue();
@@ -205,15 +270,28 @@
             }
             searchParams[filter.getName()] = value;
         }
-        // Retrieve the mode
-        var modes = element.up('panel[name=main]').down('radiogroup').getChecked();
-        var sname = modes[0].inputValue;
 
-        if (sname === 'ProbeList') {
-            sname = 'Lada.store.ProbenList';
-        }
-        else if (sname === 'MessprogrammList') {
-            sname = 'Lada.store.MessprogrammeList';
+        //Store depends of the Type...
+        // TODO the switchcasese should be unified withj those in SelectSql
+        switch (type) {
+            case 'probe':
+                sname = 'Lada.store.ProbenList';
+                break;
+            case 'messprogramm':
+                sname = 'Lada.store.MessprogrammeList';
+                break;
+            case 'messprogrammkategorie':
+                sname = 'Lada.store.MessprogrammKategorie';
+                break;
+            case 'datensatzerzeuger':
+                sname = 'Lada.store.DatensatzErzeuger';
+                break;
+            case 'ort':
+                sname = 'Lada.store.Ort';
+                break;
+            case 'probenehmer':
+                sname = 'Lada.store.Probenehmer';
+                break;
         }
 
         // Find the store or create a new one.
@@ -224,8 +302,16 @@
         if (store) {
             store.addListener('beforeload', this.loadingAnimationOn, resultGrid);
             store.addListener('load', this.loadingAnimationOff, resultGrid);
+
             resultGrid.setStore(store);
-            resultGrid.setupColumns(this.displayFields);
+            //TODO: Check if this is still necessary, as a Grid exists
+            // for each Type.
+
+            if (resultGrid.isDynamic) {
+               //only the dynamic resultgrid can and needs to do the following:
+               resultGrid.setupColumns(this.displayFields);
+            }
+
             resultGrid.getStore().proxy.extraParams = searchParams;
             resultGrid.getStore().load();
             resultGrid.show();

http://lada.wald.intevation.org