raimund@1082: /* Copyright (C) 2013 by Bundesamt fuer Strahlenschutz raimund@1082: * Software engineering by Intevation GmbH raimund@1082: * raimund@1082: * This file is Free Software under the GNU GPL (v>=3) raimund@1082: * and comes with ABSOLUTELY NO WARRANTY! Check out raimund@1082: * the documentation coming with IMIS-Labordaten-Application for details. raimund@1082: */ raimund@1082: raimund@1082: /** raimund@1082: * This is a simple Window to set the Status for multiple Messungen on bulk. raimund@1082: */ raimund@1082: Ext.define('Lada.view.window.SetStatus', { raimund@1082: extend: 'Ext.window.Window', raimund@1082: alias: 'setstatuswindow', raimund@1082: raimund@1082: requires: [ raimund@1082: 'Lada.view.widget.Status' raimund@1082: ], raimund@1082: raimund@1082: grid: null, raimund@1082: selection: null, raimund@1082: raimund@1082: modal: true, raimund@1082: closable: false, raimund@1082: resultMessage: '', raimund@1082: raimund@1082: /** raimund@1082: * This function initialises the Window raimund@1082: */ raimund@1082: initComponent: function() { raimund@1082: var i18n = Lada.getApplication().bundle; raimund@1082: var me = this; raimund@1082: this.items = [{ raimund@1082: xtype: 'panel', raimund@1082: name: 'valueselection', raimund@1082: border: 0, raimund@1082: items: [{ raimund@1082: xtype: 'fieldset', raimund@1082: title: 'Status für ' + this.selection.length + ' Messung(en) setzen', raimund@1082: margin: '5, 5, 10, 5', raimund@1082: items: [{ raimund@1082: xtype: 'combobox', raimund@1082: store: Ext.data.StoreManager.get('messstellenFiltered'), raimund@1082: displayField: 'messStelle', raimund@1082: valueField: 'id', raimund@1082: allowBlank: false, raimund@1082: queryMode: 'local', raimund@1082: editable: false, raimund@1082: width: 300, raimund@1082: labelWidth: 100, raimund@1082: emptyText: 'Wählen Sie einen Erzeuger aus.', raimund@1082: fieldLabel: i18n.getMsg('statusgrid.header.erzeuger') raimund@1082: }, { raimund@1082: xtype: 'statuswert', raimund@1082: allowBlank: false, raimund@1082: width: 300, raimund@1082: labelWidth: 100, raimund@1082: fieldLabel: i18n.getMsg('statusgrid.header.statusWert') raimund@1082: }, { raimund@1082: xtype: 'textarea', raimund@1082: width: 300, raimund@1082: height: 100, raimund@1082: labelWidth: 100, raimund@1082: fieldLabel: i18n.getMsg('statusgrid.header.text'), raimund@1082: emptyText: 'Geben Sie einen Kommentar ein.' raimund@1082: }] raimund@1082: }] raimund@1082: }, { raimund@1082: xtype: 'panel', raimund@1082: hidden: true, raimund@1082: margin: '5, 5, 5, 5', raimund@1082: overflow: 'auto', raimund@1082: name: 'result' raimund@1082: }, { raimund@1082: xtype: 'progressbar', raimund@1082: margin: '5, 5, 5, 5', raimund@1082: hidden: true, raimund@1082: text: 'Verarbeite Statusänderungen' raimund@1082: }]; raimund@1082: this.buttons = [{ raimund@1082: text: i18n.getMsg('statusSetzen'), raimund@1082: name: 'start', tom@1114: icon: 'resources/img/mail-mark-notjunk.png', raimund@1082: handler: this.setStatus raimund@1082: }, { raimund@1082: text: i18n.getMsg('cancel'), raimund@1082: name: 'abort', raimund@1082: handler: this.closeWindow raimund@1082: }, { raimund@1082: text: i18n.getMsg('close'), raimund@1082: name: 'close', raimund@1082: hidden: true, raimund@1082: handler: this.closeWindow raimund@1082: }]; raimund@1082: raimund@1082: this.callParent(arguments); raimund@1082: }, raimund@1082: raimund@1082: /** raimund@1082: * @private raimund@1082: * A handler for a Abort-Button raimund@1082: */ raimund@1082: closeWindow: function(button) { raimund@1082: var win = button.up('window'); raimund@1082: win.close(); raimund@1082: }, raimund@1082: raimund@1082: /** raimund@1082: * @private raimund@1082: * A handler to setStatus on Bulk. raimund@1082: */ raimund@1082: setStatus: function(button) { raimund@1082: var win = button.up('window'); raimund@1082: win.down('panel').disable(); raimund@1082: win.down('button[name=start]').disable(); raimund@1082: win.down('button[name=abort]').disable(); raimund@1082: var progress = win.down('progressbar'); raimund@1082: progress.show(); raimund@1082: win.send(); raimund@1082: }, raimund@1082: raimund@1082: send: function() { raimund@1082: var i18n = Lada.getApplication().bundle; raimund@1082: var me = this; raimund@1082: var progress = me.down('progressbar'); raimund@1082: var progressText = progress.getText(); raimund@1082: var count = 0; raimund@1082: for (var i = 0; i < this.selection.length; i++) { raimund@1082: var data = Ext.create('Lada.model.Status', { raimund@1082: messungsId: this.selection[i].get('id'), raimund@1082: erzeuger: this.down('combobox').getValue(), raimund@1082: datum: new Date(), raimund@1082: statusWert: this.down('statuswert').getValue(), raimund@1082: text: this.down('textarea').getValue() raimund@1082: }); raimund@1082: Ext.Ajax.request({ raimund@1082: url: 'lada-server/rest/status', raimund@1082: method: 'POST', raimund@1082: jsonData: data.raw, raimund@1082: success: function(response) { raimund@1082: var json = Ext.JSON.decode(response.responseText); raimund@1082: me.resultMessage += '' + i18n.getMsg('messung') + ': '; raimund@1082: var sel = me.selection[count]; raimund@1082: me.resultMessage += sel.get('hauptprobenNr') + ' - ' + sel.get('nebenprobenNr') + '
'; raimund@1099: me.resultMessage += i18n.getMsg('status-' + json.message) + '

'; raimund@1082: count++; raimund@1082: progress.updateProgress(count / me.selection.length, progressText + ' (' + count + ')'); raimund@1082: if (count === me.selection.length) { raimund@1082: var result = me.down('panel[name=result]'); raimund@1082: var values = me.down('panel[name=valueselection]'); raimund@1082: me.down('button[name=start]').hide(); raimund@1082: me.down('button[name=abort]').hide(); raimund@1082: me.down('button[name=close]').show(); raimund@1082: result.setSize(values.getWidth(), values.getHeight()); raimund@1082: result.getEl().setHTML(me.resultMessage); raimund@1082: result.show(); raimund@1082: values.hide(); raimund@1082: } raimund@1082: }, raimund@1082: failure: function(response) { raimund@1082: console.log(response); raimund@1082: count++; raimund@1082: progress.updateProgress(count / me.selection.length); raimund@1082: if (count === me.selection.length) { raimund@1082: me.close(); raimund@1082: } raimund@1082: } raimund@1082: }); raimund@1082: } raimund@1082: } raimund@1082: }); raimund@1082: