5 using System.Collections;
8 using Dominio.Autorizaciones;
9 using Dominio.Afiliados;
20 /// Clase controlador que lleva a cabo los CU de "Pedir autorizacion automatica",
21 /// "Pedir autorizacion manual" y actualizar "autorizacion manual"
23 public class AutorizacionController : Controller
27 public AutorizacionController(DateTime fechaSolicitud): base()
32 #endregion Constructores
34 #region Campos Privados
36 private Autorizacion _currentAutorizacion = null ;
38 #endregion Campos Privados
40 #region Propiedades privadas
42 public Autorizacion CurrentAutorizacion
44 get { return _currentAutorizacion; }
46 #endregion Propiedades privadas
48 #region Métodos Públicos
51 /// Guarda un pedido de autorizacion manual.
53 public bool guardarAutorizacionManual(String codPrestacion, String cuitPrestador
54 , int codAfiliado, String observaciones)
56 bool codigosOk = true;
58 AutorizacionManual aut = new AutorizacionManual(DateTime.Now);
60 #region Se insancia prestador, prestacion y afiliado, y se asocia a aut
63 ArrayList al = this.ObjectSetToArrayList( this.Db.get( new Prestacion(codPrestacion) ) );
64 if (null==(aut.Prestacion = ( (al.Count == 0)? null : al[0] ) as Prestacion))
68 al = this.ObjectSetToArrayList( this.Db.get( new Prestador(cuitPrestador) ) );
69 if (null==(aut.Prestador = ( (al.Count == 0)? null : al[0] ) as Prestador))
75 al = this.ObjectSetToArrayList( this.Db.get( new Afiliado(codAfiliado) ) );
76 if (null==(aut.Afiliado = ( (al.Count == 0)? null : al[0] ) as Afiliado))
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);
84 aut.Observaciones = observaciones;
86 //Signo prox codigo para autorizacion
87 AutoIncrementable c = new AutoIncrementable ();
90 aut.Codigo = c.NextAutorizacion();
93 if (codigosOk) this.Db.set(aut);
99 //PRE: No hay autorizaciones manuales y automaticas con mismo codigo!!
100 public Autorizacion obtener(int codigo)
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 ();
110 ArrayList al = ObjectSetToArrayList (result);
112 Autorizacion a = null;
114 a = ((al.Count == 0)? null : al[0] ) as Autorizacion;
115 } catch (Exception e) {
116 Console.WriteLine ("Bad");
118 Console.WriteLine (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;
129 public float evaluarAutorizacionAutomatica(String cuitPrestador, String codPrestacion, int codAfiliado, out int codAutorizacion)
132 bool codigosOk = true;
133 float porcentajeDeCobertura = 0;
134 string fundamentosResolucion = "Todo ok";
136 AutorizacionAutomatica aut = new AutorizacionAutomatica(DateTime.Now);
138 #region Se insancia prestador, prestacion y afiliado, y se asocia a aut
141 ArrayList al = this.ObjectSetToArrayList( this.Db.get( new Prestacion(codPrestacion) ) );
142 if (null==(aut.Prestacion = ( (al.Count == 0)? null : al[0] ) as Prestacion))
146 al = this.ObjectSetToArrayList( this.Db.get( new Prestador(cuitPrestador) ) );
147 if (null==(aut.Prestador = ( (al.Count == 0)? null : al[0] ) as Prestador))
153 al = this.ObjectSetToArrayList( this.Db.get( new Afiliado(codAfiliado) ) );
154 if (null==(aut.Afiliado = ( (al.Count == 0)? null : al[0] ) as Afiliado))
157 #endregion Se insancia prestador, prestacion y afiliado, y se asocia a aut
158 //Seteo fecha de vencimiento como dentro de 60 días
161 //Seteo fecha de vencimiento como dentro de 60 días
162 aut.FechaVencimiento = DateTime.Now.AddDays(60);
166 porcentajeDeCobertura = aut.Afiliado.VerificarCobertura(codPrestacion);
170 #warning verificar cobertura deberia tirar excepcion si explota, o se rechaza
171 //TODO Asignar motivo de rechazo a fundamentosResolucion
175 //Si porcentaje es 0, se registra rechazada
176 aut.setResolucion(fundamentosResolucion, porcentajeDeCobertura);
180 this._currentAutorizacion=aut;
182 #warning deberia obtener codigo de autorizacion ACA y devolverlo
183 codAutorizacion = 131313; //TODO SETEAR CODIGO BIEN!!
187 return porcentajeDeCobertura;
190 public ArrayList obtenerAutorizacionesPendientes()
192 Query query = Db.query();
193 query.constrain(typeof(AutorizacionManual));
194 query.descend("_fechaRealizacion").constrain(DateTime.MinValue);
196 ObjectSet result = query.execute ();
198 return ObjectSetToArrayList (result);
201 public ArrayList obtenerAutorizacionesPorAfiliado (int codafiliado)
203 Afiliado a = new Afiliado (codafiliado);
205 Query query = Db.query();
206 query.constrain(typeof(Autorizacion));
207 query.descend("_afiliado").constrain(a);
209 ObjectSet result = query.execute ();
211 return ObjectSetToArrayList (result);
213 //PRE: El codigo solicitado tiene que ser de una autorizacion manual.
214 public bool setResolucionAutorizacionManual(int codAutorizacion,
215 String fundamentosResolucion, float porcentaje)
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;
229 #endregion Métodos Públicos
231 #region Métodos Privados
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.
238 /// <param name="ip">Reporte del cual se porcesarán las lineas</param>
240 private void InsertarDatosNecesarios()
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) )
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";
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" );
262 Prestacion p = new Prestacion();
263 p.Codigo = "mierda" ;
265 Categoria c = new Categoria();
267 c.Nombre="categoria 1";
270 p.Nombre= "hospital de clinicas";
273 Afiliado a = new Afiliado(69);
274 a.Apellido = "apellido";
275 a.EMail = "afiliado@aaa.com";
281 /*AutorizacionAutomatica a = new AutorizacionAutomatica();
283 os = this.Db.get( a );
284 if ( (os == null) || (os.size() == 0) )
286 a.Afiliado = new Dominio.Afiliados.Afiliado( 987 );
287 a.Prestacion = new Prestacion( "B01AC06" );
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
293 a.PorcentajeCobertura = 12.5F;
298 #endregion Métodos Privados