torsten@472: /* Copyright (C) 2013 by Bundesamt fuer Strahlenschutz torsten@472: * Software engineering by Intevation GmbH torsten@472: * torsten@472: * This file is Free Software under the GNU GPL (v>=3) torsten@472: * and comes with ABSOLUTELY NO WARRANTY! Check out torsten@472: * the documentation coming with IMIS-Labordaten-Application for details. torsten@472: */ torsten@472: torsten@31: var queries = new Array('query1', 'query2'); torsten@246: torsten@294: /** torsten@294: * Controller for the Search torsten@294: * This controller handles all logic related to the search torsten@294: */ torsten@6: Ext.define('Lada.controller.Sql', { torsten@6: extend: 'Ext.app.Controller', torsten@8: stores: [ torsten@235: 'Proben', // List of found Proben torsten@374: 'ProbenList', // List of found Proben torsten@386: 'Queries', rrenkert@422: 'Info' torsten@8: ], torsten@369: requires: [ torsten@369: 'Lada.view.widgets.Mst', torsten@369: 'Lada.view.widgets.Uwb', torsten@386: 'Lada.view.widgets.Datetime', torsten@386: 'Lada.view.About' torsten@369: ], torsten@6: init: function() { torsten@6: console.log('Initialising the Sql controller'); torsten@6: this.control({ torsten@6: // CSS like selector to select element in the viewport. See torsten@6: // ComponentQuery documentation for more details. torsten@31: '#search': { torsten@6: // Map the "render" event to the given function. torsten@6: render: this.onPanelRendered, torsten@6: // Map Doubleclick on rows of the probenlist. torsten@28: select: this.selectSql torsten@31: }, torsten@31: '#SearchBtn': { torsten@31: // Map click event on Button. torsten@31: click: this.search torsten@31: }, torsten@31: '#ResetBtn': { torsten@31: // Map click event on Button. torsten@31: click: this.reset torsten@386: }, torsten@386: '#AboutBtn': { torsten@386: // Map click event on Button. torsten@386: click: this.about torsten@6: } torsten@6: }); torsten@6: }, torsten@6: onPanelRendered: function() { torsten@6: console.log('The panel was rendered'); torsten@6: }, torsten@294: /** torsten@294: * Function called when the user selects a SQL query in the dropdownlist. torsten@294: * The function will hide/display additional element related to the torsten@294: * selected search query torsten@294: */ torsten@28: selectSql: function(element, record, index) { torsten@241: var result = Ext.getCmp('result'); torsten@246: var filters = Ext.getCmp('queryfilters'); torsten@252: var sqlquery = Ext.getCmp('sqlquery'); torsten@252: var sqldesc = Ext.getCmp('sqldesc'); torsten@31: var buttons = Ext.getCmp('SearchBtnPanel'); torsten@253: var displayFields = record[0].data.results; torsten@246: var filterFields = record[0].data.filters; torsten@253: torsten@31: this.reset(); torsten@246: torsten@252: sqlquery.setValue(record[0].data.sql); torsten@252: sqldesc.setValue(record[0].data.description); torsten@252: torsten@246: // Setup Columns of the probenlist torsten@413: displayFields.reverse(); torsten@241: result.setupColumns(displayFields); torsten@246: torsten@369: // Setup Filters of the probenlist torsten@369: // torsten@369: // Allowed types are torsten@369: // * text torsten@369: // * number torsten@369: // * datetime torsten@375: // * bool torsten@369: // * listmst torsten@369: // * listumw torsten@375: // * listver torsten@375: // * listdbasis torsten@375: // * listnetz torsten@369: // torsten@369: // Iterate over all configured filters and add filters dynamically torsten@369: // torsten@369: // 1. Empty filters torsten@369: filters.removeAll(); torsten@369: var hide = true; torsten@369: // 2. Iterate over all configured filters torsten@369: for (var j=0; j < filterFields.length; j++) { torsten@369: var type = filterFields[j].type; torsten@369: var name = filterFields[j].dataIndex; torsten@369: var label = filterFields[j].label; rrenkert@418: var multi = filterFields[j].multiSelect; torsten@369: var field = null; torsten@369: if (type == "text") { torsten@369: console.log("Found text filter"); torsten@369: field = Ext.create('Ext.form.field.Text', { name: name, fieldLabel: label }); torsten@369: } else if (type == "number") { torsten@369: console.log("Found number filter"); torsten@369: field = Ext.create('Ext.form.field.Number', { name: name, fieldLabel: label }); torsten@369: } else if (type == "datetime") { torsten@369: console.log("Found datetime filter"); torsten@369: field = Ext.create('Lada.view.widgets.Datetime', { name: name, fieldLabel: label }); torsten@375: } else if (type == "bool") { torsten@375: console.log("Found bool filter"); torsten@375: field = Ext.create('Lada.view.widgets.Testdatensatz', { name: name, fieldLabel: label, emptyText: '' }); torsten@369: } else if (type == "listmst") { torsten@369: console.log("Found listmst filter"); rrenkert@418: field = Ext.create('Lada.view.widgets.Mst', { name: name, fieldLabel: label, multiSelect: multi }); torsten@369: } else if (type == "listumw") { torsten@369: console.log("Found listumw filter"); rrenkert@418: field = Ext.create('Lada.view.widgets.Uwb', { name: name, fieldLabel: label, multiSelect: multi }); torsten@375: } else if (type == "listdbasis") { torsten@375: console.log("Found listdbasis filter"); rrenkert@418: field = Ext.create('Lada.view.widgets.Datenbasis', { name: name, fieldLabel: label, multiSelect: multi }); torsten@375: } else if (type == "listver") { torsten@375: console.log("Found listver filter"); rrenkert@418: field = Ext.create('Lada.view.widgets.Verwaltungseinheit', { name: name, fieldLabel: label, multiSelect: multi }); torsten@375: } else if (type == "listnetz") { torsten@375: console.log("Found listnetz filter"); rrenkert@418: field = Ext.create('Lada.view.widgets.Netzbetreiber', { name: name, fieldLabel: label, multiSelect: multi }); torsten@366: } torsten@369: if (field) { torsten@369: console.log("Pushing field to filters"); torsten@369: filters.add(field); torsten@369: filters.show(); torsten@369: hide = false; torsten@369: } torsten@369: } torsten@369: if (hide) { torsten@246: filters.hide(); torsten@369: } torsten@31: buttons.show(); torsten@31: }, torsten@294: /** torsten@294: * Function is called when the user clicks the search button. The function torsten@294: * will perform a search to the server on refreshes the result list. torsten@294: */ torsten@31: search: function(element, record, index) { torsten@31: var result = Ext.getCmp('result'); torsten@369: var filters = Ext.getCmp('queryfilters'); torsten@369: var search = Ext.getCmp('search'); torsten@36: torsten@36: // Get search parameters: torsten@36: var searchParams = {}; torsten@369: searchParams['qid'] = search.getValue(); torsten@369: for (var i = filters.items.length - 1; i >= 0; i--){ torsten@369: var filter = filters.items.items[i]; torsten@369: var value = filter.getValue(); torsten@378: if (value instanceof Array) { torsten@378: value = value.join(","); torsten@378: } torsten@378: searchParams[filter.getName()] = value; torsten@36: } torsten@369: console.log('Loading store with the following search params: ' + searchParams); torsten@36: result.getStore().load({ torsten@36: params: searchParams torsten@36: }); torsten@28: console.log('Store loaded'); torsten@25: result.show(); torsten@31: }, torsten@31: reset: function(element, record, index) { torsten@31: var buttons = Ext.getCmp('SearchBtnPanel'); torsten@31: var result = Ext.getCmp('result'); torsten@246: //for (var i = 0; i < queries.length; ++i) { torsten@246: // var toHide = Ext.getCmp(queries[i]); torsten@246: // toHide.hide(); torsten@246: //} torsten@147: //result.hide(); torsten@147: //buttons.hide(); torsten@386: }, torsten@386: about: function(element, record, index) { torsten@386: var info = this.getInfoStore(); torsten@386: var view = Ext.widget('about', {info: info}); torsten@6: } torsten@6: });