4 using System.Collections;
\r
6 using System.Xml.Schema;
\r
7 using System.Globalization;
\r
9 using System.Configuration;
\r
11 using System.Reflection;
\r
19 /// Clase que representa un archivo de Información de Prestaciones Realizadas enviado por el
\r
22 public class InfoPrestacionesReport
\r
24 #region Constructores
\r
26 public InfoPrestacionesReport( string pathNombreArchivo )
\r
28 this._pathArchivo = pathNombreArchivo;
\r
31 #endregion Constructores
\r
33 #region Campos Privados
\r
35 private bool _esBienFormado = true;
\r
37 private string _pathArchivo = string.Empty;
\r
38 private string _cuitPrestador;
\r
39 private DateTime _fechaEnvio;
\r
41 private LineaInfoPrestacionesReport[] _lineas = null;
\r
43 #endregion Campos Privados
\r
45 #region Propiedades Públicas
\r
47 public string PathArchivo
\r
49 get { return this._pathArchivo; }
\r
50 set { this._pathArchivo = value; }
\r
53 public string CuitPrestador
\r
55 get { return this._cuitPrestador; }
\r
56 set { this._cuitPrestador = value; }
\r
59 public DateTime FechaEnvio
\r
61 get { return this._fechaEnvio; }
\r
62 set { this._fechaEnvio = value; }
\r
65 public LineaInfoPrestacionesReport[] Lineas
\r
67 get { return this._lineas; }
\r
68 set { this._lineas = value; }
\r
71 #endregion Propiedades Públicas
\r
73 #region Métodos públicos
\r
75 public bool ValidarFormato()
\r
77 XmlDocument xmlDoc = new System.Xml.XmlDocument();
\r
80 xmlDoc.Load( this._pathArchivo );
\r
82 catch ( XmlException xmlEx )
\r
84 #warning Ver como mostrar los errores
\r
88 if ( this.ValidarContraSchema( xmlDoc ) )
\r
90 this.CargarXml( xmlDoc );
\r
94 //Mostrar error y retornar
\r
101 public void ValidarLineas( Dominio.Autorizaciones.Prestador prestador )
\r
103 foreach ( LineaInfoPrestacionesReport linea in this._lineas )
\r
105 linea.Validar( prestador );
\r
109 #endregion Métodos públicos
\r
111 #region Métodos privados
\r
113 private ArrayList _validationErrors = new ArrayList();
\r
115 private void valReader_ValidationEventHandler(object sender, ValidationEventArgs e)
\r
117 this._validationErrors.Add( e.Message );
\r
120 private string _xsdPathNombre = null;
\r
121 private string XsdPathNombre
\r
125 if ( this._xsdPathNombre == null )
\r
127 string currentDir = Directory.GetCurrentDirectory();
\r
128 string xsdPath = Path.Combine( currentDir, ConfigurationSettings.AppSettings["DirectorioRecursos"] );
\r
129 if ( ! Directory.Exists(xsdPath) )
\r
131 Directory.CreateDirectory( xsdPath );
\r
134 return ( Path.Combine( xsdPath, "infoPrestaciones_schema.xsd" ) );
\r
137 return this._xsdPathNombre;
\r
141 private bool ValidarContraSchema( XmlDocument xmlDoc )
\r
143 this._validationErrors.Clear();
\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
149 XmlValidatingReader valReader = new XmlValidatingReader( xmlDoc.OuterXml, XmlNodeType.Element, pc );
\r
151 valReader.ValidationType = ValidationType.Schema;
\r
152 //XmlSchemaCollection schemaColl = new XmlSchemaCollection();
\r
153 //schemaColl.Add( null, this.XsdPathNombre );
\r
155 valReader.Schemas.Add( "", this.XsdPathNombre ); // schemaColl );
\r
157 valReader.ValidationEventHandler += new ValidationEventHandler(valReader_ValidationEventHandler);
\r
159 //while ( valReader.Read() );
\r
161 while (valReader.Read())
\r
163 if (valReader.IsStartElement())
\r
165 if (valReader.Prefix==String.Empty)
\r
166 Console.WriteLine("<{0}>", valReader.LocalName);
\r
169 Console.Write("<{0}:{1}>", valReader.Prefix, valReader.LocalName);
\r
170 Console.WriteLine(" The namespace URI is " +
\r
171 valReader.NamespaceURI);
\r
179 return (this._validationErrors.Count == 0) ;
\r
183 /// Toma un xmlDoc valido contra el schema
\r
185 /// <param name="xmlDoc"></param>
\r
186 private void CargarXml( XmlDocument xmlDoc )
\r
188 XmlNode root = xmlDoc["infoPrestaciones"];
\r
190 this.FechaEnvio = DateTime.Parse( root.Attributes["fechaEnvio"].InnerText );
\r
192 XmlElement prestador = root["prestador"];
\r
193 this.CuitPrestador = prestador["CUIT"].InnerText;
\r
195 XmlElement lineasXml = root["lineas"];
\r
196 if ( lineasXml.HasChildNodes )
\r
198 this._lineas = new LineaInfoPrestacionesReport[ lineasXml.ChildNodes.Count ];
\r
200 XmlNode node; int cod; string tipoAut; int codAfiliado; string codPrestacion;
\r
201 DateTime fechaRealizacion; float porcentajeCobertura;
\r
203 NumberFormatInfo nfi = new NumberFormatInfo();
\r
204 nfi.NumberDecimalDigits = 2;
\r
205 nfi.NumberDecimalSeparator = ".";
\r
206 nfi.NumberGroupSeparator = ",";
\r
208 for ( int i = 0; i < lineasXml.ChildNodes.Count; i++ )
\r
210 node = lineasXml.ChildNodes[i];
\r
211 cod = int.Parse( node.Attributes["codigoAutorizacion"].InnerText );
\r
212 tipoAut = node["tipoAutorizacion"].InnerText;
\r
213 codAfiliado = int.Parse( node["codigoAfiliado"].InnerText );
\r
214 codPrestacion = node["codigoPrestacion"].InnerText;
\r
215 fechaRealizacion = DateTime.Parse( node["fechaRealizacion"].InnerText );
\r
217 porcentajeCobertura = float.Parse( node["porcentajeCobertura"].InnerText.Trim(), nfi );
\r
219 this._lineas[i] = new LineaInfoPrestacionesReport( cod, tipoAut, codAfiliado, codPrestacion,
\r
220 fechaRealizacion, porcentajeCobertura );
\r
225 #endregion Métodos privados
\r