changeset 1008:9651def05ae6

merged.
author Raimund Renkert <raimund.renkert@intevation.de>
date Wed, 20 Jan 2016 17:45:58 +0100
parents 23bfcbdb4527 (current diff) 52b02b0225e8 (diff)
children afb355cc7fb3
files app/controller/Filter.js app/model/Location.js app/model/Ort.js app/store/Locations.js app/store/Orte.js app/view/grid/Ort.js
diffstat 14 files changed, 501 insertions(+), 295 deletions(-) [+]
line wrap: on
line diff
--- a/app.js	Wed Jan 20 17:33:33 2016 +0100
+++ b/app.js	Wed Jan 20 17:45:58 2016 +0100
@@ -36,7 +36,7 @@
         'Lada.store.Messmethoden',
         'Lada.store.Messstellen',
         'Lada.store.Netzbetreiber',
-        'Lada.store.Locations',
+        'Lada.store.Orte',
         'Lada.store.Pflichtmessgroessen',
         'Lada.store.Probenarten',
         'Lada.store.Probenzusaetze',
@@ -135,8 +135,8 @@
         Ext.create('Lada.store.Netzbetreiber', {
             storeId: 'netzbetreiber'
         });
-        Ext.create('Lada.store.Locations', {
-            storeId: 'locations'
+        Ext.create('Lada.store.Orte', {
+            storeId: 'orte'
         });
         Ext.create('Lada.store.Pflichtmessgroessen', {
             storeId: 'pflichtmessgroessen'
--- a/app/controller/Filter.js	Wed Jan 20 17:33:33 2016 +0100
+++ b/app/controller/Filter.js	Wed Jan 20 17:45:58 2016 +0100
@@ -128,7 +128,7 @@
                     resultGrid = Ext.create('Lada.view.grid.DatensatzErzeuger');
                     break;
                 case 'ort':
-                    resultGrid = Ext.create('Lada.view.grid.Ort');
+                    resultGrid = Ext.create('Lada.view.grid.Orte');
                     break;
                 case 'probenehmer':
                     resultGrid = Ext.create('Lada.view.grid.Probenehmer');
@@ -287,7 +287,7 @@
                 sname = 'Lada.store.DatensatzErzeuger';
                 break;
             case 'ort':
-                sname = 'Lada.store.Ort';
+                sname = 'Lada.store.Orte';
                 break;
             case 'probenehmer':
                 sname = 'Lada.store.Probenehmer';
--- a/app/model/Location.js	Wed Jan 20 17:33:33 2016 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,64 +0,0 @@
-/* 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.
- */
-
-/**
- * Model class for Ort Stammdaten
- */
-Ext.define('Lada.model.Location', {
-    extend: 'Ext.data.Model',
-
-    fields: [{
-        name: 'id'
-    }, {
-        name: 'bezeichnung'
-    }, {
-        name: 'beschreibung'
-    }, {
-        name: 'unscharf'
-    }, {
-        name: 'nutsCode'
-    }, {
-        name: 'koordXExtern'
-    }, {
-        name: 'koordYExtern'
-    }, {
-        name: 'hoeheLand'
-    }, {
-        name: 'letzteAenderung',
-        type: 'date',
-        convert: function(v) {
-            if (!v) {
-                return v;
-            }
-            return new Date(v);
-        }
-    }, {
-        name: 'longitude',
-        type: 'float'
-    }, {
-        name: 'latitude',
-        type: 'float'
-    }, {
-        name: 'staatId'
-    }, {
-        name: 'verwaltungseinheitId'
-    }, {
-        name: 'otyp'
-    }],
-
-    idProperty: 'id',
-
-    proxy: {
-        type: 'rest',
-        url: 'lada-server/rest/location',
-        reader: {
-            type: 'json',
-            root: 'data'
-        }
-    }
-});
--- a/app/model/Ort.js	Wed Jan 20 17:33:33 2016 +0100
+++ b/app/model/Ort.js	Wed Jan 20 17:45:58 2016 +0100
@@ -7,7 +7,7 @@
  */
 
 /**
- * Model class for Ort
+ * Model class for Ort Stammdaten
  */
 Ext.define('Lada.model.Ort', {
     extend: 'Ext.data.Model',
@@ -15,20 +15,55 @@
     fields: [{
         name: 'id'
     }, {
-        name: 'owner',
-        type: 'boolean'
-    }, {
-        name: 'readonly',
-        type: 'boolean',
-        persist: false
+        name: 'aktiv'
     }, {
-        name: 'ort'
+        name: 'ortId'
     }, {
-        name: 'probeId'
+        name: 'nutsCode'
     }, {
-        name: 'ortsTyp'
+        name: 'anlageId'
     }, {
-        name: 'ortszusatztext'
+        name: 'netzbetreiberId'
+    }, {
+        name: 'gemId'
+    }, {
+        name: 'staatId'
+    }, {
+        name: 'kdaId'
+    }, {
+        name: 'ozId'
+    }, {
+        name: 'ortTyp'
+    }, {
+        name: 'mpArt'
+    }, {
+        name: 'zone'
+    }, {
+        name: 'sektor'
+    }, {
+        name: 'zustaendigkeit'
+    }, {
+        name: 'berichtstext'
+    }, {
+        name: 'kurztext'
+    }, {
+        name: 'langtext'
+    }, {
+        name: 'beschreibung'
+    }, {
+        name: 'unscharf'
+    }, {
+        name: 'hoeheLand'
+    }, {
+        name: 'koordXExtern'
+    }, {
+        name: 'koordYExtern'
+    }, {
+        name: 'longitude',
+        type: 'float'
+    }, {
+        name: 'latitude',
+        type: 'float'
     }, {
         name: 'letzteAenderung',
         type: 'date',
@@ -38,22 +73,6 @@
             }
             return new Date(v);
         }
-    }, {
-        name: 'treeModified',
-        serialize: function(value) {
-            if (value === '') {
-                return null;
-            }
-            return value;
-        }
-    }, {
-        name: 'parentModified',
-        serialize: function(value) {
-            if (value === '') {
-                return null;
-            }
-            return value;
-        }
     }],
 
     idProperty: 'id',
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/app/model/Ortszuordnung.js	Wed Jan 20 17:45:58 2016 +0100
@@ -0,0 +1,69 @@
+/* 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.
+ */
+
+/**
+ * Model class for Ortszuorndung
+ */
+Ext.define('Lada.model.Ortszuordnung', {
+    extend: 'Ext.data.Model',
+
+    fields: [{
+        name: 'id'
+    }, {
+        name: 'owner',
+        type: 'boolean'
+    }, {
+        name: 'readonly',
+        type: 'boolean',
+        persist: false
+    }, {
+        name: 'ortId'
+    }, {
+        name: 'probeId'
+    }, {
+        name: 'ortszuordnungTyp'
+    }, {
+        name: 'ortszusatztext'
+    }, {
+        name: 'letzteAenderung',
+        type: 'date',
+        convert: function(v) {
+            if (!v) {
+                return v;
+            }
+            return new Date(v);
+        }
+    }, {
+        name: 'treeModified',
+        serialize: function(value) {
+            if (value === '') {
+                return null;
+            }
+            return value;
+        }
+    }, {
+        name: 'parentModified',
+        serialize: function(value) {
+            if (value === '') {
+                return null;
+            }
+            return value;
+        }
+    }],
+
+    idProperty: 'id',
+
+    proxy: {
+        type: 'rest',
+        url: 'lada-server/rest/ortszuordnung',
+        reader: {
+            type: 'json',
+            root: 'data'
+        }
+    }
+});
--- a/app/model/Verwaltungseinheit.js	Wed Jan 20 17:33:33 2016 +0100
+++ b/app/model/Verwaltungseinheit.js	Wed Jan 20 17:45:58 2016 +0100
@@ -15,14 +15,12 @@
     /**
      * Fields are:
      *  - id: The unique identifer (Primary key)
-     *  - beschreibung: The long description.
-     *  - umweltBereich:
-     *  - mehId:
+     *  - bezeichnung: The long description.
      */
     fields: [{
         name: 'id'
     }, {
-        name: 'bundeland'
+        name: 'bundesland'
     }, {
         name: 'kdaId'
     }, {
--- a/app/store/Locations.js	Wed Jan 20 17:33:33 2016 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,19 +0,0 @@
-/* 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 Ortedetails
- */
-Ext.define('Lada.store.Locations', {
-    extend: 'Ext.data.Store',
-    model: 'Lada.model.Location',
-    sorters: [{
-        property: 'bezeichnung'
-    }],
-    autoLoad: true
-});
--- a/app/store/Orte.js	Wed Jan 20 17:33:33 2016 +0100
+++ b/app/store/Orte.js	Wed Jan 20 17:45:58 2016 +0100
@@ -3,13 +3,17 @@
  *
  * 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. 
+ * the documentation coming with IMIS-Labordaten-Application for details.
  */
 
 /**
- * Store for Orte
+ * Store for Orte details
  */
 Ext.define('Lada.store.Orte', {
     extend: 'Ext.data.Store',
-    model: 'Lada.model.Ort'
+    model: 'Lada.model.Ort',
+    sorters: [{
+        property: 'bezeichnung'
+    }],
+    autoLoad: true
 });
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/app/store/Ortszuordnung.js	Wed Jan 20 17:45:58 2016 +0100
@@ -0,0 +1,15 @@
+/* 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 Ortszuordnungen
+ */
+Ext.define('Lada.store.Ortszuordnung', {
+    extend: 'Ext.data.Store',
+    model: 'Lada.model.Ortszuordnung
+});
--- a/app/view/grid/Ort.js	Wed Jan 20 17:33:33 2016 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,171 +0,0 @@
-/* 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 Orte
- */
-Ext.define('Lada.view.grid.Ort', {
-    extend: 'Ext.grid.Panel',
-    alias: 'widget.ortgrid',
-
-    maxHeight: 350,
-    emptyText: 'Keine Orte gefunden.',
-        // minHeight and deferEmptyText are needed to be able to show the
-        // emptyText message.
-    minHeight: 110,
-    viewConfig: {
-        deferEmptyText: false
-    },
-    margin: '0, 5, 5, 5',
-
-    recordId: null,
-
-    warnings: null,
-    errors: null,
-    readOnly: true,
-    allowDeselect: true,
-
-    initComponent: function() {
-        this.dockedItems = [{
-            xtype: 'toolbar',
-            dock: 'bottom',
-            items: ['->', {
-                text: 'Hinzufügen',
-                icon: 'resources/img/list-add.png',
-                action: 'add',
-                probeId: this.probeId
-            }, {
-                text: 'Löschen',
-                icon: 'resources/img/list-remove.png',
-                action: 'delete'
-            }]
-        }];
-        this.columns = [{
-            header: 'Typ',
-            dataIndex: 'ortsTyp',
-            width: 50,
-            editor: {
-                allowBlank: false
-            }
-        }, {
-            header: 'Staat',
-            dataIndex: 'ort',
-            width: 70,
-            renderer: function(value) {
-                var store = Ext.data.StoreManager.get('locations');
-                var staaten = Ext.data.StoreManager.get('staaten');
-                var record =
-                    staaten.getById(store.getById(value).get('staatId'));
-                return record.get('staatIso');
-            }
-        }, {
-            header: 'Gemeineschlüssel',
-            dataIndex: 'ort',
-            width: 120,
-            renderer: function(value) {
-                var store = Ext.data.StoreManager.get('locations');
-                var record = store.getById(value);
-                return record.get('verwaltungseinheitId');
-            }
-        }, {
-            header: 'Gemeindename',
-            dataIndex: 'ort',
-            flex: 1,
-            renderer: function(value) {
-                var store = Ext.data.StoreManager.get('locations');
-                var gemeinden =
-                    Ext.data.StoreManager.get('verwaltungseinheiten');
-                var record = store.getById(value);
-                var gemid = record.get('verwaltungseinheitId');
-                var record2 = gemeinden.getById(gemid);
-                return record2.get('bezeichnung');
-            }
-        }, {
-            header: 'Messpunkt',
-            dataIndex: 'ort',
-            renderer: function(value) {
-                var store = Ext.getStore('locations');
-                var record = store.getById(value);
-                return record.get('bezeichnung');
-            }
-        }];
-        this.listeners = {
-           select: {
-               fn: this.activateRemoveButton,
-               scope: this
-            },
-            deselect: {
-                fn: this.deactivateRemoveButton,
-                scope: this
-            }
-        };
-        this.initData();
-        this.callParent(arguments);
-        this.setReadOnly(true); //Grid is always initialised as RO
-    },
-
-    initData: function() {
-        this.store = Ext.create('Lada.store.Orte');
-        this.store.load({
-            params: {
-                probeId: this.recordId
-            }
-        });
-        Ext.ClassManager.get('Lada.model.Probe').load(this.recordId, {
-            failure: function(record, action) {
-                // TODO
-            },
-            success: function(record, response) {
-                var json = Ext.decode(response.response.responseText);
-                if (json) {
-                    this.warnings = json.warnings;
-                    this.errors = json.errors;
-                }
-            },
-            scope: this
-        });
-    },
-
-    setReadOnly: function(b) {
-        if (b == true){
-            //Readonly
-            if (this.getPlugin('rowedit')){
-                this.getPlugin('rowedit').disable();
-            }
-            this.down('button[action=delete]').disable();
-            this.down('button[action=add]').disable();
-        }else{
-            //Writable
-            if (this.getPlugin('rowedit')){
-                this.getPlugin('rowedit').enable();
-            }
-            //this.down('button[action=delete]').enable();
-            this.down('button[action=add]').enable();
-        }
-    },
-    /**
-     * Activate the Remove Button
-     */
-    activateRemoveButton: function(selection, record) {
-        var grid = this;
-        //only enable the remove buttone, when the grid is editable.
-        if (! grid.readOnly) {
-            grid.down('button[action=delete]').enable();
-        }
-    },
-    /**
-     * Activate the Remove Button
-     */
-    deactivateRemoveButton: function(selection, record) {
-        var grid = this;
-        //only enable the remove buttone, when the grid is editable.
-        if (! grid.readOnly) {
-            grid.down('button[action=delete]').disable();
-        }
-    }
-});
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/app/view/grid/Orte.js	Wed Jan 20 17:45:58 2016 +0100
@@ -0,0 +1,179 @@
+/* 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 Orte Stammdaten
+ */
+Ext.define('Lada.view.grid.Orte', {
+    extend: 'Ext.grid.Panel',
+    alias: 'widget.ortstammdatengrid',
+
+    // minHeight and deferEmptyText are needed to be able to show the
+    // emptyText message.
+    minHeight: 110,
+    viewConfig: {
+        deferEmptyText: false
+    },
+
+    recordId: null,
+
+    warnings: null,
+    errors: null,
+    readOnly: true,
+    allowDeselect: true,
+
+    initComponent: function() {
+        var i18n = Lada.getApplication().bundle;
+        this.emptyText = i18n.getMsg('orte.emptyGrid');
+
+        this.dockedItems = [{
+            xtype: 'toolbar',
+            dock: 'top',
+            items: [{
+                xtype: 'tbtext',
+                id: 'tbtitle',
+                text: i18n.getMsg('orte.gridTitle')
+            },
+            '->',
+            {
+                text: i18n.getMsg('orte.button.add'),
+                icon: 'resources/img/list-add.png',
+                action: 'add',
+                disabled: true // disabled on startup, will be enabled by setStore
+            }, {
+                text: i18n.getMsg('orte.button.delete'),
+                icon: 'resources/img/list-remove.png',
+                action: 'delete',
+                disabled: true // disabled on startup, will be enabled by controller if necessary
+            }]
+        }];
+        this.columns = [{
+            header: i18n.getMsg('orte.ortId'),
+            dataIndex: 'ortId'
+        }, {
+            header: i18n.getMsg('orte.nutsCode'),
+            dataIndex: 'nutsCode'
+        }, {
+            header: i18n.getMsg('orte.anlageId'),
+            dataIndex: 'anlageId'
+        }, {
+            header: i18n.getMsg('orte.gemId'),
+            dataIndex: 'gemId',
+            width: 120,
+            renderer: function(value) {
+                var store = Ext.data.StoreManager.get('verwaltungseinheiten');
+                var record = store.getById(value);
+                return record.get('bezeichnung');
+            }
+        }, {
+            header: i18n.getMsg('orte.staatId'),
+            dataIndex: 'staatId',
+            width: 70,
+            renderer: function(value) {
+                var staaten = Ext.data.StoreManager.get('staaten');
+                var record = staaten.getById(value);
+                return record.get('staatIso');
+            }
+        }, {
+            header: i18n.getMsg('orte.kdaId'),
+            dataIndex: 'kdaId'
+        }, {
+            header: i18n.getMsg('orte.ozId'),
+            dataIndex: 'ozId'
+        }, {
+            header: i18n.getMsg('orte.ortTyp'),
+            dataIndex: 'ortTyp'
+        }, {
+            header: i18n.getMsg('orte.mpArt'),
+            dataIndex: 'mpArt'
+        }, {
+            header: i18n.getMsg('orte.zone'),
+            dataIndex: 'zone'
+        }, {
+            header: i18n.getMsg('orte.sektor'),
+            dataIndex: 'sektor'
+        }, {
+            header: i18n.getMsg('orte.zustaendigkeit'),
+            dataIndex: 'zustaendigkeit'
+        }, {
+            header: i18n.getMsg('orte.berichtstext'),
+            dataIndex: 'berichtstext'
+        }, {
+            header: i18n.getMsg('orte.kurztext'),
+            dataIndex: 'kurztext'
+        }, {
+            header: i18n.getMsg('orte.langtext'),
+            dataIndex: 'langtext'
+        }, {
+            header: i18n.getMsg('orte.beschreibung'),
+            dataIndex: 'beschreibung'
+        }, {
+            header: i18n.getMsg('orte.unscharf'),
+            dataIndex: 'unscharf'
+        }, {
+            header: i18n.getMsg('orte.hoeheLand'),
+            dataIndex: 'hoeheLand'
+        }, {
+            header: i18n.getMsg('orte.koordXExtern'),
+            dataIndex: 'koordXExtern'
+        }, {
+            header: i18n.getMsg('orte.koordYExtern'),
+            dataIndex: 'koordYExtern'
+        }, {
+            header: i18n.getMsg('orte.longitude'),
+            dataIndex: 'longitude'
+        }, {
+            header: i18n.getMsg('orte.latitude'),
+            dataIndex: 'latitude'
+        }, {
+            header: i18n.getMsg('orte.letzteAenderung'),
+            dataIndex: 'letzteAenderung'
+        }];
+        this.listeners = {
+           select: {
+               fn: this.activateRemoveButton,
+               scope: this
+            },
+            deselect: {
+                fn: this.deactivateRemoveButton,
+                scope: this
+            }
+        };
+        this.listeners = {
+           select: {
+               fn: this.activateRemoveButton,
+               scope: this
+            },
+            deselect: {
+                fn: this.deactivateRemoveButton,
+                scope: this
+            }
+        };
+        this.callParent(arguments);
+    },
+
+    /**
+     * This sets the Store of this Grid
+     */
+    setStore: function(store){
+        var i18n = Lada.getApplication().bundle;
+
+        if (store) {
+            this.removeDocked(Ext.getCmp('ptbar'), true);
+            this.reconfigure(store);
+            this.down('button[action=add]').enable();
+            this.addDocked([{
+                xtype: 'pagingtoolbar',
+                id: 'ptbar',
+                dock: 'bottom',
+                store: store,
+                displayInfo: true
+            }]);
+        }
+    }
+});
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/app/view/grid/Ortszuordnung.js	Wed Jan 20 17:45:58 2016 +0100
@@ -0,0 +1,171 @@
+/* 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 Ortszuordnungen
+ */
+Ext.define('Lada.view.grid.Ortszuordnung', {
+    extend: 'Ext.grid.Panel',
+    alias: 'widget.ortgrid',
+
+    maxHeight: 350,
+    emptyText: 'Keine Orte gefunden.',
+        // minHeight and deferEmptyText are needed to be able to show the
+        // emptyText message.
+    minHeight: 110,
+    viewConfig: {
+        deferEmptyText: false
+    },
+    margin: '0, 5, 5, 5',
+
+    recordId: null,
+
+    warnings: null,
+    errors: null,
+    readOnly: true,
+    allowDeselect: true,
+
+    initComponent: function() {
+        this.dockedItems = [{
+            xtype: 'toolbar',
+            dock: 'bottom',
+            items: ['->', {
+                text: 'Hinzufügen',
+                icon: 'resources/img/list-add.png',
+                action: 'add',
+                probeId: this.probeId
+            }, {
+                text: 'Löschen',
+                icon: 'resources/img/list-remove.png',
+                action: 'delete'
+            }]
+        }];
+        this.columns = [{
+            header: 'Typ',
+            dataIndex: 'ortsTyp',
+            width: 50,
+            editor: {
+                allowBlank: false
+            }
+        }, {
+            header: 'Staat',
+            dataIndex: 'ort',
+            width: 70,
+            renderer: function(value) {
+                var store = Ext.data.StoreManager.get('orte');
+                var staaten = Ext.data.StoreManager.get('staaten');
+                var record =
+                    staaten.getById(store.getById(value).get('staatId'));
+                return record.get('staatIso');
+            }
+        }, {
+            header: 'Gemeineschlüssel',
+            dataIndex: 'ort',
+            width: 120,
+            renderer: function(value) {
+                var store = Ext.data.StoreManager.get('orte');
+                var record = store.getById(value);
+                return record.get('gemId');
+            }
+        }, {
+            header: 'Gemeindename',
+            dataIndex: 'ort',
+            flex: 1,
+            renderer: function(value) {
+                var store = Ext.data.StoreManager.get('orte');
+                var gemeinden =
+                    Ext.data.StoreManager.get('verwaltungseinheiten');
+                var record = store.getById(value);
+                var gemid = record.get('gemId');
+                var record2 = gemeinden.getById(gemid);
+                return record2.get('bezeichnung');
+            }
+        }, {
+            header: 'Messpunkt',
+            dataIndex: 'ort',
+            renderer: function(value) {
+                var store = Ext.getStore('orte');
+                var record = store.getById(value);
+                return record.get('bezeichnung');
+            }
+        }];
+        this.listeners = {
+           select: {
+               fn: this.activateRemoveButton,
+               scope: this
+            },
+            deselect: {
+                fn: this.deactivateRemoveButton,
+                scope: this
+            }
+        };
+        this.initData();
+        this.callParent(arguments);
+        this.setReadOnly(true); //Grid is always initialised as RO
+    },
+
+    initData: function() {
+        this.store = Ext.create('Lada.store.Ortszuordnung');
+        this.store.load({
+            params: {
+                probeId: this.recordId
+            }
+        });
+        Ext.ClassManager.get('Lada.model.Probe').load(this.recordId, {
+            failure: function(record, action) {
+                // TODO
+            },
+            success: function(record, response) {
+                var json = Ext.decode(response.response.responseText);
+                if (json) {
+                    this.warnings = json.warnings;
+                    this.errors = json.errors;
+                }
+            },
+            scope: this
+        });
+    },
+
+    setReadOnly: function(b) {
+        if (b == true){
+            //Readonly
+            if (this.getPlugin('rowedit')){
+                this.getPlugin('rowedit').disable();
+            }
+            this.down('button[action=delete]').disable();
+            this.down('button[action=add]').disable();
+        }else{
+            //Writable
+            if (this.getPlugin('rowedit')){
+                this.getPlugin('rowedit').enable();
+            }
+            //this.down('button[action=delete]').enable();
+            this.down('button[action=add]').enable();
+        }
+    },
+    /**
+     * Activate the Remove Button
+     */
+    activateRemoveButton: function(selection, record) {
+        var grid = this;
+        //only enable the remove buttone, when the grid is editable.
+        if (! grid.readOnly) {
+            grid.down('button[action=delete]').enable();
+        }
+    },
+    /**
+     * Activate the Remove Button
+     */
+    deactivateRemoveButton: function(selection, record) {
+        var grid = this;
+        //only enable the remove buttone, when the grid is editable.
+        if (! grid.readOnly) {
+            grid.down('button[action=delete]').disable();
+        }
+    }
+});
--- a/app/view/widget/DynamicGrid.js	Wed Jan 20 17:33:33 2016 +0100
+++ b/app/view/widget/DynamicGrid.js	Wed Jan 20 17:45:58 2016 +0100
@@ -86,7 +86,12 @@
             tooltip: 'Probe öffnen',
             width: 30,
             getClass: function (val, meta, rec) {
-                return rec.get('readonly') === false ? "edit" : "noedit";
+                if ( rec.get('readonly') === false || rec.get('owner') ) {
+                        return 'edit';
+                }
+                else {
+                        return 'noedit';
+                }
             },
             handler: function(grid, rowIndex, colIndex) {
                 var rec = grid.getStore().getAt(rowIndex);
--- a/app/view/window/ProbeEdit.js	Wed Jan 20 17:33:33 2016 +0100
+++ b/app/view/window/ProbeEdit.js	Wed Jan 20 17:45:58 2016 +0100
@@ -15,7 +15,7 @@
 
     requires: [
         'Lada.view.form.Probe',
-        'Lada.view.grid.Ort',
+        'Lada.view.grid.Ortszuordnung',
         'Lada.view.grid.Probenzusatzwert',
         'Lada.view.grid.PKommentar',
         'Lada.view.grid.Messung'

http://lada.wald.intevation.org