# HG changeset patch # User Raimund Renkert # Date 1487943175 -3600 # Node ID 7e9a6f0e55b3d3fcebf195017f12b06a40f1da5e # Parent 3f499c52eee649b47c89b7fe8523177198537e91 Added UI for audit trail. TODO: add more i18n strings. diff -r 3f499c52eee6 -r 7e9a6f0e55b3 app/controller/form/Messung.js --- 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 + }); } }); diff -r 3f499c52eee6 -r 7e9a6f0e55b3 app/controller/form/Probe.js --- 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 + }); } - }); diff -r 3f499c52eee6 -r 7e9a6f0e55b3 app/view/form/Messung.js --- 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', diff -r 3f499c52eee6 -r 7e9a6f0e55b3 app/view/form/Probe.js --- 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', diff -r 3f499c52eee6 -r 7e9a6f0e55b3 app/view/window/AuditTrail.js --- /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 = '

Probe: ' + json.data.identifier + '

'; + var audit = json.data.audit; + if (audit.length === 0) { + html += '

Keine Änderungen

'; + } + else { + for (var i = 0; i < audit.length; i++) { + html += '

' + i18n.getMsg('date') + ': ' + + (Ext.Date.format(new Date(audit[i].timestamp), 'd.m.Y H:i')) + ''; + if (!Ext.isObject(audit[i].identifier)) { + if (audit[i].type !== 'probe') { + html += '
' + i18n.getMsg(audit[i].type) + ': '; + html += audit[i].identifier; + } + } + else { + html += '
' + i18n.getMsg('messung') + ': ' + + audit[i].identifier.messung + ' -> ' + + i18n.getMsg(audit[i].type) + ': ' + + audit[i].identifier.identifier; + + } + html += '
geändert

' + for (var key in audit[i].changedFields) { + html += '' + i18n.getMsg(key) + ': ' + + audit[i].changedFields[key] + '
'; + } + html += '
'; + html += '

'; + } + } + return html; + }, + + createHtmlMessung: function(json) { + var i18n = Lada.getApplication().bundle; + var html = '

Messung: ' + json.data.identifier + '

'; + var audit = json.data.audit; + if (audit.length === 0) { + html += '

Keine Änderungen

'; + } + else { + for (var i = 0; i < audit.length; i++) { + html += '

' + i18n.getMsg('date') + ': ' + + (Ext.Date.format(new Date(audit[i].timestamp), 'd.m.Y H:i')) + ''; + if (audit[i].type !== 'messung') { + html += '
' + i18n.getMsg(audit[i].type) + ': '; + html += audit[i].identifier; + } + html += '
geändert

' + for (var key in audit[i].changedFields) { + html += '' + i18n.getMsg(key) + ': ' + + audit[i].changedFields[key] + '
'; + } + html += '
'; + html += '

'; + } + } + return html; + } +}); diff -r 3f499c52eee6 -r 7e9a6f0e55b3 resources/i18n/Lada_de-DE.properties --- 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: diff -r 3f499c52eee6 -r 7e9a6f0e55b3 resources/img/distribute-vertical-center.png Binary file resources/img/distribute-vertical-center.png has changed