changeset 1386:7e9a6f0e55b3

Added UI for audit trail. TODO: add more i18n strings.
author Raimund Renkert <raimund.renkert@intevation.de>
date Fri, 24 Feb 2017 14:32:55 +0100
parents 3f499c52eee6
children 39414e1e3571
files app/controller/form/Messung.js app/controller/form/Probe.js app/view/form/Messung.js app/view/form/Probe.js app/view/window/AuditTrail.js resources/i18n/Lada_de-DE.properties resources/img/distribute-vertical-center.png
diffstat 7 files changed, 189 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/app/controller/form/Messung.js	Thu Feb 23 12:49:28 2017 +0100
+++ b/app/controller/form/Messung.js	Fri Feb 24 14:32:55 2017 +0100
@@ -24,6 +24,9 @@
             'messungform button[action=discard]': {
                 click: this.discard
             },
+            'messungform button[action=audit]': {
+                click: this.showAuditTrail
+            },
             'messungform': {
                 dirtychange: this.dirtyForm
             }
@@ -135,5 +138,14 @@
                 form.owner.up('window').enableChildren();
             }
         }
+    },
+
+    showAuditTrail: function(button) {
+        Ext.create('Lada.view.window.AuditTrail', {
+            autoShow: true,
+            closeAction: 'destroy',
+            type: 'messung',
+            objectId: button.up('form').recordId
+        });
     }
 });
