X-Git-Url: https://git.llucax.com/z.facultad/75.10/miklolife.git/blobdiff_plain/ad14ee69cc0a9253f352b642dfd714edee438d9a..cee792200bd75616f2989980a76bb4a7042da6f5:/demo/src/Reportes/InfoPrestacionesReport.cs diff --git a/demo/src/Reportes/InfoPrestacionesReport.cs b/demo/src/Reportes/InfoPrestacionesReport.cs index 280249c..277bef0 100644 --- a/demo/src/Reportes/InfoPrestacionesReport.cs +++ b/demo/src/Reportes/InfoPrestacionesReport.cs @@ -1,7 +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. @@ -10,24 +23,49 @@ namespace Reportes { #region Constructores - public InfoPrestacionesReport() + public InfoPrestacionesReport( string pathNombreArchivo ) { + this._pathArchivo = pathNombreArchivo; } #endregion Constructores #region Campos Privados - private string _cuit; + private bool _esBienFormado = true; + + private string _pathArchivo = string.Empty; + private string _cuitPrestador; + private DateTime _fechaEnvio; + + private LineaInfoPrestacionesReport[] _lineas = null; #endregion Campos Privados #region Propiedades Públicas - public string Cuit + public string PathArchivo + { + get { return this._pathArchivo; } + set { this._pathArchivo = value; } + } + + public string CuitPrestador + { + get { return this._cuitPrestador; } + set { this._cuitPrestador = value; } + } + + public DateTime FechaEnvio { - get { return this._cuit; } - set { this._cuit = value; } + get { return this._fechaEnvio; } + set { this._fechaEnvio = value; } + } + + public LineaInfoPrestacionesReport[] Lineas + { + get { return this._lineas; } + set { this._lineas = value; } } #endregion Propiedades Públicas @@ -36,10 +74,154 @@ namespace Reportes public bool ValidarFormato() { + XmlDocument xmlDoc = new System.Xml.XmlDocument(); + try + { + xmlDoc.Load( this._pathArchivo ); + } + catch ( XmlException xmlEx ) + { + #warning Ver como mostrar los errores + return false; + } + + if ( this.ValidarContraSchema( xmlDoc ) ) + { + this.CargarXml( xmlDoc ); + } + else + { + //Mostrar error y retornar + return false; + } return true; } + public void ValidarLineas( Dominio.Autorizaciones.Prestador prestador ) + { + foreach ( LineaInfoPrestacionesReport linea in this._lineas ) + { + linea.Validar( prestador ); + } + } + #endregion Métodos públicos + + #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(); + + 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.ValidationType = ValidationType.Schema; + //XmlSchemaCollection schemaColl = new XmlSchemaCollection(); + //schemaColl.Add( null, this.XsdPathNombre ); + + valReader.Schemas.Add( "", this.XsdPathNombre ); // schemaColl ); + + valReader.ValidationEventHandler += new ValidationEventHandler(valReader_ValidationEventHandler); + + //while ( valReader.Read() ); + + while (valReader.Read()) + { + if (valReader.IsStartElement()) + { + if (valReader.Prefix==String.Empty) + Console.WriteLine("<{0}>", valReader.LocalName); + else + { + Console.Write("<{0}:{1}>", valReader.Prefix, valReader.LocalName); + Console.WriteLine(" The namespace URI is " + + valReader.NamespaceURI); + } + } + } + + + valReader.Close(); + + return (this._validationErrors.Count == 0) ; + } + + /// + /// Toma un xmlDoc valido contra el schema + /// + /// + private void CargarXml( XmlDocument xmlDoc ) + { + XmlNode root = xmlDoc["infoPrestaciones"]; + + this.FechaEnvio = DateTime.Parse( root.Attributes["fechaEnvio"].InnerText ); + + XmlElement prestador = root["prestador"]; + this.CuitPrestador = prestador["CUIT"].InnerText; + + 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++ ) + { + 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 } }