From e3ef49aebf88034b0185f8c8a67b5e1fe7b1241c Mon Sep 17 00:00:00 2001 From: Guillermo Rugilo Date: Thu, 7 Jul 2005 06:49:44 +0000 Subject: [PATCH] - Valida contra el schema - Genera los 2 reportes XML para Pagos - Genera los "mails" (archivo txt, en la realidad) - Actualiza autorizaciones correctamente en BD - Faltan unos detalles y un poco mas de tests :D --- .../RecibirPrestacionesController.cs | 26 ++++--- demo/src/Reportes/ConsumoAfiliadosReport.cs | 22 +++++- demo/src/Reportes/InfoPrestacionesAdmin.cs | 19 ++++- demo/src/Reportes/InfoPrestacionesReport.cs | 5 ++ demo/src/Reportes/NotificacionesAdmin.cs | 78 ++++++++++++++++++- .../Reportes/PrestacionesRealizadasReport.cs | 23 +++++- demo/src/osocial.exe.config | 3 + 7 files changed, 157 insertions(+), 19 deletions(-) diff --git a/demo/src/Controlador/RecibirPrestacionesController.cs b/demo/src/Controlador/RecibirPrestacionesController.cs index 6fa8d3b..f6b1a08 100644 --- a/demo/src/Controlador/RecibirPrestacionesController.cs +++ b/demo/src/Controlador/RecibirPrestacionesController.cs @@ -9,6 +9,8 @@ using Dominio.Afiliados; using Dominio.Planes; using Reportes; +using System.IO; + using com.db4o; #endregion Usings @@ -67,8 +69,9 @@ namespace Controlador Solicitante sol = new Solicitante( ETipoDocumento.DNI, 28123456, "Jorge", "Drexler" ); Plan plan = new Plan( 10F ); plan.Codigo = 3; Afiliado afil = new Afiliado( sol, plan, new DateTime(2004, 4, 30 ) ); - a.Afiliado = new Dominio.Afiliados.Afiliado( 987 ); - a.Prestacion = new Prestacion( "B01AC06" ); + afil.Codigo = 987; + a.Afiliado = afil; + a.Prestacion = new Prestacion( "B01AC06", "Acido acetilsalicílico" ); a.Prestador = pre; a.FechaSolicitud = new DateTime( 2005, 5, 20 ); // 20 de mayo a.FechaRealizacion = DateTime.MinValue; @@ -110,8 +113,8 @@ namespace Controlador if ( informes.Length <= 0 ) { - this.NotificarPrestador( NotificacionPrestador.Tipo.InfoNoRecibida, null ); - this.NotificarPagos( "Archivos no recibidos", "Prestador=" + p.Nombre + "\n" + "CUIT=" + p.Cuit ); + this.NotificarPrestador( p, NotificacionPrestador.Tipo.InfoNoRecibida, null ); + this.NotificarPagos( "NORECIBIDO " + p.Cuit.Trim() + " " + DateTime.Now.ToString("yyyy-MM-dd") ); } else { @@ -123,7 +126,7 @@ namespace Controlador ip.ValidarLineas( p ); //Las marca como aprobadas/rechazadas this.ProcesarLineas( p, ip ); ipAdmin.MoverArchivoAceptado( ip ); - this.NotificarPrestador( NotificacionPrestador.Tipo.ProcesoExitoso, ip ); + this.NotificarPrestador( p, NotificacionPrestador.Tipo.ProcesoExitoso, ip ); } else { @@ -131,8 +134,8 @@ namespace Controlador // 1. Mover el archivo a "rechazados" ipAdmin.MoverArchivoRechazado( ip ); // 2. Enviar mail al Prestador y a Pagos - this.NotificarPrestador( NotificacionPrestador.Tipo.ErrorGrave, ip ); - this.NotificarPagos( "Error al procesar archivo", "Nombre=" + ip.PathArchivo ); + this.NotificarPrestador( p, NotificacionPrestador.Tipo.ErrorGrave, ip ); + this.NotificarPagos( "ERROR " + p.Cuit.Trim() + " " + ip.NombreArchivo ); } } //foreach informes } //else @@ -158,7 +161,6 @@ namespace Controlador /// Si está aprobada, la registra en el sistema y la agrega al reporte de Consumo de los Afiliados. /// A todas las lineas las agrega al Informe de Aprobaciones/rechazos de Prestaciones Realizadas. /// - /// Reporte del cual se porcesarán las lineas private void ProcesarLineas( Prestador p, InfoPrestacionesReport ip ) { foreach ( LineaInfoPrestacionesReport linea in ip.Lineas ) @@ -178,14 +180,14 @@ namespace Controlador } } - private void NotificarPrestador( NotificacionPrestador.Tipo tipoNotif, InfoPrestacionesReport ip ) + private void NotificarPrestador( Prestador p, NotificacionPrestador.Tipo tipoNotif, InfoPrestacionesReport ip ) { - //NotificacionesAdmin. + NotificacionesAdmin.Instancia.EnviarAlPrestador( p, tipoNotif, ip ); } - private void NotificarPagos( string titulo, string contenido ) + private void NotificarPagos( string mensaje ) { - + NotificacionesAdmin.Instancia.EnviarAPagos( mensaje ); } diff --git a/demo/src/Reportes/ConsumoAfiliadosReport.cs b/demo/src/Reportes/ConsumoAfiliadosReport.cs index 04878d2..945a246 100644 --- a/demo/src/Reportes/ConsumoAfiliadosReport.cs +++ b/demo/src/Reportes/ConsumoAfiliadosReport.cs @@ -1,9 +1,11 @@ using System; using System.Collections; +using System.Configuration; using System.Xml; using Dominio.Autorizaciones; using Dominio.Afiliados; using com.db4o; +using System.IO; namespace Reportes @@ -122,7 +124,25 @@ namespace Reportes public void Serializar() { - XmlTextWriter writer = new XmlTextWriter("c:\\rc_borrame.xml",null); + string currentDir = Directory.GetCurrentDirectory(); + string dirPagos = Path.Combine( currentDir, ConfigurationSettings.AppSettings["DirectorioPagos"] ); + if ( ! Directory.Exists(dirPagos) ) + { + Directory.CreateDirectory( dirPagos ); + } + + int secuencia = 0; + + string baseFileName = "rc_" + DateTime.Now.ToString("yyyy-MM-dd") + "_"; + string pathName = Path.Combine( dirPagos, baseFileName + secuencia.ToString("00") + ".xml" ); + + while ( File.Exists(pathName) ) + { + secuencia += 1; + pathName = Path.Combine( dirPagos, baseFileName + secuencia.ToString("00") + ".xml"); + } + + XmlTextWriter writer = new XmlTextWriter( pathName, null ); writer.Formatting = Formatting.Indented; this.xmlDoc.Save(writer); } diff --git a/demo/src/Reportes/InfoPrestacionesAdmin.cs b/demo/src/Reportes/InfoPrestacionesAdmin.cs index dc89e79..501a9d4 100644 --- a/demo/src/Reportes/InfoPrestacionesAdmin.cs +++ b/demo/src/Reportes/InfoPrestacionesAdmin.cs @@ -70,16 +70,33 @@ namespace Reportes return; else informeAprobaciones.Serializar(); - } public void MoverArchivoAceptado( InfoPrestacionesReport ip ) { + string currentDir = Directory.GetCurrentDirectory(); + + string dirAceptados = Path.Combine( currentDir, ConfigurationSettings.AppSettings["DirectorioInformesAceptados"] ); + if ( ! Directory.Exists(dirAceptados) ) + { + Directory.CreateDirectory( dirAceptados ); + } + File.Move( ip.PathArchivo, Path.Combine( dirAceptados, ip.NombreArchivo ) ); + } public void MoverArchivoRechazado( InfoPrestacionesReport ip ) { + string currentDir = Directory.GetCurrentDirectory(); + + string dirRechazados = Path.Combine( currentDir, ConfigurationSettings.AppSettings["DirectorioInformesRechazados"] ); + if ( ! Directory.Exists(dirRechazados) ) + { + Directory.CreateDirectory( dirRechazados ); + } + + File.Move( ip.PathArchivo, Path.Combine( dirRechazados, ip.NombreArchivo ) ); } diff --git a/demo/src/Reportes/InfoPrestacionesReport.cs b/demo/src/Reportes/InfoPrestacionesReport.cs index 6ca31d6..b6cc3dc 100644 --- a/demo/src/Reportes/InfoPrestacionesReport.cs +++ b/demo/src/Reportes/InfoPrestacionesReport.cs @@ -48,6 +48,11 @@ namespace Reportes set { this._pathArchivo = value; } } + public string NombreArchivo + { + get { return this.PathArchivo.Substring(this.PathArchivo.LastIndexOf(Path.DirectorySeparatorChar) + 1); } + } + public string CuitPrestador { get { return this._cuitPrestador; } diff --git a/demo/src/Reportes/NotificacionesAdmin.cs b/demo/src/Reportes/NotificacionesAdmin.cs index 6c5c7d9..3f8e949 100644 --- a/demo/src/Reportes/NotificacionesAdmin.cs +++ b/demo/src/Reportes/NotificacionesAdmin.cs @@ -1,32 +1,102 @@ using System; +using System.IO; +using System.Configuration; +using Dominio.Autorizaciones; + namespace Reportes { /// /// Clase que contiene la funcionalidad para generar y enviar notificaciones /// - public class NotificacionesAdmin + public sealed class NotificacionesAdmin { #region Constructores - public NotificacionesAdmin() + private NotificacionesAdmin() + { + } + + private static NotificacionesAdmin _instancia = new NotificacionesAdmin(); + public static NotificacionesAdmin Instancia { + get { return NotificacionesAdmin._instancia; } } #endregion Constructores #region Métodos Públicos - public void EnviarAlPrestador( NotificacionPrestador.Tipo tipoNotif, InfoPrestacionesReport ip ) + public void EnviarAlPrestador( Prestador p, NotificacionPrestador.Tipo tipoNotif, InfoPrestacionesReport ip ) { + string currentDir = Directory.GetCurrentDirectory(); + + string dirMails = Path.Combine( currentDir, ConfigurationSettings.AppSettings["DirectorioMails"] ); + if ( ! Directory.Exists(dirMails) ) + { + Directory.CreateDirectory( dirMails ); + } + + string pathName = Path.Combine( dirMails, "prestadores.txt" ); + string subject = string.Empty; + + switch ( tipoNotif ) + { + case NotificacionPrestador.Tipo.ProcesoExitoso: + subject = "OK " + ip.NombreArchivo; + break; + case NotificacionPrestador.Tipo.InfoNoRecibida: + subject = "NORECIBIDO " + DateTime.Now.ToString("yyyy-MM-dd"); + break; + case NotificacionPrestador.Tipo.ErrorGrave: + subject = "ERROR " + ip.NombreArchivo; + break; + } + this.EscribirArchivo( pathName, subject, "Prestador: " + p.Cuit ); } - public void EnviarAPagos( string titulo, string contenido ) + public void EnviarAPagos( string mensaje ) { + string currentDir = Directory.GetCurrentDirectory(); + + string dirMails = Path.Combine( currentDir, ConfigurationSettings.AppSettings["DirectorioMails"] ); + if ( ! Directory.Exists(dirMails) ) + { + Directory.CreateDirectory( dirMails ); + } + string pathName = Path.Combine( dirMails, "pagos.txt" ); + string subject = mensaje; + + this.EscribirArchivo( pathName, subject, string.Empty ); } #endregion Métodos Públicos + + #region Métodos privados + + + private void EscribirArchivo( string pathName, string subject, string titulo ) + { + StreamWriter w = null; + if ( File.Exists(pathName) ) + w = File.AppendText( pathName ); + else + w = File.CreateText( pathName ); + + w.WriteLine( @"*** " + titulo + "**************************************************" ); + w.WriteLine( @"*** " + DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss") + " ******************************************************" ); + w.WriteLine( @"******************************************************************************" ); + w.WriteLine( @"Subject: " + subject ); + w.WriteLine(); + w.WriteLine( @"------------------------------------------------------------------------------" ); + w.WriteLine(); + + w.Close(); + } + + #endregion Métodos privados } } + diff --git a/demo/src/Reportes/PrestacionesRealizadasReport.cs b/demo/src/Reportes/PrestacionesRealizadasReport.cs index f7de05f..ca1372f 100644 --- a/demo/src/Reportes/PrestacionesRealizadasReport.cs +++ b/demo/src/Reportes/PrestacionesRealizadasReport.cs @@ -4,6 +4,9 @@ using System.Xml; using Dominio.Autorizaciones; using Dominio.Afiliados; using com.db4o; +using System.Configuration; +using System.IO; + namespace Reportes { @@ -122,7 +125,25 @@ namespace Reportes public void Serializar() { - XmlTextWriter writer = new XmlTextWriter("c:\\borrame.xml",null); + string currentDir = Directory.GetCurrentDirectory(); + string dirPagos = Path.Combine( currentDir, ConfigurationSettings.AppSettings["DirectorioPagos"] ); + if ( ! Directory.Exists(dirPagos) ) + { + Directory.CreateDirectory( dirPagos ); + } + + int secuencia = 0; + + string baseFileName = "rp_" + DateTime.Now.ToString("yyyy-MM-dd") + "_"; + string pathName = Path.Combine( dirPagos, baseFileName + secuencia.ToString("00") + ".xml" ); + + while ( File.Exists(pathName) ) + { + secuencia += 1; + pathName = Path.Combine( dirPagos, baseFileName + secuencia.ToString("00") + ".xml"); + } + + XmlTextWriter writer = new XmlTextWriter( pathName, null ); writer.Formatting = Formatting.Indented; this.xmlDoc.Save(writer); } diff --git a/demo/src/osocial.exe.config b/demo/src/osocial.exe.config index 0ffb483..a8869c9 100644 --- a/demo/src/osocial.exe.config +++ b/demo/src/osocial.exe.config @@ -26,6 +26,9 @@ + + + -- 2.43.0