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: });