#region Usings
using System;
using System.Collections;
using Dominio;
using Dominio.Autorizaciones;
using Dominio.Afiliados;
#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;
AutorizacionManual aut = new AutorizacionManual(DateTime.Now);
//Seteo prestacion
Prestacion prestacion = new Prestacion();
prestacion.Codigo=codPrestacion;
if (null==(aut.Prestacion = (Prestacion)this.ObjectSetToArrayList( this.Db.get(prestacion) )[0]))
codigosOk = false;
//Seteo prestador
Prestador prestador = new Prestador();
prestador.Cuit=cuitPrestador;
if (null==(aut.Prestador = (Prestador)this.ObjectSetToArrayList( this.Db.get(prestador) )[0]))
codigosOk=false;
//Seteo afiliado
Afiliado afiliado = new Afiliado(codAfiliado);
if (null==(aut.Afiliado = ((Afiliado)this.ObjectSetToArrayList( this.Db.get(afiliado) )[0])))
codigosOk=false;
//Seteo fecha de vencimiento como dentro de 60 días
aut.FechaVencimiento = DateTime.Now.AddDays(60);
aut.Observaciones = observaciones;
#warning Grabar en autorizacionController:ver manejo de codigos!!!!
if (codigosOk) this.Db.set(aut);
return codigosOk;
}
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
Prestacion prestacion = new Prestacion();
prestacion.Codigo=codPrestacion;
if (null==(aut.Prestacion = (Prestacion)this.ObjectSetToArrayList( this.Db.get(prestacion) )[0]))
codigosOk = false;
//Seteo prestador
Prestador prestador = new Prestador();
prestador.Cuit=cuitPrestador;
if (null==(aut.Prestador = (Prestador)this.ObjectSetToArrayList( this.Db.get(prestador) )[0]))
codigosOk=false;
//Seteo afiliado
Afiliado afiliado = new Afiliado(codAfiliado);
if (null==(aut.Afiliado = ((Afiliado)this.ObjectSetToArrayList( this.Db.get(afiliado) )[0])))
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);
try
{
porcentajeDeCobertura = 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()
{
Autorizacion autorizacion = new AutorizacionManual();
// autorizacion.fe seleccionar nulls
//aut.Autorizacion = (Autorizacion)this.ObjectSetToArrayList( this.Db.get(autorizacion) )[0])
return null;
}
#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
#endregion Métodos Privados
}
}