[Lada-commits] [PATCH 1 of 2] Added the ability to work with "StatusWerten" which are delivered by the lada-server

Wald Commits scm-commit at wald.intevation.org
Tue Oct 27 16:53:41 CET 2015


# HG changeset patch
# User Dustin Demuth <dustin at intevation.de>
# Date 1445960818 -3600
# Node ID 023e622f9551ad334e78396aca14c3683b3d33f7
# Parent  1f1467713c3f8a27a740e99e766dab0642f024ee
Added the ability to work with "StatusWerten" which are delivered by the lada-server.
To enable the uses of StatusWerte, the controller for the status grid, needed to be extended.

In addition, the form and grid views of Messung and Status were updated.

diff -r 1f1467713c3f -r 023e622f9551 app/controller/grid/Status.js
--- a/app/controller/grid/Status.js	Fri Oct 16 08:15:36 2015 +0200
+++ b/app/controller/grid/Status.js	Tue Oct 27 16:46:58 2015 +0100
@@ -20,7 +20,8 @@
         this.control({
             'statusgrid': {
                 edit: this.gridSave,
-                canceledit: this.cancelEdit
+                canceledit: this.cancelEdit,
+                select: this.toggleAllowedPermissions
             },
             'statusgrid button[action=add]': {
                 click: this.add
@@ -81,8 +82,9 @@
         var record = Ext.create('Lada.model.Status', {
             messungsId: button.up('statusgrid').recordId
         });
-        button.up('statusgrid').store.insert(0, record);
-        button.up('statusgrid').rowEditing.startEdit(0, 1);
+        var lastrow = button.up('statusgrid').store.count()
+        button.up('statusgrid').store.insert(lastrow, record);
+        button.up('statusgrid').rowEditing.startEdit(lastrow, 1);
     },
 
     /**
@@ -121,5 +123,43 @@
             }
         });
         grid.down('button[action=delete]').disable();
+    },
+
+    /**
+     * When a row in a grid is selected,
+     * this function checks if the row may be edited,
+     * or if the row can be removed
+     */
+    toggleAllowedPermissions: function(context, record, index){
+
+        //retrieve the readOnly parameters
+        var readonlyWin = context.view.up('window').record.get('readonly');
+
+        var readonlyRec = record.get('readonly');
+        var grid = context.view.up('grid');
+
+        //retrieve the last record of the store
+        var lastRecord = context.getStore().last()
+        //Check if remove is allowed
+        if (lastRecord == record &&
+            readonlyWin == false  &&
+            readonlyRec == false) {
+            grid.down('button[action=delete]').enable();
+        }
+        else {
+            grid.down('button[action=delete]').disable();
+        }
+
+
+        //Check if edit is allowed
+        if (lastRecord == record &&
+            readonlyWin == false  &&
+            readonlyRec == false) {
+            grid.getPlugin('rowedit').enable()
+        }
+        else {
+            grid.getPlugin('rowedit').disable()
+        }
     }
+
 });
