raimund@603: /* Copyright (C) 2013 by Bundesamt fuer Strahlenschutz
raimund@603:  * Software engineering by Intevation GmbH
raimund@603:  *
raimund@603:  * This file is Free Software under the GNU GPL (v>=3)
raimund@603:  * and comes with ABSOLUTELY NO WARRANTY! Check out
raimund@603:  * the documentation coming with IMIS-Labordaten-Application for details.
raimund@603:  */
raimund@603: 
dustin@742: /*
dustin@1013:  * This is a controller for an Ortszuordnung Form
dustin@742:  */
dustin@1013: Ext.define('Lada.controller.form.Ortszuordnung', {
raimund@603:     extend: 'Ext.app.Controller',
raimund@603: 
dustin@742:     /**
dustin@742:      * Initialize the Controller with 4 listeners
dustin@742:      */
raimund@603:     init: function() {
raimund@603:         this.control({
dustin@1021:             'ortszuordnungform button[action=setOrt]': {
raimund@1274:                 toggle: this.chooseLocation
dustin@1021:             },
dustin@1013:             'ortszuordnungform button[action=save]': {
raimund@603:                 click: this.save
raimund@603:             },
mkrambach@1328:             'ortszuordnungform button[action=revert]': {
mkrambach@1328:                 click: this.revert
mkrambach@1328:             },
dustin@1013:             'ortszuordnungform': {
mkrambach@1288:                 validitychange: this.validityChange,
mkrambach@1288:                 dirtychange: this.validityChange
raimund@603:             }
raimund@603:         });
raimund@603:     },
raimund@603: 
dustin@742:      /**
dustin@972:       * The save function saves the content of the Ort form.
dustin@742:       * On success it will reload the Store,
dustin@742:       * on failure, it will display an Errormessage
dustin@742:       */
dustin@742:      save: function(button) {
dustin@1021: 
dustin@1022:         var formPanel = button.up('ortszuordnungform');
dustin@1022: 
dustin@1021:         //try to disable ortPickerButton:
dustin@1021:         try {
dustin@1022:            formPanel.down('button[action=setOrt]').toggle(false);
dustin@1021:         }
dustin@1021:         catch (e) {
dustin@1021:         }
mkrambach@1289:         var data = formPanel.getForm().getFieldValues(false);
dustin@1013:         var i18n = Lada.getApplication().bundle;
mkrambach@1289:         var recordData = formPanel.getForm().getRecord().data;
mkrambach@1339:         recordData.ortId = data.ortId[0];
mkrambach@1339:         recordData.ortszuordnungTyp = data.ortszuordnungTyp;
mkrambach@1289:         recordData.ortszusatztext = data.ortszusatztext;
mkrambach@1289:         if (!data.letzteAenderung) {
mkrambach@1289:             recordData.letzteAenderung = new Date();
mkrambach@1289:         } else {
mkrambach@1289:             recordData.letzteAenderung = data.letzteAenderung;
dustin@972:         }
raimund@603:         formPanel.getForm().getRecord().save({
raimund@603:             success: function(record, response) {
raimund@603:                 var json = Ext.decode(response.response.responseText);
raimund@641:                 if (json) {
raimund@603:                     formPanel.clearMessages();
raimund@603:                     formPanel.setRecord(record);
raimund@603:                     formPanel.setMessages(json.errors, json.warnings);
raimund@1134:                     formPanel.up('window').parentWindow.initData();
mkrambach@1343:                     button.setDisabled(true);
mkrambach@1343:                     button.up('toolbar').down(
mkrambach@1343:                         'button[action=revert]').setDisabled(true);
raimund@603:                 }
dustin@1022:                 //try to refresh the Grid of the Probe
dustin@1022:                 try {
dustin@1022:                     formPanel.up('window').parentWindow
dustin@1022:                         .down('ortszuordnunggrid').store.reload();
dustin@1022:                 }
dustin@1022:                 catch (e) {
dustin@1022: 
dustin@1022:                 }
raimund@603:             },
raimund@603:             failure: function(record, response) {
raimund@603:                 button.setDisabled(true);
raimund@603:                 formPanel.getForm().loadRecord(formPanel.getForm().getRecord());
raimund@603:                 var json = response.request.scope.reader.jsonData;
raimund@603:                 if (json) {
mkrambach@1288:                     if(Object.keys(json.errors).length > 0 ||
mkrambach@1288:                         Object.keys(json.warnings).length > 0) {
dustin@695:                         formPanel.setMessages(json.errors, json.warnings);
dustin@695:                     }
dustin@695:                     if(json.message){
dustin@1013:                         Ext.Msg.alert(i18n.getMsg('err.msg.save.title')
dustin@701:                             +' #'+json.message,
dustin@1013:                             i18n.getMsg(json.message));
dustin@701:                     } else {
dustin@1013:                          Ext.Msg.alert(i18n.getMsg('err.msg.save.title'),
dustin@1013:                             i18n.getMsg('err.msg.generic.body'));
dustin@695:                     }
dustin@701:                 } else {
dustin@1013:                     Ext.Msg.alert(i18n.getMsg('err.msg.save.title'),
dustin@1013:                         i18n.getMsg('err.msg.response.body'));
raimund@603:                 }
raimund@603:             }
raimund@603:         });
raimund@603:     },
raimund@603: 
dustin@1013:     /**
mkrambach@1328:      * reverts the form to the currently saved state
mkrambach@1328:      */
mkrambach@1328:     revert: function(button) {
mkrambach@1328:         var form = button.up('form');
mkrambach@1328:         var osg = button.up('window').down('ortstammdatengrid');
mkrambach@1328:         var recordData = form.getForm().getRecord().data;
mkrambach@1343:         var currentOrt = recordData.ortId;
mkrambach@1328:         var selmod = osg.getView().getSelectionModel();
mkrambach@1328:         form.getForm().reset();
mkrambach@1347:         if (!currentOrt) {
mkrambach@1347:             selmod.deselectAll();
mkrambach@1347:         } else {
mkrambach@1347:             var record = osg.store.getById(currentOrt);
mkrambach@1347:             form.setOrt(null, record);
mkrambach@1347:             selmod.select(record);
mkrambach@1347:         }
mkrambach@1343:         button.setDisabled(true);
mkrambach@1343:         button.up('toolbar').down('button[action=save]').setDisabled(true);
mkrambach@1328:     },
mkrambach@1328: 
mkrambach@1328:     /**
dustin@1021:      * When the button is Active, a Record can be selected.
dustin@1021:      * If the Record was selected from a grid this function
mkrambach@1288:      * sets the ortzuordnung.
dustin@1021:      */
mkrambach@1288:     chooseLocation: function(button, pressed, opts) {
dustin@1021:         var i18n = Lada.getApplication().bundle;
raimund@1274:         var win = button.up('window');
raimund@1274:         var gridPanel = win.down('panel[name=ortgrid]');
mkrambach@1288:         var osg = win.down('ortstammdatengrid');
raimund@1335:         var oForm = button.up('window').down('ortszuordnungform');
mkrambach@1289:         osg.addListener('select',oForm.setOrt, oForm);
mkrambach@1293:         var map = win.down('map');
raimund@1274:         if (pressed) {
raimund@1274:             win.setHeight(Ext.getBody().getViewSize().height - 50);
mkrambach@1288:             button.setText(i18n.getMsg('ortszuordnung.form.setOrt.pressed'));
mkrambach@1293:             map.featureLayer.setVisibility(true);
raimund@1274:             win.setY(25);
raimund@1274:             gridPanel.show();
raimund@1336:             var mstId = oForm.up('window').probe ? oForm.up('window').probe.get('mstId') :
raimund@1336:                 oForm.up('window').messprogramm.get('mstId');
raimund@1336:             var mst = Ext.data.StoreManager.get('messstellen');
raimund@1336:             var ndx = mst.findExact('id', mstId);
raimund@1336:             var nId = mst.getAt(ndx).get('netzbetreiberId');
raimund@1336:             var store = Ext.create('Lada.store.Orte', {
raimund@1336:                 defaultPageSize: 0,
raimund@1336:                 listeners: {
raimund@1336:                     beforeload: {
raimund@1336:                         fn: function() {
raimund@1336:                             osg.setLoading(true);
raimund@1336:                         }
raimund@1336:                     },
raimund@1336:                     load: {
raimund@1336:                         fn: function() {
raimund@1336:                             osg.setLoading(false);
raimund@1336:                             osg.setStore(store);
raimund@1336:                             osg.store.filterBy(function(record) {
raimund@1336:                                 if (record.get('netzbetreiberId') ===
raimund@1336:                                     nId) {
raimund@1336:                                         return true;
raimund@1336:                                     }
raimund@1336:                             });
raimund@1336:                         }
raimund@1336:                     }
raimund@1336:                 }
raimund@1336:             });
mkrambach@1293:             win.doLayout();
mkrambach@1288:             osg.addListener('select',oForm.setOrt, oForm);
mkrambach@1288: 
raimund@1274:         }
raimund@1274:         else {
mkrambach@1293:             map.featureLayer.setVisibility(false);
mkrambach@1293:             var y = (Ext.getBody().getViewSize().height - 465) / 2;
raimund@1274:             win.setHeight(465);
raimund@1274:             win.setY(y);
mkrambach@1288:             button.setText(i18n.getMsg('ortszuordnung.form.setOrt'));
raimund@1274:             gridPanel.hide();
mkrambach@1288:             osg.removeListener('select',oForm.setOrt, oForm);
mkrambach@1293:             oForm.doLayout();
raimund@1274:         }
raimund@1274:     },
raimund@1274: 
dustin@1021:     /**
mkrambach@1291:      * The validitychange function enables or disables the save button which
mkrambach@1291:      * is present in the toolbar of the form.
dustin@1013:      */
mkrambach@1288:     validityChange: function(form, valid) {
mkrambach@1347:         // the simple form.isDirty() check seems to fail for a lot of cases
mkrambach@1347:         var ortIdIsDirty = true;
mkrambach@1347:         if (form.getRecord().data.ortId == form.findField('ortId').getValue()) {
mkrambach@1347:             ortIdIsDirty = false;
mkrambach@1347:         }
mkrambach@1343:         if (form.findField('ortszusatztext').isDirty()
mkrambach@1343:             || form.findField('ortszuordnungTyp').isDirty()
mkrambach@1347:             || ortIdIsDirty) {
mkrambach@1341:             form.owner.down('button[action=revert]').setDisabled(false);
mkrambach@1341:             if (valid && form.getValues().ortId !== '') {
mkrambach@1341:                 form.owner.down('button[action=save]').setDisabled(false);
mkrambach@1288:             } else {
mkrambach@1288:                 form.owner.down('button[action=save]').setDisabled(true);
raimund@1144:             }
mkrambach@1288:         } else {
mkrambach@1289:             //not dirty
mkrambach@1289:             form.owner.down('button[action=save]').setDisabled(true);
mkrambach@1341:             form.owner.down('button[action=revert]').setDisabled(true);
raimund@603:         }
raimund@603:     }
raimund@603: });