changeset 1361:5c2d6812d85a

Merge behaviour of Stammdaten panel and ortszuordnungs grid according to the recent changes in Ortszuordnung and Ortserstellung.
author Maximilian Krambach <mkrambach@intevation.de>
date Tue, 07 Feb 2017 19:50:36 +0100
parents d1dce50fa9a6
children ec1625ba433b
files app/controller/Ort.js app/controller/form/Ortserstellung.js app/controller/grid/Ortszuordnung.js app/view/panel/Map.js app/view/panel/Ort.js
diffstat 5 files changed, 95 insertions(+), 111 deletions(-) [+]
line wrap: on
line diff
--- a/app/controller/Ort.js	Tue Feb 07 18:56:35 2017 +0100
+++ b/app/controller/Ort.js	Tue Feb 07 19:50:36 2017 +0100
@@ -55,16 +55,14 @@
     },
 
     addRecord: function(button) {
-        var record = Ext.create('Lada.model.Ort');
+        Ext.create('Lada.view.window.Ortserstellung',{
+            record: Ext.create('Lada.model.Ort', {ortTyp: 1}),
+            parentWindow: button.up('ortpanel')
+        }).show();
         var grid = button.up('ortpanel').down('ortstammdatengrid');
-        if (grid.getCollapsed()) {
-            grid.expand();
-        }
-        if (!record.get('letzteAenderung')) {
-            record.data.letzteAenderung = new Date();
-        }
-        grid.store.insert(0, record);
-        grid.rowEditing.startEdit(0, 1);
+        // if (grid.getCollapsed()) {
+        //    grid.expand();
+        // }
     },
 
     deleteItem: function(button) {
--- a/app/controller/form/Ortserstellung.js	Tue Feb 07 18:56:35 2017 +0100
+++ b/app/controller/form/Ortserstellung.js	Tue Feb 07 19:50:36 2017 +0100
@@ -46,8 +46,9 @@
     },
 
     save: function(button) {
-        var me = button.up('panel');
-        var form = me.getForm();
+        var me = this;
+        var formpanel = button.up('ortserstellungsform');
+        var form = formpanel.getForm();
         var record = form.getRecord();
         var data = form.getFieldValues(true);
         for (var key in data) {
@@ -58,45 +59,28 @@
         record.save({
             success: function(newrecord, response) {
                 form.loadRecord(newrecord);
-                me.down('verwaltungseinheit').store.clearFilter();
-                me.down('staat').store.clearFilter();
+                formpanel.down('verwaltungseinheit').store.clearFilter();
+                formpanel.down('staat').store.clearFilter();
                 button.setDisabled(true);
-                me.down('button[action=revert]').setDisabled(true);
+                formpanel.down('button[action=revert]').setDisabled(true);
                 button.hide();
-                var ozw = me.up('window').parentWindow;
+                var ozw = formpanel.up('panel').parentWindow;
                 var json = Ext.decode(response.response.responseText);
                 if (json) {
-                    me.clearMessages();
-                    me.setMessages(json.errors, json.warnings);
+                    formpanel.clearMessages();
+                    formpanel.setMessages(json.errors, json.warnings);
                 }
-                ozw.ortstore.load({
-                    callback: function(records, operation, success) {
-                        ozw.down('map').addLocations(ozw.ortstore);
-                        var osg = ozw.down('ortstammdatengrid');
-                        osg.setStore(ozw.ortstore);
-                        var id = Ext.decode(response.response.responseText).data.id;
-                        var record = osg.store.getById(id);
-                        var selmod = osg.getView().getSelectionModel();
-                        selmod.select(record);
-                        var resulttext;
-                        if (json) {
-                            if (json.message == '201') {
-                                resulttext = 'Dieser Ort existiert bereits!';
-                            }
-                            if (json.message == '200') {
-                                resulttext = 'Ort erfolgreich angelegt!';
-                            }
-                        }
-                        Ext.Msg.show({
-                            title: Lada.getApplication().bundle.getMsg('success'),
-                            autoScroll: true,
-                            msg: resulttext,
-                            buttons: Ext.Msg.OK
-                        });
-                    },
-                    scope: this
-                });
-
+                if (ozw.ortstore) {
+                    ozw.ortstore.load({
+                        callback: function(records, operation, success) {
+                            me.afterSave(formpanel, ozw.ortstore, json);
+                        },
+                        scope: this
+                    });
+                } else {
+                    ozw.setStore();
+                    me.afterSave(formpanel, ozw.getStore(), json);
+                }
             },
             failure: function(record, response) {
                 var json = response.request.scope.reader.jsonData;
@@ -119,6 +103,35 @@
         });
     },
 
+    /**
+     * Callbacks after a Ort has been saved and the store is reloaded
+     */
+    afterSave: function(form, store, json) {
+        var ozw = form.up('panel').parentWindow;
+        ozw.down('map').addLocations(ozw.ortstore);
+        var osg = ozw.down('ortstammdatengrid');
+        osg.setStore(ozw.ortstore);
+        var id = json.data.id;
+        var record = osg.store.getById(id);
+        var selmod = osg.getView().getSelectionModel();
+        selmod.select(record);
+        var resulttext;
+        if (json) {
+            if (json.message == '201') {
+                resulttext = 'Dieser Ort existiert bereits!';
+            }
+            if (json.message == '200') {
+                resulttext = 'Ort erfolgreich angelegt!';
+            }
+        }
+        Ext.Msg.show({
+            title: Lada.getApplication().bundle.getMsg('success'),
+                     autoScroll: true,
+                     msg: resulttext,
+                     buttons: Ext.Msg.OK
+        });
+    },
+
     discard: function(button) {
         button.up('panel').getForm().reset();
     },
--- a/app/controller/grid/Ortszuordnung.js	Tue Feb 07 18:56:35 2017 +0100
+++ b/app/controller/grid/Ortszuordnung.js	Tue Feb 07 19:50:36 2017 +0100
@@ -154,15 +154,12 @@
     },
 
     /**
-     *
-     * Creates an event listener for a map click
+     * Creates a new Ortrecord from map coordinates
      */
     frommap: function(button) {
         var map = button.up('ortszuordnungwindow').down('map');
-        map.getEl().setStyle('cursor', 'crosshair');
-        var me = this;
-        map.map.events.register('click', button, me.newOrtfromMapClick);
-        // TODO Deactivate event listener if button is destroyed
+        var record = Ext.create('Lada.model.Ort');
+        map.activateDraw(record);
     },
 
     /**
@@ -182,28 +179,6 @@
     },
 
     /**
-     * Gets the clicked map's coordinates and opens a new Messpunkt window with coordinates prefilled
-     */
-    newOrtfromMapClick: function(evt) {
-        var me = this; //this = button(action:frommap)
-        var map = this.up('ortszuordnungwindow').down('map').map;
-        this.up('ortszuordnungwindow').down('map').getEl().setStyle('cursor', 'auto');
-        var lonlat = map.getLonLatFromViewPortPx(evt.xy).transform(new OpenLayers.Projection('EPSG:3857'),
-                                                                   new OpenLayers.Projection('EPSG:4326'));
-        var controller = Lada.app.getController('Lada.controller.grid.Ortszuordnung');
-        map.events.unregister('click', this, controller.newOrtfromMapClick);
-        Ext.create('Lada.view.window.Ortserstellung', {
-            record: Ext.create('Lada.model.Ort',{
-                koordXExtern: lonlat.lon,
-                koordYExtern: lonlat.lat,
-                kdaId : 4,
-                ortTyp: 1
-            }),
-            parentWindow: this.up('ortszuordnungwindow')
-        }).show();
-    },
-
-    /**
      * Search triggered by textfield key event.
      */
     search: function(field, evt, opts) {
--- a/app/view/panel/Map.js	Tue Feb 07 18:56:35 2017 +0100
+++ b/app/view/panel/Map.js	Tue Feb 07 19:50:36 2017 +0100
@@ -120,27 +120,30 @@
         }
     },
 
