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