X-Git-Url: https://git.llucax.com/z.facultad/75.10/miklolife.git/blobdiff_plain/f76a8751e3e756f639575c982de75919afe43544..e3ef49aebf88034b0185f8c8a67b5e1fe7b1241c:/demo/src/Reportes/InfoPrestacionesReport.cs diff --git a/demo/src/Reportes/InfoPrestacionesReport.cs b/demo/src/Reportes/InfoPrestacionesReport.cs index 242306a..b6cc3dc 100644 --- a/demo/src/Reportes/InfoPrestacionesReport.cs +++ b/demo/src/Reportes/InfoPrestacionesReport.cs @@ -1,9 +1,20 @@ +#region Usings + using System; using System.Collections; using System.Xml; +using System.Xml.Schema; +using System.Globalization; +using System.IO; +using System.Configuration; + +using System.Reflection; + +#endregion Usings namespace Reportes { + /// /// Clase que representa un archivo de Información de Prestaciones Realizadas enviado por el /// Prestador. @@ -21,13 +32,11 @@ namespace Reportes #region Campos Privados - private bool _esBienFormado = true; - private string _pathArchivo = string.Empty; private string _cuitPrestador; private DateTime _fechaEnvio; - private ArrayList _lineas = null; + private LineaInfoPrestacionesReport[] _lineas = null; #endregion Campos Privados @@ -39,6 +48,11 @@ namespace Reportes set { this._pathArchivo = value; } } + public string NombreArchivo + { + get { return this.PathArchivo.Substring(this.PathArchivo.LastIndexOf(Path.DirectorySeparatorChar) + 1); } + } + public string CuitPrestador { get { return this._cuitPrestador; } @@ -51,7 +65,7 @@ namespace Reportes set { this._fechaEnvio = value; } } - public ArrayList Lineas + public LineaInfoPrestacionesReport[] Lineas { get { return this._lineas; } set { this._lineas = value; } @@ -99,10 +113,54 @@ namespace Reportes #region Métodos privados + private ArrayList _validationErrors = new ArrayList(); + + private void valReader_ValidationEventHandler(object sender, ValidationEventArgs e) + { + this._validationErrors.Add( e.Message ); + } + + private string _xsdPathNombre = null; + private string XsdPathNombre + { + get + { + if ( this._xsdPathNombre == null ) + { + string currentDir = Directory.GetCurrentDirectory(); + string xsdPath = Path.Combine( currentDir, ConfigurationSettings.AppSettings["DirectorioRecursos"] ); + if ( ! Directory.Exists(xsdPath) ) + { + Directory.CreateDirectory( xsdPath ); + } + + return ( Path.Combine( xsdPath, "infoPrestaciones_schema.xsd" ) ); + } + else + return this._xsdPathNombre; + } + } + private bool ValidarContraSchema( XmlDocument xmlDoc ) { + this._validationErrors.Clear(); - return true; + NameTable nt = new NameTable(); + XmlNamespaceManager nm = new XmlNamespaceManager( nt ); + XmlParserContext pc = new XmlParserContext( null, nm, null, XmlSpace.None ); + + XmlValidatingReader valReader = new XmlValidatingReader( xmlDoc.OuterXml, XmlNodeType.Element, pc ); + + valReader.Schemas.Add( string.Empty, this.XsdPathNombre ); + valReader.ValidationType = ValidationType.Schema; + + valReader.ValidationEventHandler += new ValidationEventHandler(valReader_ValidationEventHandler); + + while (valReader.Read()) { } + + valReader.Close(); + + return (this._validationErrors.Count == 0) ; } /// @@ -121,13 +179,31 @@ namespace Reportes XmlElement lineasXml = root["lineas"]; if ( lineasXml.HasChildNodes ) { + this._lineas = new LineaInfoPrestacionesReport[ lineasXml.ChildNodes.Count ]; + + XmlNode node; int cod; string tipoAut; int codAfiliado; string codPrestacion; + DateTime fechaRealizacion; float porcentajeCobertura; + + NumberFormatInfo nfi = new NumberFormatInfo(); + nfi.NumberDecimalDigits = 2; + nfi.NumberDecimalSeparator = "."; + nfi.NumberGroupSeparator = ","; + for ( int i = 0; i < lineasXml.ChildNodes.Count; i++ ) { - //lineasXml.ChildNodes[i].Attributes["codiogoAutorizacion"] - #warning Guille --> Seguir aca + node = lineasXml.ChildNodes[i]; + cod = int.Parse( node.Attributes["codigoAutorizacion"].InnerText ); + tipoAut = node["tipoAutorizacion"].InnerText; + codAfiliado = int.Parse( node["codigoAfiliado"].InnerText ); + codPrestacion = node["codigoPrestacion"].InnerText; + fechaRealizacion = DateTime.Parse( node["fechaRealizacion"].InnerText ); + + porcentajeCobertura = float.Parse( node["porcentajeCobertura"].InnerText.Trim(), nfi ); + + this._lineas[i] = new LineaInfoPrestacionesReport( cod, tipoAut, codAfiliado, codPrestacion, + fechaRealizacion, porcentajeCobertura ); } } - } #endregion Métodos privados