]> git.llucax.com Git - z.facultad/75.10/miklolife.git/blob - demo/src/Controlador/AutorizacionController.cs
- Valida contra el schema
[z.facultad/75.10/miklolife.git] / demo / src / Controlador / AutorizacionController.cs
1 \r
2 #region Usings\r
3 \r
4 using System;\r
5 using System.Collections;\r
6 \r
7 using Dominio;\r
8 using Dominio.Autorizaciones;\r
9 using Dominio.Afiliados;\r
10 \r
11
12 using com.db4o;
13 using com.db4o.query;
14
15 #endregion Usings\r
16 \r
17 namespace Controlador\r
18 {\r
19         /// <summary>\r
20         /// Clase controlador que lleva a cabo los CU de "Pedir autorizacion automatica",\r
21         /// "Pedir autorizacion manual" y actualizar "autorizacion manual"\r
22         /// </summary>\r
23         public class AutorizacionController : Controller\r
24         {\r
25                 #region Constructores\r
26                 \r
27                 public AutorizacionController(DateTime fechaSolicitud): base()\r
28                 {\r
29 \r
30                 }\r
31 \r
32                 #endregion Constructores\r
33 \r
34                 #region Campos Privados \r
35 \r
36                 private Autorizacion _currentAutorizacion = null ;              \r
37                 \r
38                 #endregion Campos Privados\r
39 \r
40                 #region Propiedades privadas\r
41 \r
42                 public Autorizacion CurrentAutorizacion\r
43                 {
44                         get { return _currentAutorizacion; }                    
45                 }\r
46                 #endregion Propiedades privadas\r
47 \r
48                 #region Métodos Públicos\r
49                 \r
50                 /// <summary>\r
51                 /// Guarda un pedido de autorizacion manual.\r
52                 /// </summary>\r
53                 public bool guardarAutorizacionManual(String codPrestacion, String cuitPrestador\r
54                         , int codAfiliado, String observaciones)\r
55                 {\r
56                         bool codigosOk = true;\r
57                                 \r
58                         AutorizacionManual aut = new AutorizacionManual(DateTime.Now);\r
59                         \r
60                         #region Se insancia prestador, prestacion y afiliado, y se asocia a aut\r
61                         //Seteo prestacion\r
62                         \r
63                         ArrayList al = this.ObjectSetToArrayList( this.Db.get( new Prestacion(codPrestacion) ) );\r
64                         if (null==(aut.Prestacion = ( (al.Count == 0)? null : al[0] ) as Prestacion))\r
65                                 codigosOk=false;\r
66 \r
67                         //Seteo prestador\r
68                         al = this.ObjectSetToArrayList( this.Db.get( new Prestador(cuitPrestador) ) );\r
69                         if (null==(aut.Prestador = ( (al.Count == 0)? null : al[0] ) as Prestador))\r
70                                 codigosOk=false;\r
71 \r
72                                 \r
73 \r
74                         //Seteo afiliado\r
75                         al = this.ObjectSetToArrayList( this.Db.get( new Afiliado(codAfiliado) ) );\r
76                         if (null==(aut.Afiliado = ( (al.Count == 0)? null : al[0] ) as Afiliado))\r
77                                 codigosOk=false;\r
78         \r
79                         #endregion Se insancia prestador, prestacion y afiliado, y se asocia a aut\r
80                         //Seteo fecha de vencimiento como dentro de 60 días\r
81                         aut.FechaVencimiento = DateTime.Now.AddDays(60);\r
82 \r
83 \r
84                         aut.Observaciones = observaciones;                      \r
85 \r
86                         //Signo prox codigo para autorizacion\r
87                         AutoIncrementable c = new AutoIncrementable ();\r
88                         using (c)\r
89                         {\r
90                                 aut.Codigo = c.NextAutorizacion();\r
91                         }\r
92 \r
93                         if (codigosOk) this.Db.set(aut);\r
94 \r
95                         return codigosOk;                       \r
96                 \r
97                 }\r
98 \r
99                 //PRE: No hay autorizaciones manuales y automaticas con mismo codigo!!\r
100                 public Autorizacion obtener(int codigo)\r
101                 {                       \r
102                         //Busco manual\r
103                         ArrayList al = this.ObjectSetToArrayList( this.Db.get( new AutorizacionManual(codigo) ) );\r
104                         Autorizacion a = ((al.Count == 0)? null : al[0] ) as Autorizacion;\r
105                         \r
106                         if (null==a)\r
107                         //Busco automatica, si no hay manual para ese codigo\r
108                         {\r
109                                 al = this.ObjectSetToArrayList( this.Db.get( new AutorizacionAutomatica(codigo) ) );\r
110                                 a = ((al.Count == 0)? null : al[0] ) as Autorizacion;\r
111                         }\r
112                         return a;\r
113                 }\r
114 \r
115                 public float evaluarAutorizacionAutomatica(String cuitPrestador, String codPrestacion, int codAfiliado, out int codAutorizacion)
116                 {
117
118                         bool codigosOk = true;\r
119                         float porcentajeDeCobertura = 0;\r
120                         string fundamentosResolucion = "Todo ok";\r
121                         \r
122                         AutorizacionAutomatica aut = new AutorizacionAutomatica(DateTime.Now);\r
123                         \r
124                         #region Se insancia prestador, prestacion y afiliado, y se asocia a aut\r
125                         //Seteo prestacion\r
126                         \r
127                         ArrayList al = this.ObjectSetToArrayList( this.Db.get( new Prestacion(codPrestacion) ) );\r
128                         if (null==(aut.Prestacion = ( (al.Count == 0)? null : al[0] ) as Prestacion))\r
129                                 codigosOk=false;\r
130 \r
131                         //Seteo prestador\r
132                         al = this.ObjectSetToArrayList( this.Db.get( new Prestador(cuitPrestador) ) );\r
133                         if (null==(aut.Prestador = ( (al.Count == 0)? null : al[0] ) as Prestador))\r
134                                 codigosOk=false;\r
135 \r
136                                 \r
137 \r
138                         //Seteo afiliado\r
139                         al = this.ObjectSetToArrayList( this.Db.get( new Afiliado(codAfiliado) ) );\r
140                         if (null==(aut.Afiliado = ( (al.Count == 0)? null : al[0] ) as Afiliado))\r
141                                 codigosOk=false;\r
142         \r
143                         #endregion Se insancia prestador, prestacion y afiliado, y se asocia a aut\r
144                         //Seteo fecha de vencimiento como dentro de 60 días\r
145                         \r
146 \r
147                         //Seteo fecha de vencimiento como dentro de 60 días\r
148                         aut.FechaVencimiento = DateTime.Now.AddDays(60);\r
149 \r
150                         try\r
151                         {
152                                 porcentajeDeCobertura = aut.Afiliado.VerificarCobertura(codPrestacion);
153                         }\r
154                         catch\r
155                         {
156                                 #warning verificar cobertura deberia tirar excepcion si explota, o se rechaza
157                                 //TODO Asignar motivo de rechazo a fundamentosResolucion
158                         }
159                         finally\r
160                         {
161                                 //Si porcentaje es 0, se registra rechazada
162                                 aut.setResolucion(fundamentosResolucion, porcentajeDeCobertura);
163                                 if (codigosOk) \r
164                                 {\r
165                                         this.Db.set(aut);\r
166                                         this._currentAutorizacion=aut;\r
167                                 }\r
168                                 #warning deberia obtener codigo de autorizacion ACA y devolverlo\r
169                                 codAutorizacion = 131313; //TODO SETEAR CODIGO BIEN!!\r
170                                 \r
171                                                 
172                         }
173                         return porcentajeDeCobertura;
174                 }
175 \r
176                 public ArrayList obtenerAutorizacionesPendientes()\r
177                 {                               
178                         Query query = Db.query();
179                         query.constrain(typeof(AutorizacionManual));
180                         query.descend("_fechaRealizacion").constrain(DateTime.MinValue);
181
182                         ObjectSet result = query.execute ();
183
184                         return ObjectSetToArrayList (result);
185                 }
186
187                 public ArrayList obtenerAutorizacionesPorAfiliado (int codafiliado)
188                 {       
189                         Afiliado a = new Afiliado (codafiliado);
190         
191                         Query query = Db.query();
192                         query.constrain(typeof(Autorizacion));
193                         query.descend("_afiliado").constrain(a);
194
195                         ObjectSet result = query.execute ();
196
197                         return ObjectSetToArrayList (result);
198                 }
199                 //PRE: El codigo solicitado tiene que ser de una autorizacion manual.\r
200                 public bool  setResolucionAutorizacionManual(int codAutorizacion, \r
201                         String fundamentosResolucion, float porcentaje)\r
202                 {\r
203                         AutorizacionManual a = this.obtener(codAutorizacion) as AutorizacionManual;\r
204                         if (null==a) return false;\r
205                         a.Aprobada = (porcentaje==0)?false:true;\r
206                         a.PorcentajeCobertura = porcentaje;\r
207                         a.FundamentosResolucion = fundamentosResolucion;\r
208                         this.Db.set(a);\r
209 \r
210                         return true;\r
211                 }\r
212 \r
213 \r
214                 #endregion Métodos Públicos\r
215 \r
216                 #region Métodos Privados\r
217 \r
218                 /// <summary>\r
219                 /// Procesa las lineas del reporte una vez que el mismo ha sido validado:\r
220                 /// Si está aprobada, la registra en el sistema y la agrega al reporte de Consumo de los Afiliados. \r
221                 /// A todas las lineas las agrega al Informe de Aprobaciones/rechazos de Prestaciones Realizadas.\r
222                 /// </summary>\r
223                 /// <param name="ip">Reporte del cual se porcesarán las lineas</param>\r
224                 \r
225                 private void InsertarDatosNecesarios()\r
226                 {\r
227                         return;
228                         //PRESTADOR\r
229                         Prestador pre = new Prestador();\r
230                         pre.Cuit = "11-11111111-1";\r
231                         ObjectSet os = this.Db.get( pre );\r
232                         if ( (os == null) || (os.size() == 0) )\r
233                         {\r
234                                 Dominio.SDireccion dir;\r
235                                 dir.Calle = "Gaona"; dir.CodigoPostal = "AB1504"; dir.Departamento = "";\r
236                                 dir.Numero = 1234; dir.Piso = 0;  dir.Provincia = Dominio.EProvincia.CAPITAL_FEDERAL;\r
237                                 dir.Telefono = "5056-4567";\r
238                                 pre.Direccion = dir;\r
239                                 pre.Email = @"roberto@sancamilo.com";\r
240                                 pre.FechaBaja = DateTime.MinValue;\r
241                                 pre.Nombre = "Clinica San Camilo";\r
242                                 pre.Password = "camilo";\r
243                                 pre.Zona = new SZona( "Caballito", "Zona de Caballito" );\r
244                                 this.Db.set( pre );\r
245                         }\r
246 \r
247                         Prestacion p = new Prestacion();\r
248                         p.Codigo = "mierda" ;\r
249 \r
250                         Categoria c = new Categoria();\r
251                         c.Codigo=10;\r
252                         c.Nombre="categoria 1";\r
253                 \r
254                         p.Categoria = c;\r
255                         p.Nombre= "hospital de clinicas";\r
256                         this.Db.set(p);\r
257 \r
258                         Afiliado a = new Afiliado(69);\r
259                         a.Apellido = "apellido";\r
260                         a.EMail = "afiliado@aaa.com";\r
261 \r
262                         this.Db.set(a);\r
263                         \r
264 \r
265                         //AUTORIZACIONES\r
266                         /*AutorizacionAutomatica a = new AutorizacionAutomatica();\r
267                         a.Codigo = 123;\r
268                         os = this.Db.get( a );\r
269                         if ( (os == null) || (os.size() == 0) )\r
270                         {\r
271                                 a.Afiliado = new Dominio.Afiliados.Afiliado( 987 );\r
272                                 a.Prestacion = new Prestacion( "B01AC06" );\r
273                                 a.Prestador = pre;\r
274                                 a.FechaSolicitud = new DateTime( 2005, 5, 20 ); // 20 de mayo\r
275                                 a.FechaRealizacion = DateTime.MinValue;\r
276                                 a.FechaVencimiento = a.FechaSolicitud.AddMonths( 2 ); // 20 de julio, aprox\r
277                                 a.Aprobada = true;\r
278                                 a.PorcentajeCobertura = 12.5F;\r
279                                 this.Db.set( a );\r
280                         }*/\r
281                 }\r
282 \r
283                 #endregion Métodos Privados\r
284 \r
285         }\r
286 }\r