]> git.llucax.com Git - z.facultad/75.10/miklolife.git/blob - demo/src/Controlador/RecibirPrestacionesController.cs
Agrego material de estudio.
[z.facultad/75.10/miklolife.git] / demo / src / Controlador / RecibirPrestacionesController.cs
1 #region Usings
2
3 using System;
4 using System.Collections;
5
6 using Dominio;
7 using Dominio.Autorizaciones;
8 using Dominio.Afiliados;
9 using Dominio.Planes;
10 using Reportes;
11
12 using System.IO;
13
14 using com.db4o;
15
16 #endregion Usings
17
18 namespace Controlador
19 {
20         /// <summary>
21         /// Clase controlador que lleva a cabo el CU "Recibir y Cotejar Consumos y Prestaciones"
22         /// </summary>
23         public class RecibirPrestacionesController : Controller
24         {
25                 #region Constructores
26                 
27                 public RecibirPrestacionesController()
28                         : base()
29                 {
30                 }
31
32                 #endregion Constructores
33
34                 #region Campos Privados 
35                 
36                 private ConsumoAfiliadosReport _reporteConsumo = new ConsumoAfiliadosReport();
37                 private PrestacionesRealizadasReport _reporteAprobaciones = new PrestacionesRealizadasReport();
38                 
39                 #endregion Campos Privados
40
41                 #region Creacion de Datos en la BD
42                 public void InsertarDatosNecesarios()
43                 {
44                         //PRESTADOR
45                         Prestador pre = new Prestador();
46                         pre.Cuit = "30-12345678-1";
47                         ObjectSet os = this.Db.get( pre );
48                         if ( (os == null) || (os.size() == 0) )
49                         {
50                                 Dominio.SDireccion dir;
51                                 dir.Calle = "Gaona"; dir.CodigoPostal = "AB1504"; dir.Departamento = "";
52                                 dir.Numero = 1234; dir.Piso = 0;  dir.Provincia = Dominio.EProvincia.CAPITAL_FEDERAL;
53                                 dir.Telefono = "5056-4567";
54                                 pre.Direccion = dir;
55                                 pre.Email = @"roberto@sancamilo.com";
56                                 pre.FechaBaja = DateTime.MinValue;
57                                 pre.Nombre = "Clinica San Camilo";
58                                 pre.Password = "camilo";
59                                 pre.Zona = new SZona( "Caballito", "Zona de Caballito" );
60                                 this.Db.set( pre );
61                         }
62
63                         //AUTORIZACIONES
64                         AutorizacionAutomatica a = new AutorizacionAutomatica();
65                         a.Codigo = 123;
66                         os = this.Db.get( a );
67                         if ( (os == null) || (os.size() == 0) )
68                         {
69                                 Solicitante sol = new Solicitante( ETipoDocumento.DNI, 28123456, "Jorge", "Drexler" );
70                                 Plan plan = new Plan( 10F ); plan.Codigo = 3; 
71                                 Afiliado afil = new Afiliado( sol, plan, new DateTime(2004, 4, 30 ) );
72                                 afil.Codigo = 987;
73                                 a.Afiliado = afil;
74                                 a.Prestacion = new Prestacion( "B01AC06", "Acido acetilsalicílico" );
75                                 a.Prestador = pre;
76                                 a.FechaSolicitud = new DateTime( 2005, 5, 20 ); // 20 de mayo
77                                 a.FechaRealizacion = DateTime.MinValue;
78                                 a.FechaVencimiento = a.FechaSolicitud.AddMonths( 2 ); // 20 de julio, aprox
79                                 a.Aprobada = true;
80                                 a.PorcentajeCobertura = 12.5F;
81                                 this.Db.set( a );
82                         }
83                         else
84                         {
85                                 Autorizacion aut = (ObjectSetToArrayList( os )[0] as Autorizacion );
86                                 aut.FechaRealizacion = DateTime.MinValue;
87                                 this.Db.set( aut );
88                         }
89                         
90                 }
91
92                 #endregion Creacion de Datos en la BD
93
94                 #region Métodos Públicos
95                 
96                 /// <summary>
97                 /// Dispara el proceso de recepción y procesamiento de la info recibida de los Presadores
98                 /// </summary>
99                 public void procesarInfoRecibida(App app)
100                 {
101                         try
102                         {
103                                 //1. Obtener todos los prestadores
104                                 ArrayList prestadores = this.ObjectSetToArrayList( this.Db.get(new Prestador()) );
105
106                                 InfoPrestacionesAdmin ipAdmin = new InfoPrestacionesAdmin();
107
108                                 //2. recorrer los prestadores
109                                 foreach ( Prestador p in prestadores )
110                                 {
111
112                                         app.UpdateIdle ();
113                                         
114                                         //Obtener archivos enviados del prestador
115                                         InfoPrestacionesReport[] informes = ipAdmin.ObtenerInfoPendiente( p );
116                         
117                                         if ( informes.Length <= 0 )
118                                         {
119                                                 this.NotificarPrestador( p, NotificacionPrestador.Tipo.InfoNoRecibida, null );
120                                                 this.NotificarPagos( "NORECIBIDO " + p.Cuit.Trim() + " " + DateTime.Now.ToString("yyyy-MM-dd") );
121                                         }
122                                         else
123                                         {
124                                                 //Recorro informe por informe
125                                                 foreach ( InfoPrestacionesReport ip in informes )
126                                                 {
127                                                         if ( (ip.ValidarFormato()) && ( ip.CuitPrestador == p.Cuit ) )
128                                                         {       //OK
129                                                                 ip.ValidarLineas( p ); //Las marca como aprobadas/rechazadas
130                                                                 this.ProcesarLineas( p, ip );
131                                                                 ipAdmin.MoverArchivoAceptado( ip );
132                                                                 this.NotificarPrestador( p, NotificacionPrestador.Tipo.ProcesoExitoso, ip );
133                                                         }
134                                                         else
135                                                         {
136                                                                 //ERROR. 
137                                                                 // 1. Mover el archivo a "rechazados"
138                                                                 ipAdmin.MoverArchivoRechazado( ip );
139                                                                 // 2. Enviar mail al Prestador y a Pagos
140                                                                 this.NotificarPrestador( p, NotificacionPrestador.Tipo.ErrorGrave, ip );
141                                                                 this.NotificarPagos( "ERROR " + p.Cuit.Trim() + " " + ip.NombreArchivo );
142                                                         }
143                                                 } //foreach informes
144                                         } //else
145                                 } // foreach prestadores
146
147                                 //Envío los reportes creados:
148                                 ipAdmin.EnviarReporte( this._reporteAprobaciones );
149                                 ipAdmin.EnviarReporte( this._reporteConsumo );
150                         }
151                         catch ( Exception e )
152                         {
153                                 Console.WriteLine( e.Message );
154                                 Console.Read();
155                         }
156                 }
157
158                 #endregion Métodos Públicos
159
160                 #region Métodos Privados
161
162                 /// <summary>
163                 /// Procesa las lineas del reporte una vez que el mismo ha sido validado:
164                 /// Si está aprobada, la registra en el sistema y la agrega al reporte de Consumo de los Afiliados. 
165                 /// A todas las lineas las agrega al Informe de Aprobaciones/rechazos de Prestaciones Realizadas.
166                 /// </summary>
167                 private void ProcesarLineas( Prestador p, InfoPrestacionesReport ip )
168                 {
169                         foreach ( LineaInfoPrestacionesReport linea in ip.Lineas )
170                         {
171                                 this._reporteAprobaciones.AgregarInfo( p, ip.FechaEnvio, linea );
172
173                                 if ( linea.Aprobada )
174                                 {
175                                         //actualizo en el sistema
176                                         Autorizacion a = this.getAutorizacion( linea.CodigoAutorizacion );
177                                         a.FechaRealizacion = linea.FechaRealizacion;
178                                         this.Db.set( a );
179                                         
180                                         //agrego info al reporte de consumo
181                                         this._reporteConsumo.AgregarInfo( p, linea );
182                                 }
183                         }
184                 }
185
186                 private void NotificarPrestador( Prestador p, NotificacionPrestador.Tipo tipoNotif, InfoPrestacionesReport ip )
187                 {
188                         NotificacionesAdmin.Instancia.EnviarAlPrestador( p, tipoNotif, ip );
189                 }
190
191                 private void NotificarPagos( string mensaje )
192                 {
193                         NotificacionesAdmin.Instancia.EnviarAPagos( mensaje );
194                 }
195
196
197                 private Autorizacion getAutorizacion( int codigo )
198                 {       
199                         ArrayList al = new ArrayList();
200
201                         al = this.ObjectSetToArrayList( this.Db.get( new AutorizacionManual(codigo) ) );
202                         Autorizacion a = ( (al.Count == 0)? null : al[0] ) as AutorizacionManual;
203
204                         if ( a == null )
205                         {
206                                 al = this.ObjectSetToArrayList( this.Db.get( new AutorizacionAutomatica(codigo) ) );
207                                 a = ( (al.Count == 0)? null : al[0] ) as AutorizacionAutomatica;
208                         }
209
210                         return a;
211                 }
212
213                 #endregion Métodos Privados
214
215         }
216 }