raimund@588: /* Copyright (C) 2013 by Bundesamt fuer Strahlenschutz
raimund@588:  * Software engineering by Intevation GmbH
raimund@588:  *
raimund@588:  * This file is Free Software under the GNU GPL (v>=3)
raimund@588:  * and comes with ABSOLUTELY NO WARRANTY! Check out
raimund@588:  * the documentation coming with IMIS-Labordaten-Application for details.
raimund@588:  */
raimund@588: 
raimund@588: /*
raimund@588:  * Grid to list Messungen
raimund@588:  */
raimund@588: Ext.define('Lada.view.grid.Messung', {
raimund@588:     extend: 'Ext.grid.Panel',
raimund@588:     alias: 'widget.messunggrid',
raimund@588: 
raimund@588:     maxHeight: 350,
raimund@588:     emptyText: 'Keine Messungen gefunden',
raimund@588:     minHeight: 110,
raimund@588:     viewConfig: {
raimund@588:         deferEmptyText: false
raimund@588:     },
raimund@588:     margin: '0, 5, 5, 5',
raimund@588: 
raimund@588:     recordId: null,
raimund@588: 
raimund@588:     warnings: null,
raimund@588:     errors: null,
raimund@588: 
raimund@588:     initComponent: function() {
raimund@588:         this.dockedItems = [{
raimund@588:             xtype: 'toolbar',
raimund@588:             dock: 'bottom',
raimund@588:             items: ['->', {
raimund@588:                 text: 'Hinzufügen',
raimund@588:                 icon: 'resources/img/list-add.png',
raimund@588:                 action: 'add',
raimund@588:                 probeId: this.probeId
raimund@588:             }, {
raimund@588:                 text: 'Löschen',
raimund@588:                 icon: 'resources/img/list-remove.png',
raimund@588:                 action: 'delete'
raimund@588:             }]
raimund@588:         }];
raimund@588:         this.columns = [{
raimund@588:             header: 'Mess-ID',
raimund@588:             dataIndex: 'id',
raimund@588:             flex: 1,
raimund@588:             editor: {
raimund@588:                 allowBlank: false
raimund@588:             }
raimund@588:         }, {
raimund@588:             header: 'Nebenproben-Nr.',
raimund@588:             dataIndex: 'nebenprobenNr',
raimund@588:             flex: 1,
raimund@588:             editor: {
raimund@588:                 allowBlank: false
raimund@588:             }
raimund@588:         }, {
raimund@588:             header: 'MMT',
raimund@588:             dataIndex: 'mmtId',
raimund@588:             flex: 1,
raimund@588:             editor: {
raimund@588:                 allowBlank: false
raimund@588:             }
raimund@588:         }, {
raimund@588:             header: 'Messzeit',
raimund@588:             dataIndex: 'messzeitpunkt',
dustin@627:             xtype: 'datecolumn',
dustin@627:             format: 'd.m.Y H:i',
raimund@588:             flex: 2,
raimund@588:             editor: {
raimund@588:                 xtype: 'datefield',
raimund@588:                 allowBlank: false,
dustin@627:                 format: 'd.m.Y H:i',
raimund@588:                 // minValue: '01.01.2001', //todo: gibt es das?
raimund@588:                 // minText: 'Das Datum der Messung darf nicht vor dem 01.01.2001 liegen.',
dustin@627:                 maxValue: Ext.Date.format(new Date(), 'd.m.Y H:i')
raimund@588:             }
raimund@588:         }, {
raimund@588:             header: 'Status',
raimund@588:             flex: 1,
raimund@588:             dataIndex: 'id',
raimund@588:             renderer: function(value) {
raimund@588:                 var id = 'messung-status-item' + value;
raimund@588:                 this.updateStatus(value, id);
raimund@588:                 return '<div id="' + id + '">Lade...</div>';
raimund@588:             }
raimund@588:         }, {
raimund@588:             header: 'OK-Flag',
raimund@588:             dataIndex: 'fertig',
raimund@588:             flex: 1,
raimund@588:             renderer: function(value) {
raimund@588:                 if (value) {
raimund@588:                     return 'Ja';
raimund@588:                 }
raimund@588:                 return 'Nein';
raimund@588:             },
raimund@588:             editor: {
raimund@588:                 xtype: 'checkboxfield',
raimund@588:                 allowBlank: false
raimund@588:             }
raimund@588:         }, {
raimund@588:             header: 'Anzahl Nuklide',
raimund@588:             // Gibt die Anzahl der Messwerte wieder,
raimund@588:             // NICHT die Anzahl der verschiedenen Nukleide
raimund@588:             // Eventuell ist die Bezeichnug daher irreführend
raimund@588:             dataIndex: 'id',
raimund@588:             flex: 1,
raimund@588:             renderer: function(value) {
raimund@588:                 var id = 'messung-nuklid-item' + value;
raimund@588:                 this.updateNuklide(value, id);
raimund@588:                 return '<div id="' + id + '">Lade...</div>';
raimund@588:             }
raimund@588:         }, {
raimund@588:             header: 'Anzahl Kommentare',
raimund@588:             flex: 1,
raimund@588:             dataIndex: 'id',
raimund@588:             renderer: function(value) {
raimund@588:                 var id = 'messung-kommentar-item' + value;
raimund@588:                 this.updateKommentare(value, id);
raimund@588:                 return '<div id="' + id + '">Lade...</div>';
raimund@588:             }
raimund@588:         }];
raimund@588:         this.initData();
raimund@588:         this.callParent(arguments);
raimund@588:     },
raimund@588: 
raimund@588:     initData: function() {
raimund@588:         this.store = Ext.create('Lada.store.Messungen');
raimund@588:         this.store.load({
raimund@588:             params: {
raimund@588:                 probeId: this.recordId
raimund@588:             }
raimund@588:         });
raimund@588:     },
raimund@588: 
raimund@588:     updateStatus: function(value, divId) {
raimund@588:         var statusStore = Ext.create('Lada.store.Status');
raimund@588:         statusStore.on('load',
raimund@588:             this.updateStatusColumn,
raimund@588:             this,
raimund@588:             {divId: divId});
raimund@588:         statusStore.load({
raimund@588:             params: {
raimund@588:                 messungsId: value
raimund@588:             }
raimund@588:         });
raimund@588:     },
raimund@588: 
raimund@588:     updateNuklide: function(value, divId) {
raimund@588:         var messwerte = Ext.create('Lada.store.Messwerte');
raimund@588:         messwerte.on('load',
raimund@588:             this.updateColumn,
raimund@588:             this,
raimund@588:             {divId: divId});
raimund@588:         messwerte.load({
raimund@588:             params: {
raimund@588:                 messungsId: value
raimund@588:             }
raimund@588:         });
raimund@588:     },
raimund@588: 
raimund@588:     updateKommentare: function(value, divId) {
raimund@588:         var kommentare = Ext.create('Lada.store.MKommentare');
raimund@588:         kommentare.on('load',
raimund@588:             this.updateColumn,
raimund@588:             this,
raimund@588:             {divId: divId});
raimund@588:         kommentare.load({
raimund@588:             params: {
raimund@588:                 messungsId: value
raimund@588:             }
raimund@588:         });
raimund@588:     },
raimund@588: 
raimund@588:     updateColumn: function(store, record, success, opts) {
raimund@588:         var value;
raimund@588:         if (store.getTotalCount() === 0) {
raimund@588:             value = 'Keine';
raimund@588:         }
raimund@588:         else {
raimund@588:             value = store.getTotalCount();
raimund@588:         }
raimund@588:         Ext.fly(opts.divId).update(value);
raimund@588:     },
raimund@588: 
raimund@588:     updateStatusColumn: function(sstore, record, success, opts) {
raimund@588:         var value;
raimund@588:         if (sstore.getTotalCount() === 0) {
raimund@588:             value = 'unbekannt';
raimund@588:         }
raimund@588:         else {
raimund@588:             value = sstore.last().get('status');
raimund@588:         }
raimund@588:         if (Ext.fly(opts.divId)) {
raimund@588:             Ext.fly(opts.divId).update(value);
raimund@588:         }
raimund@588:     }
raimund@588: });