raimund@1076: /* Copyright (C) 2013 by Bundesamt fuer Strahlenschutz raimund@1076: * Software engineering by Intevation GmbH raimund@1076: * raimund@1076: * This file is Free Software under the GNU GPL (v>=3) raimund@1076: * and comes with ABSOLUTELY NO WARRANTY! Check out raimund@1076: * the documentation coming with IMIS-Labordaten-Application for details. raimund@1076: */ raimund@1076: raimund@1076: /** raimund@1076: * Controller for the MessungList result grid. raimund@1076: */ raimund@1076: Ext.define('Lada.controller.grid.MessungList', { raimund@1076: extend: 'Ext.app.Controller', raimund@1076: requires: [ tom@1157: 'Lada.view.window.SetStatus', raimund@1076: 'Lada.view.window.ProbeEdit' raimund@1076: ], raimund@1076: raimund@1076: /** raimund@1076: * Initialize the Controller with listeners raimund@1076: */ raimund@1076: init: function() { raimund@1076: this.control({ raimund@1076: 'messunglistgrid': { raimund@1076: itemdblclick: this.editItem, raimund@1076: select: this.activateButtons, raimund@1076: deselect: this.deactivateButtons raimund@1082: }, raimund@1082: 'messunglistgrid toolbar button[action=setstatus]': { raimund@1082: click: this.setStatus raimund@1400: }, raimund@1400: 'messunglistgrid pagingtoolbar': { raimund@1400: change: this.pageChange raimund@1076: } raimund@1076: }); raimund@1076: this.callParent(arguments); raimund@1076: }, raimund@1076: raimund@1076: /** raimund@1082: * Sets the Status on Bulk raimund@1082: **/ raimund@1082: setStatus: function(button) { raimund@1082: //disable Button and setLoading... raimund@1082: raimund@1082: var grid = button.up('grid'); raimund@1082: var selection = grid.getView().getSelectionModel().getSelection(); raimund@1082: var i18n = Lada.getApplication().bundle; raimund@1082: raimund@1082: var win = Ext.create('Lada.view.window.SetStatus', { raimund@1082: title: i18n.getMsg('statusSetzen.win.title'), raimund@1082: grid: grid, raimund@1082: modal: true, raimund@1082: selection: selection raimund@1082: }); raimund@1082: raimund@1082: win.show(); raimund@1082: raimund@1082: }, raimund@1082: raimund@1082: raimund@1082: /** raimund@1076: * This function is called after a Row in the raimund@1076: * {@link Lada.view.grid.ProbeList} raimund@1076: * was double-clicked. raimund@1076: * The function opens a {@link Lada.view.window.ProbeEdit} raimund@1076: * or a {@link Lada.view.window.Messprogramm}. raimund@1076: * To determine which window has to be opened, the function raimund@1076: * analyse the records modelname. raimund@1076: */ raimund@1076: editItem: function(grid, record) { raimund@1076: var probeRecord = Ext.create('Lada.model.ProbeList'); raimund@1076: probeRecord.setId(record.get('probeId')); raimund@1076: probeRecord.set('owner', record.get('owner')); raimund@1076: probeRecord.set('readonly', record.get('readonly')); raimund@1076: raimund@1076: var probeWin = Ext.create('Lada.view.window.ProbeEdit', { raimund@1076: record: probeRecord, raimund@1076: style: 'z-index: -1;' //Fixes an Issue where windows could not be created in IE8 raimund@1076: }); raimund@1076: raimund@1076: probeWin.setPosition(30); raimund@1076: probeWin.show(); raimund@1076: probeWin.initData(); raimund@1076: raimund@1076: Ext.ClassManager.get('Lada.model.Probe').load(record.get('probeId'), { raimund@1076: failure: function(record, action) { raimund@1076: me.setLoading(false); raimund@1076: // TODO raimund@1076: console.log('An unhandled Failure occured. See following Response and Record'); raimund@1076: console.log(action); raimund@1076: console.log(record); raimund@1076: }, raimund@1076: success: function(precord, response) { raimund@1076: var messungWin = Ext.create('Lada.view.window.MessungEdit', { raimund@1120: parentWindow: probeWin, raimund@1076: probe: precord, raimund@1076: record: record, raimund@1076: grid: grid raimund@1076: }); raimund@1076: messungWin.show(); raimund@1076: messungWin.setPosition(window.innerWidth - 30 - messungWin.width); raimund@1076: messungWin.initData(); raimund@1076: } raimund@1076: }); raimund@1076: }, raimund@1076: raimund@1076: /** raimund@1076: * Send the selection to a Printservice raimund@1076: */ raimund@1076: printSelection: function(button) { raimund@1076: raimund@1076: //disable Button and setLoading... raimund@1076: button.disable(); raimund@1076: button.setLoading(true); raimund@1076: raimund@1076: var grid = button.up('grid'); raimund@1076: var selection = grid.getView().getSelectionModel().getSelection(); raimund@1076: var i18n = Lada.getApplication().bundle; raimund@1076: var me = this; raimund@1076: var columns = []; raimund@1076: var columnNames = []; raimund@1076: var visibleColumns = []; raimund@1076: var displayName = ''; raimund@1076: var data = []; raimund@1076: raimund@1076: // Write the columns to an array raimund@1076: try { raimund@1076: for (key in selection[0].data) { raimund@1076: // Do not write owner or readonly or id raimund@1076: if (["owner", "readonly", "id", "probeId"].indexOf(key) == -1){ raimund@1076: columns.push(key); raimund@1076: } raimund@1076: } raimund@1076: } raimund@1076: catch (e) { raimund@1076: console.log(e); raimund@1076: } raimund@1076: raimund@1076: //Retrieve visible columns' id's and names. raimund@1076: // and set displayName raimund@1076: try { raimund@1076: var grid = button.up('grid'); raimund@1076: var cman = grid.columnManager; raimund@1076: var cols = cman.getColumns(); raimund@1076: raimund@1076: displayName = grid.down('tbtext').text; raimund@1076: raimund@1076: for (key in cols) { raimund@1076: if (cols[key].dataIndex) { raimund@1076: visibleColumns[cols[key].dataIndex] = cols[key].text; raimund@1076: } raimund@1076: } raimund@1076: } raimund@1076: catch (e) { raimund@1076: console.log(e); raimund@1076: } raimund@1076: raimund@1076: raimund@1076: // Retrieve Data from selection raimund@1076: try { raimund@1076: for (item in selection) { raimund@1076: var row = selection[item].data; raimund@1076: var out = []; raimund@1076: //Lookup every column and write to data array. raimund@1076: for (key in columns){ raimund@1076: var attr = columns[key]; raimund@1076: //Only write data to output when the column is not hidden. raimund@1076: if (row[attr] != null && raimund@1076: visibleColumns[attr] != null) { raimund@1076: out.push(row[attr].toString()); raimund@1076: } raimund@1076: else if (visibleColumns[attr] != null) { raimund@1076: out.push(''); raimund@1076: } raimund@1076: } raimund@1076: data.push(out); raimund@1076: } raimund@1076: } raimund@1076: catch (e){ raimund@1076: console.log(e); raimund@1076: } raimund@1076: raimund@1076: //Retrieve the names of the columns. raimund@1076: try { raimund@1076: var grid = button.up('grid'); raimund@1076: var cman = grid.columnManager; raimund@1076: var cols = cman.getColumns(); raimund@1076: //Iterate columns and find column names for the key... raimund@1076: // This WILL run into bad behaviour when column-keys exist twice. raimund@1076: for (key in columns){ raimund@1076: for (k in cols){ raimund@1076: if (cols[k].dataIndex == columns[key]){ raimund@1076: columnNames.push(cols[k].text); raimund@1076: break; raimund@1076: } raimund@1076: } raimund@1076: } raimund@1076: } raimund@1076: catch (e) { raimund@1076: console.log(e); raimund@1076: } raimund@1076: raimund@1076: var printData = { raimund@1076: 'layout': 'A4 landscape', raimund@1076: 'outputFormat': 'pdf', raimund@1076: 'attributes': { raimund@1076: 'title': 'Auszug aus LADA', raimund@1076: 'displayName': displayName, raimund@1076: 'table': { raimund@1076: 'columns': columnNames, raimund@1076: 'data': data raimund@1076: } raimund@1076: } raimund@1076: } raimund@1076: raimund@1076: Ext.Ajax.request({ raimund@1076: url: 'lada-printer/buildreport.pdf', raimund@1076: //configure a proxy in apache conf! raimund@1076: jsonData: printData, raimund@1076: binary: true, raimund@1076: success: function(response) { raimund@1076: var content = response.responseBytes; raimund@1076: var filetype = response.getResponseHeader('Content-Type'); raimund@1076: var blob = new Blob([content],{type: filetype}); raimund@1076: saveAs(blob, 'lada-print.pdf'); raimund@1076: button.enable(); raimund@1076: button.setLoading(false); raimund@1076: }, raimund@1076: failure: function(response) { raimund@1076: console.log('failure'); raimund@1076: // Error handling raimund@1076: // TODO raimund@1076: //console.log(response.responseText) raimund@1076: button.enable(); raimund@1076: button.setLoading(false); raimund@1076: if (response.responseText) { raimund@1076: try { raimund@1076: var json = Ext.JSON.decode(response.responseText); raimund@1076: } raimund@1076: catch(e){ raimund@1076: console.log(e); raimund@1076: } raimund@1076: } raimund@1076: if (json) { raimund@1076: if(json.errors.totalCount > 0 || json.warnings.totalCount > 0){ raimund@1076: formPanel.setMessages(json.errors, json.warnings); raimund@1076: } raimund@1076: if(json.message){ raimund@1076: Ext.Msg.alert(Lada.getApplication().bundle.getMsg('err.msg.generic.title') raimund@1076: +' #'+json.message, raimund@1076: Lada.getApplication().bundle.getMsg(json.message)); raimund@1076: } else { raimund@1076: Ext.Msg.alert(i18n.getMsg('err.msg.generic.title'), raimund@1076: i18n.getMsg('err.msg.print.noContact')); raimund@1076: } raimund@1076: } else { raimund@1076: Ext.Msg.alert(i18n.getMsg('err.msg.generic.title'), raimund@1076: i18n.getMsg('err.msg.print.noContact')); raimund@1076: } raimund@1076: } raimund@1076: }); raimund@1076: }, raimund@1076: raimund@1076: /** raimund@1076: * Toggles the buttons in the toolbar raimund@1076: **/ raimund@1076: activateButtons: function(rowModel, record) { raimund@1076: var grid = rowModel.view.up('grid'); raimund@1076: this.buttonToggle(true, grid); raimund@1076: }, raimund@1076: raimund@1076: /** raimund@1076: * Toggles the buttons in the toolbar raimund@1076: **/ raimund@1076: deactivateButtons: function(rowModel, record) { raimund@1076: var grid = rowModel.view.up('grid'); raimund@1076: // Only disable buttons when nothing is selected raimund@1076: if (rowModel.selected.items == 0) { raimund@1076: this.buttonToggle(false, grid); raimund@1076: } raimund@1076: }, raimund@1076: raimund@1076: /** raimund@1076: * Enables/Disables a set of buttons raimund@1076: **/ raimund@1076: buttonToggle: function(enabled, grid) { raimund@1076: if (!enabled) { raimund@1076: grid.down('button[action=print]').disable(); raimund@1082: grid.down('button[action=setstatus]').disable(); raimund@1076: } raimund@1076: else { raimund@1076: grid.down('button[action=print]').enable(); raimund@1076: // TODO: enable button only on messungen with owner == true and raimund@1076: // readonly == false raimund@1082: grid.down('button[action=setstatus]').enable(); raimund@1076: } raimund@1076: }, raimund@1076: raimund@1076: reload: function(btn) { raimund@1076: if (btn === 'yes') { raimund@1076: location.reload(); raimund@1076: } raimund@1400: }, raimund@1400: raimund@1400: pageChange: function(toolbar) { raimund@1400: var grid = toolbar.up('grid'); raimund@1400: var store = grid.getStore(); raimund@1400: var rowExpander = grid.plugins[0] raimund@1400: var nodes = rowExpander.view.getNodes(); raimund@1400: for (var i = 0; i < nodes.length; i++) { raimund@1400: var node = Ext.fly(nodes[i]); raimund@1400: if (node.hasCls(rowExpander.rowCollapsedCls) === false) { raimund@1400: rowExpander.toggleRow(i, store.getAt(i)); raimund@1400: } raimund@1400: } raimund@1076: } raimund@1076: });