dustin@975: /* Copyright (C) 2013 by Bundesamt fuer Strahlenschutz
dustin@975:  * Software engineering by Intevation GmbH
dustin@975:  *
dustin@975:  * This file is Free Software under the GNU GPL (v>=3)
dustin@975:  * and comes with ABSOLUTELY NO WARRANTY! Check out
dustin@975:  * the documentation coming with IMIS-Labordaten-Application for details.
dustin@975:  */
dustin@975: 
dustin@975: /**
dustin@975:  * Controller for filter result grid.
dustin@975:  */
dustin@975: Ext.define('Lada.controller.grid.MessprogrammeList', {
dustin@975:     extend: 'Ext.app.Controller',
dustin@975:     requires: [
dustin@975:         'Lada.view.window.Messprogramm',
dustin@975:         'Lada.view.window.GenProbenFromMessprogramm'
dustin@975:     ],
dustin@975: 
dustin@975:     /**
dustin@975:      * Initialize the Controller with listeners
dustin@975:      */
dustin@975:     init: function() {
dustin@975:         this.control({
dustin@975:             'messprogrammelistgrid': {
dustin@977:                 itemdblclick: this.editItem,
dustin@977:                 select: this.activateButtons,
dustin@977:                 deselect: this.deactivateButtons
dustin@975:             },
dustin@975:             'messprogrammelistgrid toolbar button[action=addMessprogramm]': {
dustin@975:                 click: this.addMessprogrammItem
dustin@975:             },
dustin@975:             'messprogrammelistgrid toolbar button[action=genProbenFromMessprogramm]': {
dustin@975:                 click: this.genProbenFromMessprogramm
dustin@975:             }
dustin@975:         });
dustin@975:         this.callParent(arguments);
dustin@975:     },
dustin@975: 
dustin@975:     /**
dustin@975:      * This function is called after a Row in the
dustin@975:      * {@link Lada.view.grid.MessprogrammeList}
dustin@975:      * was double-clicked.
dustin@975:      * The function opens a {@link Lada.view.window.ProbeEdit}
dustin@975:      * or a {@link Lada.view.window.Messprogramm}.
dustin@975:      * To determine which window has to be opened, the function
dustin@975:      * analyse the records modelname.
dustin@975:      */
dustin@975:     editItem: function(grid, record) {
dustin@975:         var winname = 'Lada.view.window.Messprogramm';
dustin@975:         var win = Ext.create(winname, {
dustin@975:             record: record,
dustin@975:             style: 'z-index: -1;' //Fixes an Issue where windows could not be created in IE8
dustin@975:             });
dustin@975:         win.show();
dustin@975:         win.initData();
dustin@975:     },
dustin@975: 
dustin@975:     /**
dustin@975:      * This function opens a new window to create a Probe
dustin@975:      * {@link Lada.view.window.Messprogramm}
dustin@975:      */
dustin@975:     addMessprogrammItem: function() {
dustin@975:         var win = Ext.create('Lada.view.window.Messprogramm');
dustin@975:         win.show();
dustin@975:         win.initData();
dustin@975:     },
dustin@975: 
dustin@975:     /**
dustin@975:      * This button creates a window to generate Proben
dustin@975:      * from a selected messprogramm.
dustin@975:      */
dustin@975:     genProbenFromMessprogramm: function(button) {
dustin@975:         var grid = button.up('grid');
dustin@975:         var selection = grid.getView().getSelectionModel().getSelection();
dustin@975:         var i18n = Lada.getApplication().bundle;
dustin@975:         var proben = [];
dustin@975:         for (var i = 0; i < selection.length; i++) {
dustin@975:             proben.push(selection[i].get('id'));
dustin@975:         }
dustin@975:         var me = this;
dustin@975: 
dustin@975:         var winname = 'Lada.view.window.GenProbenFromMessprogramm';
dustin@975:         for (p in proben) {
dustin@975:             grid.setLoading(true);
dustin@975:             Ext.ClassManager.get('Lada.model.Messprogramm').load(proben[p], {
dustin@975:                 failure: function(record, action) {
dustin@975:                     me.setLoading(false);
dustin@975:                     // TODO
dustin@975:                     console.log('An unhandled Failure occured. See following Response and Record');
dustin@975:                     console.log(action);
dustin@975:                     console.log(record);
dustin@975:                     },
dustin@975:                 success: function(record, response) {
dustin@975:                     grid.setLoading(false);
dustin@975: 
dustin@975:                     var win = Ext.create(winname, {
dustin@975:                         record: record,
dustin@975:                         parentWindow: null
dustin@975:                     });
dustin@975:                     win.show();
dustin@975:                     win.initData();
dustin@975:                 },
dustin@975:                 scope: this
dustin@975:             });
dustin@975:         }
dustin@975:     },
dustin@975: 
dustin@977:     /**
dustin@977:      * Toggles the buttons in the toolbar
dustin@977:      **/
dustin@977:     activateButtons: function(rowModel, record) {
dustin@977:         var grid = rowModel.view.up('grid');
dustin@977:         this.buttonToggle(true, grid);
dustin@977:     },
dustin@977: 
dustin@977:     /**
dustin@977:      * Toggles the buttons in the toolbar
dustin@977:      **/
dustin@977:     deactivateButtons: function(rowModel, record) {
dustin@977:         var grid = rowModel.view.up('grid');
dustin@977:         // Only disable buttons when nothing is selected
dustin@977:         if (rowModel.selected.items == 0) {
dustin@977:             this.buttonToggle(false, grid);
dustin@977:         }
dustin@977:     },
dustin@977: 
dustin@977:     /**
dustin@977:      * Enables/Disables a set of buttons
dustin@977:      **/
dustin@977:     buttonToggle: function(enabled, grid) {
dustin@977:         if (!enabled) {
dustin@977:             grid.down('button[action=genProbenFromMessprogramm]').disable();
dustin@977:         }
dustin@977:         else {
dustin@977:             grid.down('button[action=genProbenFromMessprogramm]').enable();
dustin@977:         }
dustin@977:     },
dustin@977: 
dustin@975:     reload: function(btn) {
dustin@975:         if (btn === 'yes') {
dustin@975:             location.reload();
dustin@975:         }
dustin@975:     }
dustin@975: });
dustin@975: