mkrambach@1279: /* Copyright (C) 2013 by Bundesamt fuer Strahlenschutz mkrambach@1279: * Software engineering by Intevation GmbH mkrambach@1279: * mkrambach@1279: * This file is Free Software under the GNU GPL (v>=3) mkrambach@1279: * and comes with ABSOLUTELY NO WARRANTY! Check out mkrambach@1279: * the documentation coming with IMIS-Labordaten-Application for details. mkrambach@1279: */ mkrambach@1279: mkrambach@1279: /** mkrambach@1279: * Form to create a new Messpunkt mkrambach@1279: */ mkrambach@1279: Ext.define('Lada.view.form.Ortserstellung', { mkrambach@1279: extend: 'Ext.form.Panel', mkrambach@1279: alias: 'widget.ortserstellungsform', mkrambach@1279: requires: [ mkrambach@1279: 'Lada.view.widget.Verwaltungseinheit', mkrambach@1279: 'Lada.view.widget.Staat' mkrambach@1279: ], mkrambach@1284: model: null, mkrambach@1279: mkrambach@1289: margin: 5, mkrambach@1289: mkrambach@1284: record: null, mkrambach@1279: mkrambach@1314: trackResetOnLoad: true, mkrambach@1314: mkrambach@1279: initComponent: function() { mkrambach@1279: var i18n = Lada.getApplication().bundle; mkrambach@1279: var me = this; mkrambach@1284: this.items = [{ mkrambach@1284: xtype: 'netzbetreiber', mkrambach@1284: editable: false, mkrambach@1284: readOnly: true, mkrambach@1284: submitValue: true, mkrambach@1289: border: 0, mkrambach@1284: fieldLabel: i18n.getMsg('netzbetreiberId'), mkrambach@1289: labelWidth: 125, mkrambach@1288: value: Lada.netzbetreiber[0] tom@1306: }, { mkrambach@1309: xtype: 'textfield', mkrambach@1309: name: 'ortId', mkrambach@1309: maxLength: 10, mkrambach@1309: labelWidth: 125, mkrambach@1309: fieldLabel: i18n.getMsg('orte.ortId') mkrambach@1309: }, { mkrambach@1284: xtype: 'checkbox', mkrambach@1284: name: 'aktiv', mkrambach@1284: fieldLabel: 'aktiv:' mkrambach@1284: },{ mkrambach@1284: xtype: 'staat', mkrambach@1284: labelWidth: 125, mkrambach@1284: fieldLabel: i18n.getMsg('staat'), mkrambach@1284: name: 'staatId', tom@1306: forceSelection: true, mkrambach@1284: listeners: { mkrambach@1284: change: { mkrambach@1284: fn: function() { me.checkCommitEnabled() } mkrambach@1279: } mkrambach@1284: } mkrambach@1284: }, { mkrambach@1284: xtype: 'verwaltungseinheit', mkrambach@1284: labelWidth: 125, tom@1297: fieldLabel: i18n.getMsg('orte.verwaltungseinheit'), mkrambach@1289: forceSelection: true, mkrambach@1284: name: 'gemId', mkrambach@1284: listeners: { mkrambach@1284: change: { mkrambach@1284: fn: function() { me.checkCommitEnabled() } mkrambach@1279: } mkrambach@1284: } mkrambach@1284: }, { mkrambach@1284: xtype: 'numfield', mkrambach@1284: labelWidth: 125, mkrambach@1284: fieldLabel: i18n.getMsg('orte.kda'), mkrambach@1284: allowDecimals: false, mkrambach@1284: maxLength: 1, mkrambach@1284: name: 'kdaId', mkrambach@1284: listeners: { mkrambach@1284: change: { mkrambach@1284: fn: function() { me.checkCommitEnabled() } mkrambach@1279: } mkrambach@1284: } mkrambach@1284: }, { mkrambach@1284: xtype: 'numfield', mkrambach@1284: labelWidth: 125, mkrambach@1284: fieldLabel: i18n.getMsg('orte.koordx'), mkrambach@1284: name: 'koordXExtern', mkrambach@1284: allowDecimals: true, mkrambach@1284: decimalPrecision: 5, tom@1310: maxLength: 22, mkrambach@1284: listeners: { mkrambach@1284: change: { mkrambach@1284: fn: function() { me.checkCommitEnabled() } mkrambach@1284: } mkrambach@1284: } mkrambach@1284: }, { mkrambach@1284: xtype: 'numfield', mkrambach@1284: labelWidth: 125, mkrambach@1284: fieldLabel: i18n.getMsg('orte.koordy'), mkrambach@1284: name: 'koordYExtern', mkrambach@1284: allowDecimals: true, mkrambach@1284: decimalPrecision: 5, tom@1310: maxLength: 22, mkrambach@1284: listeners: { mkrambach@1284: change: { mkrambach@1284: fn: function() { me.checkCommitEnabled() } mkrambach@1284: } mkrambach@1284: } mkrambach@1284: }, { mkrambach@1284: xtype: 'numfield', mkrambach@1284: labelWidth: 125, mkrambach@1289: fieldLabel: i18n.getMsg('orte.hoeheLand'), mkrambach@1284: name: 'hoeheLand', mkrambach@1284: maxLength: 10, mkrambach@1284: allowDecimals: true mkrambach@1284: }, { mkrambach@1284: xtype: 'tfield', mkrambach@1284: labelWidth: 125, tom@1310: maxLength: 15, mkrambach@1284: name: 'kurztext', mkrambach@1289: fieldLabel: i18n.getMsg('orte.kurztext') mkrambach@1284: },{ mkrambach@1284: xtype: 'tfield', mkrambach@1284: labelWidth: 125, tom@1310: maxLength: 100, mkrambach@1284: fieldLabel: i18n.getMsg('orte.langtext'), mkrambach@1284: name: 'langtext' mkrambach@1284: },{ mkrambach@1284: xtype: 'tfield', mkrambach@1284: labelWidth: 125, tom@1310: maxLength: 70, mkrambach@1289: fieldLabel: i18n.getMsg('orte.berichtstext'), mkrambach@1284: name: 'berichtstext' mkrambach@1289: }, { mkrambach@1289: xtype: 'tfield', mkrambach@1289: labelWidth: 125, mkrambach@1289: maxLength: 100, mkrambach@1289: name: 'anlageId', mkrambach@1289: fieldLabel: i18n.getMsg('orte.anlageId') mkrambach@1289: }, { mkrambach@1289: xtype: 'tfield', mkrambach@1289: labelWidth: 125, tom@1310: maxLength: 1, mkrambach@1289: name: 'zone', mkrambach@1289: fieldLabel: i18n.getMsg('orte.zone') mkrambach@1289: },{ mkrambach@1289: xtype: 'tfield', mkrambach@1289: labelWidth: 125, tom@1310: maxLength: 2, mkrambach@1289: name: 'sektor', mkrambach@1289: fieldLabel: i18n.getMsg('orte.sektor') mkrambach@1289: },{ mkrambach@1289: xtype: 'tfield', mkrambach@1289: labelWidth: 125, mkrambach@1289: maxLength: 100, mkrambach@1289: name: 'ortTyp', mkrambach@1289: fieldLabel: i18n.getMsg('orte.ortTyp') mkrambach@1289: },{ mkrambach@1289: xtype: 'tfield', mkrambach@1289: labelWidth: 125, tom@1310: maxLength: 10, mkrambach@1289: name: 'zustaendigkeit', mkrambach@1289: fieldLabel: i18n.getMsg('orte.zustaendigkeit') mkrambach@1289: },{ mkrambach@1289: xtype: 'tfield', mkrambach@1289: labelWidth: 125, tom@1310: maxLength: 10, mkrambach@1289: name: 'mpArt', mkrambach@1289: fieldLabel: i18n.getMsg('orte.mpArt') mkrambach@1289: },{ mkrambach@1289: xtype: 'tfield', mkrambach@1289: labelWidth: 125, tom@1310: maxLength: 10, mkrambach@1289: name: 'nutsCode', mkrambach@1289: fieldLabel: i18n.getMsg('orte.nutsCode') mkrambach@1289: },{ mkrambach@1289: xtype: 'tfield', mkrambach@1289: labelWidth: 125, tom@1310: maxLength: 7, mkrambach@1289: name: 'ozId', mkrambach@1289: fieldLabel: i18n.getMsg('orte.ozId') mkrambach@1284: }]; mkrambach@1289: mkrambach@1284: this.dockedItems = [{ mkrambach@1284: xtype: 'toolbar', mkrambach@1284: dock: 'bottom', mkrambach@1294: ui: 'footer', mkrambach@1284: border: '0, 1, 1, 1', mkrambach@1284: style: { mkrambach@1284: borderBottom: '1px solid #b5b8c8 !important', mkrambach@1284: borderLeft: '1px solid #b5b8c8 !important', mkrambach@1284: borderRight: '1px solid #b5b8c8 !important' mkrambach@1284: }, mkrambach@1284: items: ['->', { mkrambach@1284: text: i18n.getMsg('save'), mkrambach@1284: action: 'save', mkrambach@1284: handler: me.saveOrt, mkrambach@1284: disabled: true mkrambach@1279: }, { mkrambach@1284: text: i18n.getMsg('close'), mkrambach@1284: action: 'close', mkrambach@1284: handler: function() { mkrambach@1284: me.close(); mkrambach@1279: } mkrambach@1279: }] mkrambach@1279: }]; mkrambach@1284: mkrambach@1284: this.callParent(arguments); mkrambach@1284: this.getForm().loadRecord(this.record); mkrambach@1279: }, mkrambach@1279: mkrambach@1279: /** mkrambach@1289: * checks if the Messpunkt can be committed. mkrambach@1279: * Disables the save button if false mkrambach@1279: */ mkrambach@1279: checkCommitEnabled: function() { mkrambach@1284: var savebutton = this.down('toolbar').down('button[action=save]'); mkrambach@1279: var form = this.getForm(); mkrambach@1314: if (form.isDirty()) { mkrambach@1314: if (form.findField('kdaId').getValue() || mkrambach@1314: form.findField('koordYExtern').getValue() || mkrambach@1314: form.findField('koordXExtern').getValue()) { mkrambach@1314: if (this.checkCoordinates()) { mkrambach@1314: savebutton.setDisabled(false); mkrambach@1314: } else { mkrambach@1314: savebutton.setDisabled(true); mkrambach@1314: } mkrambach@1314: } else if (form.findField('gemId').getValue() || mkrambach@1314: form.findField('staatId').getValue() >= 0 ) { mkrambach@1284: savebutton.setDisabled(false); mkrambach@1284: } else { mkrambach@1284: savebutton.setDisabled(true); mkrambach@1284: } mkrambach@1279: } else { mkrambach@1279: savebutton.setDisabled(true); mkrambach@1279: } mkrambach@1279: }, mkrambach@1279: mkrambach@1279: /** mkrambach@1279: * Validates the coordinate fields kdaId, koordXExtern, koordYExtern mkrambach@1279: */ mkrambach@1279: checkCoordinates: function() { mkrambach@1279: var x = this.getForm().findField('koordXExtern').getValue(); mkrambach@1279: var y = this.getForm().findField('koordYExtern').getValue(); mkrambach@1279: var kda = this.getForm().findField('kdaId').getValue(); mkrambach@1279: if (x && y && kda) { mkrambach@1279: if (kda === 4){ mkrambach@1279: if (x > -180 && x < 180 mkrambach@1279: && y > -90 && y < 90) { mkrambach@1279: return true; mkrambach@1279: } else { mkrambach@1279: // TODO: WGS84 (degrees- decimal), coordinates invalid mkrambach@1279: return false; mkrambach@1279: } mkrambach@1279: } else if (kda === 5){ mkrambach@1279: if (x >= 1000000 && x < 61000000 && mkrambach@1279: y > -10000000 && y < 10000000) { mkrambach@1279: return true; mkrambach@1279: } else { mkrambach@1279: // TODO: UTM, coordinates invalid mkrambach@1279: return false; mkrambach@1279: } mkrambach@1279: } else { mkrambach@1279: // TODO KDA not supported mkrambach@1279: return false; mkrambach@1279: } mkrambach@1279: } else { mkrambach@1279: // TODO: not all fields filled in mkrambach@1279: return false; mkrambach@1279: } mkrambach@1279: }, mkrambach@1279: mkrambach@1284: saveOrt: function() { mkrambach@1284: var this_panel = this.up('panel'); mkrambach@1284: var form = this_panel.getForm(); mkrambach@1311: var record = form.getRecord(); mkrambach@1314: var oldId = record.get('ortId'); mkrambach@1284: var data = form.getFieldValues(true); mkrambach@1284: for (var key in data) { mkrambach@1311: record.set(key, data[key]); mkrambach@1279: } mkrambach@1311: record.set('netzbetreiberId', Lada.netzbetreiber[0]); mkrambach@1311: record.save({ mkrambach@1314: success: function(newrecord, response) { mkrambach@1314: form.loadRecord(newrecord); mkrambach@1284: var ozw = this_panel.up().parentWindow; mkrambach@1295: var json = Ext.decode(response.response.responseText); mkrambach@1295: if (json) { mkrambach@1295: this_panel.clearMessages(); mkrambach@1295: this_panel.setMessages(json.errors, json.warnings); mkrambach@1295: } mkrambach@1284: ozw.ortstore.load({ mkrambach@1284: callback: function(records, operation, success) { mkrambach@1284: ozw.down('map').addLocations(ozw.ortstore); mkrambach@1289: var osg = ozw.down('ortstammdatengrid'); mkrambach@1289: osg.setStore(ozw.ortstore); mkrambach@1284: var id = Ext.decode(response.response.responseText).data.id; mkrambach@1289: var record = osg.store.getById(id); mkrambach@1289: var selmod = osg.getView().getSelectionModel(); mkrambach@1289: selmod.select(record); mkrambach@1314: var resulttext; mkrambach@1314: if (json) { mkrambach@1314: if (json.message == '201') { mkrambach@1314: resulttext = 'Dieser Ort existiert bereits!'; mkrambach@1314: } mkrambach@1314: if (json.message == '200') { mkrambach@1314: if (oldId === undefined) { mkrambach@1314: resulttext = 'Ort erfolgreich angelegt!'; mkrambach@1314: } else { mkrambach@1314: resulttext = 'Bestehender Ort erfolgreich modifiziert!'; mkrambach@1314: } mkrambach@1314: } mkrambach@1314: } mkrambach@1289: Ext.Msg.show({ mkrambach@1289: title: Lada.getApplication().bundle.getMsg('success'), mkrambach@1289: autoScroll: true, mkrambach@1314: msg: resulttext, mkrambach@1289: buttons: Ext.Msg.OK mkrambach@1289: }); mkrambach@1284: }, mkrambach@1284: scope: this mkrambach@1284: }); mkrambach@1289: mkrambach@1284: }, mkrambach@1284: failure: function(record, response) { mkrambach@1288: var json = Ext.decode(response.response.responseText); mkrambach@1288: if (json) { mkrambach@1288: if(json.errors.totalCount > 0 || json.warnings.totalCount > 0){ mkrambach@1288: formPanel.setMessages(json.errors, json.warnings); mkrambach@1288: } mkrambach@1288: if(json.message){ mkrambach@1288: Ext.Msg.alert(Lada.getApplication().bundle.getMsg('err.msg.save.title') mkrambach@1288: +' #'+json.message, mkrambach@1288: Lada.getApplication().bundle.getMsg(json.message)); mkrambach@1288: } else { mkrambach@1288: Ext.Msg.alert(Lada.getApplication().bundle.getMsg('err.msg.save.title'), mkrambach@1288: Lada.getApplication().bundle.getMsg('err.msg.generic.body')); mkrambach@1288: } mkrambach@1288: } else { mkrambach@1288: Ext.Msg.alert(Lada.getApplication().bundle.getMsg('err.msg.save.title'), mkrambach@1288: Lada.getApplication().bundle.getMsg('err.msg.response.body')); mkrambach@1288: } mkrambach@1284: } mkrambach@1284: }); mkrambach@1295: }, mkrambach@1295: mkrambach@1295: setMessages: function(errors, warnings) { mkrambach@1295: var key; mkrambach@1295: var element; mkrambach@1295: var content; mkrambach@1295: var i18n = Lada.getApplication().bundle; mkrambach@1295: if (warnings) { mkrambach@1295: for (key in warnings) { mkrambach@1295: element = this.down('component[name=' + key + ']'); mkrambach@1295: if (!element) { mkrambach@1295: continue; mkrambach@1295: } mkrambach@1295: content = warnings[key]; mkrambach@1295: var warnText = ''; mkrambach@1295: for (var i = 0; i < content.length; i++) { mkrambach@1295: warnText += i18n.getMsg(content[i].toString()) + '\n'; mkrambach@1295: } mkrambach@1295: element.showWarnings(warnText); mkrambach@1295: } mkrambach@1295: } mkrambach@1295: if (errors) { mkrambach@1295: for (key in errors) { mkrambach@1295: element = this.down('component[name=' + key + ']'); mkrambach@1295: if (!element) { mkrambach@1295: continue; mkrambach@1295: } mkrambach@1295: content = errors[key]; mkrambach@1295: var errorText = ''; mkrambach@1295: for (var i = 0; i < content.length; i++) { mkrambach@1295: errorText += i18n.getMsg(content[i].toString()) + '\n'; mkrambach@1295: } mkrambach@1295: element.showErrors(errorText); mkrambach@1295: } mkrambach@1295: } mkrambach@1295: }, mkrambach@1295: mkrambach@1295: clearMessages: function() { mkrambach@1295: // TODO: this is a stub mkrambach@1295: } mkrambach@1295: mkrambach@1313: });