[Lada-commits] [PATCH 1 of 2] Added model/store, view and controller for messung list
Wald Commits
scm-commit at wald.intevation.org
Fri Apr 8 19:33:58 CEST 2016
# HG changeset patch
# User Raimund Renkert <raimund.renkert at intevation.de>
# Date 1460136722 -7200
# Node ID e32c10cf5499b13e7844cd0ce8691efac553f312
# Parent d23427c68285117c01d7dc0f2a60b538c1047795
Added model/store, view and controller for messung list.
diff -r d23427c68285 -r e32c10cf5499 app/controller/grid/MessungList.js
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/app/controller/grid/MessungList.js Fri Apr 08 19:32:02 2016 +0200
@@ -0,0 +1,275 @@
+/* Copyright (C) 2013 by Bundesamt fuer Strahlenschutz
+ * Software engineering by Intevation GmbH
+ *
+ * This file is Free Software under the GNU GPL (v>=3)
+ * and comes with ABSOLUTELY NO WARRANTY! Check out
+ * the documentation coming with IMIS-Labordaten-Application for details.
+ */
+
+/**
+ * Controller for the MessungList result grid.
+ */
+Ext.define('Lada.controller.grid.MessungList', {
+ extend: 'Ext.app.Controller',
+ requires: [
+ 'Lada.view.window.ProbeEdit'
+ ],
+
+ /**
+ * Initialize the Controller with listeners
+ */
+ init: function() {
+ this.control({
+ 'messunglistgrid': {
+ itemdblclick: this.editItem,
+ select: this.activateButtons,
+ deselect: this.deactivateButtons
+ }
+ });
+ this.callParent(arguments);
+ },
+
+ /**
+ * This function is called after a Row in the
+ * {@link Lada.view.grid.ProbeList}
+ * was double-clicked.
+ * The function opens a {@link Lada.view.window.ProbeEdit}
+ * or a {@link Lada.view.window.Messprogramm}.
+ * To determine which window has to be opened, the function
+ * analyse the records modelname.
+ */
+ editItem: function(grid, record) {
+ var probeRecord = Ext.create('Lada.model.ProbeList');
+ probeRecord.setId(record.get('probeId'));
+ probeRecord.set('owner', record.get('owner'));
+ probeRecord.set('readonly', record.get('readonly'));
+
+ var probeWin = Ext.create('Lada.view.window.ProbeEdit', {
+ record: probeRecord,
+ style: 'z-index: -1;' //Fixes an Issue where windows could not be created in IE8
+ });
+
+ probeWin.setPosition(30);
+ probeWin.show();
+ probeWin.initData();
+
+ Ext.ClassManager.get('Lada.model.Probe').load(record.get('probeId'), {
+ failure: function(record, action) {
+ me.setLoading(false);
+ // TODO
+ console.log('An unhandled Failure occured. See following Response and Record');
+ console.log(action);
+ console.log(record);
+ },
+ success: function(precord, response) {
+ var messungWin = Ext.create('Lada.view.window.MessungEdit', {
+ parentWindow: grid.up('window'),
+ probe: precord,
+ record: record,
+ grid: grid
+ });
+ messungWin.show();
+ messungWin.setPosition(window.innerWidth - 30 - messungWin.width);
+ messungWin.initData();
+ }
+ });
+ },
+
+ /**
+ * Send the selection to a Printservice
+ */
+ printSelection: function(button) {
+
+ //disable Button and setLoading...
+ button.disable();
+ button.setLoading(true);
+
+ var grid = button.up('grid');
+ var selection = grid.getView().getSelectionModel().getSelection();
+ var i18n = Lada.getApplication().bundle;
+ var me = this;
+ var columns = [];
+ var columnNames = [];
+ var visibleColumns = [];
+ var displayName = '';
+ var data = [];
+
+ // Write the columns to an array
+ try {
+ for (key in selection[0].data) {
+ // Do not write owner or readonly or id
+ if (["owner", "readonly", "id", "probeId"].indexOf(key) == -1){
+ columns.push(key);
+ }
+ }
+ }
+ catch (e) {
+ console.log(e);
+ }
+
+ //Retrieve visible columns' id's and names.
+ // and set displayName
+ try {
+ var grid = button.up('grid');
+ var cman = grid.columnManager;
+ var cols = cman.getColumns();
+
+ displayName = grid.down('tbtext').text;
+
+ for (key in cols) {
+ if (cols[key].dataIndex) {
+ visibleColumns[cols[key].dataIndex] = cols[key].text;
+ }
+ }
+ }
+ catch (e) {
+ console.log(e);
+ }
+
+
+ // Retrieve Data from selection
+ try {
+ for (item in selection) {
+ var row = selection[item].data;
+ var out = [];
+ //Lookup every column and write to data array.
+ for (key in columns){
+ var attr = columns[key];
+ //Only write data to output when the column is not hidden.
+ if (row[attr] != null &&
+ visibleColumns[attr] != null) {
+ out.push(row[attr].toString());
+ }
+ else if (visibleColumns[attr] != null) {
+ out.push('');
+ }
+ }
+ data.push(out);
+ }
+ }
+ catch (e){
+ console.log(e);
+ }
+
+ //Retrieve the names of the columns.
+ try {
+ var grid = button.up('grid');
+ var cman = grid.columnManager;
+ var cols = cman.getColumns();
+ //Iterate columns and find column names for the key...
+ // This WILL run into bad behaviour when column-keys exist twice.
+ for (key in columns){
+ for (k in cols){
+ if (cols[k].dataIndex == columns[key]){
+ columnNames.push(cols[k].text);
+ break;
+ }
+ }
+ }
+ }
+ catch (e) {
+ console.log(e);
+ }
+
+ var printData = {
+ 'layout': 'A4 landscape',
+ 'outputFormat': 'pdf',
+ 'attributes': {
+ 'title': 'Auszug aus LADA',
+ 'displayName': displayName,
+ 'table': {
+ 'columns': columnNames,
+ 'data': data
+ }
+ }
+ }
+
+ Ext.Ajax.request({
+ url: 'lada-printer/buildreport.pdf',
+ //configure a proxy in apache conf!
+ jsonData: printData,
+ binary: true,
+ success: function(response) {
+ var content = response.responseBytes;
+ var filetype = response.getResponseHeader('Content-Type');
+ var blob = new Blob([content],{type: filetype});
+ saveAs(blob, 'lada-print.pdf');
+ button.enable();
+ button.setLoading(false);
+ },
+ failure: function(response) {
+ console.log('failure');
+ // Error handling
+ // TODO
+ //console.log(response.responseText)
+ button.enable();
+ button.setLoading(false);
+ if (response.responseText) {
+ try {
+ var json = Ext.JSON.decode(response.responseText);
+ }
+ catch(e){
+ console.log(e);
+ }
+ }
+ if (json) {
+ if(json.errors.totalCount > 0 || json.warnings.totalCount > 0){
+ formPanel.setMessages(json.errors, json.warnings);
+ }
+ if(json.message){
+ Ext.Msg.alert(Lada.getApplication().bundle.getMsg('err.msg.generic.title')
+ +' #'+json.message,
+ Lada.getApplication().bundle.getMsg(json.message));
+ } else {
+ Ext.Msg.alert(i18n.getMsg('err.msg.generic.title'),
+ i18n.getMsg('err.msg.print.noContact'));
+ }
+ } else {
+ Ext.Msg.alert(i18n.getMsg('err.msg.generic.title'),
+ i18n.getMsg('err.msg.print.noContact'));
+ }
+ }
+ });
+ },
+
+ /**
+ * Toggles the buttons in the toolbar
+ **/
+ activateButtons: function(rowModel, record) {
+ var grid = rowModel.view.up('grid');
+ this.buttonToggle(true, grid);
+ },
+
+ /**
+ * Toggles the buttons in the toolbar
+ **/
+ deactivateButtons: function(rowModel, record) {
+ var grid = rowModel.view.up('grid');
+ // Only disable buttons when nothing is selected
+ if (rowModel.selected.items == 0) {
+ this.buttonToggle(false, grid);
+ }
+ },
+
+ /**
+ * Enables/Disables a set of buttons
+ **/
+ buttonToggle: function(enabled, grid) {
+ if (!enabled) {
+ grid.down('button[action=print]').disable();
+ grid.down('button[action=setStatus]').disable();
+ }
+ else {
+ grid.down('button[action=print]').enable();
+ // TODO: enable button only on messungen with owner == true and
+ // readonly == false
+ grid.down('button[action=setStatus]').enable();
+ }
+ },
+
+ reload: function(btn) {
+ if (btn === 'yes') {
+ location.reload();
+ }
+ }
+});
diff -r d23427c68285 -r e32c10cf5499 app/model/MessungList.js
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/app/model/MessungList.js Fri Apr 08 19:32:02 2016 +0200
@@ -0,0 +1,33 @@
+/* Copyright (C) 2013 by Bundesamt fuer Strahlenschutz
+ * Software engineering by Intevation GmbH
+ *
+ * This file is Free Software under the GNU GPL (v>=3)
+ * and comes with ABSOLUTELY NO WARRANTY! Check out
+ * the documentation coming with IMIS-Labordaten-Application for details.
+ */
+
+/**
+ * A MessungList.
+ * This class represents the result list of 'Messungen' in the search query
+ * */
+Ext.define('Lada.model.MessungList', {
+ extend: 'Ext.data.Model',
+
+ fields: [{
+ name: 'readonly'
+ }, {
+ name: 'owner'
+ }],
+
+ idProperty: 'id',
+
+ proxy: {
+ type: 'rest',
+ url: 'lada-server/rest/messung',
+ reader: {
+ type: 'json',
+ root: 'data',
+ totalProperty: 'totalCount'
+ }
+ }
+});
diff -r d23427c68285 -r e32c10cf5499 app/store/MessungQueries.js
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/app/store/MessungQueries.js Fri Apr 08 19:32:02 2016 +0200
@@ -0,0 +1,24 @@
+/* Copyright (C) 2013 by Bundesamt fuer Strahlenschutz
+ * Software engineering by Intevation GmbH
+ *
+ * This file is Free Software under the GNU GPL (v>=3)
+ * and comes with ABSOLUTELY NO WARRANTY! Check out
+ * the documentation coming with IMIS-Labordaten-Application for details.
+ */
+
+/**
+ * Store for Queries
+ */
+Ext.define('Lada.store.MessungQueries', {
+ extend: 'Ext.data.Store',
+ model: 'Lada.model.Query',
+ autoLoad: true,
+ proxy: {
+ type: 'rest',
+ url: 'lada-server/rest/query/messung',
+ reader: {
+ type: 'json',
+ root: 'data'
+ }
+ }
+});
diff -r d23427c68285 -r e32c10cf5499 app/store/MessungenList.js
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/app/store/MessungenList.js Fri Apr 08 19:32:02 2016 +0200
@@ -0,0 +1,17 @@
+/* Copyright (C) 2013 by Bundesamt fuer Strahlenschutz
+ * Software engineering by Intevation GmbH
+ *
+ * This file is Free Software under the GNU GPL (v>=3)
+ * and comes with ABSOLUTELY NO WARRANTY! Check out
+ * the documentation coming with IMIS-Labordaten-Application for details.
+ */
+
+/**
+ * Store for Messungen, it is used in the {@link Lada.view.grid.MessungenList}
+ */
+Ext.define('Lada.store.MessungenList', {
+ extend: 'Ext.data.Store',
+ model: 'Lada.model.MessungList',
+ pageSize: 50,
+ remoteSort: true
+});
diff -r d23427c68285 -r e32c10cf5499 app/view/grid/MessungList.js
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/app/view/grid/MessungList.js Fri Apr 08 19:32:02 2016 +0200
@@ -0,0 +1,64 @@
+/* Copyright (C) 2013 by Bundesamt fuer Strahlenschutz
+ * Software engineering by Intevation GmbH
+ *
+ * This file is Free Software under the GNU GPL (v>=3)
+ * and comes with ABSOLUTELY NO WARRANTY! Check out
+ * the documentation coming with IMIS-Labordaten-Application for details.
+ */
+
+/**
+ * Grid to list the result of the Filter
+ */
+Ext.define('Lada.view.grid.MessungList', {
+ extend: 'Lada.view.widget.DynamicGrid',
+ alias: 'widget.messunglistgrid',
+
+ initComponent: function() {
+ var i18n = Lada.getApplication().bundle;
+ this.emptyText = i18n.getMsg('messung.emptyGrid');
+ this.selModel = Ext.create('Ext.selection.CheckboxModel', {
+ checkOnly: true
+ });
+
+ this.dockedItems = [{
+ xtype: 'toolbar',
+ dock: 'top',
+ items: [{
+ xtype: 'tbtext',
+ text: i18n.getMsg('messung.gridTitle')
+ },
+ '->',
+ {
+ text: i18n.getMsg('probe.button.print'),
+ icon: 'resources/img/printer.png',
+ action: 'print',
+ disabled: true //disabled on start, enabled by the controller
+ }, {
+ text: i18n.getMsg('statusSetzen'),
+ icon: 'resources/img/emblem-important.png',
+ action: 'setStatus',
+ disabled: true //disabled on start, enabled by the controller
+ }]
+ }];
+ this.columns = [];
+ this.callParent(arguments);
+ },
+
+ /**
+ * Setup columns of the Grid dynamically based on a list of given cols.
+ * The function is called from the {@link Lada.controller.Filter#search
+ * search event}
+ * The Images for the Read-Write Icon are defined in CSS
+ * This Method overrides setupColumns of the parents class,
+ * becaus the delete colum is required.
+ */
+ setupColumns: function(cols) {
+ var caf = this.generateColumnsAndFields(cols);
+ var columns = caf[0];
+ var fields = caf[1];
+ var i18n = Lada.getApplication().bundle;
+
+ this.store.model.setFields(fields);
+ this.reconfigure(this.store, columns);
+ }
+});
More information about the Lada-commits
mailing list