-    activateDraw: function(record) {
-        this.locationRecord = record;
+    activateDraw: function() {
         if (!this.drawPoint) {
             this.drawPoint = new OpenLayers.Control.DrawFeature(this.featureLayer,
                 OpenLayers.Handler.Point);
             this.map.addControl(this.drawPoint);
+            this.drawPoint.events.register('featureadded', this, this.featureAdded);
         }
         this.drawPoint.activate();
-        this.drawPoint.events.register('featureadded', this, this.featureAdded);
     },
 
     featureAdded: function(features) {
-        this.locationRecord.set('kdaId', 4);
         features.feature.geometry.transform(new OpenLayers.Projection('EPSG:3857'),
                                             new OpenLayers.Projection('EPSG:4326'));
-        this.locationRecord.set('koordYExtern', features.feature.geometry.y);
-        this.locationRecord.set('koordXExtern', features.feature.geometry.x);
+        var parent = this.up('ortszuordnungwindow') || this.up('ortpanel');
+        Ext.create('Lada.view.window.Ortserstellung', {
+            record: Ext.create('Lada.model.Ort',{
+                koordXExtern: features.feature.geometry.x,
+                koordYExtern: features.feature.geometry.y,
+                kdaId : 4,
+                ortTyp: 1
+            }),
+            parentWindow: parent
+        }).show();
         this.drawPoint.deactivate();
-        this.fireEvent('featureadded', this.locationRecord);
-    //    this.selectControl.unselectAll();
-    //    this.selectControl.select(features.feature);
     },
 
     addLocations: function(locationStore) {
--- a/app/view/panel/Ort.js	Tue Feb 07 18:56:35 2017 +0100
+++ b/app/view/panel/Ort.js	Tue Feb 07 19:50:36 2017 +0100
@@ -89,8 +89,12 @@
                 }
             }
         }];
