changeset 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 d8e74bd89d6b
files app/controller/Filter.js app/controller/ModeSwitcher.js app/view/FilterPanel.js app/view/widget/base/CheckBox.js app/view/widget/base/ComboBox.js app/view/widget/base/DateField.js app/view/widget/base/Datetime.js app/view/widget/base/TextField.js
diffstat 8 files changed, 269 insertions(+), 18 deletions(-) [+]
line wrap: on
line diff
--- a/app/controller/Filter.js	Tue Feb 02 15:25:16 2016 +0100
+++ b/app/controller/Filter.js	Tue Feb 02 15:26:43 2016 +0100
@@ -50,6 +50,21 @@
                 // Map click event on Button.
                 click: this.reset
             },
+            'filterpanel button[action=details]': {
+                click: this.showDetails
+            },
+            'filterpanel button[action=manage]': {
+                click: this.showManagement
+            },
+            'filterpanel checkbox[name=favorites]': {
+                change: this.triggerFilterUpdate
+            },
+            'filterpanel button[action=savedefault]': {
+                click: this.saveFilterDefaults
+            },
+            'filterpanel button[action=resetdefault]': {
+                click: this.resetFilterDefaults
+            },
             'menuitem[action=about]': {
                 // Map click event on Button.
                 click: this.about
@@ -68,7 +83,8 @@
      * vary between orte, kategorien, ...
      */
     selectSql: function(element, record) {
-        var filters = element.up('panel[name=main]').down('fieldset[name=filtervariables]');
+        var filters = element.up('panel[name=main]').down('panel[name=filtervariables]');
+        var filterValues = element.up('panel[name=main]').down('panel[name=filtervalues]');
 
         if (!record[0]) {
             return;
@@ -157,7 +173,7 @@
          *
          *  1. Empty filters
          */
-        filters.removeAll();
+        filterValues.removeAll();
         var hide = true;
         /* 2. Iterate over all configured filters */
         var j;
@@ -166,25 +182,33 @@
             var name = filterFields[j].dataIndex;
             var label = filterFields[j].label;
             var multi = filterFields[j].multiSelect;
+            var filterId = filterFields[j].id;
             var field = null;
+            var value = filterFields[j].value;
             if (type === 'text') {
                 field = Ext.create('Ext.form.field.Text', {
                     name: name,
-                    fieldLabel: label
+                    fieldLabel: label,
+                    filterId: filterId,
+                    value: value
                 });
             }
             else if (type === 'number') {
                 field = Ext.create('Ext.form.field.Number', {
                     name: name,
                     labelWidth: 135,
-                    fieldLabel: label
+                    fieldLabel: label,
+                    filterId: filterId,
+                    value: value
                 });
             }
             else if (type === 'datetime') {
                 field = Ext.create('Lada.view.widget.Datetime', {
                     name: name,
                     labelWidth: 135,
-                    fieldLabel: label
+                    fieldLabel: label,
+                    filterId: filterId,
+                    value: value
                 });
             }
             else if (type === 'bool') {
@@ -192,6 +216,8 @@
                     name: name,
                     labelWidth: 135,
                     fieldLabel: label,
+                    value: value,
+                    filterId: filterId,
                     emptyText: ''
                 });
             }
@@ -200,7 +226,9 @@
                     name: name,
                     labelWidth: 135,
                     fieldLabel: label,
-                    multiSelect: multi
+                    multiSelect: multi,
+                    filterId: filterId,
+                    value: value
                 });
             }
             else if (type === 'listumw') {
@@ -208,6 +236,8 @@
                     name: name,
                     labelWidth: 135,
                     fieldLabel: label,
+                    value: value,
+                    filterId: filterId,
                     multiSelect: multi,
                     displayTpl: Ext.create('Ext.XTemplate',
                      '<tpl for=".">{id} </tpl>')
@@ -218,6 +248,8 @@
                     name: name,
                     labelWidth: 135,
                     fieldLabel: label,
+                    value: value,
+                    filterId: filterId,
                     multiSelect: multi
                 });
             }
