]> git.llucax.com Git - z.facultad/75.10/miklolife.git/blob - demo/src/Controlador/AutorizacionController.cs
- Recibir y Cotejar afilidito
[z.facultad/75.10/miklolife.git] / demo / src / Controlador / AutorizacionController.cs
1
2 #region Usings
3
4 using System;
5 using System.Collections;
6
7 using Dominio;
8 using Dominio.Autorizaciones;
9 using Dominio.Afiliados;
10
11
12 using com.db4o;
13 using com.db4o.query;
14
15 #endregion Usings
16
17 namespace Controlador
18 {
19         /// <summary>
20         /// Clase controlador que lleva a cabo los CU de "Pedir autorizacion automatica",
21         /// "Pedir autorizacion manual" y actualizar "autorizacion manual"
22         /// </summary>
23         public class AutorizacionController : Controller
24         {
25                 #region Constructores
26                 
27                 public AutorizacionController(DateTime fechaSolicitud): base()
28                 {
29
30                 }
31
32                 #endregion Constructores
33
34                 #region Campos Privados 
35
36                 private Autorizacion _currentAutorizacion = null ;              
37                 
38                 #endregion Campos Privados
39
40                 #region Propiedades privadas
41
42                 public Autorizacion CurrentAutorizacion
43                 {
44                         get { return _currentAutorizacion; }                    
45                 }
46                 #endregion Propiedades privadas
47
48                 #region Métodos Públicos
49                 
50                 /// <summary>
51                 /// Guarda un pedido de autorizacion manual.
52                 /// </summary>
53                 public bool guardarAutorizacionManual(String codPrestacion, String cuitPrestador
54                         , int codAfiliado, String observaciones)
55                 {
56                         bool codigosOk = true;
57                                 
58                         AutorizacionManual aut = new AutorizacionManual(DateTime.Now);
59                         
60                         #region Se insancia prestador, prestacion y afiliado, y se asocia a aut
61                         //Seteo prestacion
62                         
63                         ArrayList al = this.ObjectSetToArrayList( this.Db.get( new Prestacion(codPrestacion) ) );
64                         if (null==(aut.Prestacion = ( (al.Count == 0)? null : al[0] ) as Prestacion))
65                                 codigosOk=false;
66
67                         //Seteo prestador
68                         al = this.ObjectSetToArrayList( this.Db.get( new Prestador(cuitPrestador) ) );
69                         if (null==(aut.Prestador = ( (al.Count == 0)? null : al[0] ) as Prestador))
70                                 codigosOk=false;
71
72                                 
73
74                         //Seteo afiliado
75                         al = this.ObjectSetToArrayList( this.Db.get( new Afiliado(codAfiliado) ) );
76                         if (null==(aut.Afiliado = ( (al.Count == 0)? null : al[0] ) as Afiliado))
77                                 codigosOk=false;
78         
79                         #endregion Se insancia prestador, prestacion y afiliado, y se asocia a aut
80                         //Seteo fecha de vencimiento como dentro de 60 días
81                         aut.FechaVencimiento = DateTime.Now.AddDays(60);
82
83
84                         aut.Observaciones = observaciones;                      
85
86                         //Signo prox codigo para autorizacion
87                         AutoIncrementable c = new AutoIncrementable ();
88                         using (c)
89                         {
90                                 aut.Codigo = c.NextAutorizacion();
91                         }
92
93                         if (codigosOk) this.Db.set(aut);
94
95                         return codigosOk;                       
96                 
97                 }
98
99                 //PRE: No hay autorizaciones manuales y automaticas con mismo codigo!!
100                 public Autorizacion obtener(int codigo)
101                 {                       
102                         //Busco manual
103                         /*ArrayList al = this.ObjectSetToArrayList( this.Db.get( new AutorizacionManual(codigo) ) );
104                         Autorizacion a = ((al.Count == 0)? null : al[0] ) as Autorizacion;*/
105                         Query query = Db.query();
106                         query.constrain(typeof(AutorizacionManual));
107                         query.descend("_codigo").constrain(codigo);
108                         ObjectSet result = query.execute ();
109                         
110                         ArrayList al = ObjectSetToArrayList (result);
111
112                         Autorizacion a = null;
113                         try     {
114                                 a = ((al.Count == 0)? null : al[0] ) as Autorizacion;
115                         } catch (Exception e) {
116                                 Console.WriteLine ("Bad");
117                         }
118                         Console.WriteLine (a);
119                         
120                         if (null==a) {
121                                 Console.WriteLine ("NO EXISTE AUTORIZACION MANUAL DE CODIGO {0}", codigo);
122                                 //Busco automatica, si no hay manual para ese codigo
123                                 al = this.ObjectSetToArrayList( this.Db.get( new AutorizacionAutomatica(codigo) ) );
124                                 a = ((al.Count == 0)? null : al[0] ) as Autorizacion;
125                         }
126                         return a;
127                 }
128
129                 public float evaluarAutorizacionAutomatica(String cuitPrestador, String codPrestacion, int codAfiliado, out int codAutorizacion)
130                 {
131
132                         bool codigosOk = true;
133                         float porcentajeDeCobertura = 0;
134                         string fundamentosResolucion = "Todo ok";
135                         
136                         AutorizacionAutomatica aut = new AutorizacionAutomatica(DateTime.Now);
137                         
138                         #region Se insancia prestador, prestacion y afiliado, y se asocia a aut
139                         //Seteo prestacion
140                         
141                         ArrayList al = this.ObjectSetToArrayList( this.Db.get( new Prestacion(codPrestacion) ) );
142                         if (null==(aut.Prestacion = ( (al.Count == 0)? null : al[0] ) as Prestacion))
143                                 codigosOk=false;
144
145                         //Seteo prestador
146                         al = this.ObjectSetToArrayList( this.Db.get( new Prestador(cuitPrestador) ) );
147                         if (null==(aut.Prestador = ( (al.Count == 0)? null : al[0] ) as Prestador))
148                                 codigosOk=false;
149
150                                 
151
152                         //Seteo afiliado
153                         al = this.ObjectSetToArrayList( this.Db.get( new Afiliado(codAfiliado) ) );
154                         if (null==(aut.Afiliado = ( (al.Count == 0)? null : al[0] ) as Afiliado))
155                                 codigosOk=false;
156         
157                         #endregion Se insancia prestador, prestacion y afiliado, y se asocia a aut
158                         //Seteo fecha de vencimiento como dentro de 60 días
159                         
160
161                         //Seteo fecha de vencimiento como dentro de 60 días
162                         aut.FechaVencimiento = DateTime.Now.AddDays(60);
163
164                         try
165                         {
166                                 porcentajeDeCobertura = aut.Afiliado.VerificarCobertura(codPrestacion);
167                         }
168                         catch
169                         {
170                                 #warning verificar cobertura deberia tirar excepcion si explota, o se rechaza
171                                 //TODO Asignar motivo de rechazo a fundamentosResolucion
172                         }
173                         finally
174                         {
175                                 //Si porcentaje es 0, se registra rechazada
176                                 aut.setResolucion(fundamentosResolucion, porcentajeDeCobertura);
177                                 if (codigosOk) 
178                                 {
179                                         this.Db.set(aut);
180                                         this._currentAutorizacion=aut;
181                                 }
182                                 #warning deberia obtener codigo de autorizacion ACA y devolverlo
183                                 codAutorizacion = 131313; //TODO SETEAR CODIGO BIEN!!
184                                 
185                                                 
186                         }
187                         return porcentajeDeCobertura;
188                 }
189
190                 public ArrayList obtenerAutorizacionesPendientes()
191                 {                               
192                         Query query = Db.query();
193                         query.constrain(typeof(AutorizacionManual));
194                         query.descend("_fechaRealizacion").constrain(DateTime.MinValue);
195
196                         ObjectSet result = query.execute ();
197
198                         return ObjectSetToArrayList (result);
199                 }
200
201                 public ArrayList obtenerAutorizacionesPorAfiliado (int codafiliado)
202                 {       
203                         Afiliado a = new Afiliado (codafiliado);
204         
205                         Query query = Db.query();
206                         query.constrain(typeof(Autorizacion));
207                         query.descend("_afiliado").constrain(a);
208
209                         ObjectSet result = query.execute ();
210
211                         return ObjectSetToArrayList (result);
212                 }
213                 //PRE: El codigo solicitado tiene que ser de una autorizacion manual.
214                 public bool  setResolucionAutorizacionManual(int codAutorizacion, 
215                         String fundamentosResolucion, float porcentaje)
216                 {
217                         AutorizacionManual a = this.obtener(codAutorizacion) as AutorizacionManual;
218                         if (null==a) return false;
219                         a.Aprobada = (porcentaje==0)?false:true;
220                         a.PorcentajeCobertura = porcentaje;
221                         a.FundamentosResolucion = fundamentosResolucion;
222                         a.FechaResolucion = DateTime.Now;
223                         this.Db.set(a);
224
225                         return true;
226                 }
227
228
229                 #endregion Métodos Públicos
230
231                 #region Métodos Privados
232
233                 /// <summary>
234                 /// Procesa las lineas del reporte una vez que el mismo ha sido validado:
235                 /// Si está aprobada, la registra en el sistema y la agrega al reporte de Consumo de los Afiliados. 
236                 /// A todas las lineas las agrega al Informe de Aprobaciones/rechazos de Prestaciones Realizadas.
237                 /// </summary>
238                 /// <param name="ip">Reporte del cual se porcesarán las lineas</param>
239                 
240                 private void InsertarDatosNecesarios()
241                 {
242                         return;
243                         //PRESTADOR
244                         Prestador pre = new Prestador();
245                         pre.Cuit = "11-11111111-1";
246                         ObjectSet os = this.Db.get( pre );
247                         if ( (os == null) || (os.size() == 0) )
248                         {
249                                 Dominio.SDireccion dir;
250                                 dir.Calle = "Gaona"; dir.CodigoPostal = "AB1504"; dir.Departamento = "";
251                                 dir.Numero = 1234; dir.Piso = 0;  dir.Provincia = Dominio.EProvincia.CAPITAL_FEDERAL;
252                                 dir.Telefono = "5056-4567";
253                                 pre.Direccion = dir;
254                                 pre.Email = @"roberto@sancamilo.com";
255                                 pre.FechaBaja = DateTime.MinValue;
256                                 pre.Nombre = "Clinica San Camilo";
257                                 pre.Password = "camilo";
258                                 pre.Zona = new SZona( "Caballito", "Zona de Caballito" );
259                                 this.Db.set( pre );
260                         }
261
262                         Prestacion p = new Prestacion();
263                         p.Codigo = "mierda" ;
264
265                         Categoria c = new Categoria();
266                         c.Codigo=10;
267                         c.Nombre="categoria 1";
268                 
269                         p.Categoria = c;
270                         p.Nombre= "hospital de clinicas";
271                         this.Db.set(p);
272
273                         Afiliado a = new Afiliado(69);
274                         a.Apellido = "apellido";
275                         a.EMail = "afiliado@aaa.com";
276
277                         this.Db.set(a);
278                         
279
280                         //AUTORIZACIONES
281                         /*AutorizacionAutomatica a = new AutorizacionAutomatica();
282                         a.Codigo = 123;
283                         os = this.Db.get( a );
284                         if ( (os == null) || (os.size() == 0) )
285                         {
286                                 a.Afiliado = new Dominio.Afiliados.Afiliado( 987 );
287                                 a.Prestacion = new Prestacion( "B01AC06" );
288                                 a.Prestador = pre;
289                                 a.FechaSolicitud = new DateTime( 2005, 5, 20 ); // 20 de mayo
290                                 a.FechaRealizacion = DateTime.MinValue;
291                                 a.FechaVencimiento = a.FechaSolicitud.AddMonths( 2 ); // 20 de julio, aprox
292                                 a.Aprobada = true;
293                                 a.PorcentajeCobertura = 12.5F;
294                                 this.Db.set( a );
295                         }*/
296                 }
297
298                 #endregion Métodos Privados
299
300         }
301 }