]> git.llucax.com Git - z.facultad/75.10/miklolife.git/blob - demo/src/Reportes/InfoPrestacionesReport.cs
Bocha de cosas difíciles y largas de explicar :P
[z.facultad/75.10/miklolife.git] / demo / src / Reportes / InfoPrestacionesReport.cs
1 #region Usings\r
2 \r
3 using System;\r
4 using System.Collections;\r
5 using System.Xml;\r
6 using System.Xml.Schema;\r
7 using System.Globalization;\r
8 using System.IO;\r
9 using System.Configuration;\r
10 \r
11 using System.Reflection;\r
12 \r
13 #endregion Usings\r
14 \r
15 namespace Reportes\r
16 {\r
17         \r
18         /// <summary>\r
19         /// Clase que representa un archivo de Información de Prestaciones Realizadas enviado por el \r
20         /// Prestador.\r
21         /// </summary>\r
22         public class InfoPrestacionesReport\r
23         {\r
24                 #region Constructores\r
25 \r
26                 public InfoPrestacionesReport( string pathNombreArchivo )\r
27                 {\r
28                         this._pathArchivo = pathNombreArchivo;\r
29                 }\r
30 \r
31                 #endregion Constructores\r
32 \r
33                 #region Campos Privados\r
34 \r
35                 private string _pathArchivo = string.Empty;\r
36                 private string _cuitPrestador;\r
37                 private DateTime _fechaEnvio;\r
38 \r
39                 private LineaInfoPrestacionesReport[] _lineas = null;\r
40 \r
41                 #endregion Campos Privados\r
42 \r
43                 #region Propiedades Públicas\r
44                 \r
45                 public string PathArchivo\r
46                 {\r
47                         get { return this._pathArchivo; }\r
48                         set { this._pathArchivo = value; }\r
49                 }\r
50 \r
51                 public string CuitPrestador\r
52                 {\r
53                         get { return this._cuitPrestador; }\r
54                         set { this._cuitPrestador = value; }\r
55                 }\r
56 \r
57                 public DateTime FechaEnvio\r
58                 {\r
59                         get { return this._fechaEnvio; }\r
60                         set { this._fechaEnvio = value; }\r
61                 }\r
62 \r
63                 public LineaInfoPrestacionesReport[] Lineas\r
64                 {\r
65                         get { return this._lineas; }\r
66                         set { this._lineas = value; }\r
67                 }\r
68 \r
69                 #endregion Propiedades Públicas\r
70 \r
71                 #region Métodos públicos\r
72 \r
73                 public bool ValidarFormato()\r
74                 {\r
75                         XmlDocument xmlDoc = new System.Xml.XmlDocument();\r
76                         try\r
77                         {\r
78                                 xmlDoc.Load( this._pathArchivo );\r
79                         }\r
80                         catch ( XmlException xmlEx )\r
81                         {\r
82                                 #warning Ver como mostrar los errores\r
83                                 return false;\r
84                         }\r
85                         \r
86                         if ( this.ValidarContraSchema( xmlDoc ) )\r
87                         {\r
88                                 this.CargarXml( xmlDoc );\r
89                         }\r
90                         else\r
91                         {\r
92                                 //Mostrar error y retornar\r
93                                 return false;\r
94                         }\r
95 \r
96                         return true;\r
97                 }\r
98 \r
99                 public void ValidarLineas( Dominio.Autorizaciones.Prestador prestador )\r
100                 {\r
101                         foreach ( LineaInfoPrestacionesReport linea in this._lineas )\r
102                         {\r
103                                 linea.Validar( prestador );\r
104                         }\r
105                 }\r
106 \r
107                 #endregion Métodos públicos\r
108 \r
109                 #region Métodos privados\r
110 \r
111                 private ArrayList _validationErrors = new ArrayList();\r
112 \r
113                 private void valReader_ValidationEventHandler(object sender, ValidationEventArgs e)\r
114                 {\r
115                         this._validationErrors.Add( e.Message );\r
116                 }\r
117 \r
118                 private string _xsdPathNombre = null;\r
119                 private string XsdPathNombre\r
120                 {\r
121                         get \r
122                         { \r
123                                 if ( this._xsdPathNombre == null )\r
124                                 {\r
125                                         string currentDir = Directory.GetCurrentDirectory();\r
126                                         string xsdPath = Path.Combine( currentDir, ConfigurationSettings.AppSettings["DirectorioRecursos"] );\r
127                                         if ( ! Directory.Exists(xsdPath) )\r
128                                         {\r
129                                                 Directory.CreateDirectory( xsdPath );\r
130                                         }\r
131 \r
132                                         return ( Path.Combine( xsdPath, "infoPrestaciones_schema.xsd" ) );\r
133                                 }\r
134                                 else\r
135                                         return this._xsdPathNombre;\r
136                         }\r
137                 }\r
138 \r
139                 private bool ValidarContraSchema( XmlDocument xmlDoc )\r
140                 {\r
141                         this._validationErrors.Clear();\r
142 \r
143                         NameTable nt = new NameTable();\r
144                         XmlNamespaceManager nm = new XmlNamespaceManager( nt );\r
145                         XmlParserContext pc = new XmlParserContext( null, nm, null, XmlSpace.None );\r
146 \r
147                         XmlValidatingReader valReader = new XmlValidatingReader( xmlDoc.OuterXml, XmlNodeType.Element, pc );\r
148 \r
149                         valReader.Schemas.Add( string.Empty, this.XsdPathNombre );\r
150                         valReader.ValidationType = ValidationType.Schema;\r
151 \r
152                         valReader.ValidationEventHandler += new ValidationEventHandler(valReader_ValidationEventHandler);\r
153 \r
154                         while (valReader.Read()) { }\r
155 \r
156                         valReader.Close();\r
157 \r
158                         return (this._validationErrors.Count == 0) ;\r
159                 }\r
160 \r
161                 /// <summary>\r
162                 /// Toma un xmlDoc valido contra el schema\r
163                 /// </summary>\r
164                 /// <param name="xmlDoc"></param>\r
165                 private void CargarXml( XmlDocument xmlDoc )\r
166                 {\r
167                         XmlNode root = xmlDoc["infoPrestaciones"];\r
168                         \r
169                         this.FechaEnvio = DateTime.Parse( root.Attributes["fechaEnvio"].InnerText );\r
170                         \r
171                         XmlElement prestador = root["prestador"];\r
172                         this.CuitPrestador = prestador["CUIT"].InnerText;\r
173                         \r
174                         XmlElement lineasXml = root["lineas"];\r
175                         if ( lineasXml.HasChildNodes )\r
176                         {\r
177                                 this._lineas = new LineaInfoPrestacionesReport[ lineasXml.ChildNodes.Count ];\r
178                                 \r
179                                 XmlNode node; int cod; string tipoAut; int codAfiliado; string codPrestacion;\r
180                                 DateTime fechaRealizacion; float porcentajeCobertura;\r
181 \r
182                                 NumberFormatInfo nfi = new NumberFormatInfo();\r
183                                 nfi.NumberDecimalDigits = 2;\r
184                                 nfi.NumberDecimalSeparator = ".";\r
185                                 nfi.NumberGroupSeparator = ",";\r
186 \r
187                                 for ( int i = 0; i < lineasXml.ChildNodes.Count; i++ )\r
188                                 {\r
189                                         node = lineasXml.ChildNodes[i];\r
190                                         cod = int.Parse( node.Attributes["codigoAutorizacion"].InnerText );\r
191                                         tipoAut = node["tipoAutorizacion"].InnerText;\r
192                                         codAfiliado = int.Parse( node["codigoAfiliado"].InnerText );\r
193                                         codPrestacion = node["codigoPrestacion"].InnerText;\r
194                                         fechaRealizacion = DateTime.Parse( node["fechaRealizacion"].InnerText );\r
195                                         \r
196                                         porcentajeCobertura = float.Parse( node["porcentajeCobertura"].InnerText.Trim(), nfi );\r
197                                         \r
198                                         this._lineas[i] = new LineaInfoPrestacionesReport( cod, tipoAut, codAfiliado, codPrestacion,\r
199                                                 fechaRealizacion, porcentajeCobertura );\r
200                                 }\r
201                         }\r
202                 }\r
203 \r
204                 #endregion Métodos privados\r
205         }\r
206 }\r