@@ -226,6 +258,8 @@
                     name: name,
                     labelWidth: 135,
                     fieldLabel: label,
+                    value: value,
+                    filterId: filterId,
                     multiSelect: multi
                 });
             }
@@ -234,11 +268,13 @@
                     name: name,
                     labelWidth: 135,
                     fieldLabel: label,
+                    value: value,
+                    filterId: filterId,
                     multiSelect: multi
                 });
             }
             if (field) {
-                filters.add(field);
+                filterValues.add(field);
                 filters.show();
                 hide = false;
             }
@@ -255,11 +291,11 @@
      */
     search: function(element) {
         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 filters = element.up('panel[name=main]').down('panel[name=filtervalues]');
         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')
+        var type = search.store.getById(search.getValue()).get('type');
 
         // Get search parameters:
         var searchParams = {};
@@ -340,14 +376,18 @@
      * This function resets the filters
      */
     reset: function(element) {
-        var filters = element.up('panel[name=main]').down('fieldset[name=filtervariables]');
+        var filters = element.up('panel[name=main]').down('panel[name=filtervalues]');
+        var search = element.up('fieldset').down('combobox[name=filter]');
+
+        //Type of the search Proben/Messprogramme/Stammdaten
+        var qId = search.getValue();
+        var query = search.store.getById(qId);
         for (var i = filters.items.length - 1; i >= 0; i--) {
             var filter = filters.items.items[i];
-            if (filter.clearValue) {
-                filter.clearValue();
-            }
-            else {
-                filter.setValue('');
+            for (var j = 0; j < query.data.filters.length; j++) {
+                if (filter.filterId === query.data.filters[j].id) {
+                    filter.setValue(query.data.filters[j].value);
+                }
             }
         }
     },
@@ -358,5 +398,157 @@
     about: function() {
         var win = Ext.create('Lada.view.window.About');
         win.show();
+    },
+
+    showDetails: function(element) {
+        var search = element.up('fieldset').down('combobox[name=filter]');
+        var details = element.up('panel[name=main]').down('filterdetails');
+
+        //Type of the search Proben/Messprogramme/Stammdaten
+        var record = search.store.getById(search.getValue());
+        details.setRecord(record);
+        if (element.pressed) {
+            details.show();
+        }
+        else {
+            details.hide();
+        }
+    },
+
+    showManagement: function() {
+        if (!this.managementWindow) {
+            this.managementWindow = Ext.create('Lada.view.window.FilterManagement');
+        }
+        this.managementWindow.show();
+    },
+
+    triggerFilterUpdate: function(checkbox) {
+        var cbox = checkbox.up('fieldset').down('combobox[name=filter]');
+        this.updateFilter(cbox);
+    },
+
+    updateFilter: function(combobox) {
+        var store;
+        var entries;
+        var fav = combobox.up('fieldset').down('checkbox[name=favorites]');
+        if (this.mode === 'proben') {
+            store = Ext.StoreManager.get('probequeries');
+        }
+        else if (this.mode === 'messprogramme') {
+            store = Ext.StoreManager.get('messprogrammqueries');
+        }
+        else if (this.mode === 'stammdaten') {
+            store = Ext.StoreManager.get('stammdatenqueries');
+        }
+        else {
+            return;
+        }
+        if (fav.checked) {
+            entries = store.queryBy(function(record) {
+                if (record.get('favorite')) {
+                    return true;
+                }
+            });
+        }
+        else {
+            entries = store.queryBy(function() {
+                return true;
+            });
+        }
+        combobox.store.removeAll();
+        combobox.store.add(entries.items);
+        combobox.select(combobox.store.getAt(0));
+        combobox.fireEvent('select', combobox, [combobox.store.getAt(0)]);
+    },
+
+    saveFilterDefaults: function(button) {
+        var filters = button.up('fieldset').down('panel[name=filtervalues]');
+
+        var search = button.up('fieldset').down('combobox[name=filter]');
+
+        //Type of the search Proben/Messprogramme/Stammdaten
+        var qId = search.getValue();
+        var query = search.store.getById(qId);
+        var ndx = 0;
+        for (var i = filters.items.length - 1; i >= 0; i--) {
+            var filter = filters.items.items[i];
+            var filterId = filter.filterId;
+            var value = filter.getValue();
+            if (value instanceof Array) {
+                value = value.join(',');
+            }
+            Ext.Ajax.request({
+                url: 'lada-server/rest/filter',
+                method: 'PUT',
+                jsonData: {
+                    id: filterId,
+                    value: value
+                },
+                success: function() {
+                    ndx++;
+                    for (var j = 0; j < query.data.filters.length; i++) {
+                        if (query.data.filters[j].id === filterId) {
+                            query.data.filters[j].value = value;
+                            break;
+                        }
+                    }
+                    if (ndx < filter.items.length - 1) {
+                        return;
+                    }
+                    if (query.get('type') === 'probe') {
+                        Ext.StoreManager.get('probequeries').load();
+                    }
+                    else if (query.get('type') === 'messprogramm') {
+                        Ext.StoreManager.get('messprogrammqueries').load();
+                    }
+                    else {
+                        Ext.StoreManager.get('stammdatenqueries').load();
+                    }
+                }
+            });
+        }
+    },
+
+    resetFilterDefaults: function(button) {
+        var filters = button.up('fieldset').down('panel[name=filtervalues]');
+
+        var search = button.up('fieldset').down('combobox[name=filter]');
+
+        var qId = search.getValue();
+        var query = search.store.getById(qId);
+        for (var i = filters.items.length - 1; i >= 0; i--) {
+            var filter = filters.items.items[i];
+            var filterId = filter.filterId;
+            var value = filter.getValue();
+            if (value instanceof Array) {
+                value = value.join(',');
+            }
+            Ext.Ajax.request({
+                url: 'lada-server/rest/filter/' + filterId,
+                method: 'DELETE',
+                success: function(response) {
+                    var json = Ext.decode(response.responseText);
+                    if (!json.success) {
+                        return;
+                    }
+                    filter.setValue(json.data.value);
+                    for (var j = 0; j < query.data.filters.length; j++) {
+                        if (query.data.filters[j].id === json.data.id) {
+                            query.data.filters[j].value = json.data.value;
+                            break;
+                        }
+                    }
+                    if (query.get('type') === 'probe') {
+                        Ext.StoreManager.get('probequeries').reload();
+                    }
+                    else if (query.get('type') === 'messprogramm') {
+                        Ext.StoreManager.get('messprogrammqueries').reload();
+                    }
+                    else {
+                        Ext.StoreManager.get('stammdatenqueries').reload();
+                    }
+                }
+            });
+        }
     }
 });