diff -r 1f1467713c3f -r 023e622f9551 app/model/Messung.js
--- a/app/model/Messung.js	Fri Oct 16 08:15:36 2015 +0200
+++ b/app/model/Messung.js	Tue Oct 27 16:46:58 2015 +0100
@@ -39,6 +39,8 @@
         },
         defaultValue: new Date()
     }, {
+        name: 'status',
+    }, {
         name: 'fertig',
         type: 'boolean'
     }, {
diff -r 1f1467713c3f -r 023e622f9551 app/model/Status.js
--- a/app/model/Status.js	Fri Oct 16 08:15:36 2015 +0200
+++ b/app/model/Status.js	Tue Oct 27 16:46:58 2015 +0100
@@ -15,20 +15,40 @@
     fields: [{
         name: 'id'
     }, {
-        name: 'owner',
-        type: 'boolean'
-    }, {
         name: 'readonly',
         type: 'boolean',
         persist: false
     }, {
+        name: 'owner',
+        type: 'boolean',
+    }, {
         name: 'messungsId'
     }, {
         name: 'erzeuger'
     }, {
-        name: 'status'
+        name: 'statusStufe',
+        type: 'int'
     }, {
-        name: 'sdatum',
+        name: 'statusWert',
+        type: 'int'
+    }, {
+        name: 'treeModified',
+        serialize: function(value) {
+            if (value === '') {
+               return null;
+           }
+           return value;
+        }
+    }, {
+       name: 'parentModified',
+       serialize: function(value) {
+           if (value === '') {
+               return null;
+           }
+           return value;
+       }
+    }, {
+        name: 'datum',
         type: 'date',
         convert: function(v) {
             if (!v) {
@@ -38,23 +58,7 @@
         },
         defaultValue: new Date()
     }, {
-        name: 'skommentar'
-    }, {
-        name: 'treeModified',
-        serialize: function(value) {
-            if (value === '') {
-                return null;
-            }
-            return value;
-        }
-    }, {
-        name: 'parentModified',
-        serialize: function(value) {
-            if (value === '') {
-                return null;
-            }
-            return value;
-        }
+        name: 'text'
     }],
 
     idProperty: 'id',
diff -r 1f1467713c3f -r 023e622f9551 app/store/Status.js
--- a/app/store/Status.js	Fri Oct 16 08:15:36 2015 +0200
+++ b/app/store/Status.js	Tue Oct 27 16:46:58 2015 +0100
@@ -11,5 +11,6 @@
  */
 Ext.define('Lada.store.Status', {
     extend: 'Ext.data.Store',
-    model: 'Lada.model.Status'
+    model: 'Lada.model.Status',
+    storeId: 'Status'
 });
diff -r 1f1467713c3f -r 023e622f9551 app/store/StatusWerte.js
--- a/app/store/StatusWerte.js	Fri Oct 16 08:15:36 2015 +0200
+++ b/app/store/StatusWerte.js	Tue Oct 27 16:46:58 2015 +0100
@@ -8,20 +8,10 @@
 
 /**
  * Store for Status-Werte
- * TODO i18n
  */
 Ext.define('Lada.store.StatusWerte', {
     extend: 'Ext.data.Store',
-    fields: ['display', 'id'],
-    data: [{
-            display: 'unbekannt', id: 0
-        }, {
-            display: 'nicht vergeben', id: 1
-        }, {
-            display: 'plausibel', id: 2
-        }, {
-            display: 'nicht repräsentativ', id: 3
-        }, {
-            display: 'nicht plausibel', id: 4
-        }]
+    model: 'Lada.model.StatusWerte',
+    autoLoad: true,
+    storeId: 'StatusWerte'
 });
diff -r 1f1467713c3f -r 023e622f9551 app/view/form/Messung.js
--- a/app/view/form/Messung.js	Fri Oct 16 08:15:36 2015 +0200
+++ b/app/view/form/Messung.js	Tue Oct 27 16:46:58 2015 +0100
@@ -113,6 +113,22 @@
                     fieldLabel: 'Geplant',
                     width: 300,
                     labelWidth: 100
+                }, {
+                    xtype: 'textfield',
+                    name: 'status',
+                    readOnly: true,
+                    isFormField: false,
+                    maxLength: 10,
+                    margin: '0, 10, 5, 0',
+                    fieldLabel: 'Status',
+                    width: 300,
+                    labelWidth: 100,
+                    submitValue: false,
+                    isFormField: false,
+                    preventMark: true, //Do not display error msg.
+                    validateValue: function() {
+                        return true; //this field is always valid
+                    },
                 }]
             }]
         }];
