]> git.llucax.com Git - z.facultad/75.10/miklolife.git/blob - demo/src/Dominio/Autorizacion.cs
Implementacion del MEGA Metodo Super estrella mundialmente conocido como getEstado().
[z.facultad/75.10/miklolife.git] / demo / src / Dominio / Autorizacion.cs
1
2 namespace Dominio 
3 {
4         namespace Autorizaciones 
5         {
6                 using System;
7                 using Dominio.Planes;
8
9                 #region Clase Autorizacion
10
11                 public abstract class Autorizacion
12                 {
13                         #region Campos privados
14                         
15                         private int _codigo = int.MinValue;
16                         private float _porcentajeCobertura = 0;
17                         private DateTime _fechaSolicitud = DateTime.MinValue;
18                         private DateTime _fechaRealizacion = DateTime.MinValue;
19                         private DateTime _fechaVencimiento = DateTime.MinValue;
20                         private bool _aprobada = false;
21                         private string _fundamentosResolucion = string.Empty;
22                         private Prestador _prestador = null;
23                         private Prestacion _prestacion = null;
24                         
25                         #endregion Campos privados
26
27                         #region Propiedades Públicas
28
29                         public int Codigo
30                         {
31                                 get { return this._codigo; }
32                                 set { this._codigo = value; }
33                         }
34
35                         public float PorcentajeCobertura
36                         {
37                                 get { return this._porcentajeCobertura; }
38                                 set { this._porcentajeCobertura = value; }
39                         }
40
41                         public DateTime FechaSolicitud
42                         {
43                                 get { return this._fechaSolicitud; }
44                                 set { this._fechaSolicitud = value; }
45                         }
46
47                         public DateTime FechaRealizacion
48                         {
49                                 get { return this._fechaRealizacion; }
50                                 set { this._fechaRealizacion = value; }
51                         }
52
53                         public DateTime FechaVencimiento
54                         {
55                                 get { return this._fechaVencimiento; }
56                                 set { this._fechaVencimiento = value; }
57                         }
58
59                         public bool Aprobada
60                         {
61                                 get { return this._aprobada; }
62                                 set { this._aprobada = value; }
63                         }
64
65                         public string FundamentosResolucion
66                         {
67                                 get { return this._fundamentosResolucion; }
68                                 set { this._fundamentosResolucion = value; }
69                         }
70
71                         public Prestador Prestador
72                         {
73                                 get { return this._prestador; }
74                                 set { this._prestador = value; }
75                         }
76
77                         public Prestacion Prestacion
78                         {
79                                 get { return this._prestacion; }
80                                 set { this._prestacion = value; }
81                         }       
82
83                         #endregion Propiedades Públicas
84
85                         #region Constructores
86
87                         public Autorizacion( int codigo, DateTime fechaSolicitud )
88                         {
89                                 #warning Ver cómo manejar los códigos con DB4O
90                                 this.Codigo = codigo;
91                                 this.FechaSolicitud = fechaSolicitud;
92                         }
93
94                         #endregion Constructores
95
96                         #region Métodos Públicos
97
98                         public abstract Autorizacion.Estado getEstado( DateTime fecha );
99
100                         public Autorizacion.Estado getEstado( )
101                         {
102                                 return this.getEstado( DateTime.Now );
103                         }
104
105                         public void setResolucion( string fundamentosResolucion, float porcentajeCobertura )
106                         {
107                         }
108                         
109                         #endregion Métodos Públicos
110
111                         #region Estados de una autorización
112                         
113                         public enum Estado
114                         {
115                                 Pendiente,
116                                 Aprobada,
117                                 Rechazada,
118                                 Realizada,
119                                 Vencida,
120                                 Invalida,       //Corresponde a inconsistencia de datos en el sistema
121                                 Inexistente //La autorizacion todavía no existía en la fecha que se está consultando
122                         }
123
124                         #endregion Estados de una autorización
125                 }
126
127                 #endregion Clase Autorizacion
128
129                 #region Clases derivadas de Autorizacion
130
131                 public class AutorizacionManual : Autorizacion
132                 {
133                         #region Campos Privados
134                         
135                         private string _observaciones;
136                         private DateTime _fechaResolucion;
137                         
138                         #endregion Campos Privados
139
140                         #region Propiedades Públicas
141                         
142                         public string Observaciones
143                         {
144                                 get { return this._observaciones; }
145                                 set { this._observaciones = value; }
146                         }
147
148                         public DateTime FechaResolucion
149                         {
150                                 get { return this._fechaResolucion; }
151                                 set { this._fechaResolucion = value; }
152                         }
153
154                         #endregion Propiedades Públicas
155
156                         #region Constructores
157
158                         public AutorizacionManual( int codigo, DateTime fechaSolicitud )
159                                 : base( codigo, fechaSolicitud )
160                         {
161                         }
162
163                         #endregion Constructores
164
165                         #region Métodos Públicos
166                         
167                         public override Autorizacion.Estado getEstado( DateTime fecha )
168                         {
169                                 Autorizacion.Estado estado = Autorizacion.Estado.Invalida; //inicialización
170
171                                 //Evalúo Fecha SOLICITUD
172                                 if ( this.FechaSolicitud != DateTime.MinValue )
173                                 {
174                                         if ( this.FechaSolicitud <= fecha )
175                                         {
176                                                 //Evalúo Fecha RESOLUCIÓN
177                                                 if ( (this.FechaResolucion != DateTime.MinValue) && (this.FechaResolucion <= fecha) )
178                                                 {
179                                                         //Evalúo si está APROBADA
180                                                         if ( this.Aprobada )
181                                                         {
182                                                                 //Evalúo Fecha REALIZACIÓN
183                                                                 if ( (this.FechaRealizacion != DateTime.MinValue) && (this.FechaRealizacion <= fecha) )
184                                                                 {
185                                                                         estado = Autorizacion.Estado.Realizada;
186                                                                 }
187                                                                 else
188                                                                 {
189                                                                         //Aprobada pero NO realizada
190                                                                         //Evalúo Fecha VENCIMIENTO
191                                                                         if ( (this.FechaVencimiento != DateTime.MinValue) && (this.FechaVencimiento <= fecha) )
192                                                                         {
193                                                                                 estado = Autorizacion.Estado.Vencida;
194                                                                         }
195                                                                         else
196                                                                                 //Sin vencer
197                                                                                 estado = Autorizacion.Estado.Aprobada;
198                                                                 }
199                                                         }
200                                                         else
201                                                                 //DESAPROBADA
202                                                         {
203                                                                 if ( (this.FechaRealizacion != DateTime.MinValue) && (this.FechaRealizacion <= fecha) )
204                                                                 {
205                                                                         estado = Autorizacion.Estado.Invalida; //Desaprobada y Realizada!
206                                                                 }
207                                                                 else
208                                                                         estado = Autorizacion.Estado.Rechazada;
209                                                         }
210                                                 }
211                                                 else
212                                                         //No está resuelta
213                                                         if ( (this.FechaRealizacion == DateTime.MinValue) || (this.FechaRealizacion > fecha) )
214                                                                 estado = Autorizacion.Estado.Pendiente; //no está resuelta, ni realizada en "fecha"
215                                                         else 
216                                                                 estado = Autorizacion.Estado.Invalida;
217                                         }
218                                         else
219                                                 //FechaSolicitud > fecha
220                                                 estado = Autorizacion.Estado.Inexistente;
221                                 }
222                                 else
223                                         //FechaSolicitud no seteada
224                                         estado = Autorizacion.Estado.Invalida;
225
226                                 return estado;
227                         }
228
229                         #endregion Métodos Públicos
230                 }
231
232                 public class AutorizacionAutomatica : Autorizacion
233                 {
234                         #region Constructores
235
236                         public AutorizacionAutomatica( int codigo, DateTime fechaSolicitud )
237                                 : base( codigo, fechaSolicitud )
238                         {
239                         }
240
241                         #endregion Constructores
242
243                         #region Métodos Públicos
244
245                         public override Autorizacion.Estado getEstado( DateTime fecha )
246                         {
247                                 Autorizacion.Estado estado = Autorizacion.Estado.Invalida; //inicialización
248
249                                 //Evalúo Fecha SOLICITUD
250                                 if ( this.FechaSolicitud != DateTime.MinValue )
251                                 {
252                                         if ( this.FechaSolicitud <= fecha )
253                                         {
254                                                 //Evalúo si está APROBADA
255                                                 if ( this.Aprobada )
256                                                 {
257                                                         //Evalúo Fecha REALIZACIÓN
258                                                         if ( (this.FechaRealizacion != DateTime.MinValue) && (this.FechaRealizacion <= fecha) )
259                                                         {
260                                                                 estado = Autorizacion.Estado.Realizada;
261                                                         }
262                                                         else
263                                                         {
264                                                                 //Aprobada pero NO realizada
265                                                                 //Evalúo Fecha VENCIMIENTO
266                                                                 if ( (this.FechaVencimiento != DateTime.MinValue) && (this.FechaVencimiento <= fecha) )
267                                                                 {
268                                                                         estado = Autorizacion.Estado.Vencida;
269                                                                 }
270                                                                 else
271                                                                         //Sin vencer
272                                                                         estado = Autorizacion.Estado.Aprobada;
273                                                         }
274                                                 }
275                                                 else
276                                                         //DESAPROBADA
277                                                 {
278                                                         if ( (this.FechaRealizacion != DateTime.MinValue) && (this.FechaRealizacion <= fecha) )
279                                                         {
280                                                                 estado = Autorizacion.Estado.Invalida; //Desaprobada y Realizada!
281                                                         }
282                                                         else
283                                                                 estado = Autorizacion.Estado.Rechazada;
284                                                 }
285                                         }
286                                         else
287                                                 //FechaSolicitud > fecha
288                                                 estado = Autorizacion.Estado.Inexistente;
289                                 }
290                                 else
291                                         //FechaSolicitud no seteada
292                                         estado = Autorizacion.Estado.Invalida;
293
294                                 return estado;
295                         }
296
297                         #endregion Métodos Públicos
298                 }
299
300                 #endregion Clases derivadas de Autorizacion
301         }
302 }
303