--- a/app/controller/ModeSwitcher.js	Tue Feb 02 15:25:16 2016 +0100
+++ b/app/controller/ModeSwitcher.js	Tue Feb 02 15:26:43 2016 +0100
@@ -42,8 +42,9 @@
      */
     switchModes: function(field) {
         var cbox = field.up('modeswitcher').up().down('combobox');
-        filters = field.up('panel[name=main]').down('fieldset[name=filtervariables]');
-        filters.removeAll();
+        var filterValues = field.up('panel[name=main]').down('panel[name=filtervalues]');
+        var filters = field.up('panel[name=main]').down('panel[name=filtervariables]');
+        filterValues.removeAll();
         filters.hide();
 
         var filterController = this.getController('Lada.controller.Filter');
--- a/app/view/FilterPanel.js	Tue Feb 02 15:25:16 2016 +0100
+++ b/app/view/FilterPanel.js	Tue Feb 02 15:26:43 2016 +0100
@@ -58,7 +58,36 @@
         }, {
             xtype: 'panel',
             border: false,
-            margin: '0 0 10 0',
+            name: 'filtervariables',
+            hidden: true,
+            margin: '10, 0, 10, 0',
+            items: [{
+                xtype: 'panel',
+                border: false,
+                name: 'filtervalues',
+                items: []
+            }, {
+
+                layout: {
+                    type: 'hbox',
+                    pack: 'end'
+                },
+                border: false,
+                items: [{
+                    xtype: 'button',
+                    action: 'savedefault',
+                    text: 'Vorbelegung speichern',
+                    margin: '0, 10, 0, 0'
+                }, {
+                    xtype: 'button',
+                    action: 'resetdefault',
+                    text: 'Vorbelegung löschen'
+                }]
+            }]
+        }, {
+            xtype: 'panel',
+            border: false,
+            margin: '10 0 10 0',
             items: [{
                 xtype: 'button',
                 action: 'search',
--- a/app/view/widget/base/CheckBox.js	Tue Feb 02 15:25:16 2016 +0100
+++ b/app/view/widget/base/CheckBox.js	Tue Feb 02 15:26:43 2016 +0100
@@ -94,6 +94,10 @@
         return this.down('checkbox').getValue();
     },
 
+    setValue: function(value) {
+        this.down('checkbox').setValue(value);
+    },
+
     getName: function() {
         return this.name;
     },
--- a/app/view/widget/base/ComboBox.js	Tue Feb 02 15:25:16 2016 +0100
+++ b/app/view/widget/base/ComboBox.js	Tue Feb 02 15:26:43 2016 +0100
@@ -43,6 +43,7 @@
             readOnly: this.readOnly,
             forceSelection: this.forceSelection || false,
             msgTarget: 'none',
+            value: this.value,
             tpl: this.tpl,
             displayTpl: this.displayTpl
         }, {
@@ -108,6 +109,10 @@
         return this.down('combobox').getValue();
     },
 
+    setValue: function(value) {
+        this.down('combobox').setValue(value);
+    },
+
     clearValue: function() {
         this.down('combobox').clearValue();
     },
--- a/app/view/widget/base/DateField.js	Tue Feb 02 15:25:16 2016 +0100
+++ b/app/view/widget/base/DateField.js	Tue Feb 02 15:26:43 2016 +0100
@@ -98,6 +98,10 @@
         return this.down('datefield').getValue();
     },
 
