changeset 1082:dbd435256f77

Open status edit window and send status objects.
author Raimund Renkert <raimund.renkert@intevation.de>
date Wed, 13 Apr 2016 19:04:15 +0200
parents 5e9a674d7bb4
children cbe5a19449a4
files app/controller/grid/MessungList.js app/controller/grid/ProbeList.js app/view/grid/MessungList.js app/view/widget/DynamicGrid.js app/view/window/SetStatus.js
diffstat 5 files changed, 217 insertions(+), 7 deletions(-) [+]
line wrap: on
line diff
--- a/app/controller/grid/MessungList.js	Wed Apr 13 18:41:47 2016 +0200
+++ b/app/controller/grid/MessungList.js	Wed Apr 13 19:04:15 2016 +0200
@@ -24,12 +24,37 @@
                 itemdblclick: this.editItem,
                 select: this.activateButtons,
                 deselect: this.deactivateButtons
+            },
+            'messunglistgrid toolbar button[action=setstatus]': {
+                click: this.setStatus
             }
         });
         this.callParent(arguments);
     },
 
     /**
+     * Sets the Status on Bulk
+     **/
+    setStatus: function(button) {
+        //disable Button and setLoading...
+
+        var grid = button.up('grid');
+        var selection = grid.getView().getSelectionModel().getSelection();
+        var i18n = Lada.getApplication().bundle;
+
+        var win = Ext.create('Lada.view.window.SetStatus', {
+            title: i18n.getMsg('statusSetzen.win.title'),
+            grid: grid,
+            modal: true,
+            selection: selection
+        });
+
+        win.show();
+
+    },
+
+
+    /**
      * This function is called after a Row in the
      * {@link Lada.view.grid.ProbeList}
      * was double-clicked.
@@ -257,13 +282,13 @@
     buttonToggle: function(enabled, grid) {
         if (!enabled) {
             grid.down('button[action=print]').disable();
-            grid.down('button[action=setStatus]').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();
+            grid.down('button[action=setstatus]').enable();
         }
     },
 
--- a/app/controller/grid/ProbeList.js	Wed Apr 13 18:41:47 2016 +0200
+++ b/app/controller/grid/ProbeList.js	Wed Apr 13 19:04:15 2016 +0200
@@ -167,7 +167,7 @@
         try {
             for (key in selection[0].data) {
                 // Do not write owner or readonly or id
-                if (["owner", "readonly", "id"].indexOf(key) == -1){
+                if (["owner", "readonly", "id", "probeId"].indexOf(key) == -1){
                     columns.push(key);
                 }
             }
--- a/app/view/grid/MessungList.js	Wed Apr 13 18:41:47 2016 +0200
+++ b/app/view/grid/MessungList.js	Wed Apr 13 19:04:15 2016 +0200
@@ -36,7 +36,7 @@
             }, {
                 text: i18n.getMsg('statusSetzen'),
                 icon: 'resources/img/emblem-important.png',
-                action: 'setStatus',
+                action: 'setstatus',
                 disabled: true //disabled on start, enabled by the controller
             }]
         }];
--- a/app/view/widget/DynamicGrid.js	Wed Apr 13 18:41:47 2016 +0200
+++ b/app/view/widget/DynamicGrid.js	Wed Apr 13 19:04:15 2016 +0200
@@ -80,6 +80,9 @@
         fields.push(new Ext.data.Field({
             name: 'readonly'
         }));
+        fields.push(new Ext.data.Field({
+            name: 'statusEdit'
+        }));
 
         resultColumns.push({
             xtype: 'actioncolumn',
@@ -89,12 +92,22 @@
             tooltip: 'Probe öffnen',
             width: 30,
             getClass: function (val, meta, rec) {
-                if ( rec.get('readonly') === false && rec.get('owner') === true) {
+                if (rec.get('readonly') === false &&
+                    rec.get('owner') === true &&
+                    !rec.get('statusEdit')) {
+                    console.log('edit' + rec.get('statusEdit'));
                         return 'edit';
                 }
-                else {
-                        return 'noedit';
+                else if (rec.get('readonly') === false &&
+                    rec.get('owner') === true &&
+                    rec.get('statusEdit')) {
+                        return 'editstatus';
                 }
+                else if (rec.get('readonly') === true &&
+                    rec.get('statusEdit')) {
+                        return 'noeditstatus';
+                }
+                return 'noedit';
             },
             handler: function(grid, rowIndex, colIndex) {
                 var rec = grid.getStore().getAt(rowIndex);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/app/view/window/SetStatus.js	Wed Apr 13 19:04:15 2016 +0200
@@ -0,0 +1,172 @@
+/* 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.
+ */
+
+/**
+ * This is a simple Window to set the Status for multiple Messungen on bulk.
+ */
+Ext.define('Lada.view.window.SetStatus', {
+    extend: 'Ext.window.Window',
+    alias: 'setstatuswindow',
+
+    requires: [
+        'Lada.view.widget.Status'
+    ],
+
+    grid: null,
+    selection: null,
+
+    modal: true,
+    closable: false,
+    resultMessage: '',
+
+    /**
+     * This function initialises the Window
+     */
+    initComponent: function() {
+        var i18n = Lada.getApplication().bundle;
+        var me = this;
+        this.items = [{
+            xtype: 'panel',
+            name: 'valueselection',
+            border: 0,
+            items: [{
+                xtype: 'fieldset',
+                title: 'Status für ' + this.selection.length + ' Messung(en) setzen',
+                margin: '5, 5, 10, 5',
+                items: [{
+                    xtype: 'combobox',
+                    store: Ext.data.StoreManager.get('messstellenFiltered'),
+                    displayField: 'messStelle',
+                    valueField: 'id',
+                    allowBlank: false,
+                    queryMode: 'local',
+                    editable: false,
+                    width: 300,
+                    labelWidth: 100,
+                    emptyText: 'Wählen Sie einen Erzeuger aus.',
+                    fieldLabel: i18n.getMsg('statusgrid.header.erzeuger')
+                }, {
+                    xtype: 'statuswert',
+                    allowBlank: false,
+                    width: 300,
+                    labelWidth: 100,
+                    fieldLabel: i18n.getMsg('statusgrid.header.statusWert')
+                }, {
+                    xtype: 'textarea',
+                    width: 300,
+                    height: 100,
+                    labelWidth: 100,
+                    fieldLabel: i18n.getMsg('statusgrid.header.text'),
+                    emptyText: 'Geben Sie einen Kommentar ein.'
+                }]
+            }]
+        }, {
+            xtype: 'panel',
+            hidden: true,
+            margin: '5, 5, 5, 5',
+            overflow: 'auto',
+            name: 'result'
+        }, {
+            xtype: 'progressbar',
+            margin: '5, 5, 5, 5',
+            hidden: true,
+            text: 'Verarbeite Statusänderungen'
+        }];
+        this.buttons = [{
+            text: i18n.getMsg('statusSetzen'),
+            name: 'start',
+            icon: 'resources/img/emblem-important.png',
+            handler: this.setStatus
+        }, {
+            text: i18n.getMsg('cancel'),
+            name: 'abort',
+            handler: this.closeWindow
+        }, {
+            text: i18n.getMsg('close'),
+            name: 'close',
+            hidden: true,
+            handler: this.closeWindow
+        }];
+
+        this.callParent(arguments);
+    },
+
+    /**
+     * @private
+     * A handler for a Abort-Button
+     */
+    closeWindow: function(button) {
+        var win = button.up('window');
+        win.close();
+    },
+
+    /**
+     * @private
+     * A handler to setStatus on Bulk.
+     */
+    setStatus: function(button) {
+        var win = button.up('window');
+        win.down('panel').disable();
+        win.down('button[name=start]').disable();
+        win.down('button[name=abort]').disable();
+        var progress = win.down('progressbar');
+        progress.show();
+        win.send();
+    },
+
+    send: function() {
+        var i18n = Lada.getApplication().bundle;
+        var me = this;
+        var progress = me.down('progressbar');
+        var progressText = progress.getText();
+        var count = 0;
+        for (var i = 0; i < this.selection.length; i++) {
+            var data = Ext.create('Lada.model.Status', {
+                messungsId: this.selection[i].get('id'),
+                erzeuger: this.down('combobox').getValue(),
+                datum: new Date(),
+                statusWert: this.down('statuswert').getValue(),
+                text: this.down('textarea').getValue()
+            });
+            Ext.Ajax.request({
+                url: 'lada-server/rest/status',
+                method: 'POST',
+                jsonData: data.raw,
+                success: function(response) {
+                    var json = Ext.JSON.decode(response.responseText);
+                    me.resultMessage += '<strong>' + i18n.getMsg('messung') + ': ';
+                    var sel = me.selection[count];
+                    me.resultMessage += sel.get('hauptprobenNr') + ' - ' + sel.get('nebenprobenNr') + '</strong><br><dd>';
+                    me.resultMessage += i18n.getMsg(json.message) + '</dd><br>';
+                    count++;
+                    progress.updateProgress(count / me.selection.length, progressText + ' (' + count + ')');
+                    if (count === me.selection.length) {
+                        var result = me.down('panel[name=result]');
+                        var values = me.down('panel[name=valueselection]');
+                        me.down('button[name=start]').hide();
+                        me.down('button[name=abort]').hide();
+                        me.down('button[name=close]').show();
+                        result.setSize(values.getWidth(), values.getHeight());
+                        result.getEl().setHTML(me.resultMessage);
+                        result.show();
+                        values.hide();
+                    }
+                },
+                failure: function(response) {
+                    console.log(response);
+                    count++;
+                    progress.updateProgress(count / me.selection.length);
+                    if (count === me.selection.length) {
+                        me.close();
+                    }
+                }
+            });
+        }
+    }
+});
+

http://lada.wald.intevation.org