@@ -121,6 +137,57 @@
 
     setRecord: function(record) {
         this.getForm().loadRecord(record);
+        this.retrieveStatus(record.id, record.get('status'));
+    },
+
+    retrieveStatus: function(messungsId, statusId) {
+        var i18n = Lada.getApplication().bundle;
+        var msg = i18n.getMsg('load.statuswert');
+        var textfield = this.down('[name=status]');
+
+        textfield.setRawValue(msg);
+
+        var sStore = Ext.StoreManager.lookup('Status');
+        if (!sStore) {
+            sStore = Ext.create('Lada.store.Status');
+        }
+        sStore.on('load',
+            function(records, operation, success) {
+                var ret;
+                var i18n = Lada.getApplication().bundle;
+                if (sStore.getTotalCount() === 0) {
+                    ret = 0;
+                }
+                else {
+                    ret = sStore.getById(statusId).get('statusWert');
+                }
+                this.setStatusWert(ret);
+            },
+            this);
+        sStore.load({
+            params: {
+                messungsId: messungsId
+            }
+        });
+    },
+
+    setStatusWert: function(value){
+        var swStore = Ext.StoreManager.lookup('StatusWerte');
+        if (!swStore) {
+            var swStore = Ext.create('Lada.store.StatusWerte');
+        }
+        swStore.on('load',
+            function(records, operation, success) {
+                var i18n = Lada.getApplication().bundle;
+                var msg = i18n.getMsg('load.statuswert.error');
+                var textfield = this.down('[name=status]');
+                if (success) {
+                    msg = swStore.getById(value).get('wert');
+                }
+                textfield.setRawValue(msg);
+            },
+            this);
+        swStore.load();
     },
 
     setMessages: function(errors, warnings) {
diff -r 1f1467713c3f -r 023e622f9551 app/view/grid/Messung.js
--- a/app/view/grid/Messung.js	Fri Oct 16 08:15:36 2015 +0200
+++ b/app/view/grid/Messung.js	Tue Oct 27 16:46:58 2015 +0100
@@ -83,9 +83,10 @@
             flex: 1,
             dataIndex: 'id',
             renderer: function(value) {
-                var id = 'messung-status-item' + value;
-                this.updateStatus(value, id);
-                return '<div id="' + id + '">Lade...</div>';
+                var statusId = this.store.getById(value).get('status');
+                var divId = 'messung-status-item' + value;
+                this.updateStatus(value, divId, statusId);
+                return '<div id="' + divId + '">Lade...</div>';
             }
         }, {
             header: 'OK-Flag',
@@ -147,12 +148,16 @@
         });
     },
 
