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