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