// planwerteExcel
// Felix Kosmalla
// 
// import, export
var planwerteExcel = new fClass({

	// =============
	// = Variablen =
	// =============

	view: 				null,
	tabPanel: 			null,
	importExcelView: 	null,
	multiStoresRaw: 	null,
	multiStores: 		null,

	// ======================
	// = private Funktionen =
	// ======================

	// buildView
	// 
	// baut das Tab Panel zusammen
	// 
	buildView:function(){
		this.tabPanel = new Ext.TabPanel({
			border:false,
			deferredRender:false,
			activeTab:0
		});
		
		
		
		
		this.view = new Ext.Panel({			
			title:'Planwerte Excel',
			items:this.tabPanel,
			iconCls:'winPlanwerteExcel'

		});
		
		
		
		// store basteln
		
		var ende = new Date().getFullYear() +5;
		var start = ende-6;
		
		var data = new Array();
		
		for (var i=start; i < ende;  i++) {
			var tmp = new Array();
			tmp.push(i);
			data.push(tmp);
		};
		
		
		
		
		var yearStore = new Ext.data.SimpleStore({
			fields:['jahr'],
			data:data
			
		});
		
		
		// ====================
		// = Import aus Excel =
		// ====================
		
		
		this.fp = new Ext.FormPanel({
	        // renderTo: 'fi-form',
			url:cfg_backend_url,

			buttonAlign:'right',
	        width: 372,
			height:175,
	        frame: true,
			fileUpload:true,
	        title: 'File Upload Form',
			header:false,
	        // autoHeight: true,
	        bodyStyle: 'padding: 10px 10px 0 10px;',
	        labelWidth: 150,
	        defaults: {
	            anchor: '95%',
	            allowBlank: false,
	            msgTarget: 'side'
	        },
			items:[
			{
	            xtype: 'fileuploadfield',
	            id: 'form-file',
	            emptyText: 'Excel Sheet auswählen',
	            fieldLabel: 'Excel Sheet',
	            name: 'userfile',
				validateOnBlur:false,
	            buttonCfg: {
	                text: '',
	                iconCls: 'driveIcon'
	            }
	        }],
	        buttons: [{
	            text: 'Importieren',
				scope: this,
	            handler: function(){

	                if(this.fp.getForm().isValid()){
						
						
						Ext.MessageBox.confirm('','Die Planwerte und die monatliche Verteilung werden überschrieben! <br/><br/>Möchten Sie fortfahren?',function(res){

							if(res == 'yes'){
								this.fp.getForm().submit({
									url: cfg_backend_url + 'spreadsheets/json/importPlanwerteSpreadsheetFile',
									waitMsg: 'Excel Sheet wird hochgeladen...',
									scope:this,
									success: this.importResponse,
									failure: this.importResponse
								});
								
							}

							
						},this);
						
		
		
	                }
	
	
	            }
	        }]
	    });
		
		
		
		
		// ===================
		// = Export Template =
		// ===================
		
		
		
		
		this.exportExcelTemplateView = new Ext.FormPanel({
			title:'Export Erfassungsvorlage Excel',
			buttonAlign:'left',
			frame:true,
			fileUpload:true,
			items:[
			{
	            xtype: 'combo',
				id:'cb_expTempJahr',
	            fieldLabel: 'Jahr',
				name: 'Jahr',
				store:yearStore,
				mode:'local',
				triggerAction:'all',
				displayField:'jahr',
				valueField:'jahr',
				listWidth:175,
				validateOnBlur:false,
				editable:false,
				allowBlank:false	
			},
			{
	            xtype: 'combo',
				id:'cb_expTempJahrTemp',
	            fieldLabel: 'Planwertjahr',
				name: 'planwertjahr',
				store:rcm.Application.multiStores['bcm_kostendaten_jahre_jahr'],
				value: function(){  var tempDate = new Date(); return tempDate.getFullYear();  }(),
				mode:'local',
				triggerAction:'all',
				displayField:'jahr',
				valueField:'jahr',
				listWidth:175,
				validateOnBlur:false,
				editable:false,
				allowBlank:true,
				hidden:true,
				hideLabel:true
			}],
			buttons:[{
				text:'Template speichern',
				scope:this,
				handler:function(){
					
					if(this.exportExcelTemplateView.getForm().isValid()){

						var url = cfg_backend_url + "spreadsheets/json/exportPlanwerteSpreadsheetTemplate/" +  Ext.getCmp('cb_expTempJahr').getValue() + "/" + Ext.getCmp('cb_expTempJahrTemp').getValue();						

						Ext.Ajax.request({
							
							url: url,
							method:'POST',
							scope:this,
							success: function(response){
								var res = Ext.util.JSON.decode(response.responseText);
								
								if(!res.errors){
									window.location = cfg_backend_url + res.downloadLocation;
								}else{
									this.showErrors(res.errors);
								}
								
								Ext.MessageBox.hide();

							}
						});


						
					}
				}
			}]
		});
		
		
		
		
		
		// ===================
		// = Export in Excel =
		// ===================
		
		this.exportExcelView = new Ext.FormPanel({
			title:'Export in Excel',
			frame:true,
			buttonAlign:'left',
			fileUpload:true,
			items:[
			{
	            xtype: 'combo',
	            fieldLabel: 'Jahr',
				name: 'Jahr',
				store:rcm.Application.multiStores['planwerteJahre'],
				mode:'local',
				triggerAction:'all',
				displayField:'jahr',
				valueField:'jahr',
				listWidth:175,
				validateOnBlur:false,
				id:'cb_expJahr',
				editable:false
	        }],
			buttons:[{
				text:'Export speichern',
				scope:this,
				handler:function(){
					
					
					
					if(this.exportExcelView.getForm().isValid()){
						var url = cfg_backend_url + "spreadsheets/json/exportPlanwerteDataToSpreadsheetFile/" + Ext.getCmp('cb_expJahr').getValue();
						
						Ext.MessageBox.wait('Bitte warten..',false,waitDialogConfig);

						Ext.Ajax.request({
							
							url: url,
							method:'POST',
							scope:this,
							success: function(response){
								var res = Ext.util.JSON.decode(response.responseText);
								
								if(!res.errors){
									window.location = cfg_backend_url + res.downloadLocation;
								}else{
									this.showErrors(res.errors);
								}
								
								Ext.MessageBox.hide();

							}
						});
						

					}
					
					
					
				}
			}]
			
		});
		
		
		
		
		
		
		
		// Tabs hinzufügen
		this.importExcelView = new Ext.Panel({
			title:'Import aus Excel',
			// layout:'fit',
			height:175,
			items:this.fp
			
		});
		

		

		
		this.tabPanel.add(this.importExcelView);
		this.tabPanel.add(this.exportExcelView);
		this.tabPanel.add(this.exportExcelTemplateView);	
		

			
		this.tabPanel.doLayout();
		
		
		
		
		Ext.getCmp('regionCenter').add(this.view);
		Ext.getCmp('regionCenter').doLayout();
		Ext.MessageBox.hide();
	},
	
	
	
	exportResponse:function(fp){
		// console.log('da');
	},
	
	
	
	// importResponse
	// 
	// wird nach Request des Excel Imports getriggert
	// 
	importResponse:function(fp, o){
		
		if(o.result.errors){
			// es gab Fehler
			this.showErrors(o.result.errors);
			
			Ext.getCmp('cb_impKostenebene').clearInvalid();

			
		}else{
			// es gab keine Fehler
			Ext.MessageBox.alert('','Import erfolgreich abgeschlossen',function(){
				rcm.Application.loadCombostores(null,false,true);
				
				Ext.getCmp('regionCenter').remove(Ext.getCmp('regionCenter').getComponent(0));
				Ext.getCmp('regionCenter').doLayout();
				
				rcm.Application.PlanwerteExcel = new planwerteExcel().init();
			});

		}
		
		
		// this.showErrors();
	},
	
	
	
	
	//	Zeigt einen Dialog mit Fehlermeldungen an
	//
	//
	showErrors:function(errors){
		var fehler = "<br/><ul style='list-style-type:disc; margin-left:5px; list-style-position:inside;'>";

		Ext.each(errors, function(item){
			fehler = fehler + "<li>" + item + "</li>";
		});

		fehler = fehler + "</ul>";
		
		if(errors.length <= 4){
			Ext.MessageBox.alert('Fehler',fehler);
		}else{
			this.errorPanel = new Ext.Panel({
				head:false,
				autoScroll:true,
				html:fehler
			});


			this.errorWindow = new Ext.Window({
				y:70,
				width:500,
				height:300,
				layout:'fit',
				title:'Fehler',
				items:this.errorPanel,
				autoScroll:true
			});
			
			this.errorWindow.show();

		}
		
	},
	
	
	loadComboStores:function(){
		
		var stores = new Array();
		
		stores.push({table:'bcm_institute', field:'name'});
		stores.push({table:'bcm_kostenstrukturen', field:'name'});
		stores.push({table:'jahre', field:'jahr', backend:cfg_backend_url + 'spreadsheets/json/getKostenDatenYears'});
		
		this.multiStoresRaw = new Object();
		this.multiStores	= new Object();
		
		
		var counter = 0;
		
		Ext.each(stores,function(item){
			var  url = cfg_backend_url + item.table + "/" + item.field + '/ComboStore';
			
			var backend = item.backend || false;
			if(backend){
				url = backend;
			}
			
			Ext.Ajax.request({
				url: url,
				method:'POST',
				scope:this,
				success: function(response){
					
					// SimpleStore für Combobox erstellen
					var crudData = Ext.util.JSON.decode(response.responseText);

					if(!Ext.isEmpty(crudData.raw))
						this.multiStoresRaw[item.table+'_'+item.field] = crudData.raw;
					
					var simpleStore = new Ext.data.SimpleStore(crudData);				
					
					this.multiStores[item.table+'_'+item.field] = simpleStore;
					

					
					counter++;	
						
					if(stores.length == counter){
						this.buildView();
					}
					
				}
			});
			
		},this);
		
		

		
	},



	// ===========================
	// = öffentliche Funfktionen =
	// ===========================


	init:function(){
	
		this.loadComboStores();
	
	
		return this;
	}

	
});