+    setValue: function(value) {
+        this.down('datefield').setValue(value);
+    },
+
     clearValue: function() {
         this.down('datefield').clearValue();
     },
--- a/app/view/widget/base/Datetime.js	Tue Feb 02 15:25:16 2016 +0100
+++ b/app/view/widget/base/Datetime.js	Tue Feb 02 15:26:43 2016 +0100
@@ -92,6 +92,14 @@
         }
     },
 
+    getValue: function() {
+        return this.down('datetimefield').getValue();
+    },
+
+    setValue: function(value) {
+        this.down('datetimefield').setValue(value);
+    },
+
     clearWarningOrError: function() {
         this.down('datetimefield').clearInvalid();
         this.down('image[name=errorImg]').hide();
--- a/app/view/widget/base/TextField.js	Tue Feb 02 15:25:16 2016 +0100
+++ b/app/view/widget/base/TextField.js	Tue Feb 02 15:26:43 2016 +0100
@@ -84,6 +84,14 @@
         }
     },
 
+    getValue: function() {
+        return this.down('textfield').getValue();
+    },
+
+    setValue: function(value) {
+        this.down('textfield').setValue(value);
+    },
+
     clearWarningOrError: function() {
         this.down('image[name=errorImg]').hide();
         this.down('image[name=warnImg]').hide();

http://lada.wald.intevation.org