mkrambach@1337: /* Copyright (C) 2013 by Bundesamt fuer Strahlenschutz mkrambach@1337: * Software engineering by Intevation GmbH mkrambach@1337: * mkrambach@1337: * This file is Free Software under the GNU GPL (v>=3) mkrambach@1337: * and comes with ABSOLUTELY NO WARRANTY! Check out mkrambach@1337: * the documentation coming with IMIS-Labordaten-Application for details. mkrambach@1337: */ mkrambach@1337: mkrambach@1337: /* mkrambach@1337: * This is a controller for an Ortserstellung Form mkrambach@1337: */ mkrambach@1337: Ext.define('Lada.controller.form.Ortserstellung', { mkrambach@1337: extend: 'Ext.app.Controller', mkrambach@1337: mkrambach@1337: /** mkrambach@1337: * Initialize the Controller mkrambach@1337: */ mkrambach@1337: init: function() { mkrambach@1337: this.control({ mkrambach@1337: 'ortserstellungsform button[action=save]': { mkrambach@1337: click: this.save mkrambach@1337: }, mkrambach@1337: 'ortserstellungsform button[action=revert]': { mkrambach@1337: click: this.discard mkrambach@1337: }, mkrambach@1342: 'ortserstellungsform staat combobox' : { mkrambach@1337: change: this.checkCommitEnabled mkrambach@1337: }, mkrambach@1342: 'ortserstellungsform verwaltungseinheit combobox' : { mkrambach@1337: change: this.checkCommitEnabled mkrambach@1337: }, mkrambach@1342: 'ortserstellungsform koordinatenart combobox': { mkrambach@1337: change: this.checkCommitEnabled mkrambach@1337: }, mkrambach@1337: 'ortserstellungsform numfield [name=koordXExtern]': { mkrambach@1337: change: this.checkCommitEnabled mkrambach@1337: }, mkrambach@1337: 'ortserstellungsform numfield [name=koordYExtern]': { mkrambach@1337: change: this.checkCommitEnabled mkrambach@1352: }, mkrambach@1352: 'ortserstellungsform': { mkrambach@1352: validitychange: this.checkCommitEnabled, mkrambach@1352: dirtychange: this.checkCommitEnabled mstanko@1377: } mkrambach@1337: }); mkrambach@1337: }, mkrambach@1337: mkrambach@1339: save: function(button) { mkrambach@1361: var me = this; mkrambach@1361: var formpanel = button.up('ortserstellungsform'); mkrambach@1361: var form = formpanel.getForm(); mkrambach@1337: var record = form.getRecord(); mkrambach@1337: var data = form.getFieldValues(true); mkrambach@1337: for (var key in data) { mkrambach@1337: record.set(key, data[key]); mkrambach@1337: } mkrambach@1337: record.set('id', null); mkrambach@1337: record.set('netzbetreiberId', Lada.netzbetreiber[0]); mkrambach@1337: record.save({ mkrambach@1337: success: function(newrecord, response) { mkrambach@1337: form.loadRecord(newrecord); mkrambach@1361: formpanel.down('verwaltungseinheit').store.clearFilter(); mkrambach@1361: formpanel.down('staat').store.clearFilter(); mkrambach@1339: button.setDisabled(true); mkrambach@1361: formpanel.down('button[action=revert]').setDisabled(true); mkrambach@1339: button.hide(); mkrambach@1361: var ozw = formpanel.up('panel').parentWindow; mkrambach@1337: var json = Ext.decode(response.response.responseText); mkrambach@1337: if (json) { mkrambach@1361: formpanel.clearMessages(); mkrambach@1361: formpanel.setMessages(json.errors, json.warnings); mkrambach@1337: } mkrambach@1361: if (ozw.ortstore) { mkrambach@1361: ozw.ortstore.load({ mkrambach@1361: callback: function(records, operation, success) { mkrambach@1379: ozw.ortstore.filter('netzbetreiberId', Lada.netzbetreiber[0]); mkrambach@1364: ozw.down('map').addLocations(ozw.ortstore); mkrambach@1364: var osg = ozw.down('ortstammdatengrid'); mkrambach@1364: osg.setStore(ozw.ortstore); mkrambach@1364: me.afterSave(formpanel, json); mkrambach@1361: }, mkrambach@1361: scope: this mkrambach@1361: }); mkrambach@1361: } else { mkrambach@1364: var osgstore = ozw.down('ortstammdatengrid').getStore(); mkrambach@1379: osgstore.load({ mkrambach@1379: callback: function() { mkrambach@1379: osgstore.filter('netzbetreiberId', Lada.netzbetreiber[0]); mkrambach@1379: } mkrambach@1379: }); mkrambach@1364: ozw.down('map').addLocations(osgstore); mkrambach@1364: me.afterSave(formpanel, json); mkrambach@1361: } mkrambach@1337: }, mkrambach@1337: failure: function(record, response) { tom@1357: var json = response.request.scope.reader.jsonData; mkrambach@1337: if (json) { mkrambach@1337: if(json.message){ mkrambach@1337: Ext.Msg.alert(Lada.getApplication().bundle.getMsg('err.msg.save.title') mkrambach@1337: +' #'+json.message, mkrambach@1337: Lada.getApplication().bundle.getMsg(json.message)); mkrambach@1337: } else { mkrambach@1337: Ext.Msg.alert(Lada.getApplication().bundle.getMsg('err.msg.save.title'), mkrambach@1337: Lada.getApplication().bundle.getMsg('err.msg.generic.body')); mkrambach@1337: } mkrambach@1364: formpanel.clearMessages(); mkrambach@1364: formpanel.setMessages(json.errors, json.warnings); mkrambach@1337: } else { mkrambach@1337: Ext.Msg.alert(Lada.getApplication().bundle.getMsg('err.msg.save.title'), mkrambach@1337: Lada.getApplication().bundle.getMsg('err.msg.response.body')); mkrambach@1337: } mkrambach@1337: } mkrambach@1337: }); mkrambach@1337: }, mkrambach@1337: mkrambach@1361: /** mkrambach@1361: * Callbacks after a Ort has been saved and the store is reloaded mkrambach@1361: */ mkrambach@1364: afterSave: function(form, json) { mkrambach@1361: var ozw = form.up('panel').parentWindow; mkrambach@1361: var osg = ozw.down('ortstammdatengrid'); mkrambach@1361: var id = json.data.id; mkrambach@1361: var record = osg.store.getById(id); mkrambach@1364: if (record) { mkrambach@1364: var selmod = osg.getView().getSelectionModel(); mkrambach@1364: selmod.select(record); mkrambach@1364: } mkrambach@1361: var resulttext; mkrambach@1361: if (json) { mkrambach@1361: if (json.message == '201') { mkrambach@1361: resulttext = 'Dieser Ort existiert bereits!'; mkrambach@1361: } mkrambach@1361: if (json.message == '200') { mkrambach@1361: resulttext = 'Ort erfolgreich angelegt!'; mkrambach@1361: } mkrambach@1361: } mkrambach@1361: Ext.Msg.show({ mkrambach@1361: title: Lada.getApplication().bundle.getMsg('success'), mkrambach@1361: autoScroll: true, mkrambach@1361: msg: resulttext, mkrambach@1361: buttons: Ext.Msg.OK mkrambach@1361: }); mkrambach@1361: }, mkrambach@1361: mkrambach@1337: discard: function(button) { tom@1360: button.up('panel').getForm().reset(); mkrambach@1337: }, mkrambach@1337: mkrambach@1337: /** mkrambach@1337: * checks if the Messpunkt can be committed. mkrambach@1337: * Disables the save button if false mkrambach@1337: */ mkrambach@1352: checkCommitEnabled: function(callingEl) { mkrambach@1337: var panel; mkrambach@1352: if (callingEl.up) { //called by a field in the form mkrambach@1354: panel = callingEl.up('ortserstellungsform'); mkrambach@1352: } else { //called by the form mkrambach@1352: panel = callingEl.owner; mkrambach@1337: } mkrambach@1337: var savebutton = panel.down('button[action=save]'); mkrambach@1337: var form = panel.getForm(); mkrambach@1337: if (form.isDirty()) { mkrambach@1337: panel.down('button[action=revert]').setDisabled(false); mkrambach@1337: } else { mkrambach@1337: panel.down('button[action=revert]').setDisabled(true); mkrambach@1337: } mkrambach@1337: if (form.isValid()) { tom@1359: //one of three conditions must apply, the first one depending mkrambach@1337: // on three fields mkrambach@1337: if ( mkrambach@1337: (form.findField('kdaId').getValue() mkrambach@1337: && form.findField('koordYExtern').getValue() mkrambach@1337: && form.findField('koordXExtern').getValue() mkrambach@1337: ) mkrambach@1342: || form.findField('gemId').getValue() !== null mkrambach@1342: || form.findField('staatId').getValue() !== null mkrambach@1337: ) { mkrambach@1337: savebutton.setDisabled(false); mkrambach@1337: } else { mkrambach@1337: savebutton.setDisabled(true); mkrambach@1337: } mkrambach@1337: } else { //form invalid mkrambach@1337: savebutton.setDisabled(true); mkrambach@1337: } mkrambach@1337: } mkrambach@1337: });