]> git.llucax.com Git - z.facultad/75.10/miklolife.git/blob - demo/src/Dominio/Autorizacion.cs
* Saco el feo uso del boolean testing y le agrego pasaje por parametros
[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( DateTime fechaSolicitud )
88                         {
89                                 #warning Ver cómo manejar los códigos con DB4O
90                                 this.FechaSolicitud = fechaSolicitud;
91                         }
92
93                         #endregion Constructores
94
95                         #region Métodos Públicos
96
97                         public abstract Autorizacion.Estado getEstado( DateTime fecha );
98
99                         public Autorizacion.Estado getEstado( )
100                         {
101                                 return this.getEstado( DateTime.Now );
102                         }
103
104                         public void setResolucion( string fundamentosResolucion, float porcentajeCobertura )
105                         {
106                                 this.FundamentosResolucion = fundamentosResolucion;
107                                 this.PorcentajeCobertura = porcentajeCobertura;
108                         }
109                         
110                         public override string ToString()\r
111                         {\r
112                                 string strAut = string.Empty;\r
113 \r
114                                 strAut += "Tipo: " + this.GetType().Name + "\n";\r
115                                 \r
116                                 System.Reflection.PropertyInfo[] properties = this.GetType().GetProperties();\r
117                                 foreach ( System.Reflection.PropertyInfo property in properties )\r
118                                 {\r
119                                         strAut += property.Name + " = " + property.GetValue( this, null ) + "\n";\r
120                                 }\r
121                         \r
122                                 return strAut;\r
123                         }\r
124
125
126                         #endregion Métodos Públicos
127
128                         #region Estados de una autorización
129                         
130                         public enum Estado
131                         {
132                                 Pendiente,
133                                 Aprobada,
134                                 Rechazada,
135                                 Realizada,
136                                 Vencida,
137                                 Invalida,       //Corresponde a inconsistencia de datos en el sistema
138                                 Inexistente //La autorizacion todavía no existía en la fecha que se está consultando
139                         }
140
141                         #endregion Estados de una autorización
142                 }
143
144                 #endregion Clase Autorizacion
145
146                 #region Clases derivadas de Autorizacion
147
148                 public class AutorizacionManual : Autorizacion
149                 {
150                         #region Campos Privados
151                         
152                         private string _observaciones;
153                         private DateTime _fechaResolucion;
154                         
155                         #endregion Campos Privados
156
157                         #region Propiedades Públicas
158                         
159                         public string Observaciones
160                         {
161                                 get { return this._observaciones; }
162                                 set { this._observaciones = value; }
163                         }
164
165                         public DateTime FechaResolucion
166                         {
167                                 get { return this._fechaResolucion; }
168                                 set { this._fechaResolucion = value; }
169                         }
170
171                         #endregion Propiedades Públicas
172
173                         #region Constructores
174
175                         public AutorizacionManual( DateTime fechaSolicitud )
176                                 : base( fechaSolicitud )
177                         {
178                         }
179
180                         #endregion Constructores
181
182                         #region Métodos Públicos
183                         
184                         public override Autorizacion.Estado getEstado( DateTime fecha )
185                         {
186                                 Autorizacion.Estado estado = Autorizacion.Estado.Invalida; //inicialización
187
188                                 //Evalúo Fecha SOLICITUD
189                                 if ( this.FechaSolicitud != DateTime.MinValue )
190                                 {
191                                         if ( this.FechaSolicitud <= fecha )
192                                         {
193                                                 //Evalúo Fecha RESOLUCIÓN
194                                                 if ( (this.FechaResolucion != DateTime.MinValue) && (this.FechaResolucion <= fecha) )
195                                                 {
196                                                         //Evalúo si está APROBADA
197                                                         if ( this.Aprobada )
198                                                         {
199                                                                 //Evalúo Fecha REALIZACIÓN
200                                                                 if ( (this.FechaRealizacion != DateTime.MinValue) && (this.FechaRealizacion <= fecha) )
201                                                                 {
202                                                                         estado = Autorizacion.Estado.Realizada;
203                                                                 }
204                                                                 else
205                                                                 {
206                                                                         //Aprobada pero NO realizada
207                                                                         //Evalúo Fecha VENCIMIENTO
208                                                                         if ( (this.FechaVencimiento != DateTime.MinValue) && (this.FechaVencimiento <= fecha) )
209                                                                         {
210                                                                                 estado = Autorizacion.Estado.Vencida;
211                                                                         }
212                                                                         else
213                                                                                 //Sin vencer
214                                                                                 estado = Autorizacion.Estado.Aprobada;
215                                                                 }
216                                                         }
217                                                         else
218                                                                 //DESAPROBADA
219                                                         {
220                                                                 if ( (this.FechaRealizacion != DateTime.MinValue) && (this.FechaRealizacion <= fecha) )
221                                                                 {
222                                                                         estado = Autorizacion.Estado.Invalida; //Desaprobada y Realizada!
223                                                                 }
224                                                                 else
225                                                                         estado = Autorizacion.Estado.Rechazada;
226                                                         }
227                                                 }
228                                                 else
229                                                         //No está resuelta
230                                                         if ( (this.FechaRealizacion == DateTime.MinValue) || (this.FechaRealizacion > fecha) )
231                                                                 estado = Autorizacion.Estado.Pendiente; //no está resuelta, ni realizada en "fecha"
232                                                         else 
233                                                                 estado = Autorizacion.Estado.Invalida;
234                                         }
235                                         else
236                                                 //FechaSolicitud > fecha
237                                                 estado = Autorizacion.Estado.Inexistente;
238                                 }
239                                 else
240                                         //FechaSolicitud no seteada
241                                         estado = Autorizacion.Estado.Invalida;
242
243                                 return estado;
244                         }
245
246                         #endregion Métodos Públicos
247                 }
248
249                 public class AutorizacionAutomatica : Autorizacion
250                 {
251                         #region Constructores
252
253                         public AutorizacionAutomatica( DateTime fechaSolicitud )
254                                 : base( fechaSolicitud )
255                         {
256                         }
257
258                         #endregion Constructores
259
260                         #region Métodos Públicos
261
262                         public override Autorizacion.Estado getEstado( DateTime fecha )
263                         {
264                                 Autorizacion.Estado estado = Autorizacion.Estado.Invalida; //inicialización
265
266                                 //Evalúo Fecha SOLICITUD
267                                 if ( this.FechaSolicitud != DateTime.MinValue )
268                                 {
269                                         if ( this.FechaSolicitud <= fecha )
270                                         {
271                                                 //Evalúo si está APROBADA
272                                                 if ( this.Aprobada )
273                                                 {
274                                                         //Evalúo Fecha REALIZACIÓN
275                                                         if ( (this.FechaRealizacion != DateTime.MinValue) && (this.FechaRealizacion <= fecha) )
276                                                         {
277                                                                 estado = Autorizacion.Estado.Realizada;
278                                                         }
279                                                         else
280                                                         {
281                                                                 //Aprobada pero NO realizada
282                                                                 //Evalúo Fecha VENCIMIENTO
283                                                                 if ( (this.FechaVencimiento != DateTime.MinValue) && (this.FechaVencimiento <= fecha) )
284                                                                 {
285                                                                         estado = Autorizacion.Estado.Vencida;
286                                                                 }
287                                                                 else
288                                                                         //Sin vencer
289                                                                         estado = Autorizacion.Estado.Aprobada;
290                                                         }
291                                                 }
292                                                 else
293                                                         //DESAPROBADA
294                                                 {
295                                                         if ( (this.FechaRealizacion != DateTime.MinValue) && (this.FechaRealizacion <= fecha) )
296                                                         {
297                                                                 estado = Autorizacion.Estado.Invalida; //Desaprobada y Realizada!
298                                                         }
299                                                         else
300                                                                 estado = Autorizacion.Estado.Rechazada;
301                                                 }
302                                         }
303                                         else
304                                                 //FechaSolicitud > fecha
305                                                 estado = Autorizacion.Estado.Inexistente;
306                                 }
307                                 else
308                                         //FechaSolicitud no seteada
309                                         estado = Autorizacion.Estado.Invalida;
310
311                                 return estado;
312                         }
313
314                         #endregion Métodos Públicos
315                 }
316
317                 #endregion Clases derivadas de Autorizacion
318         }
319 }
320