X-Git-Url: https://git.llucax.com/z.facultad/75.10/miklolife.git/blobdiff_plain/aeb71279fa96dfc8e3832d04ae25d68c6853d39f..afbf89745cac12021bfe71bc6739dbd9459cacc0:/demo/src/Reportes/LineaInfoPrestacionesReport.cs diff --git a/demo/src/Reportes/LineaInfoPrestacionesReport.cs b/demo/src/Reportes/LineaInfoPrestacionesReport.cs index 1d25185..61e2533 100644 --- a/demo/src/Reportes/LineaInfoPrestacionesReport.cs +++ b/demo/src/Reportes/LineaInfoPrestacionesReport.cs @@ -1,4 +1,9 @@ using System; +using System.Collections; +using com.db4o; +using Dominio.Afiliados; +using Dominio.Autorizaciones; +//using Dominio.Planes; namespace Reportes { @@ -10,10 +15,308 @@ namespace Reportes { #region Constructores - public LineaInfoPrestacionesReport() + public LineaInfoPrestacionesReport( int codAut, string tipoAut, int codAfiliado, string codPrestacion, + DateTime fechaRealizacion, float porcentajeCobertura ) { + this._codigoAutorizacion = codAut; + this._tipoAutorizacion = tipoAut; + this._codigoAfiliado = codAfiliado; + this._codigoPrestacion = codPrestacion; + this._fechaRealizacion = fechaRealizacion; + this._porcentajeCobertura = porcentajeCobertura; } #endregion Constructores + + #region Campos Privados + + private bool _aprobada = false; + private bool _existeAutorizacion = false; + private string _motivoRechazo = string.Empty; + + private int _codigoAutorizacion; + private string _tipoAutorizacion; + private int _codigoAfiliado; + private string _codigoPrestacion; + private DateTime _fechaRealizacion; + private float _porcentajeCobertura; + + #endregion Campos Privados + + #region Propiedades Públicas + + /// + /// Determina si la linea fue aprobada por el método Validar() + /// Sólo tiene sentido si fue ejecutado Validar() + /// + public bool Aprobada + { + get { return this._aprobada; } + } + + public bool ExisteAutorizacion + { + get { return this._existeAutorizacion; } + } + + /// + /// Motivo por el cual se rechazó la línea, si es que se rechazó. + /// En caso de haberse aprobado, debe estar vacío + /// + public string MotivoRechazo + { + get { return this._motivoRechazo; } + } + + public int CodigoAutorizacion + { + get { return this._codigoAutorizacion; } + } + + public string TipoAutorizacion + { + get { return this._tipoAutorizacion; } + } + + public int CodigoAfiliado + { + get { return this._codigoAfiliado; } + } + + public string CodigoPrestacion + { + get { return this._codigoPrestacion; } + } + + public DateTime FechaRealizacion + { + get { return this._fechaRealizacion; } + } + + public float PorcentajeCobertura + { + get { return this._porcentajeCobertura; } + } + + #endregion Propiedades Públicas + + #region DB + private com.db4o.ObjectContainer db = null; + + private ArrayList ObjectSetToArrayList (ObjectSet result) + { + ArrayList lst = new ArrayList (); + Object s; + if (result == null) + return lst; + + while ((s = result.next ()) != null) + { + lst.Add (s); + } + return lst; + } + + #endregion DB + + #region Métodos Públicos + + /// + /// Valida la linea según las reglas de negocio (ver CU "Recibir y Cotejar") + /// + /// True si la linea es válida + public bool Validar( Dominio.Autorizaciones.Prestador prestador ) + { + #region Chequeo de la autorización + + Autorizacion aut = this.getAutorizacion( this.CodigoAutorizacion ); + if ( aut == null ) + { + this.MarcarRechazada( MensajeMotivoRechazo.AutorizacionInexistente ); + this._existeAutorizacion = false; + return false; + } + else + { + this._existeAutorizacion = true; + + if ( (aut.Prestador == null) || (aut.Prestador.Cuit != prestador.Cuit) ) + { + this.MarcarRechazada( MensajeMotivoRechazo.AutorizacionPrestadorInvalido ); + return false; + } + + if ( (aut.Prestacion == null) || (aut.Prestacion.Codigo != this.CodigoPrestacion) ) + { + this.MarcarRechazada( MensajeMotivoRechazo.AutorizacionPrestacionInvalida ); + return false; + } + + if ( aut.FechaRealizacion != DateTime.MinValue ) + { + this.MarcarRechazada( MensajeMotivoRechazo.AutorizacionYaRealizada ); + return false; + } + + if ( aut.getEstado(this.FechaRealizacion) != Autorizacion.Estado.Aprobada ) + { + this.MarcarRechazada( MensajeMotivoRechazo.AutorizacionNoAprobada ); + return false; + } + + if ( this.TipoAutorizacion.Trim() == "Manual" ) + { + if ( aut.GetType() != typeof(AutorizacionManual) ) + { + this.MarcarRechazada( MensajeMotivoRechazo.AutorizacionTipoInvalido ); + return false; + } + } + else + { + if ( aut.GetType() != typeof(AutorizacionAutomatica) ) + { + this.MarcarRechazada( MensajeMotivoRechazo.AutorizacionTipoInvalido ); + return false; + } + } + + if ( aut.PorcentajeCobertura != this.PorcentajeCobertura ) + { + this.MarcarRechazada( MensajeMotivoRechazo.AutorizacionPorcentajeInvalido ); + return false; + } + } + + #endregion Chequeo de la autorización + + #region Chequeo de Prestador + if ( (prestador.FechaBaja != DateTime.MinValue) && (prestador.FechaBaja <= this.FechaRealizacion) ) + { + this.MarcarRechazada( MensajeMotivoRechazo.PrestadorDadoDeBaja ); + return false; + } + #endregion Chequeo de Prestador + + #region Chequeo del Afiliado + Afiliado a = this.getAfiliado( this.CodigoAfiliado ); + if (a == null) + { + this.MarcarRechazada( MensajeMotivoRechazo.AfiliadoInexistente ); + return false; + } + else + if ( (a.FechaBaja != DateTime.MinValue) && (a.FechaBaja <= this.FechaRealizacion) ) + { + this.MarcarRechazada( MensajeMotivoRechazo.AfiliadoDadoDeBaja ); + return false; + } + #endregion Chequeo del Afiliado + + #region Chequeo de la prestación + + Prestacion p = this.getPrestacion( this.CodigoPrestacion ); + if ( p == null ) + { + this.MarcarRechazada( MensajeMotivoRechazo.PrestacionInexistente ); + return false; + } + else + { + if ( (p.FechaBaja != DateTime.MinValue) && (p.FechaBaja <= this.FechaRealizacion) ) + { + this.MarcarRechazada( MensajeMotivoRechazo.PrestacionDadaDeBaja ); + return false; + } + } + + #endregion Chequeo de la prestación + + this._aprobada = true; + return true; + } + + #endregion Métodos Públicos + + #region Métodos Privados + + private Afiliado getAfiliado( int codigo ) + { + this.db = com.db4o.Db4o.openFile("os.yap"); + ArrayList al = this.ObjectSetToArrayList( db.get( new Afiliado(this.CodigoAfiliado) ) ); + + Afiliado a = ( (al.Count == 0)? null : al[0] ) as Afiliado; + this.db.close(); + this.db = null; + + return a; + } + + private Prestacion getPrestacion( string codigo ) + { + this.db = com.db4o.Db4o.openFile("os.yap"); + ArrayList al = this.ObjectSetToArrayList( db.get( new Prestacion(this.CodigoPrestacion) ) ); + + Prestacion p = ( (al.Count == 0)? null : al[0] ) as Prestacion; + this.db.close(); + this.db = null; + + return p; + } + + private Autorizacion getAutorizacion( int codigo ) + { + this.db = com.db4o.Db4o.openFile("os.yap"); + + ArrayList al = new ArrayList(); + + al = this.ObjectSetToArrayList( db.get( new AutorizacionManual(codigo) ) ); + Autorizacion a = ( (al.Count == 0)? null : al[0] ) as AutorizacionManual; + + if ( a == null ) + { + al = this.ObjectSetToArrayList( db.get( new AutorizacionAutomatica(codigo) ) ); + a = ( (al.Count == 0)? null : al[0] ) as AutorizacionAutomatica; + } + + this.db.close(); + this.db = null; + + return a; + } + + private void MarcarRechazada( string motivo ) + { + this._aprobada = false; + this._motivoRechazo = motivo; + } + + #endregion Métodos Privados + + } //clase + + #region Motivos de rechazo + + public struct MensajeMotivoRechazo + { + public static string PrestadorDadoDeBaja = "El prestador estaba dado de baja en la fecha de realización de la prestación informada por el prestador"; + public static string AfiliadoDadoDeBaja = "El afiliado estaba dado de baja en la fecha de realización de la prestación informada por el prestador"; + public static string AfiliadoInexistente = "El afiliado informado por el prestador no existe en el Sistema"; + public static string PrestacionDadaDeBaja = "La prestación estaba dada de baja en la fecha de realización de la prestación informada por el prestador"; + public static string PrestacionInexistente = "La prestación informada por el prestador no existe en el Sistema"; + + public static string AutorizacionInexistente = "La autorizacion informada por el prestador no existe en el Sistema"; + public static string AutorizacionPrestadorInvalido = "La autorizacion informada por el prestador no esta relacionada, en el Sistema, con dicho prestador"; + public static string AutorizacionAfiliadoInvalido = "La autorizacion informada por el prestador no esta relacionada, en el Sistema, con el afiliado informado"; + public static string AutorizacionPrestacionInvalida = "La autorizacion informada por el prestador no esta relacionada, en el Sistema, con la prestacion informada"; + public static string AutorizacionYaRealizada = "La autorizacion informada por el prestador ya ha sido realizada, segun los datos del Sistema"; + public static string AutorizacionNoAprobada = "La autorizacion no estaba aprobada, segun los datos del Sistema, en la fecha de realizacion informada por el prestador"; + public static string AutorizacionTipoInvalido = "El tipo de autorizacion informado por el prestador, no coincide con el tipo de autorizacion en el Sistema"; + public static string AutorizacionPorcentajeInvalido = "El porcentaje de cobertura informado por el prestador, es distinto al que se aplicaba al momento de la aprobación de la autorización, segun los datos del Sistema"; + } + + #endregion Motivos de rechazo + + }