[Lada-commits] [PATCH 1 of 2] Added the ability to work with "StatusWerten" which are delivered by the lada-server
Wald Commits
scm-commit at wald.intevation.org
Tue Oct 27 16:53:41 CET 2015
# HG changeset patch
# User Dustin Demuth <dustin at intevation.de>
# Date 1445960818 -3600
# Node ID 023e622f9551ad334e78396aca14c3683b3d33f7
# Parent 1f1467713c3f8a27a740e99e766dab0642f024ee
Added the ability to work with "StatusWerten" which are delivered by the lada-server.
To enable the uses of StatusWerte, the controller for the status grid, needed to be extended.
In addition, the form and grid views of Messung and Status were updated.
diff -r 1f1467713c3f -r 023e622f9551 app/controller/grid/Status.js
--- a/app/controller/grid/Status.js Fri Oct 16 08:15:36 2015 +0200
+++ b/app/controller/grid/Status.js Tue Oct 27 16:46:58 2015 +0100
@@ -20,7 +20,8 @@
this.control({
'statusgrid': {
edit: this.gridSave,
- canceledit: this.cancelEdit
+ canceledit: this.cancelEdit,
+ select: this.toggleAllowedPermissions
},
'statusgrid button[action=add]': {
click: this.add
@@ -81,8 +82,9 @@
var record = Ext.create('Lada.model.Status', {
messungsId: button.up('statusgrid').recordId
});
- button.up('statusgrid').store.insert(0, record);
- button.up('statusgrid').rowEditing.startEdit(0, 1);
+ var lastrow = button.up('statusgrid').store.count()
+ button.up('statusgrid').store.insert(lastrow, record);
+ button.up('statusgrid').rowEditing.startEdit(lastrow, 1);
},
/**
@@ -121,5 +123,43 @@
}
});
grid.down('button[action=delete]').disable();
+ },
+
+ /**
+ * When a row in a grid is selected,
+ * this function checks if the row may be edited,
+ * or if the row can be removed
+ */
+ toggleAllowedPermissions: function(context, record, index){
+
+ //retrieve the readOnly parameters
+ var readonlyWin = context.view.up('window').record.get('readonly');
+
+ var readonlyRec = record.get('readonly');
+ var grid = context.view.up('grid');
+
+ //retrieve the last record of the store
+ var lastRecord = context.getStore().last()
+ //Check if remove is allowed
+ if (lastRecord == record &&
+ readonlyWin == false &&
+ readonlyRec == false) {
+ grid.down('button[action=delete]').enable();
+ }
+ else {
+ grid.down('button[action=delete]').disable();
+ }
+
+
+ //Check if edit is allowed
+ if (lastRecord == record &&
+ readonlyWin == false &&
+ readonlyRec == false) {
+ grid.getPlugin('rowedit').enable()
+ }
+ else {
+ grid.getPlugin('rowedit').disable()
+ }
}
+
});
diff -r 1f1467713c3f -r 023e622f9551 app/model/Messung.js
--- a/app/model/Messung.js Fri Oct 16 08:15:36 2015 +0200
+++ b/app/model/Messung.js Tue Oct 27 16:46:58 2015 +0100
@@ -39,6 +39,8 @@
},
defaultValue: new Date()
}, {
+ name: 'status',
+ }, {
name: 'fertig',
type: 'boolean'
}, {
diff -r 1f1467713c3f -r 023e622f9551 app/model/Status.js
--- a/app/model/Status.js Fri Oct 16 08:15:36 2015 +0200
+++ b/app/model/Status.js Tue Oct 27 16:46:58 2015 +0100
@@ -15,20 +15,40 @@
fields: [{
name: 'id'
}, {
- name: 'owner',
- type: 'boolean'
- }, {
name: 'readonly',
type: 'boolean',
persist: false
}, {
+ name: 'owner',
+ type: 'boolean',
+ }, {
name: 'messungsId'
}, {
name: 'erzeuger'
}, {
- name: 'status'
+ name: 'statusStufe',
+ type: 'int'
}, {
- name: 'sdatum',
+ name: 'statusWert',
+ type: 'int'
+ }, {
+ name: 'treeModified',
+ serialize: function(value) {
+ if (value === '') {
+ return null;
+ }
+ return value;
+ }
+ }, {
+ name: 'parentModified',
+ serialize: function(value) {
+ if (value === '') {
+ return null;
+ }
+ return value;
+ }
+ }, {
+ name: 'datum',
type: 'date',
convert: function(v) {
if (!v) {
@@ -38,23 +58,7 @@
},
defaultValue: new Date()
}, {
- name: 'skommentar'
- }, {
- name: 'treeModified',
- serialize: function(value) {
- if (value === '') {
- return null;
- }
- return value;
- }
- }, {
- name: 'parentModified',
- serialize: function(value) {
- if (value === '') {
- return null;
- }
- return value;
- }
+ name: 'text'
}],
idProperty: 'id',
diff -r 1f1467713c3f -r 023e622f9551 app/store/Status.js
--- a/app/store/Status.js Fri Oct 16 08:15:36 2015 +0200
+++ b/app/store/Status.js Tue Oct 27 16:46:58 2015 +0100
@@ -11,5 +11,6 @@
*/
Ext.define('Lada.store.Status', {
extend: 'Ext.data.Store',
- model: 'Lada.model.Status'
+ model: 'Lada.model.Status',
+ storeId: 'Status'
});
diff -r 1f1467713c3f -r 023e622f9551 app/store/StatusWerte.js
--- a/app/store/StatusWerte.js Fri Oct 16 08:15:36 2015 +0200
+++ b/app/store/StatusWerte.js Tue Oct 27 16:46:58 2015 +0100
@@ -8,20 +8,10 @@
/**
* Store for Status-Werte
- * TODO i18n
*/
Ext.define('Lada.store.StatusWerte', {
extend: 'Ext.data.Store',
- fields: ['display', 'id'],
- data: [{
- display: 'unbekannt', id: 0
- }, {
- display: 'nicht vergeben', id: 1
- }, {
- display: 'plausibel', id: 2
- }, {
- display: 'nicht repräsentativ', id: 3
- }, {
- display: 'nicht plausibel', id: 4
- }]
+ model: 'Lada.model.StatusWerte',
+ autoLoad: true,
+ storeId: 'StatusWerte'
});
diff -r 1f1467713c3f -r 023e622f9551 app/view/form/Messung.js
--- a/app/view/form/Messung.js Fri Oct 16 08:15:36 2015 +0200
+++ b/app/view/form/Messung.js Tue Oct 27 16:46:58 2015 +0100
@@ -113,6 +113,22 @@
fieldLabel: 'Geplant',
width: 300,
labelWidth: 100
+ }, {
+ xtype: 'textfield',
+ name: 'status',
+ readOnly: true,
+ isFormField: false,
+ maxLength: 10,
+ margin: '0, 10, 5, 0',
+ fieldLabel: 'Status',
+ width: 300,
+ labelWidth: 100,
+ submitValue: false,
+ isFormField: false,
+ preventMark: true, //Do not display error msg.
+ validateValue: function() {
+ return true; //this field is always valid
+ },
}]
}]
}];
@@ -121,6 +137,57 @@
setRecord: function(record) {
this.getForm().loadRecord(record);
+ this.retrieveStatus(record.id, record.get('status'));
+ },
+
+ retrieveStatus: function(messungsId, statusId) {
+ var i18n = Lada.getApplication().bundle;
+ var msg = i18n.getMsg('load.statuswert');
+ var textfield = this.down('[name=status]');
+
+ textfield.setRawValue(msg);
+
+ var sStore = Ext.StoreManager.lookup('Status');
+ if (!sStore) {
+ sStore = Ext.create('Lada.store.Status');
+ }
+ sStore.on('load',
+ function(records, operation, success) {
+ var ret;
+ var i18n = Lada.getApplication().bundle;
+ if (sStore.getTotalCount() === 0) {
+ ret = 0;
+ }
+ else {
+ ret = sStore.getById(statusId).get('statusWert');
+ }
+ this.setStatusWert(ret);
+ },
+ this);
+ sStore.load({
+ params: {
+ messungsId: messungsId
+ }
+ });
+ },
+
+ setStatusWert: function(value){
+ var swStore = Ext.StoreManager.lookup('StatusWerte');
+ if (!swStore) {
+ var swStore = Ext.create('Lada.store.StatusWerte');
+ }
+ swStore.on('load',
+ function(records, operation, success) {
+ var i18n = Lada.getApplication().bundle;
+ var msg = i18n.getMsg('load.statuswert.error');
+ var textfield = this.down('[name=status]');
+ if (success) {
+ msg = swStore.getById(value).get('wert');
+ }
+ textfield.setRawValue(msg);
+ },
+ this);
+ swStore.load();
},
setMessages: function(errors, warnings) {
diff -r 1f1467713c3f -r 023e622f9551 app/view/grid/Messung.js
--- a/app/view/grid/Messung.js Fri Oct 16 08:15:36 2015 +0200
+++ b/app/view/grid/Messung.js Tue Oct 27 16:46:58 2015 +0100
@@ -83,9 +83,10 @@
flex: 1,
dataIndex: 'id',
renderer: function(value) {
- var id = 'messung-status-item' + value;
- this.updateStatus(value, id);
- return '<div id="' + id + '">Lade...</div>';
+ var statusId = this.store.getById(value).get('status');
+ var divId = 'messung-status-item' + value;
+ this.updateStatus(value, divId, statusId);
+ return '<div id="' + divId + '">Lade...</div>';
}
}, {
header: 'OK-Flag',
@@ -147,12 +148,16 @@
});
},
- updateStatus: function(value, divId) {
+ /**
+ * Load the statusstore,
+ * afterwards: retrieve the statusid
+ */
+ updateStatus: function(value, divId, statusId) {
var statusStore = Ext.create('Lada.store.Status');
statusStore.on('load',
this.updateStatusColumn,
this,
- {divId: divId});
+ {divId: divId, statusId: statusId});
statusStore.load({
params: {
messungsId: value
@@ -197,18 +202,36 @@
Ext.fly(opts.divId).update(value);
},
+ /**
+ * Retrieve Statuswert and update the column
+ */
updateStatusColumn: function(sstore, record, success, opts) {
- var value;
+ var value = 0;
if (sstore.getTotalCount() === 0) {
value = 0;
}
else {
- value = sstore.last().get('status');
+ value = sstore.getById(opts.statusId).get('statusWert');
}
if (Ext.fly(opts.divId)) {
- var sta = Ext.create('Lada.store.StatusWerte');
- var val = sta.getById(value).get('display');
- Ext.fly(opts.divId).update(val);
+ var sta = Ext.StoreManager.lookup('StatusWerte');
+ if (!sta) {
+ var sta = Ext.create('Lada.store.StatusWerte');
+ }
+ var val = 'error';
+ sta.load({
+ scope: this,
+ callback: function(records, operation, success) {
+ if (success) {
+ try {
+ val = sta.getById(value).get('wert');
+ }
+ catch (e) {
+ }
+ }
+ Ext.fly(opts.divId).update(val);
+ }
+ });
}
},
diff -r 1f1467713c3f -r 023e622f9551 app/view/grid/Status.js
--- a/app/view/grid/Status.js Fri Oct 16 08:15:36 2015 +0200
+++ b/app/view/grid/Status.js Tue Oct 27 16:46:58 2015 +0100
@@ -28,14 +28,14 @@
this.rowEditing = Ext.create('Ext.grid.plugin.RowEditing', {
clicksToMoveEditor: 1,
autoCancel: false,
- disabled: false,
+ disabled: true,
pluginId: 'rowedit',
listeners:{
// Make row ineditable when readonly is set to true
// Normally this would belong into a controller an not the view.
// But the RowEditPlugin is not handled there.
beforeedit: function(e, o) {
- var readonlywin = o.grid.up('window').record.get('readonly');
+ var readonlywin = o.grid.up('window').record.get('readonly');
var readonlygrid = o.record.get('readonly');
if (readonlywin == true || readonlygrid == true || this.disabled) {
return false;
@@ -43,10 +43,11 @@
return true;
}
}
- });
+ });
this.plugins = [this.rowEditing];
var statusStore = Ext.create('Lada.store.StatusWerte');
+ statusStore.load();
this.dockedItems = [{
xtype: 'toolbar',
dock: 'bottom',
@@ -64,10 +65,11 @@
}];
this.columns = [{
header: 'erstellt',
- dataIndex: 'sdatum',
+ dataIndex: 'datum',
xtype: 'datecolumn',
format: 'd.m.Y H:i',
width: 110,
+ sortable: false,
}, {
header: 'Erzeuger',
dataIndex: 'erzeuger',
@@ -85,33 +87,36 @@
valueField: 'id',
allowBlank: false,
editable: false
- }
+ },
+ sortable: false,
}, {
header: 'Status',
- dataIndex: 'status',
+ dataIndex: 'statusWert',
renderer: function(value) {
if (!value || value === '') {
return '';
}
- return statusStore.getById(value).get('display');
+ return statusStore.getById(value).get('wert');
},
editor: {
xtype: 'combobox',
store: statusStore,
- displayField: 'display',
+ displayField: 'wert',
valueField: 'id',
allowBlank: false,
editable: false
- }
+ },
+ sortable: false,
}, {
header: 'Text',
- dataIndex: 'skommentar',
+ dataIndex: 'text',
flex: 1,
editor: {
allowBlank: true,
maxLength: 1000,
enforceMaxLength: true
- }
+ },
+ sortable: false,
}];
this.listeners = {
select: {
@@ -160,7 +165,7 @@
}
},
/**
- * Activate the Remove Button
+ * Activate the "Remove Button"
*/
activateRemoveButton: function(selection, record) {
var grid = this;
@@ -170,7 +175,7 @@
}
},
/**
- * Activate the Remove Button
+ * Deactivate the "Remove Button"
*/
deactivateRemoveButton: function(selection, record) {
var grid = this;
diff -r 1f1467713c3f -r 023e622f9551 resources/i18n/Lada_de-DE.properties
--- a/resources/i18n/Lada_de-DE.properties Fri Oct 16 08:15:36 2015 +0200
+++ b/resources/i18n/Lada_de-DE.properties Tue Oct 27 16:46:58 2015 +0100
@@ -99,6 +99,10 @@
about.window.text.serverversion:Serverversion:
about.window.text.clientversion:Clientversion:
+
+load.statuswert:Lade aktuellen Statuswert...
+load.statuswert.error:Fehler beim auflösen der Statuswerte
+
# Actions
add:Hinzufügen
delete:Löschen
More information about the Lada-commits
mailing list