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