# HG changeset patch # User Tom Gottfried # Date 1464012050 -7200 # Node ID b73f9a976c8277f27761b76fe346a31d3cddf89f # Parent ea5774447e4991022c77392617db2017c3c4abe8 Exponential notation without tampering numbers. Rounding is done by the server. Thus, the client should not fix the number of digits, except only for rendering. diff -r ea5774447e49 -r b73f9a976c82 app/model/Messwert.js --- a/app/model/Messwert.js Mon May 23 11:39:19 2016 +0200 +++ b/app/model/Messwert.js Mon May 23 16:00:50 2016 +0200 @@ -26,54 +26,7 @@ }, { name: 'messgroesseId' }, { - name: 'messwert', - serialize: function(v) { - if (!v || v === '') { - return v; - } - if (v.indexOf(',') > 0) { - v = v.replace(',', '.'); - return v; - } - return v; - }, - convert: function(value) { - if (!value || value === '') { - return value; - } - var valueString = value.toString(); - if (valueString.indexOf('E') > 0) { - valueString = valueString.replace('E', 'e'); - } - var tmp; - if (valueString.indexOf('e') > 0) { - tmp = valueString; - } - else { - // Currently not locale friendly... - if (valueString.indexOf(',') > 0) { - valueString = valueString.replace(',', '.'); - } - tmp = parseFloat(valueString).toExponential(); - } - var parts = tmp.split('e'); - if (parts[0].indexOf('.') > 0) { - var floatPart = parseFloat(parts[0]); - var separator = floatPart.toFixed(2).toLocaleString().replace(/[-\d]/g, ''); - parts[0] = floatPart.toFixed(2).replace('.', separator); - } - else if (parts[0].indexOf(',') < 0) { - parts[0] = parts[0] + ',00'; - } - var intPart = parseInt(parts[1]); - if (intPart < 10 && intPart >= 0) { - parts[1] = '+0' + parseInt(parts[1]); - } - else if (intPart < 0 && intPart > -10) { - parts[1] = parts[1].replace('-', '-0'); - } - return parts[0] + 'e' + parts[1]; - } + name: 'messwert' }, { name: 'messwertNwg', convert: function(v) { @@ -87,54 +40,7 @@ name: 'messfehler', type: 'float' }, { - name: 'nwgZuMesswert', - serialize: function(v) { - if (!v || v === '') { - return v; - } - if (v.indexOf(',') > 0) { - v = v.replace(',', '.'); - return v; - } - return v; - }, - convert: function(value) { - if (!value || value === '') { - return value; - } - var valueString = value.toString(); - if (valueString.indexOf('E') > 0) { - valueString = valueString.replace('E', 'e'); - } - var tmp; - if (valueString.indexOf('e') > 0) { - tmp = valueString; - } - else { - // Currently not locale friendly... - if (valueString.indexOf(',') > 0) { - valueString = valueString.replace(',', '.'); - } - tmp = parseFloat(valueString).toExponential(); - } - var parts = tmp.split('e'); - if (parts[0].indexOf('.') > 0) { - var floatPart = parseFloat(parts[0]); - var separator = floatPart.toFixed(2).toLocaleString().replace(/[-\d]/g, ''); - parts[0] = floatPart.toFixed(2).replace('.', separator); - } - else if (parts[0].indexOf(',') < 0) { - parts[0] = parts[0] + ',00'; - } - var intPart = parseInt(parts[1]); - if (intPart < 10 && intPart >= 0) { - parts[1] = '+0' + parseInt(parts[1]); - } - else if (intPart < 0 && intPart > -10) { - parts[1] = parts[1].replace('-', '-0'); - } - return parts[0] + 'e' + parts[1]; - } + name: 'nwgZuMesswert' }, { name: 'mehId' }, { diff -r ea5774447e49 -r b73f9a976c82 app/model/Zusatzwert.js --- a/app/model/Zusatzwert.js Mon May 23 11:39:19 2016 +0200 +++ b/app/model/Zusatzwert.js Mon May 23 16:00:50 2016 +0200 @@ -26,97 +26,9 @@ }, { name: 'pzsId' }, { - name: 'nwgZuMesswert', - serialize: function(v) { - if (v.indexOf(',') > 0) { - v = v.replace(',', '.'); - return v; - } - return v; - }, - convert: function(value) { - if (!value || value === '') { - return value; - } - var valueString = value.toString(); - if (valueString.indexOf('E') > 0) { - valueString = valueString.replace('E', 'e'); - } - var tmp; - if (valueString.indexOf('e') > 0) { - tmp = valueString; - } - else { - // Currently not locale friendly... - if (valueString.indexOf(',') > 0) { - valueString = valueString.replace(',', '.'); - } - tmp = parseFloat(valueString).toExponential(); - } - var parts = tmp.split('e'); - if (parts[0].indexOf('.') > 0) { - var floatPart = parseFloat(parts[0]); - var separator = floatPart.toFixed(2).toLocaleString().replace(/[-\d]/g, ''); - parts[0] = floatPart.toFixed(2).replace('.', separator); - } - else if (parts[0].indexOf(',') < 0) { - parts[0] = parts[0] + ',00'; - } - var intPart = parseInt(parts[1]); - if (intPart < 10 && intPart >= 0) { - parts[1] = '+0' + parseInt(parts[1]); - } - else if (intPart < 0 && intPart > -10) { - parts[1] = parts[1].replace('-', '-0'); - } - return parts[0] + 'e' + parts[1]; - } + name: 'nwgZuMesswert' }, { - name: 'messwertPzs', - serialize: function(v) { - if (v.indexOf(',') > 0) { - v = v.replace(',', '.'); - return v; - } - return v; - }, - convert: function(value) { - if (!value || value === '') { - return value; - } - var valueString = value.toString(); - if (valueString.indexOf('E') > 0) { - valueString = valueString.replace('E', 'e'); - } - var tmp; - if (valueString.indexOf('e') > 0) { - tmp = valueString; - } - else { - // Currently not locale friendly... - if (valueString.indexOf(',') > 0) { - valueString = valueString.replace(',', '.'); - } - tmp = parseFloat(valueString).toExponential(); - } - var parts = tmp.split('e'); - if (parts[0].indexOf('.') > 0) { - var floatPart = parseFloat(parts[0]); - var separator = floatPart.toFixed(2).toLocaleString().replace(/[-\d]/g, ''); - parts[0] = floatPart.toFixed(2).replace('.', separator); - } - else if (parts[0].indexOf(',') < 0) { - parts[0] = parts[0] + ',00'; - } - var intPart = parseInt(parts[1]); - if (intPart < 10 && intPart >= 0) { - parts[1] = '+0' + parseInt(parts[1]); - } - else if (intPart < 0 && intPart > -10) { - parts[1] = parts[1].replace('-', '-0'); - } - return parts[0] + 'e' + parts[1]; - } + name: 'messwertPzs' }, { name: 'messfehler', type: 'float' diff -r ea5774447e49 -r b73f9a976c82 app/view/form/ExpNumberField.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/app/view/form/ExpNumberField.js Mon May 23 16:00:50 2016 +0200 @@ -0,0 +1,46 @@ +/* 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. + */ + +/** + * Number field for display and editing of exponential numbers + */ +Ext.define('Lada.view.form.ExpNumberField', { + extend: 'Ext.form.field.Number', + alias: 'widget.expnumberfield', + + baseChars: '0123456789eE', + + hideTrigger: true, + keyNavEnabled: false, + mouseWheelEnabled: false, + + valueToRaw: function(value) { + if (!value || value === '') { + return value; + } + + // XXX: this will be applied to any input before being sent to + // the server! Thus, toExponential(2) would lead to incorrectly + // rounded numbers at this point. + value = parseFloat(value).toExponential() + .toString().replace('.', this.decimalSeparator); + + return value; + }, + + rawToValue: function(value) { + if (!value || value === '') { + return value; + } + + value = parseFloat( + value.toString().replace(this.decimalSeparator, '.')); + + return value; + } +}); diff -r ea5774447e49 -r b73f9a976c82 app/view/grid/Messwert.js --- a/app/view/grid/Messwert.js Mon May 23 11:39:19 2016 +0200 +++ b/app/view/grid/Messwert.js Mon May 23 16:00:50 2016 +0200 @@ -14,6 +14,7 @@ alias: 'widget.messwertgrid', requires: [ + 'Lada.view.form.ExpNumberField', 'Lada.view.widget.Messgroesse', 'Lada.view.widget.Messeinheit' ], @@ -114,10 +115,11 @@ dataIndex: 'messwert', width: 80, editor: { - xtype: 'textfield', + xtype: 'expnumberfield', allowBlank: false, - regex: /^[+\-]?(?:(?:0|[1-9]\d*)(?:[\.\,][0-9]\d*)?(?:[eE][+\-]?\d+)|(\d+[\.\,]?\d*)?)$/, - regexText: 'Keine Zahl' + }, + renderer: function(value) { + return value.toExponential(2).toString().replace('.', ','); } }, { header: 'Messeinheit', @@ -161,10 +163,13 @@ dataIndex: 'nwgZuMesswert', width: 80, editor: { - xtype: 'textfield', - allowBlank: true, - regex: /^[+\-]?(?:(?:0|[1-9]\d*)(?:[\.\,][0-9]\d*)?(?:[eE][+\-]?\d+)|(\d+[\.\,]?\d*)?)$/, - regexText: 'Keine Zahl' + xtype: 'expnumberfield' + }, + renderer: function(value) { + if (!value || value === '') { + return value; + } + return value.toExponential(2).toString().replace('.', ','); } }, { header: 'Grenzwertüberschreitung', diff -r ea5774447e49 -r b73f9a976c82 app/view/grid/Probenzusatzwert.js --- a/app/view/grid/Probenzusatzwert.js Mon May 23 11:39:19 2016 +0200 +++ b/app/view/grid/Probenzusatzwert.js Mon May 23 16:00:50 2016 +0200 @@ -13,6 +13,7 @@ extend: 'Ext.grid.Panel', alias: 'widget.probenzusatzwertgrid', requires: [ + 'Lada.view.form.ExpNumberField', 'Lada.view.widget.Probenzusatzwert' ], @@ -92,10 +93,13 @@ dataIndex: 'messwertPzs', flex: 1, editor: { - xtype: 'textfield', - allowBlank: false, - regex: /^[+\-]?(?:(?:0|[1-9]\d*)(?:[\.\,][0-9]\d*)?(?:[eE][+\-]?\d+)|(\d+[\.\,]?\d*)?)$/, - regexText: 'Keine Zahl' + xtype: 'expnumberfield', + }, + renderer: function(value) { + if (!value || value === '') { + return value; + } + return value.toExponential(2).toString().replace('.', ','); } }, { header: '< NWG', @@ -114,10 +118,13 @@ xtype: 'numbercolumn', flex: 1, editor: { - xtype: 'textfield', - allowBlank: false, - regex: /^[+\-]?(?:(?:0|[1-9]\d*)(?:[\.\,][0-9]\d*)?(?:[eE][+\-]?\d+)|(\d+[\.\,]?\d*)?)$/, - regexText: 'Keine Zahl' + xtype: 'expnumberfield', + }, + renderer: function(value) { + if (!value || value === '') { + return value; + } + return value.toExponential(2).toString().replace('.', ','); } }, { header: 'Maßeinheit',