= 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 { } ]]>