--- a/app/controller/form/Probe.js	Thu Feb 23 12:49:28 2017 +0100
+++ b/app/controller/form/Probe.js	Fri Feb 24 14:32:55 2017 +0100
@@ -12,6 +12,10 @@
 Ext.define('Lada.controller.form.Probe', {
     extend: 'Ext.app.Controller',
 
+    requires: [
+        'Lada.view.window.AuditTrail'
+    ],
+
     /**
      * Initialize the Controller
      * It has 4 listeners
@@ -24,6 +28,9 @@
             'probeform button[action=discard]': {
                 click: this.discard
             },
+            'probeform button[action=audit]': {
+                click: this.showAuditTrail
+            },
             'probeform': {
                 dirtychange: this.dirtyForm
             },
@@ -304,6 +311,14 @@
         for (var i = field.layer + 1; i < 12; i++) {
             allS[i].clearValue();
         }
+    },
+
+    showAuditTrail: function(button) {
+        Ext.create('Lada.view.window.AuditTrail', {
+            autoShow: true,
+            closeAction: 'destroy',
+            type: 'probe',
+            objectId: button.up('form').recordId
+        });
     }
-
 });
--- a/app/view/form/Messung.js	Thu Feb 23 12:49:28 2017 +0100
+++ b/app/view/form/Messung.js	Fri Feb 24 14:32:55 2017 +0100
@@ -55,6 +55,12 @@
                         borderRight: '1px solid #b5b8c8 !important'
                     },
                     items: ['->', {
+                        text: i18n.getMsg('audittrail'),
+                        qtip: i18n.getMsg('qtip.audit'),
+                        icon: 'resources/img/distribute-vertical-center.png',
+                        action: 'audit',
+                        disabled: this.recordId === null
+                    }, {
                         text: 'Speichern',
                         qtip: 'Daten speichern',
                         icon: 'resources/img/dialog-ok-apply.png',
--- a/app/view/form/Probe.js	Thu Feb 23 12:49:28 2017 +0100
+++ b/app/view/form/Probe.js	Fri Feb 24 14:32:55 2017 +0100
@@ -60,6 +60,12 @@
                         borderRight: '1px solid #b5b8c8 !important'
                     },
                     items: ['->', {
+                        text: i18n.getMsg('audittrail'),
+                        qtip: i18n.getMsg('qtip.audit'),
+                        icon: 'resources/img/distribute-vertical-center.png',
+                        action: 'audit',
+                        disabled: this.recordId === null
+                    }, {
                         text: 'Speichern',
                         qtip: 'Daten speichern',
                         icon: 'resources/img/dialog-ok-apply.png',
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/app/view/window/AuditTrail.js	Fri Feb 24 14:32:55 2017 +0100
@@ -0,0 +1,142 @@
+/* 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 with information about history of probe/messung objects..
+ */
+Ext.define('Lada.view.window.AuditTrail', {
+    extend: 'Ext.window.Window',
+
+    layout: 'fit',
+
+    width: 300,
+    height: 300,
+
+    type: null,
+
+    objectId: null,
+
+
+    /**
+     * This function initialises the Window
+     */
+    initComponent: function() {
+        var me = this;
+        var i18n = Lada.getApplication().bundle;
+        me.on({
+            show: function() {
+                me.initData();
+            }
+        });
+
+        me.title = i18n.getMsg("audit.title");
+        me.buttons = [{
+            text: i18n.getMsg('close'),
+            scope: me,
+            handler: me.close
+        }];
+        me.items = [{
+            border: 0,
+            //autoscroll: true,
+            overflowY: 'auto',
+            items: [{
+                border: 0,
+                name: 'auditcontainer'
+            }]
+        }];
+        me.callParent(arguments);
+    },
+
+    initData: function() {
+        if (this.type === null || this.objectId === null) {
+            return;
+        }
+        Ext.Ajax.request({
+            url: 'lada-server/rest/audit/' + this.type + '/' + this.objectId,
+            method: 'GET',
+            scope: this,
+            success: this.loadSuccess,
+            failure: this.loadFailure
+        });
+    },
+
+    loadSuccess: function(response) {
+        var json = Ext.decode(response.responseText);
+        var container = this.down('panel[name=auditcontainer]');
+        if (this.type === 'probe') {
+            var html = this.createHtmlProbe(json);
+            container.update(html);
+        }
+        else if (this.type === 'messung') {
+            container.update(this.createHtmlMessung(json));
+        }
+    },
+
+    createHtmlProbe: function(json) {
+        var i18n = Lada.getApplication().bundle;
+        var html = '<p><strong>Probe: ' + json.data.identifier + '</strong><br></p>';
+        var audit = json.data.audit;
+        if (audit.length === 0) {
+            html += '<p>Keine Änderungen</p>';
+        }
+        else {
+            for (var i = 0; i < audit.length; i++) {
+                html += '<p style="margin-bottom:0"><b>' + i18n.getMsg('date') + ': ' +
+                (Ext.Date.format(new Date(audit[i].timestamp), 'd.m.Y H:i')) + '</b>';
+                if (!Ext.isObject(audit[i].identifier)) {
+                    if (audit[i].type !== 'probe') {
+                        html += '<br>' + i18n.getMsg(audit[i].type) + ': ';
+                        html += audit[i].identifier;
+                    }
+                }
+                else {
+                    html += '<br>' + i18n.getMsg('messung') + ': ' +
+                        audit[i].identifier.messung + ' -> ' +
+                        i18n.getMsg(audit[i].type) + ': ' +
+                        audit[i].identifier.identifier;
+
+                }
+                html += '<br>geändert<br><div style="margin-left:2em;">'
+                for (var key in audit[i].changedFields) {
+                    html += '' + i18n.getMsg(key) + ': ' +
+                        audit[i].changedFields[key] + '<br>';
+                }
+                html += '</div>';
+                html += '</p>';
+            }
+        }
+        return html;
+    },
+
+    createHtmlMessung: function(json) {
+        var i18n = Lada.getApplication().bundle;
+        var html = '<p><strong>Messung: ' + json.data.identifier + '</strong><br></p>';
+        var audit = json.data.audit;
+        if (audit.length === 0) {
+            html += '<p>Keine Änderungen</p>';
+        }
+        else {
+            for (var i = 0; i < audit.length; i++) {
+                html += '<p style="margin-bottom:0"><b>' + i18n.getMsg('date') + ': ' +
+                (Ext.Date.format(new Date(audit[i].timestamp), 'd.m.Y H:i')) + '</b>';
+                if (audit[i].type !== 'messung') {
+                    html += '<br>' + i18n.getMsg(audit[i].type) + ': ';
+                    html += audit[i].identifier;
+                }
+                html += '<br>geändert<br><div style="margin-left:2em;">'
+                for (var key in audit[i].changedFields) {
+                    html += '' + i18n.getMsg(key) + ': ' +
+                        audit[i].changedFields[key] + '<br>';
+                }
+                html += '</div>';
+                html += '</p>';
+            }
+        }
+        return html;
+    }
+});
--- a/resources/i18n/Lada_de-DE.properties	Thu Feb 23 12:49:28 2017 +0100
+++ b/resources/i18n/Lada_de-DE.properties	Fri Feb 24 14:32:55 2017 +0100
@@ -106,6 +106,12 @@
 messzeitpunkt: Messzeitpunkt
 messgroesse: Messgröße
 pflichtmessgroesse: Pflichtmessgröße
+audittrail:Verlauf
+date:Datum
+messwert:Messwert
+messdauer:Messdauer
+probenart_id:Probenart
+probe_nehmer_id:Probenehmer
 
 emptytext.probenintervall:Wählen Sie ein Probenintervall
 emptytext.datenbasis:Wählen Sie eine Datenbasis
@@ -141,6 +147,7 @@
 messprogrammort.button.title:Ort angeben
 about.window.title:Über
 about.button.title:Über
+audit.title:Verlauf
 
 about.window.text.login:Sie sind angemeldet mit der Kennung:
 about.window.text.roles:Sie sind Mitglied der folgenden Gruppen:
Binary file resources/img/distribute-vertical-center.png has changed

http://lada.wald.intevation.org