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