-    updateStatus: function(value, divId) {
+    /**
+     * Load the statusstore,
+     * afterwards: retrieve the statusid
+     */
+    updateStatus: function(value, divId, statusId) {
         var statusStore = Ext.create('Lada.store.Status');
         statusStore.on('load',
             this.updateStatusColumn,
             this,
-            {divId: divId});
+            {divId: divId, statusId: statusId});
         statusStore.load({
             params: {
                 messungsId: value
@@ -197,18 +202,36 @@
         Ext.fly(opts.divId).update(value);
     },
 
+    /**
+     * Retrieve Statuswert and update the column
+     */
     updateStatusColumn: function(sstore, record, success, opts) {
-        var value;
+        var value = 0;
         if (sstore.getTotalCount() === 0) {
             value = 0;
         }
         else {
-            value = sstore.last().get('status');
+            value = sstore.getById(opts.statusId).get('statusWert');
         }
         if (Ext.fly(opts.divId)) {
-            var sta = Ext.create('Lada.store.StatusWerte');
-            var val = sta.getById(value).get('display');
-            Ext.fly(opts.divId).update(val);
+            var sta = Ext.StoreManager.lookup('StatusWerte');
+            if (!sta) {
+                var sta = Ext.create('Lada.store.StatusWerte');
+            }
+            var val = 'error';
+            sta.load({
+                scope: this,
+                callback: function(records, operation, success) {
+                    if (success) {
+                        try {
+                            val = sta.getById(value).get('wert');
+                        }
+                        catch (e) {
+                        }
+                    }
+                    Ext.fly(opts.divId).update(val);
+                }
+            });
         }
     },
 
diff -r 1f1467713c3f -r 023e622f9551 app/view/grid/Status.js
--- a/app/view/grid/Status.js	Fri Oct 16 08:15:36 2015 +0200
+++ b/app/view/grid/Status.js	Tue Oct 27 16:46:58 2015 +0100
@@ -28,14 +28,14 @@
         this.rowEditing = Ext.create('Ext.grid.plugin.RowEditing', {
             clicksToMoveEditor: 1,
             autoCancel: false,
-            disabled: false,
+            disabled: true,
             pluginId: 'rowedit',
             listeners:{
                 // Make row ineditable when readonly is set to true
                 // Normally this would belong into a controller an not the view.
                 // But the RowEditPlugin is not handled there.
                 beforeedit: function(e, o) {
-                    var readonlywin = o.grid.up('window').record.get('readonly');
+                var readonlywin = o.grid.up('window').record.get('readonly');
                     var readonlygrid = o.record.get('readonly');
                     if (readonlywin == true || readonlygrid == true || this.disabled)  {
                         return false;
@@ -43,10 +43,11 @@
                     return true;
                 }
             }
-         });
+        });
         this.plugins = [this.rowEditing];
 
         var statusStore = Ext.create('Lada.store.StatusWerte');
+        statusStore.load();
         this.dockedItems = [{
             xtype: 'toolbar',
             dock: 'bottom',
@@ -64,10 +65,11 @@
         }];
         this.columns = [{
             header: 'erstellt',
-            dataIndex: 'sdatum',
+            dataIndex: 'datum',
             xtype: 'datecolumn',
             format: 'd.m.Y H:i',
             width: 110,
+            sortable: false,
         }, {
             header: 'Erzeuger',
             dataIndex: 'erzeuger',
@@ -85,33 +87,36 @@
                 valueField: 'id',
                 allowBlank: false,
                 editable: false
-            }
+            },
+            sortable: false,
         }, {
             header: 'Status',
-            dataIndex: 'status',
+            dataIndex: 'statusWert',
             renderer: function(value) {
                 if (!value || value === '') {
                     return '';
                 }
-                return statusStore.getById(value).get('display');
+                return statusStore.getById(value).get('wert');
             },
             editor: {
                 xtype: 'combobox',
                 store: statusStore,
-                displayField: 'display',
+                displayField: 'wert',
                 valueField: 'id',
                 allowBlank: false,
                 editable: false
-            }
+            },
+            sortable: false,
         }, {
             header: 'Text',
-            dataIndex: 'skommentar',
+            dataIndex: 'text',
             flex: 1,
             editor: {
                 allowBlank: true,
                 maxLength: 1000,
                 enforceMaxLength: true
-            }
+            },
+            sortable: false,
         }];
         this.listeners = {
            select: {
@@ -160,7 +165,7 @@
         }
     },
     /**
-     * Activate the Remove Button
+     * Activate the "Remove Button"
      */
     activateRemoveButton: function(selection, record) {
         var grid = this;
@@ -170,7 +175,7 @@
         }
     },
     /**
-     * Activate the Remove Button
+     * Deactivate the "Remove Button"
      */
     deactivateRemoveButton: function(selection, record) {
         var grid = this;
diff -r 1f1467713c3f -r 023e622f9551 resources/i18n/Lada_de-DE.properties
--- a/resources/i18n/Lada_de-DE.properties	Fri Oct 16 08:15:36 2015 +0200
+++ b/resources/i18n/Lada_de-DE.properties	Tue Oct 27 16:46:58 2015 +0100
@@ -99,6 +99,10 @@
 about.window.text.serverversion:Serverversion:
 about.window.text.clientversion:Clientversion:
 
+
+load.statuswert:Lade aktuellen Statuswert...
+load.statuswert.error:Fehler beim auflösen der Statuswerte
+
 # Actions
 add:Hinzufügen
 delete:Löschen


More information about the Lada-commits mailing list