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