-
         this.callParent(arguments);
+        var map = this.down('map');
+        var osg = this.down('ortstammdatengrid');
+        osg.setLoading(true);
+        map.setLoading(true);
+        this.setStore();
     },
 
     afterRender: function() {
@@ -102,41 +106,32 @@
         var me = this;
         var osg = this.down('ortstammdatengrid');
         var map = this.down('map');
+        osg.setLoading(true);
+        map.setLoading(true);
 
         if (!store) {
-            var ortstore = Ext.create('Lada.store.Orte', {
-                defaultPageSize: 0,
-                listeners: {
-                    beforeload: {
-                        fn: function() {
-                            osg.setLoading(true);
-                            map.setLoading(true);
-                        }
-                    },
-                    load: {
-                        fn: function() {
-                            osg.setLoading(false);
-                            map.setLoading(false);
-                            osg.setStore(ortstore);
-                            map.addLocations(ortstore);
-                        }
-                    }
-                }
-            });
+            this.ortstore = Ext.data.StoreManager.get('orte');
+            //this.ortstore.clearFilter(true);
+        } else {
+            this.ortstore = store;
         }
-        else {
-            store.clearFilter(true);
-            osg.setStore(store);
-            map.addLocations(store);
-        }
+        // store.clearFilter(true);
+        this.ortstore.load({
+            callback: function() {
+                osg.setStore(me.ortstore);
+                map.addLocations(me.ortstore);
+                osg.setLoading(false);
+                map.setLoading(false);
+            }
+        });
+        //enable buttons
+        this.down('toolbar button[action=add]').enable();
+        this.down('toolbar button[action=addMap]').enable();
         this.connectListeners();
-        //enable buttons
-        me.down('toolbar button[action=add]').enable();
-        me.down('toolbar button[action=addMap]').enable();
     },
 
     getStore: function() {
-        return this.down('grid').getStore();
+        return this.ortstore;
     },
 
     connectListeners: function() {

http://lada.wald.intevation.org