]> git.llucax.com Git - z.facultad/75.10/miklolife.git/blob - demo/src/Reportes/InfoPrestacionesReport.cs
(no commit message)
[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 NombreArchivo\r
52                 {\r
53                         get { return this.PathArchivo.Substring(this.PathArchivo.LastIndexOf(Path.DirectorySeparatorChar) + 1); }\r
54                 }\r
55 \r
56                 public ArrayList ErroresValidacion\r
57                 {\r
58                         get\r
59                         {\r
60                                 return this._validationErrors;\r
61                         }\r
62                 }\r
63 \r
64                 public string CuitPrestador\r
65                 {\r
66                         get { return this._cuitPrestador; }\r
67                         set { this._cuitPrestador = value; }\r
68                 }\r
69 \r
70                 public DateTime FechaEnvio\r
71                 {\r
72                         get { return this._fechaEnvio; }\r
73                         set { this._fechaEnvio = value; }\r
74                 }\r
75 \r
76                 public LineaInfoPrestacionesReport[] Lineas\r
77                 {\r
78                         get { return this._lineas; }\r
79                         set { this._lineas = value; }\r
80                 }\r
81 \r
82                 #endregion Propiedades Públicas\r
83 \r
84                 #region Métodos públicos\r
85 \r
86                 public bool ValidarFormato()\r
87                 {\r
88                         XmlDocument xmlDoc = new System.Xml.XmlDocument();\r
89                         try\r
90                         {\r
91                                 xmlDoc.Load( this._pathArchivo );\r
92                         }\r
93                         catch ( XmlException xmlEx )\r
94                         {\r
95                                 this._validationErrors.Add( xmlEx.Message );\r
96                                 return false;\r
97                         }\r
98                         \r
99                         if ( this.ValidarContraSchema( xmlDoc ) )\r
100                         {\r
101                                 this.CargarXml( xmlDoc );\r
102                         }\r
103                         else\r
104                         {\r
105                                 return false;\r
106                         }\r
107 \r
108                         return true;\r
109                 }\r
110 \r
111                 public void ValidarLineas( Dominio.Autorizaciones.Prestador prestador )\r
112                 {\r
113                         foreach ( LineaInfoPrestacionesReport linea in this._lineas )\r
114                         {\r
115                                 linea.Validar( prestador );\r
116                         }\r
117                 }\r
118 \r
119                 #endregion Métodos públicos\r
120 \r
121                 #region Métodos privados\r
122 \r
123                 private ArrayList _validationErrors = new ArrayList();\r
124 \r
125                 private void valReader_ValidationEventHandler(object sender, ValidationEventArgs e)\r
126                 {\r
127                         this._validationErrors.Add( e.Message );\r
128                 }\r
129 \r
130                 private string _xsdPathNombre = null;\r
131                 private string XsdPathNombre\r
132                 {\r
133                         get \r
134                         { \r
135                                 if ( this._xsdPathNombre == null )\r
136                                 {\r
137                                         string currentDir = Directory.GetCurrentDirectory();\r
138                                         string xsdPath = Path.Combine( currentDir, ConfigurationSettings.AppSettings["DirectorioRecursos"] );\r
139                                         if ( ! Directory.Exists(xsdPath) )\r
140                                         {\r
141                                                 Directory.CreateDirectory( xsdPath );\r
142                                         }\r
143 \r
144                                         return ( Path.Combine( xsdPath, "infoPrestaciones_schema.xsd" ) );\r
145                                 }\r
146                                 else\r
147                                         return this._xsdPathNombre;\r
148                         }\r
149                 }\r
150 \r
151                 private bool ValidarContraSchema( XmlDocument xmlDoc )\r
152                 {\r
153                         this._validationErrors.Clear();\r
154 \r
155                         NameTable nt = new NameTable();\r
156                         XmlNamespaceManager nm = new XmlNamespaceManager( nt );\r
157                         XmlParserContext pc = new XmlParserContext( null, nm, null, XmlSpace.None );\r
158 \r
159                         XmlValidatingReader valReader = new XmlValidatingReader( xmlDoc.OuterXml, XmlNodeType.Element, pc );\r
160 \r
161                         valReader.Schemas.Add( string.Empty, this.XsdPathNombre );\r
162                         valReader.ValidationType = ValidationType.Schema;\r
163 \r
164                         valReader.ValidationEventHandler += new ValidationEventHandler(valReader_ValidationEventHandler);\r
165 \r
166                         while (valReader.Read()) { }\r
167 \r
168                         valReader.Close();\r
169 \r
170                         return (this._validationErrors.Count == 0) ;\r
171                 }\r
172 \r
173                 /// <summary>\r
174                 /// Toma un xmlDoc valido contra el schema\r
175                 /// </summary>\r
176                 /// <param name="xmlDoc"></param>\r
177                 private void CargarXml( XmlDocument xmlDoc )\r
178                 {\r
179                         XmlNode root = xmlDoc["infoPrestaciones"];\r
180                         \r
181                         this.FechaEnvio = DateTime.Parse( root.Attributes["fechaEnvio"].InnerText );\r
182                         \r
183                         XmlElement prestador = root["prestador"];\r
184                         this.CuitPrestador = prestador["CUIT"].InnerText;\r
185                         \r
186                         XmlElement lineasXml = root["lineas"];\r
187                         if ( lineasXml.HasChildNodes )\r
188                         {\r
189                                 this._lineas = new LineaInfoPrestacionesReport[ lineasXml.ChildNodes.Count ];\r
190                                 \r
191                                 XmlNode node; int cod; string tipoAut; int codAfiliado; string codPrestacion;\r
192                                 DateTime fechaRealizacion; float porcentajeCobertura;\r
193 \r
194                                 NumberFormatInfo nfi = new NumberFormatInfo();\r
195                                 nfi.NumberDecimalDigits = 2;\r
196                                 nfi.NumberDecimalSeparator = ".";\r
197                                 nfi.NumberGroupSeparator = ",";\r
198 \r
199                                 for ( int i = 0; i < lineasXml.ChildNodes.Count; i++ )\r
200                                 {\r
201                                         node = lineasXml.ChildNodes[i];\r
202                                         cod = int.Parse( node.Attributes["codigoAutorizacion"].InnerText );\r
203                                         tipoAut = node["tipoAutorizacion"].InnerText;\r
204                                         codAfiliado = int.Parse( node["codigoAfiliado"].InnerText );\r
205                                         codPrestacion = node["codigoPrestacion"].InnerText;\r
206                                         fechaRealizacion = DateTime.Parse( node["fechaRealizacion"].InnerText );\r
207                                         \r
208                                         porcentajeCobertura = float.Parse( node["porcentajeCobertura"].InnerText.Trim(), nfi );\r
209                                         \r
210                                         this._lineas[i] = new LineaInfoPrestacionesReport( cod, tipoAut, codAfiliado, codPrestacion,\r
211                                                 fechaRealizacion, porcentajeCobertura );\r
212                                 }\r
213                         }\r
214                 }\r
215 \r
216                 #endregion Métodos privados\r
217         }\r
218 }\r