view app/view/window/Ortszuordnung.js @ 1292:317ae6bfd647

Clone button only activated if an ort has been selected in the grid
author Maximilian Krambach <mkrambach@intevation.de>
date Wed, 01 Feb 2017 18:54:31 +0100
parents bfdc00c24baf
children c1b7db04b39c
line wrap: on
line source
/* 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.
 */

/**
 * Window to create/edit the Ort/Probe or Ort/Messprogramm Relation
 */

Ext.define('Lada.view.window.Ortszuordnung', {
    extend: 'Ext.window.Window',
    alias: 'widget.ortszuordnungwindow',

    requires: [
        'Lada.model.Ortszuordnung',
        'Lada.model.OrtszuordnungMp',
        'Lada.view.form.Ortszuordnung',
        'Lada.view.form.Ortserstellung',
        'Lada.view.panel.Map',
        'Lada.view.grid.Orte'
    ],

    collapsible: true,
    maximizable: true,
    autoshow: true,
    layout: 'fit',
    constrain: true,

    probe: null,
    messprogramm: null,

    parentWindow: null,
    record: null,
    grid: null,

    /**
     * This function initialises the Window
     */
    initComponent: function() {
        var i18n = Lada.getApplication().bundle;
        this.title = i18n.getMsg('ortszuordnung.window.title');
        var recordtype;
        if (this.probe) {
            if (this.record) {
                // A probe record will be edited
                this.title = i18n.getMsg('ortszuordnung.window.title')
                            + ' '
                            + i18n.getMsg('ortszuordnung.window.title2')
                            + ' '
                            + i18n.getMsg('probe')
                            + ' '
                            + this.probe.get('hauptprobenNr')
                            + ' '
                            + i18n.getMsg('edit');
            } else  {
                // A new probe record will be created
                this.title = i18n.getMsg('ortszuordnung.window.title')
                            + ' '
                            + i18n.getMsg('ortszuordnung.window.title2')
                            + ' '
                            + i18n.getMsg('probe')
                            + ' '
                            + this.probe.get('hauptprobenNr')
                            + ' '
                            + i18n.getMsg('create');
            }
        } else if (this.messprogramm) {
            if (this.record) {
                // A messprogramm record will be edited
                this.title = i18n.getMsg('ortszuordnung.window.title')
                            + ' '
                            + i18n.getMsg('ortszuordnung.window.title2')
                            + ' '
                            + i18n.getMsg('messprogramm')
                            + ' '
                            + i18n.getMsg('edit');
            } else  {
                // A new messprogramm record will be created
                this.title = i18n.getMsg('ortszuordnung.window.title')
                            + ' '
                            + i18n.getMsg('ortszuordnung.window.title2')
                            + ' '
                            + i18n.getMsg('messprogramm')
                            + ' '
                            + i18n.getMsg('create');
            }
        }

        this.buttons = [{
            text: i18n.getMsg('close'),
            scope: this,
            handler: this.close
        }];
        this.width = 900;
        this.height = 465;
        this.bodyStyle = {background: '#fff'};

        // add listeners to change the window appearence when it becomes inactive
        this.on({
            activate: function(){
                this.getEl().removeCls('window-inactive');
            },
            deactivate: function(){
                this.getEl().addCls('window-inactive');
            }
        });

        this.items = [{
            layout: 'border',
            bodyStyle: {background: '#fff'},
            border: 0,
            items: [{
                xtype: 'map',
                region: 'center',
                layout: 'border',
                margin: '13, 5, 10, 5',
                minHeight: 380,
                externalOrteStore: true
            }, {
                xtype: 'ortszuordnungform',
                region: 'east',
                minHeight: 380,
                type: this.probe? 'probe': 'mpr'
            }, {
                region: 'south',
                border: 0,
                layout: 'fit',
                name: 'ortgrid',
                hidden: true,
                maxHeight: 240,
                items: [{
                    xtype: 'ortstammdatengrid'
                }],
                dockedItems: [{
                    xtype: 'toolbar',
                    dock: 'bottom',
                    border: '0, 1, 1, 1',
                    style: {
                        borderBottom: '1px solid #b5b8c8 !important',
                        borderLeft: '1px solid #b5b8c8 !important',
                        borderRight: '1px solid #b5b8c8 !important'
                    },
                    items: [{
                        xtype: 'textfield',
                        name: 'search',
                        labelWidth: 50,
                        enableKeyEvents: true,
                        fieldLabel: i18n.getMsg('ortszuordnung.ortsuche'),
                    }, '->', {
                        text: i18n.getMsg('orte.new'),
                        action: 'createort'
                    }, {
                        text: i18n.getMsg('orte.frommap'),
                        action: 'frommap'
                    }, {
                        text: i18n.getMsg('orte.clone'),
                        action: 'clone',
                        disabled : true
                    }]
                }]
            }]
        }];
        this.callParent(arguments);
    },

    /**
     * Initialise the Data of this Window
     */
    initData: function() {
        var me = this;
        if (!this.record) {
            if (this.probe) {
                this.record = Ext.create('Lada.model.Ortszuordnung');
                this.record.set('probeId', this.probe.get('id'));
            } else {
                this.record = Ext.create('Lada.model.OrtszuordnungMp');
                this.record.set('messprogrammId', this.messprogramm.get('id'));
            }
            if (!this.record.get('letzteAenderung')) {
                this.record.data.letzteAenderung = new Date();
            }
        }
        this.down('ortszuordnungform').setRecord(this.record);
        var map = this.down('map');
        var osg = this.down('ortstammdatengrid');
        this.ortstore = Ext.create('Lada.store.Orte', {
            defaultPageSize: 0,
            autoLoad: false,
            listeners: {
                beforeload: {
                    fn: function() {
                        osg.setLoading(true);
                        map.setLoading(true);
                    }
                },
                load: {
                    fn: function() {
                        osg.setLoading(false);
                        map.setLoading(false);
                        osg.setStore(me.ortstore);
                        map.addLocations(me.ortstore);
                        map.featureLayer.setVisibility(false);
                        map.selectedFeatureLayer = new OpenLayers.Layer.Vector(
                            'gewählter Messpunkt', {
                                styleMap: new OpenLayers.StyleMap({
                                    externalGraphic: 'resources/lib/OpenLayers/img/marker-blue.png',
                                    pointRadius: 12,
                                    label: '${bez}',
                                    labelAlign: 'rt',
                                    fontColor: 'blue',
                                    fontWeight: 'bold',
                                }),
                                displayInLayerSwitcher: false,
                                projection: new OpenLayers.Projection('EPSG:3857')
                            });
                        map.map.addLayer(map.selectedFeatureLayer);
                        map.selectedFeatureLayer.setZIndex(499);
                        var ortId = me.messprogramm? me.record.get('ort') : me.record.get('ortId');
                        if (ortId){
                            var feat = map.featureLayer.getFeaturesByAttribute('id', ortId);
                            var ortrecord = this.findRecord('id', ortId);
                            osg.selectOrt(map, feat);
                            map.selectFeature(this.model, ortrecord);
                            me.down('ortszuordnungform').setOrt(null,ortrecord);
                        }
                    }
                }
            }
        });
        this.ortstore.load();
        map.addListener('featureselected', osg.selectOrt, osg);
        osg.addListener('select', map.selectFeature, map);
        osg.addListener('select', me.activateCloneButton, me);
    },

    /**
     * @private
     * Override to display and update the map view in the panel.
     */
    afterRender: function(){
        this.superclass.afterRender.apply(this, arguments);
        var map = this.down('map');
        map.map.addControl(new OpenLayers.Control.LayerSwitcher());
    },

    /**
     * Instructs the fields / forms listed in this method to set a message.
     * @param errors These Errors shall be shown
     * @param warnings These Warning shall be shown
     */
    setMessages: function(errors, warnings) {
        //todo this is a stub
    },

    /**
     * Instructs the fields / forms listed in this method to clear their messages.
     */
    clearMessages: function() {
        //todo this is a stub
    },

    activateCloneButton: function() {
        var toolbar = this.down('panel[name=ortgrid]').getDockedItems()[0];
        toolbar.down('button[action=clone]').enable();
    }
});

http://lada.wald.intevation.org