#region Usings using System; using System.Collections; using Dominio; using Dominio.Autorizaciones; using Dominio.Afiliados; using com.db4o; using com.db4o.query; #endregion Usings namespace Controlador { /// /// Clase controlador que lleva a cabo los CU de "Pedir autorizacion automatica", /// "Pedir autorizacion manual" y actualizar "autorizacion manual" /// public class AutorizacionController : Controller { #region Constructores public AutorizacionController(DateTime fechaSolicitud): base() { } #endregion Constructores #region Campos Privados private Autorizacion _currentAutorizacion = null ; #endregion Campos Privados #region Propiedades privadas public Autorizacion CurrentAutorizacion { get { return _currentAutorizacion; } } #endregion Propiedades privadas #region Métodos Públicos /// /// Guarda un pedido de autorizacion manual. /// public bool guardarAutorizacionManual(String codPrestacion, String cuitPrestador , int codAfiliado, String observaciones) { bool codigosOk = true; //solo para testing-------------------- this.InsertarDatosNecesarios(); //------------------------------------ AutorizacionManual aut = new AutorizacionManual(DateTime.Now); #region Se insancia prestador, prestacion y afiliado, y se asocia a aut //Seteo prestacion ArrayList al = this.ObjectSetToArrayList( this.Db.get( new Prestacion(codPrestacion) ) ); if (null==(aut.Prestacion = ( (al.Count == 0)? null : al[0] ) as Prestacion)) codigosOk=false; //Seteo prestador al = this.ObjectSetToArrayList( this.Db.get( new Prestador(cuitPrestador) ) ); if (null==(aut.Prestador = ( (al.Count == 0)? null : al[0] ) as Prestador)) codigosOk=false; //Seteo afiliado al = this.ObjectSetToArrayList( this.Db.get( new Afiliado(codAfiliado) ) ); if (null==(aut.Afiliado = ( (al.Count == 0)? null : al[0] ) as Afiliado)) codigosOk=false; #endregion Se insancia prestador, prestacion y afiliado, y se asocia a aut //Seteo fecha de vencimiento como dentro de 60 días aut.FechaVencimiento = DateTime.Now.AddDays(60); aut.Observaciones = observaciones; //Signo prox codigo para autorizacion AutoIncrementable c = new AutoIncrementable (); using (c) { aut.Codigo = c.NextAutorizacion(); } if (codigosOk) this.Db.set(aut); return codigosOk; } //PRE: No hay autorizaciones manuales y automaticas con mismo codigo!! public Autorizacion obtener(int codigo) { //Busco manual ArrayList al = this.ObjectSetToArrayList( this.Db.get( new AutorizacionManual(codigo) ) ); Autorizacion a = ((al.Count == 0)? null : al[0] ) as Autorizacion; if (null==a) //Busco automatica, si no hay manual para ese codigo { al = this.ObjectSetToArrayList( this.Db.get( new AutorizacionAutomatica(codigo) ) ); a = ((al.Count == 0)? null : al[0] ) as Autorizacion; } return a; } public float evaluarAutorizacionAutomatica(String cuitPrestador, String codPrestacion, int codAfiliado, out int codAutorizacion) { bool codigosOk = true; float porcentajeDeCobertura = 0; string fundamentosResolucion = "Todo ok"; AutorizacionAutomatica aut = new AutorizacionAutomatica(DateTime.Now); #region Se insancia prestador, prestacion y afiliado, y se asocia a aut //Seteo prestacion ArrayList al = this.ObjectSetToArrayList( this.Db.get( new Prestacion(codPrestacion) ) ); if (null==(aut.Prestacion = ( (al.Count == 0)? null : al[0] ) as Prestacion)) codigosOk=false; //Seteo prestador al = this.ObjectSetToArrayList( this.Db.get( new Prestador(cuitPrestador) ) ); if (null==(aut.Prestador = ( (al.Count == 0)? null : al[0] ) as Prestador)) codigosOk=false; //Seteo afiliado al = this.ObjectSetToArrayList( this.Db.get( new Afiliado(codAfiliado) ) ); if (null==(aut.Afiliado = ( (al.Count == 0)? null : al[0] ) as Afiliado)) codigosOk=false; #endregion Se insancia prestador, prestacion y afiliado, y se asocia a aut //Seteo fecha de vencimiento como dentro de 60 días //Seteo fecha de vencimiento como dentro de 60 días aut.FechaVencimiento = DateTime.Now.AddDays(60); try { porcentajeDeCobertura = aut.Afiliado.VerificarCobertura(codPrestacion); } catch { #warning verificar cobertura deberia tirar excepcion si explota, o se rechaza //TODO Asignar motivo de rechazo a fundamentosResolucion } finally { //Si porcentaje es 0, se registra rechazada aut.setResolucion(fundamentosResolucion, porcentajeDeCobertura); if (codigosOk) { this.Db.set(aut); this._currentAutorizacion=aut; } #warning deberia obtener codigo de autorizacion ACA y devolverlo codAutorizacion = 131313; //TODO SETEAR CODIGO BIEN!! } return porcentajeDeCobertura; } public ArrayList obtenerAutorizacionesPendientes() { Query query = Db.query(); query.constrain(typeof(AutorizacionManual)); query.descend("_fechaRealizacion").constrain(DateTime.MinValue); ObjectSet result = query.execute (); return ObjectSetToArrayList (result); } #endregion Métodos Públicos #region Métodos Privados /// /// Procesa las lineas del reporte una vez que el mismo ha sido validado: /// Si está aprobada, la registra en el sistema y la agrega al reporte de Consumo de los Afiliados. /// A todas las lineas las agrega al Informe de Aprobaciones/rechazos de Prestaciones Realizadas. /// /// Reporte del cual se porcesarán las lineas private void InsertarDatosNecesarios() { //PRESTADOR Prestador pre = new Prestador(); pre.Cuit = "11-11111111-1"; ObjectSet os = this.Db.get( pre ); if ( (os == null) || (os.size() == 0) ) { Dominio.SDireccion dir; dir.Calle = "Gaona"; dir.CodigoPostal = "AB1504"; dir.Departamento = ""; dir.Numero = 1234; dir.Piso = 0; dir.Provincia = Dominio.EProvincia.CAPITAL_FEDERAL; dir.Telefono = "5056-4567"; pre.Direccion = dir; pre.Email = @"roberto@sancamilo.com"; pre.FechaBaja = DateTime.MinValue; pre.Nombre = "Clinica San Camilo"; pre.Password = "camilo"; pre.Zona = new SZona( "Caballito", "Zona de Caballito" ); this.Db.set( pre ); } Prestacion p = new Prestacion(); p.Codigo = "mierda" ; Categoria c = new Categoria(); c.Codigo=10; c.Nombre="categoria 1"; p.Categoria = c; p.Nombre= "hospital de clinicas"; this.Db.set(c); Afiliado a = new Afiliado(69); a.Apellido = "apellido"; a.EMail = "afiliado@aaa.com"; this.Db.set(a); //AUTORIZACIONES /*AutorizacionAutomatica a = new AutorizacionAutomatica(); a.Codigo = 123; os = this.Db.get( a ); if ( (os == null) || (os.size() == 0) ) { a.Afiliado = new Dominio.Afiliados.Afiliado( 987 ); a.Prestacion = new Prestacion( "B01AC06" ); a.Prestador = pre; a.FechaSolicitud = new DateTime( 2005, 5, 20 ); // 20 de mayo a.FechaRealizacion = DateTime.MinValue; a.FechaVencimiento = a.FechaSolicitud.AddMonths( 2 ); // 20 de julio, aprox a.Aprobada = true; a.PorcentajeCobertura = 12.5F; this.Db.set( a ); }*/ } #endregion Métodos Privados } }