view app/view/window/ImportResponse.js @ 1293:16a80ca16732

map feature visibility, selection and grid layout messpunkt layer is now visible per default when in editing mode on selection in map, the form is updated ortszuordnung buttons should not render over grid anymore
author Maximilian Krambach <mkrambach@intevation.de>
date Wed, 01 Feb 2017 19:38:06 +0100
parents 1ed5ec9326e6
children ee21d0e1b998
line wrap: on
line source
/**
 * This Window is shown, when Proben could be imported from a LAF file
 */
Ext.define('Lada.view.window.ImportResponse', {
    extend: 'Ext.window.Window',
    alias: 'widget.importresponse',

    data: null,
    message: null,
    fileName: '',

    layout: 'fit',
    /**
     * @private
     * Initialize the view.
     */
    initComponent: function() {
        var me = this;
        var html;
        var download;
        var i18n = Lada.getApplication().bundle;
        var data = Ext.JSON.decode(me.data, true);
        if (data) {
            html = me.parseShortResponse(data);
        }
        else {
            html = 'Der Import der Datei ' + this.fileName +
                    ' war nicht erfolgreich.';
        }
        this.bodyStyle = {background: '#fff'};
        me.items = [{
            xtype: 'panel',
            html: html,
            margin: 10,
            border: false
        }];

        me.buttons = [{
            text: i18n.getMsg('close'),
            scope: this,
            name: 'close',
            handler: this.close
        }, {
            text: i18n.getMsg('download'),
            name: 'download',
            disabled: true,
            handler: function() {
                var blob = new Blob([download],{type: 'text/html'});
                saveAs(blob, 'report.html');
            }
        }];
        this.callParent(arguments);
        if (data) {
            download = me.parseResponse(data);
        }
    },

    /**
     * Parse the response and create a summary of the result
     * @param data
     */
    parseShortResponse: function(data) {
        var errors = data.data.errors;
        var warnings = data.data.warnings;
        var out = [];
        // There is a entry for each imported proben in the errors dict (might be
        // empty)

        var numErrors;
        var numWarnings;
        if (!Ext.isObject(errors)) {
            numErrors = 0;
        }
        else {
            numErrors = Object.keys(errors).length;
        }
        if (!Ext.isObject(warnings)) {
            numWarnings = 0;
        }
        else {
            numWarnings = Object.keys(warnings).length;
        }
        if (!data.success) {
                out.push('Der Import der Datei ' + this.fileName +
                    ' war nicht erfolgreich. Der Importvorgang konnte ' +
                    'aufgrund eines Fehlers im Server nicht beendet werden.');
        }
        else {
            if (numErrors > 0) {
                if (errors.parser) {
                    out.push('Die Probe(n) konnten nicht erfolgreich ' +
                             'importiert werden.');
                }
                else {
                    out.push(numErrors + ' Probe(n) konnten nicht ' +
                             'erfolgreich importiert werden.');
                }
                out.push('<br/>');
                out.push('<br/>');
            }
            if (numWarnings > 0) {
                out.push('Bei ' + numWarnings + ' Probe(n) traten Warnungen auf. ');
                out.push('<br/>');
                out.push('<br/>');
            }
            if (numErrors > 0 || numWarnings > 0) {
                out.push('Der ausführliche Bericht steht als Download bereit.');
                out.push('<br/>');
            }
            else {
                out.push('Die Proben wurden importiert.');
                out.push('<br/>');
            }
        }
        return out.join('');
    },

    /**
     * Parse the Response
     * @param data the payload of the response
     */
    parseResponse: function(data) {
        var errors = data.data.errors;
        var warnings = data.data.warnings;
        var out = [];
        // There is a entry for each imported proben in the errors dict (might be
        // empty)

        var numErrors;
        var numWarnings;
        if (!Ext.isObject(errors)) {
            numErrors = 0;
        }
        else {
            numErrors = Object.keys(errors).length;
        }
        if (!Ext.isObject(warnings)) {
            numWarnings = 0;
        }
        else {
            numWarnings = Object.keys(warnings).length;
        }
        if (!data.success) {
                out.push('Der Import der Datei ' + this.fileName +
                    ' war nicht erfolgreich. Der Importvorgang konnte ' +
                    'aufgrund eines Fehlers im Server nicht beendet werden.');
        }
        else {
            out.push('<!DOCTYPE html>' +
                '<head><meta charset="utf-8"></head><body>');
            if (numErrors > 0) {
                out.push('Folgende Fehler traten beim Import auf:');
                out.push('<br/>');
                out.push('<ol>');
                var msgs;
                for (var key in errors) {
                    msgs = errors[key];
                    if (key !== 'parser') {
                        out.push('<li>Probe: ' + key);
                    }
                    out.push('<ol>');
                    validation = []
                    validation.push('Validierungsfehler: ');
                    for (var i = msgs.length - 1; i >= 0; i--) {
                        if (msgs[i].key === 'validation') {
                            validation.push('<ol>');
                            validation.push(Lada.getApplication().bundle.getMsg(msgs[i].value) + ' (' + Lada.getApplication().bundle.getMsg(msgs[i].code.toString()) + ')');
                            validation.push('</ol>');
                        }
                        else {
                            out.push('<li>' + msgs[i].key + ' (' + Lada.getApplication().bundle.getMsg(msgs[i].code.toString())+'): '+msgs[i].value+'</li>')
                        }
                    }
                    if (validation.length > 1) {
                        out.push('<li>')
                        out.push(validation.join(''));
                        out.push('</li>')
                    }
                    out.push('</ol>');
                    if (key !== 'parser') {
                        out.push('</li>');
                    }
                }
                out.push('</ol>');
                out.push('<br/>');
            }
            if (numWarnings > 0) {
                out.push('<br/>');
                out.push('Bei folgenden Proben traten  Warnungen auf:');
                out.push('<br/>');
                out.push('<ol>');
                for (key in warnings) {
                    out.push('<li>' + key);
                    msgs = warnings[key];
                    out.push('<ol>');
                    validation = []
                    validation.push('Validierungswarnungen: ');
                    for (var i = msgs.length - 1; i >= 0; i--) {
                        if (msgs[i].key === 'validation') {
                            validation.push('<ol>');
                            validation.push(Lada.getApplication().bundle.getMsg(msgs[i].value) + ' (' + Lada.getApplication().bundle.getMsg(msgs[i].code.toString()) + ')');
                            validation.push('</ol>');
                        }
                        else {
                            out.push('<li>' + msgs[i].key + ' (' + Lada.getApplication().bundle.getMsg(msgs[i].code.toString())+'): '+msgs[i].value+'</li>')
                        }
                    }
                    if (validation.length > 1) {
                        out.push('<li>')
                        out.push(validation.join(''));
                        out.push('</li>')
                    }
                    out.push('</ol>');
                    out.push('</li>');
                }
                out.push('</ol>');
            }
            out.push('<br/>');
            out.push('</body></html>')
            if (numWarnings > 0 || numErrors > 0) {
                this.down('button[name=download]').enable();
            }
        }
        return out.join('');
    }
});

http://lada.wald.intevation.org