<?xml version="1.0" encoding="ISO-8859-1"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" xmlns:cti_control="CTI.technique.controls.*" xmlns="*" 
	creationComplete="onCreationComplete()"
	styleName="CTIView"
	paddingTop="0" paddingBottom="0" paddingRight="0" paddingLeft="0"
	creationPolicy="all">
	<mx:Script>
        <![CDATA[   
			
			import CTI.properties.CTI_Properties;
			import CTI.technique.CTI_Utilitaires;
			import CTI.technique.utils.DateUtil;
			import CTI.vo.PmsiMat2aImport;
			import flash.events.Event;
			import flash.events.IEventDispatcher;
			import flash.events.TimerEvent;
			import flash.events.IOErrorEvent;
			import flash.events.SecurityErrorEvent;
			import flash.events.ProgressEvent;
			import flash.net.FileFilter;
			import flash.net.FileReference;
			import flash.net.URLRequest;
			import flash.net.URLVariables;
			import flash.utils.ByteArray;
			import flash.utils.Timer;
			import mx.collections.ArrayCollection;
			import mx.controls.Alert;
			import mx.controls.DataGrid;
			import mx.controls.dataGridClasses.DataGridColumn;
			import mx.events.CloseEvent;
			import mx.formatters.CurrencyFormatter;
			import mx.formatters.DateFormatter;
			import mx.formatters.NumberFormatter;
			import mx.rpc.events.FaultEvent;
			import mx.rpc.events.ResultEvent;
			import mx.rpc.remoting.RemoteObject;
			
			//private static const URL:String = './modules/pmsi/php/amfphp/index.php';
			//private static const SOURCE:String = 'CtiPmsiImportService';
			//private static const OPERATION:String = 'hello';
			
			/**
			 * Objet qui gère les appels aux différents services AMFPHP
			 */
			private var _ro:RemoteObject;		
		
			[Bindable]
			public var title:String = "Import des fichiers MAT2A/OVALIDE";
			
			[Bindable]
			public var hasHelp:Boolean = false;
			
			[Bindable]
			private var _imports_list:ArrayCollection = new ArrayCollection();
			
			private var _fileRef:FileReference;
			
			private var _dateFormatter:DateFormatter;
			
			private var _numberFormatter:NumberFormatter;
			
			private var _currencyFormatter:CurrencyFormatter;
			
			private var _timer:Timer;
			
			private var _ctiProperties:CTI_Properties;
			
			private static const DATE_FORMAT:String = 'DD/MM/YYYY';
			private static const IMPORT_SERVICE:String = 'CtiPmsiImportService';
			private static const MODULE:String = 'pmsi';
			
			
			public function onCreationComplete():void {
				
				if (application.currentHelpFile != "") {
					hasHelp = true;
				}
				
				// Initialse les labels des boutons des alertes (par défaut 'Yes' et 'No')
				Alert.yesLabel = "Oui";
				Alert.noLabel = "Non";
				
				_ctiProperties = application.environmentProperties;
				
				// Initialise le gestionnaire de services AMFPHP
				// Détecte si l'application est lancée par https
				var _secureAMF:Boolean = this.url.indexOf('https') >= 0 ? true : false;
				_ro = application.ctiRemoteObjectProvider.getRemoteObject(MODULE, IMPORT_SERVICE, _secureAMF);
				
				message.text = "Vérification de la configuration du serveur...";
				checkPhpConfig();
			}
			
			
			/**
			 * Vérifie sur le serveur que les extensions nécessaires aux différents services sont bien chargées.
			 */
			private function checkPhpConfig():void {
				refreshButton.enabled = false;
				browseButton.enabled = false;
				//generateButton.enabled = false;
				downloadButton.enabled = false;
				progressBar.visible = false;
				_ro.addEventListener(ResultEvent.RESULT, handlePhpConfigResult);
				_ro.addEventListener(FaultEvent.FAULT, handlePhpConfigFault);
				_ro.checkPhpConfig();
			}
			
			
			/**
			 * Si la configuratin du serveur PHP est OK, on lance la récupération des imports, si non
			 * on demande à l'utilisateur s'il veut paramétrer le serveur
			 * 
			 * @param	event	Retour de la fonction de vérification de la config PHP du serveur
			 */
			private function handlePhpConfigResult(event:ResultEvent):void {
				_ro.removeEventListener(ResultEvent.RESULT, handlePhpConfigResult);
				_ro.removeEventListener(FaultEvent.FAULT, handlePhpConfigFault);
				message.text = "";
				// La configuration nécessite une mise à jour
				if (event.result == 'KO') {
					Alert.show(	"La configuration du serveur doit être modifiée pour que l'import puisse fonctionner correctement. Voulez-vous effectuer cette modification maintenant ?", 
								"Erreur configuration serveur", Alert.YES | Alert.NO, null, applyPhpConfig, null, Alert.YES);
				}
				// Configuration OK, on lance la récupération des imports Mat2a
				else {
					getData();
				}
			}
			
			
			/**
			 * 
			 * @param	event	Fermeture de la fenêtre de dialogue de choix de modification de la configuration du serveur PHP
			 */
			private function applyPhpConfig(event:CloseEvent):void {
				if (event.detail == Alert.YES) {
					message.text = "Modification de la configuration du serveur en cours...";
					// Lance la modification de la config du serveur PHP
					CTI_Utilitaires.startRequestHTTP('modules/outils/php/httpService_wampManager_configure.php', new URLVariables(), exec, true, this.parentApplication);
					
					function exec(resultatService:XML):void {
						var returnCode:String = resultatService.RETURN[0].@code.toString();
						var returnMessage:String = resultatService.RETURN[0].@message.toString();
						
						if (returnCode == 'OK') {
							// Met en place un petit Timer de 20 secondes le temps que le serveur PHP redémarre
							message.text = "Veuillez patienter 20 secondes...";
							_timer = new Timer(1000, 20);
							_timer.addEventListener(TimerEvent.TIMER, waitHandler);
							_timer.addEventListener(TimerEvent.TIMER_COMPLETE, timerCompleteHandler);
							_timer.start();
						}
						else {			
							Alert.show(returnMessage)
						}
					}
				}
				// Si l'utilisateur ne veut pas mettre à jour la config du serveur PHP, on ne fait rien de plus et on l'informe dans un message
				else {
					refreshButton.enabled = true;
					message.text = "La configuration du serveur PHP doit être mise à jour pour que l'import se déroule normalement";
				}
			}
			
			/**
			 * Met à jour l'affichage du message à chaque fin du timer (1 secondes). Cela fait comme un petit compte à rebours
			 * 
			 * @param	event	Fin du délai du Timer
			 */
			private function waitHandler(event:TimerEvent):void {
				message.text = "Veuillez patienter " + (20 - (event.target as Timer).currentCount).toString() + " secondes...";
			}	
			
			
			/**
			 * Quand 20 secondes se sont écoulées (20 fois le cycle d'une seconde du Timer), on relance au cas où la vérification de la config du serveur php
			 * 
			 * @param	event	Fin des cycles du Timer
			 */
			private function timerCompleteHandler(event:TimerEvent):void {
				_timer.removeEventListener(TimerEvent.TIMER, waitHandler);
				_timer.removeEventListener(TimerEvent.TIMER_COMPLETE, timerCompleteHandler);
				_timer.stop();
				_timer = null;
				message.text = "";
				checkPhpConfig();
			}
			
			
			/**
			 * 
			 * @param	event	Erreur pendant l'appel au service de érification de la config du serveur
			 */
			private function handlePhpConfigFault(event:FaultEvent):void {
				_ro.removeEventListener(ResultEvent.RESULT, handlePhpConfigResult);
				_ro.removeEventListener(FaultEvent.FAULT, handlePhpConfigFault);
				progressBar.visible = false;
				progressBar.label = "";
				Alert.show("Impossible de vérifier la configuration du serveur (" + event.fault.faultString + ")");
			}
			
			
			/**
			 * 
			 * @param	event	Retour du service de recueil des imports Mat2a (succès)
			 */
			private function handleDataListResult(event:ResultEvent):void {
				refreshButton.enabled = true;
				_ro.removeEventListener(ResultEvent.RESULT, handleDataListResult);
				_ro.removeEventListener(FaultEvent.FAULT, handleDataListFault);
				// Mapping des objets retournés par AmfPhp avec les objets Actionscript
				var res:Array = new Array();
				var a:PmsiMat2aImport;
				for each (a in (event.result as Array)) {
					res.push(a);
				}
				a = null;
				// Affectation du dataProvider de la liste de données avec les données récupérées
				_imports_list = new ArrayCollection(res);
				setDatagridColumns();
				progressBar.visible = false;
				progressBar.label = "";
				browseButton.enabled = true;
			}
			
			
			/**
			 * Selon le type d'établissement, ajoute les colonnes qui vont bien. Une fois ces colonnes ajoutées, il faut redéfinir leurs largeurs 
			 * pour qu'elles aient bien toutes la même largeur (il doit y avoir une autre façon de faire mais ca marche comme ça)
			 */
			private function setDatagridColumns():void {
				// Environnement privé, on met les colonnes "Nombre total de prestations" et "Montant base de remboursement"
				if (_ctiProperties.properties['TYPEETS'] == '1') {
					//addColumn(imports_list_GUI, 'mat2a_rsa_prestations_nb_total', "Nombre total de prestations", mat2a_rsa_prestations_nb_total_LF);
					addColumn(imports_list_GUI, 'mat2a_rsa_prestations_base_remb', "Montant base de remboursement", mat2a_rsa_prestations_base_remb_LF);
				}
				// Environnement non privé, on met les colonnes "Nombre de séjours valorisés" et "Base de remboursement séjours valorisés"
				else {
					addColumn(imports_list_GUI, 'mat2a_nb_sejours_valorises', "Nombre de séjours valorisés", mat2a_nb_sejours_valorises_LF);
					addColumn(imports_list_GUI, 'mat2a_br_sejours_valorises', "Montant base remboursement séjours valorisés", mat2a_br_sejours_valorises_LF);
				}
				
				// Tentative de resize correct des colonnes. Chaque colonne aura la même taille
				this.updateDisplayList(this.unscaledWidth, this.unscaledHeight);
				var columns:Array = imports_list_GUI.columns;
				for each(var column:DataGridColumn in columns) {
					column.width = imports_list_GUI.width / columns.length;
				}
				imports_list_GUI.columns = columns;
			}
			
			
			/**
			 * Ajoute une colonne à la grille de données si elle n'a pas déjà été ajoutée. Pour savoir si elle a déjà été ajoutée,
			 * on teste parmis toutes les colonnes de la datagrid si une d'elles a pour propriété 'dataField' celle de la colonne qu'on veut ajouter.
			 * Exemple commenté d'utilisation de la fonction some() sur un tableau :
			 * http://delfeld.wordpress.com/2010/04/25/array-methods-using-thisobject/
			 * 
			 * @param	pDatagrid	Grille à laquelle il faut ajouter une colonne
			 * @param	pDataField	Champ à binder dans le fournisseur de données
			 * @param	pHeaderText	Texte de l'en-tête de la colonne
			 * @param	pLabelFunction	Fonction de rendu de texte associée à la colonne
			 */
			private function addColumn(pDatagrid:DataGrid, pDataField:String, pHeaderText:String, pLabelFunction:Function):void {
				var a:Array = pDatagrid.columns;
				var instanciated:Boolean = a.some(
					function(item:*, index:int, array:Array):Boolean {
						return item['dataField'] == this;
					}, pDataField);
				if (!instanciated) {
					var column:DataGridColumn = new DataGridColumn();
					column.dataField = pDataField;
					column.headerText = pHeaderText;
					column.labelFunction = pLabelFunction;
					column.width = 90;
					column.resizable = true;
					column.editable = false;
					a.push(column);
					pDatagrid.columns = a;
				}
			}
			
			
			/**
			 * 
			 * @param	event	Erreur pendant l'appel au service
			 */
			private function handleDataListFault(event:FaultEvent):void {
				
				_ro.removeEventListener(ResultEvent.RESULT, handleDataListResult);
				_ro.removeEventListener(FaultEvent.FAULT, handleDataListFault);
				_ro.disconnect();
				Alert.show(event.fault.faultString, "Impossible de récupérer la liste des imports Mat2a (" + event.fault.faultString + ")");
				
				progressBar.visible = false;
				progressBar.label = "";
				browseButton.enabled = false;
				//generateButton.enabled = false;
				downloadButton.enabled = false;
			}
			
			
			/**
			 * Lance la récupération des données des imports mat2a
			 */
			private function getData():void {
				browseButton.enabled = false;
				//generateButton.enabled = false;
				downloadButton.enabled = false;
				refreshButton.enabled = false;
				progressBar.visible = true;
				progressBar.label = "Chargement des imports...";
				_ro.addEventListener(ResultEvent.RESULT, handleDataListResult);
				_ro.addEventListener(FaultEvent.FAULT, handleDataListFault);
				_ro.getMat2aImports();
			}
			
			
			/**
			 * Ouvre uen feneêtre de sélection du fichier zip à téléverser
			 */
            private function browseAndUpload():void {
				var mat2aFileFilter:FileFilter = new FileFilter("Zip MAT2A/OVALIDE", "*.zip;*.do");
				
				_fileRef = new FileReference();
                _fileRef.addEventListener(Event.SELECT, fileRef_select);
				_fileRef.addEventListener(Event.COMPLETE, fileRef_complete);
                _fileRef.browse([mat2aFileFilter]);
                message.text = "";
            }
			
			
			/**
			 * Charge le fichier sélectionné par l'utilisateur
			 * 
			 * @param	evt	Un fichier à téléverser a été sélectionné par l'utilisateur
			 */
            private function fileRef_select(evt:Event):void {
				browseButton.enabled = false;
				//generateButton.enabled = false;
				downloadButton.enabled = false;
				progressBar.visible = true;
				progressBar.label = "Import en cours...";
				_fileRef.load();
            }
			
			
			/**
			 * Une fois que le fichier a été chargé en mémoire, lance le service d'upload
			 * 
			 * @param	evt	Fichier chargé en mémoire
			 */
            private function fileRef_complete(evt:Event):void {
				try {
					var data:ByteArray = new ByteArray();
				    _fileRef.data.readBytes(data, 0, _fileRef.data.length);
					
					data.compress();
					
					_ro.addEventListener(ResultEvent.RESULT, handleFileUploadResult);
					_ro.addEventListener(FaultEvent.FAULT, handleFileUploadFault);
					_ro.uploadFile(_fileRef.name, data, _ctiProperties.properties['TYPEETS']);
                } catch (err:Error) {
                    message.text = "ERROR: zero-byte file";
                }
            }
			
			
			private function handleFileUploadFault(event:FaultEvent):void {
				_ro.removeEventListener(ResultEvent.RESULT, handleFileUploadResult);
				_ro.removeEventListener(FaultEvent.FAULT, handleFileUploadFault);
				Alert.show("Erreur pendant l'envoi du fichier sur le serveur (" + event.fault.faultString);
				progressBar.visible = false;
				browseButton.enabled = true;
			}
			
			
			private function handleFileUploadResult(event:ResultEvent):void {
				_ro.removeEventListener(ResultEvent.RESULT, handleFileUploadResult);
				_ro.removeEventListener(FaultEvent.FAULT, handleFileUploadFault);
				var res:Array = event.result as Array;
				
				if (res[0] == 'false') {
					Alert.show(res[1], "Avertissement");
				}
				
				progressBar.label = "Import terminé.";
				getData();
				
				var timer:Timer = new Timer(3000);
				timer.addEventListener(TimerEvent.TIMER, timerHandler);
				timer.start();
			}
			
			
			private function timerHandler(timerEvent:TimerEvent):void {
				var timer:Timer = timerEvent.currentTarget as Timer;
				timer.stop();
				timer.removeEventListener(TimerEvent.TIMER, timerHandler);
				timer = null;
                progressBar.visible = false;
				browseButton.enabled = true;
			}
			
			
			public function doNothing():void { }
			
			
			private function deleteImport():void {
				if (imports_list_GUI.selectedItem is PmsiMat2aImport) {
					var mat2a_import:PmsiMat2aImport = imports_list_GUI.selectedItem as PmsiMat2aImport;
					var import_id:int = mat2a_import.oid;
					var mat2a_annee:int = mat2a_import.mat2a_annee;
					var mat2a_mois:String = DateUtil.int2Month(mat2a_import.mat2a_mois -1);
					_ro.addEventListener(ResultEvent.RESULT, handleDeleteResult);
					_ro.addEventListener(FaultEvent.FAULT, handleDeleteFault);
					progressBar.label = "Suppression de l'import n° " + import_id.toString() + " (" + mat2a_mois + " " + mat2a_annee.toString() + ")";
					progressBar.visible = true;
					browseButton.enabled = false;
					//generateButton.enabled = false;
					downloadButton.enabled = false;
					refreshButton.enabled = false;
					deleteButton.enabled = false;
					_ro.deleteImport(import_id);
				}
			}
			
			
			/***************************************************/
			
			private function downloadImport():void {
				if (imports_list_GUI.selectedItem is PmsiMat2aImport) {
					
					var request:URLRequest = new URLRequest(PmsiMat2aImport(imports_list_GUI.selectedItem).mat2a_filepath);
					var realName:String = PmsiMat2aImport(imports_list_GUI.selectedItem).mat2a_filename + '.zip' as String;
					try {
						_fileRef = new FileReference();
						configureDownloadListeners(_fileRef, true);
						_fileRef.download(request, realName);
					}
					catch (err:Error) {	
						Alert.show(err.message, "Téléchargement fichier OVALIDE");
					}
				}
			}

			public function downloadFile():void
			{
				if (imports_list_GUI.selectedItem != null)
				{
						var urlRequest:URLRequest = new URLRequest();
						var mat2a_import_id:String = imports_list_GUI.selectedItem.oid
						urlRequest.url = "modules/pmsi/php/PMSI_getFile_Mat2a.php?mat2a_import_id=" + mat2a_import_id ;
						urlRequest.method = "GET";

						navigateToURL(urlRequest, "PMSI_getFile_Mat2a")
				}
				   _fileRef.download(urlRequest, url);
			}
			
			private function configureDownloadListeners(dispatcher:IEventDispatcher, onOff:Boolean = true):void {
				if (onOff == true) {	
					dispatcher.addEventListener(Event.CANCEL, cancelDownloadHandler);
					dispatcher.addEventListener(Event.COMPLETE, completeDownloadHandler);
					dispatcher.addEventListener(IOErrorEvent.IO_ERROR, ioErrorDownloadHandler);
					dispatcher.addEventListener(Event.OPEN, openDownloadHandler);
					dispatcher.addEventListener(ProgressEvent.PROGRESS, progressDownloadHandler);
					dispatcher.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorDownloadHandler);
					dispatcher.addEventListener(Event.SELECT, selectDownloadHandler);
				}
				else {
					dispatcher.removeEventListener(Event.CANCEL, cancelDownloadHandler);
					dispatcher.removeEventListener(Event.COMPLETE, completeDownloadHandler);
					dispatcher.removeEventListener(IOErrorEvent.IO_ERROR, ioErrorDownloadHandler);
					dispatcher.removeEventListener(Event.OPEN, openDownloadHandler);
					dispatcher.removeEventListener(ProgressEvent.PROGRESS, progressDownloadHandler);
					dispatcher.removeEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorDownloadHandler);
					dispatcher.removeEventListener(Event.SELECT, selectDownloadHandler);
				}
			}

			private function cancelDownloadHandler(event:Event):void {
				trace("cancelHandler: " + event);
			}

			private function completeDownloadHandler(event:Event):void {
				trace("completeHandler: " + event);
			}

			private function ioErrorDownloadHandler(event:IOErrorEvent):void {
				trace("ioErrorHandler: " + event);
			}

			private function openDownloadHandler(event:Event):void {
				trace("openHandler: " + event);
			}

			private function progressDownloadHandler(event:ProgressEvent):void {
				var file:FileReference = FileReference(event.target);
				trace("progressHandler name=" + file.name + " bytesLoaded=" + event.bytesLoaded + " bytesTotal=" + event.bytesTotal);
			}

			private function securityErrorDownloadHandler(event:SecurityErrorEvent):void {
				trace("securityErrorHandler: " + event);
			}

			private function selectDownloadHandler(event:Event):void {
				var file:FileReference = FileReference(event.target);
				trace("selectHandler: name=" + file.name);
			}
			/*********************************************/
			
			
			private function handleDownloadFault(event:FaultEvent):void {
				_ro.removeEventListener(ResultEvent.RESULT, handleDownloadResult);
				_ro.removeEventListener(FaultEvent.FAULT, handleDownloadFault);
				progressBar.visible = false;
				browseButton.enabled = true;
				refreshButton.enabled = true;
				deleteButton.enabled = true;
				//generateButton.enabled = true;
				downloadButton.enabled = true;
				Alert.show(event.fault.faultString, "Impossible de récupérer le fichier de l'import OVALIDE (" + event.fault.faultString + ")");
			}
			
			
			private function handleDownloadResult(event:ResultEvent):void {
				_ro.removeEventListener(ResultEvent.RESULT, handleDownloadResult);
				_ro.removeEventListener(FaultEvent.FAULT, handleDownloadFault);
				progressBar.visible = false;
				browseButton.enabled = true;
				refreshButton.enabled = true;
				deleteButton.enabled = true;
				//generateButton.enabled = true;
				downloadButton.enabled = true;
				if (event.result != 'OK') {
					Alert.show("Impossible de récupérer le fichier de l'import OVALIDE (" + event.result + ")");
				}
				//getData();
			}
			
			
			private function handleDeleteFault(event:FaultEvent):void {
				_ro.removeEventListener(ResultEvent.RESULT, handleDeleteResult);
				_ro.removeEventListener(FaultEvent.FAULT, handleDeleteFault);
				progressBar.visible = false;
				browseButton.enabled = true;
				refreshButton.enabled = true;
				//generateButton.enabled = imports_list_GUI.selectedIndex > 0 ? true : false;
				downloadButton.enabled = imports_list_GUI.selectedIndex > 0 ? true : false;
				deleteButton.enabled = imports_list_GUI.selectedIndex > 0 ? true : false;
				Alert.show(event.fault.faultString, "Impossible de supprimer l'import Mat2a (" + event.fault.faultString + ")");
			}
			
			
			private function handleDeleteResult(event:ResultEvent):void {
				_ro.removeEventListener(ResultEvent.RESULT, handleDeleteResult);
				_ro.removeEventListener(FaultEvent.FAULT, handleDeleteFault);
				progressBar.visible = false;
				browseButton.enabled = true;
				refreshButton.enabled = true;
				//generateButton.enabled = imports_list_GUI.selectedIndex > 0 ? true : false;
				downloadButton.enabled = imports_list_GUI.selectedIndex > 0 ? true : false;
				deleteButton.enabled = imports_list_GUI.selectedIndex > 0 ? true : false;
				if (event.result != 'OK') {
					Alert.show("Impossible de supprimer l'import Mat2a (" + event.result + ")");
				}
				getData();
			}
			
			
			private function mat2a_mois_LF(item:Object, column:DataGridColumn):String {
				return DateUtil.addZero(item.mat2a_mois) + ' (' + DateUtil.int2Month(item.mat2a_mois -1) + ')';
			}
			
			
			private function date_LF(item:Object, column:DataGridColumn):String {
				return dateLabelFunction(item, column, 'date');
			}
			
			
			private function mat2a_date_LF(item:Object, column:DataGridColumn):String {
				return dateLabelFunction(item, column, 'mat2a_date');
			}
			
			
			private function mat2a_rsa_transmis_LF(item:Object, column:DataGridColumn):String {
				return numberLabelFunction(item, column, 'mat2a_rsa_transmis');
			}
			
			
			private function mat2a_rsa_traites_LF(item:Object, column:DataGridColumn):String {
				return numberLabelFunction(item, column, 'mat2a_rsa_traites');
			}
			
			
			private function mat2a_rsa_seances_LF(item:Object, column:DataGridColumn):String {
				return numberLabelFunction(item, column, 'mat2a_rsa_seances');
			}
			
			
			private function mat2a_rsa_0_nuits_LF(item:Object, column:DataGridColumn):String {
				return numberLabelFunction(item, column, 'mat2a_rsa_0_nuits');
			}
			
			
			private function mat2a_rsa_prestations_nb_total_LF(item:Object, column:DataGridColumn):String {
				return numberLabelFunction(item, column, 'mat2a_rsa_prestations_nb_total');
			}
			
			private function mat2a_nb_sejours_valorises_LF(item:Object, column:DataGridColumn):String {
				return numberLabelFunction(item, column, 'mat2a_nb_sejours_valorises');
			}
			
			private function mat2a_rsa_prestations_base_remb_LF(item:Object, column:DataGridColumn):String {
				return currencyLabelFunction(item, column, 'mat2a_rsa_prestations_base_remb');
			}
			
			private function mat2a_br_sejours_valorises_LF(item:Object, column:DataGridColumn):String {
				return currencyLabelFunction(item, column, 'mat2a_br_sejours_valorises');
			}
			
			
			private function dateLabelFunction(item:Object, column:DataGridColumn, property:String):String {
				if (_dateFormatter == null) { 
					_dateFormatter = new DateFormatter();
					_dateFormatter.formatString = DATE_FORMAT;
				}
				return _dateFormatter.format(item[property]);
			}
			
			
			private function numberLabelFunction(item:Object, column:DataGridColumn, property:String):String {
				if (_numberFormatter == null) { 
					_numberFormatter = new NumberFormatter();
					_numberFormatter.thousandsSeparatorTo = ' ' ;
					_numberFormatter.decimalSeparatorTo = ',';
				}
				return _numberFormatter.format(item[property]);
			}
			
			
			private function currencyLabelFunction(item:Object, column:DataGridColumn, property:String):String {
				if (_currencyFormatter == null) {
					_currencyFormatter = new CurrencyFormatter();
					_currencyFormatter.thousandsSeparatorTo = ' ' ;
					_currencyFormatter.decimalSeparatorTo = ',';
					_currencyFormatter.currencySymbol = ' \u20AC';
					_currencyFormatter.alignSymbol = 'right';
				}
				trace(_currencyFormatter.format(item[property]));
				return _currencyFormatter.format(item[property]);
			}
			
			private function generateImport():void {
				
				
			}
        ]]>
    </mx:Script>
	<mx:VBox width="100%" height="100%">
		<cti_control:CTIViewTitle id="GUI_titleBar" label="{title}" width="100%" height="25" />
		<mx:Canvas width="100%" height="48" >	
			<mx:HBox width="100%" verticalAlign="middle" horizontalGap="10" paddingLeft="10" paddingRight="10">
				<mx:HBox minWidth="250" width="100%" maxWidth="600" horizontalScrollPolicy="off">
					<cti_control:CTIButton2 id="refreshButton" height="28" width="28" toolTip="Actualiser la liste des imports" icon="@Embed('../../base/swf/CTI/images/24/view-refresh.png')" labelPlacement="right" click="checkPhpConfig()" enabled="false" />
					<cti_control:CTIButton2 id="browseButton" height="28" width="28" toolTip="Importer un nouveau fichier" icon="@Embed('../../base/swf/CTI/images/24/document-save-as.png')" labelPlacement="right" click="browseAndUpload()" enabled="false" />
					<cti_control:CTIButton2 id="deleteButton" height="28" width="28" toolTip="Supprimer l'import sélectionné" icon="@Embed('../../base/swf/CTI/images/24/user-trash.png')" labelPlacement="right" click="deleteImport()" enabled="{imports_list_GUI.selectedIndex >= 0}" />
					<!--
					<cti_control:CTIButton2 id="generateButton" height="28" width="28" toolTip="Relancer le traitement de l'import sélectionné" icon="@Embed('../../base/swf/CTI/images/24/repeat.png')" labelPlacement="right" click="generateImport()" enabled="{imports_list_GUI.selectedIndex >= 0}" />
					-->
					<cti_control:CTIButton2 id="downloadButton" height="28" width="28" toolTip="Télécharger le fichier sélectionné" icon="@Embed('../../base/swf/CTI/images/24/document-save-all.png')" click="downloadFile()" enabled="{imports_list_GUI.selectedItem.mat2a_filename != '' &amp;&amp; imports_list_GUI.selectedIndex >= 0}" />
					<mx:ProgressBar id="progressBar" indeterminate="true" visible="false" />
					<mx:Label id="message" />
				</mx:HBox>
				<mx:Button height="28" width="28" toolTip="Aide" icon="@Embed('../../base/swf/CTI/images/24/help.png')" labelPlacement="right" click="application.displayHelp()" visible="{hasHelp}" /> 
				<mx:Button height="28" width="28" toolTip="A propos" icon="@Embed('../../base/swf/CTI/images/24/information.png')" labelPlacement="right" click="application.showApropos_view()" />			</mx:HBox>
		</mx:Canvas>
		<mx:VBox width="100%" height="100%" label="Etat des imports" backgroundColor="0xf0f0f0">
			<mx:DataGrid id="imports_list_GUI" rowHeight="20" headerHeight="60"
				height="100%" width="100%"
				wordWrap="true" dataProvider="{_imports_list}" 
				fontFamily="tahoma" editable="false">
				<mx:columns>
					<mx:DataGridColumn dataField="oid" headerText="N°" width="30" editable="false" />
					<mx:DataGridColumn dataField="date" headerText="Import dans iCTI" labelFunction="date_LF" width="90" resizable="true"  editable="false" />
					<mx:DataGridColumn dataField="mat2a_date" headerText="Traitement du fichier MAT2A/OVALIDE" labelFunction="mat2a_date_LF" width="90" resizable="true" editable="false" />
					<mx:DataGridColumn dataField="mat2a_annee" headerText="Annee" width="80" resizable="true" editable="false" />
					<mx:DataGridColumn dataField="mat2a_mois" headerText="Mois" labelFunction="mat2a_mois_LF" width="90" resizable="true" editable="false" />
					<mx:DataGridColumn dataField="mat2a_rsa_transmis" headerText="RSA transmis" labelFunction="mat2a_rsa_transmis_LF" width="90" resizable="true" editable="false" />
					<mx:DataGridColumn dataField="mat2a_rsa_traites" headerText="RSA traités" labelFunction="mat2a_rsa_traites_LF" width="90" resizable="true" editable="false" />
					<mx:DataGridColumn dataField="mat2a_rsa_seances" headerText="RSA séances" labelFunction="mat2a_rsa_seances_LF" width="90" resizable="true" editable="false" />
					<mx:DataGridColumn dataField="mat2a_rsa_0_nuits" headerText="RSA 0 nuits" labelFunction="mat2a_rsa_0_nuits_LF" width="90" resizable="true" editable="false" />
				</mx:columns>
			</mx:DataGrid>
		</mx:VBox>
	</mx:VBox>
</mx:Application>
