+ public DateTime FechaVencimiento
+ {
+ get { return this._fechaVencimiento; }
+ set { this._fechaVencimiento = value; }
+ }
+
+ public bool Aprobada
+ {
+ get { return this._aprobada; }
+ set { this._aprobada = value; }
+ }
+
+ public string FundamentosResolucion
+ {
+ get { return this._fundamentosResolucion; }
+ set { this._fundamentosResolucion = value; }
+ }
+
+ public Prestador Prestador
+ {
+ get { return this._prestador; }
+ set { this._prestador = value; }
+ }
+
+ public Prestacion Prestacion
+ {
+ get { return this._prestacion; }
+ set { this._prestacion = value; }
+ }
+
+ #endregion Propiedades Públicas
+
+ #region Constructores
+
+ public Autorizacion( DateTime fechaSolicitud )
+ {
+ #warning Ver cómo manejar los códigos con DB4O
+ this.FechaSolicitud = fechaSolicitud;
+ }
+
+ #endregion Constructores
+
+ #region Métodos Públicos
+
+ public abstract Autorizacion.Estado getEstado( DateTime fecha );
+
+ public Autorizacion.Estado getEstado( )
+ {
+ return this.getEstado( DateTime.Now );
+ }
+
+ public void setResolucion( string fundamentosResolucion, float porcentajeCobertura )
+ {
+ this.FundamentosResolucion = fundamentosResolucion;
+ this.PorcentajeCobertura = porcentajeCobertura;
+ }
+
+ public override string ToString()\r
+ {\r
+ string strAut = string.Empty;\r
+\r
+ strAut += "Tipo: " + this.GetType().Name + "\n";\r
+ \r
+ System.Reflection.PropertyInfo[] properties = this.GetType().GetProperties();\r
+ foreach ( System.Reflection.PropertyInfo property in properties )\r
+ {\r
+ strAut += property.Name + " = " + property.GetValue( this, null ) + "\n";\r
+ }\r
+ \r
+ return strAut;\r
+ }\r
+
+
+ #endregion Métodos Públicos
+
+ #region Estados de una autorización
+
+ public enum Estado
+ {
+ Pendiente,
+ Aprobada,
+ Rechazada,
+ Realizada,
+ Vencida,
+ Invalida, //Corresponde a inconsistencia de datos en el sistema
+ Inexistente //La autorizacion todavía no existía en la fecha que se está consultando
+ }
+
+ #endregion Estados de una autorización
+ }
+
+ #endregion Clase Autorizacion
+
+ #region Clases derivadas de Autorizacion
+
+ public class AutorizacionManual : Autorizacion
+ {
+ #region Campos Privados
+
+ private string _observaciones;
+ private DateTime _fechaResolucion;
+
+ #endregion Campos Privados
+
+ #region Propiedades Públicas
+
+ public string Observaciones
+ {
+ get { return this._observaciones; }
+ set { this._observaciones = value; }
+ }
+
+ public DateTime FechaResolucion
+ {
+ get { return this._fechaResolucion; }
+ set { this._fechaResolucion = value; }
+ }
+
+ #endregion Propiedades Públicas
+
+ #region Constructores
+
+ public AutorizacionManual( DateTime fechaSolicitud )
+ : base( fechaSolicitud )
+ {
+ }
+
+ #endregion Constructores
+
+ #region Métodos Públicos
+
+ public override Autorizacion.Estado getEstado( DateTime fecha )
+ {
+ Autorizacion.Estado estado = Autorizacion.Estado.Invalida; //inicialización
+
+ //Evalúo Fecha SOLICITUD
+ if ( this.FechaSolicitud != DateTime.MinValue )
+ {
+ if ( this.FechaSolicitud <= fecha )
+ {
+ //Evalúo Fecha RESOLUCIÓN
+ if ( (this.FechaResolucion != DateTime.MinValue) && (this.FechaResolucion <= fecha) )
+ {
+ //Evalúo si está APROBADA
+ if ( this.Aprobada )
+ {
+ //Evalúo Fecha REALIZACIÓN
+ if ( (this.FechaRealizacion != DateTime.MinValue) && (this.FechaRealizacion <= fecha) )
+ {
+ estado = Autorizacion.Estado.Realizada;
+ }
+ else
+ {
+ //Aprobada pero NO realizada
+ //Evalúo Fecha VENCIMIENTO
+ if ( (this.FechaVencimiento != DateTime.MinValue) && (this.FechaVencimiento <= fecha) )
+ {
+ estado = Autorizacion.Estado.Vencida;
+ }
+ else
+ //Sin vencer
+ estado = Autorizacion.Estado.Aprobada;
+ }
+ }
+ else
+ //DESAPROBADA
+ {
+ if ( (this.FechaRealizacion != DateTime.MinValue) && (this.FechaRealizacion <= fecha) )
+ {
+ estado = Autorizacion.Estado.Invalida; //Desaprobada y Realizada!
+ }
+ else
+ estado = Autorizacion.Estado.Rechazada;
+ }
+ }
+ else
+ //No está resuelta
+ if ( (this.FechaRealizacion == DateTime.MinValue) || (this.FechaRealizacion > fecha) )
+ estado = Autorizacion.Estado.Pendiente; //no está resuelta, ni realizada en "fecha"
+ else
+ estado = Autorizacion.Estado.Invalida;
+ }
+ else
+ //FechaSolicitud > fecha
+ estado = Autorizacion.Estado.Inexistente;
+ }
+ else
+ //FechaSolicitud no seteada
+ estado = Autorizacion.Estado.Invalida;
+
+ return estado;
+ }
+
+ #endregion Métodos Públicos
+ }
+
+ public class AutorizacionAutomatica : Autorizacion
+ {
+ #region Constructores
+
+ public AutorizacionAutomatica( DateTime fechaSolicitud )
+ : base( fechaSolicitud )
+ {
+ }
+
+ #endregion Constructores
+
+ #region Métodos Públicos
+
+ public override Autorizacion.Estado getEstado( DateTime fecha )
+ {
+ Autorizacion.Estado estado = Autorizacion.Estado.Invalida; //inicialización
+
+ //Evalúo Fecha SOLICITUD
+ if ( this.FechaSolicitud != DateTime.MinValue )
+ {
+ if ( this.FechaSolicitud <= fecha )
+ {
+ //Evalúo si está APROBADA
+ if ( this.Aprobada )
+ {
+ //Evalúo Fecha REALIZACIÓN
+ if ( (this.FechaRealizacion != DateTime.MinValue) && (this.FechaRealizacion <= fecha) )
+ {
+ estado = Autorizacion.Estado.Realizada;
+ }
+ else
+ {
+ //Aprobada pero NO realizada
+ //Evalúo Fecha VENCIMIENTO
+ if ( (this.FechaVencimiento != DateTime.MinValue) && (this.FechaVencimiento <= fecha) )
+ {
+ estado = Autorizacion.Estado.Vencida;
+ }
+ else
+ //Sin vencer
+ estado = Autorizacion.Estado.Aprobada;
+ }
+ }
+ else
+ //DESAPROBADA
+ {
+ if ( (this.FechaRealizacion != DateTime.MinValue) && (this.FechaRealizacion <= fecha) )
+ {
+ estado = Autorizacion.Estado.Invalida; //Desaprobada y Realizada!
+ }
+ else
+ estado = Autorizacion.Estado.Rechazada;
+ }
+ }
+ else
+ //FechaSolicitud > fecha
+ estado = Autorizacion.Estado.Inexistente;
+ }
+ else
+ //FechaSolicitud no seteada
+ estado = Autorizacion.Estado.Invalida;
+
+ return estado;
+ }
+
+ #endregion Métodos Públicos
+ }
+
+ #endregion Clases derivadas de Autorizacion
+ }