]> git.llucax.com Git - z.facultad/75.10/miklolife.git/blob - demo/src/Reportes/LineaInfoPrestacionesReport.cs
Bocha de cosas difíciles y largas de explicar :P
[z.facultad/75.10/miklolife.git] / demo / src / Reportes / LineaInfoPrestacionesReport.cs
1 using System;\r
2 using System.Collections;\r
3 using com.db4o;\r
4 using Dominio.Afiliados;\r
5 using Dominio.Autorizaciones;\r
6 //using Dominio.Planes;\r
7 \r
8 namespace Reportes\r
9 {\r
10         /// <summary>\r
11         /// Clase que representa una linea del Informe de Prestaciones Realizadas enviado por el \r
12         /// Prestador.\r
13         /// </summary>\r
14         public class LineaInfoPrestacionesReport\r
15         {\r
16                 #region Constructores\r
17 \r
18                 public LineaInfoPrestacionesReport( int codAut, string tipoAut, int codAfiliado, string codPrestacion,\r
19                         DateTime fechaRealizacion, float porcentajeCobertura )\r
20                 {\r
21                         this._codigoAutorizacion = codAut;\r
22                         this._tipoAutorizacion = tipoAut;\r
23                         this._codigoAfiliado = codAfiliado;\r
24                         this._codigoPrestacion = codPrestacion;\r
25                         this._fechaRealizacion = fechaRealizacion;\r
26                         this._porcentajeCobertura = porcentajeCobertura;\r
27                 }\r
28 \r
29                 #endregion Constructores\r
30 \r
31                 #region Campos Privados\r
32 \r
33                 private bool _aprobada = false;\r
34                 private bool _existeAutorizacion = false;\r
35                 private string _motivoRechazo = string.Empty;\r
36 \r
37                 private int _codigoAutorizacion;\r
38                 private string _tipoAutorizacion;\r
39                 private int _codigoAfiliado;\r
40                 private string _codigoPrestacion;\r
41                 private DateTime _fechaRealizacion;\r
42                 private float _porcentajeCobertura;\r
43 \r
44                 #endregion Campos Privados\r
45 \r
46                 #region Propiedades Públicas\r
47                 \r
48                 /// <summary>\r
49                 /// Determina si la linea fue aprobada por el método Validar()\r
50                 /// Sólo tiene sentido si fue ejecutado Validar()\r
51                 /// </summary>\r
52                 public bool Aprobada\r
53                 {\r
54                         get { return this._aprobada; }\r
55                 }\r
56 \r
57                 public bool ExisteAutorizacion\r
58                 {\r
59                         get { return this._existeAutorizacion; }\r
60                 }\r
61 \r
62                 /// <summary>\r
63                 /// Motivo por el cual se rechazó la línea, si es que se rechazó.\r
64                 /// En caso de haberse aprobado, debe estar vacío\r
65                 /// </summary>\r
66                 public string MotivoRechazo\r
67                 {\r
68                         get { return this._motivoRechazo; }\r
69                 }\r
70 \r
71                 public int CodigoAutorizacion\r
72                 {\r
73                         get { return this._codigoAutorizacion; }\r
74                 }\r
75 \r
76                 public string TipoAutorizacion\r
77                 {\r
78                         get { return this._tipoAutorizacion; }\r
79                 }\r
80 \r
81                 public int CodigoAfiliado\r
82                 {\r
83                         get { return this._codigoAfiliado; }\r
84                 }\r
85 \r
86                 public string CodigoPrestacion\r
87                 {\r
88                         get { return this._codigoPrestacion; }\r
89                 }\r
90 \r
91                 public DateTime FechaRealizacion\r
92                 {\r
93                         get { return this._fechaRealizacion; }\r
94                 }\r
95 \r
96                 public float PorcentajeCobertura\r
97                 {\r
98                         get { return this._porcentajeCobertura; }\r
99                 }\r
100 \r
101                 #endregion Propiedades Públicas\r
102 \r
103                 #region DB\r
104                 private com.db4o.ObjectContainer db = null;
105
106                 private ArrayList ObjectSetToArrayList (ObjectSet result)
107                 {
108                         ArrayList lst = new ArrayList ();
109                         Object s;
110                         if (result == null)
111                                 return lst;
112         
113                         while ((s = result.next ()) != null)    \r
114                         {
115                                 lst.Add (s);
116                         }
117                         return lst;
118                 }
119
120                 #endregion DB\r
121 \r
122                 #region Métodos Públicos\r
123 \r
124                 /// <summary>\r
125                 /// Valida la linea según las reglas de negocio (ver CU "Recibir y Cotejar")\r
126                 /// </summary>\r
127                 /// <returns>True si la linea es válida</returns>\r
128                 public bool Validar( Dominio.Autorizaciones.Prestador prestador )\r
129                 {       \r
130                         #region Chequeo de la autorización\r
131 \r
132                         Autorizacion aut = this.getAutorizacion( this.CodigoAutorizacion );\r
133                         if ( aut == null )\r
134                         {\r
135                                 this.MarcarRechazada( MensajeMotivoRechazo.AutorizacionInexistente );\r
136                                 this._existeAutorizacion = false;\r
137                                 return false;\r
138                         }\r
139                         else\r
140                         {\r
141                                 this._existeAutorizacion = true;\r
142 \r
143                                 if ( (aut.Prestador == null) || (aut.Prestador.Cuit != prestador.Cuit) )\r
144                                 {\r
145                                         this.MarcarRechazada( MensajeMotivoRechazo.AutorizacionPrestadorInvalido );\r
146                                         return false;\r
147                                 }\r
148 \r
149                                 if ( (aut.Prestacion == null) || (aut.Prestacion.Codigo != this.CodigoPrestacion) )\r
150                                 {\r
151                                         this.MarcarRechazada( MensajeMotivoRechazo.AutorizacionPrestacionInvalida );\r
152                                         return false;\r
153                                 }\r
154 \r
155                                 if ( aut.FechaRealizacion != DateTime.MinValue )\r
156                                 {\r
157                                         this.MarcarRechazada( MensajeMotivoRechazo.AutorizacionYaRealizada );\r
158                                         return false;\r
159                                 }\r
160                                 \r
161                                 if ( aut.getEstado(this.FechaRealizacion) != Autorizacion.Estado.Aprobada )\r
162                                 {\r
163                                         this.MarcarRechazada( MensajeMotivoRechazo.AutorizacionNoAprobada );\r
164                                         return false;\r
165                                 }\r
166 \r
167                                 if ( this.TipoAutorizacion.Trim() == "Manual" )\r
168                                 {\r
169                                         if ( aut.GetType() != typeof(AutorizacionManual) )\r
170                                         {\r
171                                                 this.MarcarRechazada( MensajeMotivoRechazo.AutorizacionTipoInvalido );\r
172                                                 return false;\r
173                                         }\r
174                                 }\r
175                                 else\r
176                                 {\r
177                                         if ( aut.GetType() != typeof(AutorizacionAutomatica) )\r
178                                         {\r
179                                                 this.MarcarRechazada( MensajeMotivoRechazo.AutorizacionTipoInvalido );\r
180                                                 return false;\r
181                                         }\r
182                                 }\r
183 \r
184                                 if ( aut.PorcentajeCobertura != this.PorcentajeCobertura )\r
185                                 {\r
186                                         this.MarcarRechazada( MensajeMotivoRechazo.AutorizacionPorcentajeInvalido );\r
187                                         return false;\r
188                                 }\r
189                         }\r
190 \r
191                         #endregion Chequeo de la autorización\r
192 \r
193                         #region Chequeo de Prestador\r
194                         if ( (prestador.FechaBaja != DateTime.MinValue) && (prestador.FechaBaja <= this.FechaRealizacion) )\r
195                         {\r
196                                 this.MarcarRechazada( MensajeMotivoRechazo.PrestadorDadoDeBaja );\r
197                                 return false;\r
198                         }\r
199                         #endregion Chequeo de Prestador\r
200 \r
201                         #region Chequeo del Afiliado\r
202                         Afiliado a = this.getAfiliado( this.CodigoAfiliado );\r
203                         if (a == null) \r
204                         {\r
205                                 this.MarcarRechazada( MensajeMotivoRechazo.AfiliadoInexistente );\r
206                                 return false;\r
207                         }\r
208                         else\r
209                                 if ( (a.FechaBaja != DateTime.MinValue) && (a.FechaBaja <= this.FechaRealizacion) )\r
210                                 {\r
211                                         this.MarcarRechazada( MensajeMotivoRechazo.AfiliadoDadoDeBaja );\r
212                                         return false;\r
213                                 }\r
214                         #endregion Chequeo del Afiliado\r
215         \r
216                         #region Chequeo de la prestación\r
217 \r
218                         Prestacion p = this.getPrestacion( this.CodigoPrestacion );\r
219                         if ( p == null )\r
220                         {\r
221                                 this.MarcarRechazada( MensajeMotivoRechazo.PrestacionInexistente );\r
222                                 return false;\r
223                         }\r
224                         else\r
225                         {\r
226                                 if ( (p.FechaBaja != DateTime.MinValue) && (p.FechaBaja <= this.FechaRealizacion) )\r
227                                 {\r
228                                         this.MarcarRechazada( MensajeMotivoRechazo.PrestacionDadaDeBaja );\r
229                                         return false;\r
230                                 }\r
231                         }\r
232 \r
233                         #endregion Chequeo de la prestación\r
234 \r
235                         this._aprobada = true;\r
236                         return true;\r
237                 }\r
238 \r
239                 #endregion Métodos Públicos\r
240 \r
241                 #region Métodos Privados\r
242 \r
243                 private Afiliado getAfiliado( int codigo )\r
244                 {\r
245                         this.db = com.db4o.Db4o.openFile("os.yap");\r
246                         ArrayList al = this.ObjectSetToArrayList( db.get( new Afiliado(this.CodigoAfiliado) ) );\r
247 \r
248                         Afiliado a = ( (al.Count == 0)? null : al[0] ) as Afiliado;\r
249                         this.db.close();\r
250                         this.db = null;\r
251 \r
252                         return a;\r
253                 }\r
254 \r
255                 private Prestacion getPrestacion( string codigo )\r
256                 {\r
257                         this.db = com.db4o.Db4o.openFile("os.yap");\r
258                         ArrayList al = this.ObjectSetToArrayList( db.get( new Prestacion(this.CodigoPrestacion) ) );\r
259 \r
260                         Prestacion p = ( (al.Count == 0)? null : al[0] ) as Prestacion;\r
261                         this.db.close();\r
262                         this.db = null;\r
263 \r
264                         return p;\r
265                 }\r
266 \r
267                 private Autorizacion getAutorizacion( int codigo )\r
268                 {\r
269                         this.db = com.db4o.Db4o.openFile("os.yap");\r
270                         \r
271                         ArrayList al = new ArrayList();\r
272 \r
273                         al = this.ObjectSetToArrayList( db.get( new AutorizacionManual(codigo) ) );\r
274                         Autorizacion a = ( (al.Count == 0)? null : al[0] ) as AutorizacionManual;\r
275 \r
276                         if ( a == null )\r
277                         {\r
278                                 al = this.ObjectSetToArrayList( db.get( new AutorizacionAutomatica(codigo) ) );\r
279                                 a = ( (al.Count == 0)? null : al[0] ) as AutorizacionAutomatica;\r
280                         }\r
281 \r
282                         this.db.close();\r
283                         this.db = null;\r
284 \r
285                         return a;\r
286                 }\r
287 \r
288                 private void MarcarRechazada( string motivo )\r
289                 {\r
290                         this._aprobada = false;\r
291                         this._motivoRechazo = motivo;\r
292                 }\r
293 \r
294                 #endregion Métodos Privados\r
295 \r
296         } //clase\r
297 \r
298         #region Motivos de rechazo\r
299 \r
300         public struct MensajeMotivoRechazo\r
301         {\r
302                 public static string PrestadorDadoDeBaja = "El prestador estaba dado de baja en la fecha de realización de la prestación informada por el prestador";\r
303                 public static string AfiliadoDadoDeBaja = "El afiliado estaba dado de baja en la fecha de realización de la prestación informada por el prestador";\r
304                 public static string AfiliadoInexistente = "El afiliado informado por el prestador no existe en el Sistema";\r
305                 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";\r
306                 public static string PrestacionInexistente = "La prestación informada por el prestador no existe en el Sistema";\r
307 \r
308                 public static string AutorizacionInexistente = "La autorizacion informada por el prestador no existe en el Sistema";\r
309                 public static string AutorizacionPrestadorInvalido = "La autorizacion informada por el prestador no esta relacionada, en el Sistema, con dicho prestador";\r
310                 public static string AutorizacionAfiliadoInvalido = "La autorizacion informada por el prestador no esta relacionada, en el Sistema, con el afiliado informado";\r
311                 public static string AutorizacionPrestacionInvalida = "La autorizacion informada por el prestador no esta relacionada, en el Sistema, con la prestacion informada";\r
312                 public static string AutorizacionYaRealizada = "La autorizacion informada por el prestador ya ha sido realizada, segun los datos del Sistema";\r
313                 public static string AutorizacionNoAprobada = "La autorizacion no estaba aprobada, segun los datos del Sistema, en la fecha de realizacion informada por el prestador";\r
314                 public static string AutorizacionTipoInvalido = "El tipo de autorizacion informado por el prestador, no coincide con el tipo de autorizacion en el Sistema";\r
315                 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";\r
316 \r
317         }\r
318 \r
319         #endregion Motivos de rechazo\r
320 \r
321 \r
322 }\r