]> git.llucax.com Git - z.facultad/75.10/miklolife.git/blobdiff - demo/src/Reportes/InfoPrestacionesReport.cs
nuevos atributos:
[z.facultad/75.10/miklolife.git] / demo / src / Reportes / InfoPrestacionesReport.cs
index e61211890f5dad202305e4ef6b9ecd3fcdee81c3..277bef07ef211b4b577c5c6678ad7e18a4302305 100644 (file)
@@ -1,8 +1,20 @@
+#region Usings\r
+\r
 using System;\r
 using System.Collections;\r
 using System;\r
 using System.Collections;\r
+using System.Xml;\r
+using System.Xml.Schema;\r
+using System.Globalization;\r
+using System.IO;\r
+using System.Configuration;\r
+\r
+using System.Reflection;\r
+\r
+#endregion Usings\r
 \r
 namespace Reportes\r
 {\r
 \r
 namespace Reportes\r
 {\r
+       \r
        /// <summary>\r
        /// Clase que representa un archivo de Información de Prestaciones Realizadas enviado por el \r
        /// Prestador.\r
        /// <summary>\r
        /// Clase que representa un archivo de Información de Prestaciones Realizadas enviado por el \r
        /// Prestador.\r
@@ -11,19 +23,22 @@ namespace Reportes
        {\r
                #region Constructores\r
 \r
        {\r
                #region Constructores\r
 \r
-               public InfoPrestacionesReport()\r
+               public InfoPrestacionesReport( string pathNombreArchivo )\r
                {\r
                {\r
+                       this._pathArchivo = pathNombreArchivo;\r
                }\r
 \r
                #endregion Constructores\r
 \r
                #region Campos Privados\r
 \r
                }\r
 \r
                #endregion Constructores\r
 \r
                #region Campos Privados\r
 \r
-               private string _pathArchivo = string.Empty;\r
+               private bool _esBienFormado = true;\r
 \r
 \r
-               private string _cuit;\r
+               private string _pathArchivo = string.Empty;\r
+               private string _cuitPrestador;\r
+               private DateTime _fechaEnvio;\r
 \r
 \r
-               private ArrayList _lineas = null;\r
+               private LineaInfoPrestacionesReport[] _lineas = null;\r
 \r
                #endregion Campos Privados\r
 \r
 \r
                #endregion Campos Privados\r
 \r
@@ -35,13 +50,19 @@ namespace Reportes
                        set { this._pathArchivo = value; }\r
                }\r
 \r
                        set { this._pathArchivo = value; }\r
                }\r
 \r
-               public string Cuit\r
+               public string CuitPrestador\r
+               {\r
+                       get { return this._cuitPrestador; }\r
+                       set { this._cuitPrestador = value; }\r
+               }\r
+\r
+               public DateTime FechaEnvio\r
                {\r
                {\r
-                       get { return this._cuit; }\r
-                       set { this._cuit = value; }\r
+                       get { return this._fechaEnvio; }\r
+                       set { this._fechaEnvio = value; }\r
                }\r
 \r
                }\r
 \r
-               public ArrayList Lineas\r
+               public LineaInfoPrestacionesReport[] Lineas\r
                {\r
                        get { return this._lineas; }\r
                        set { this._lineas = value; }\r
                {\r
                        get { return this._lineas; }\r
                        set { this._lineas = value; }\r
@@ -53,6 +74,26 @@ namespace Reportes
 \r
                public bool ValidarFormato()\r
                {\r
 \r
                public bool ValidarFormato()\r
                {\r
+                       XmlDocument xmlDoc = new System.Xml.XmlDocument();\r
+                       try\r
+                       {\r
+                               xmlDoc.Load( this._pathArchivo );\r
+                       }\r
+                       catch ( XmlException xmlEx )\r
+                       {\r
+                               #warning Ver como mostrar los errores\r
+                               return false;\r
+                       }\r
+                       \r
+                       if ( this.ValidarContraSchema( xmlDoc ) )\r
+                       {\r
+                               this.CargarXml( xmlDoc );\r
+                       }\r
+                       else\r
+                       {\r
+                               //Mostrar error y retornar\r
+                               return false;\r
+                       }\r
 \r
                        return true;\r
                }\r
 \r
                        return true;\r
                }\r
@@ -66,5 +107,121 @@ namespace Reportes
                }\r
 \r
                #endregion Métodos públicos\r
                }\r
 \r
                #endregion Métodos públicos\r
+\r
+               #region Métodos privados\r
+\r
+               private ArrayList _validationErrors = new ArrayList();\r
+\r
+               private void valReader_ValidationEventHandler(object sender, ValidationEventArgs e)\r
+               {\r
+                       this._validationErrors.Add( e.Message );\r
+               }\r
+\r
+               private string _xsdPathNombre = null;\r
+               private string XsdPathNombre\r
+               {\r
+                       get \r
+                       { \r
+                               if ( this._xsdPathNombre == null )\r
+                               {\r
+                                       string currentDir = Directory.GetCurrentDirectory();\r
+                                       string xsdPath = Path.Combine( currentDir, ConfigurationSettings.AppSettings["DirectorioRecursos"] );\r
+                                       if ( ! Directory.Exists(xsdPath) )\r
+                                       {\r
+                                               Directory.CreateDirectory( xsdPath );\r
+                                       }\r
+\r
+                                       return ( Path.Combine( xsdPath, "infoPrestaciones_schema.xsd" ) );\r
+                               }\r
+                               else\r
+                                       return this._xsdPathNombre;\r
+                       }\r
+               }\r
+\r
+               private bool ValidarContraSchema( XmlDocument xmlDoc )\r
+               {\r
+                       this._validationErrors.Clear();\r
+\r
+                       NameTable nt = new NameTable();\r
+                       XmlNamespaceManager nm = new XmlNamespaceManager( nt );\r
+                       XmlParserContext pc = new XmlParserContext( null, nm, null, XmlSpace.None );\r
+\r
+                       XmlValidatingReader valReader = new XmlValidatingReader( xmlDoc.OuterXml, XmlNodeType.Element, pc );\r
+\r
+                       valReader.ValidationType = ValidationType.Schema;\r
+                       //XmlSchemaCollection schemaColl = new XmlSchemaCollection();\r
+                       //schemaColl.Add( null, this.XsdPathNombre );\r
+                       \r
+                       valReader.Schemas.Add( "", this.XsdPathNombre ); // schemaColl );\r
+\r
+                       valReader.ValidationEventHandler += new ValidationEventHandler(valReader_ValidationEventHandler);\r
+\r
+                       //while ( valReader.Read() );\r
+\r
+                       while (valReader.Read())\r
+                       {\r
+                               if (valReader.IsStartElement())\r
+                               {\r
+                                       if (valReader.Prefix==String.Empty)\r
+                                               Console.WriteLine("<{0}>", valReader.LocalName);\r
+                                       else\r
+                                       {\r
+                                               Console.Write("<{0}:{1}>", valReader.Prefix, valReader.LocalName);\r
+                                               Console.WriteLine(" The namespace URI is " +\r
+                                                       valReader.NamespaceURI);\r
+                                       }\r
+                               }\r
+                       }\r
+\r
+\r
+                       valReader.Close();\r
+\r
+                       return (this._validationErrors.Count == 0) ;\r
+               }\r
+\r
+               /// <summary>\r
+               /// Toma un xmlDoc valido contra el schema\r
+               /// </summary>\r
+               /// <param name="xmlDoc"></param>\r
+               private void CargarXml( XmlDocument xmlDoc )\r
+               {\r
+                       XmlNode root = xmlDoc["infoPrestaciones"];\r
+                       \r
+                       this.FechaEnvio = DateTime.Parse( root.Attributes["fechaEnvio"].InnerText );\r
+                       \r
+                       XmlElement prestador = root["prestador"];\r
+                       this.CuitPrestador = prestador["CUIT"].InnerText;\r
+                       \r
+                       XmlElement lineasXml = root["lineas"];\r
+                       if ( lineasXml.HasChildNodes )\r
+                       {\r
+                               this._lineas = new LineaInfoPrestacionesReport[ lineasXml.ChildNodes.Count ];\r
+                               \r
+                               XmlNode node; int cod; string tipoAut; int codAfiliado; string codPrestacion;\r
+                               DateTime fechaRealizacion; float porcentajeCobertura;\r
+\r
+                               NumberFormatInfo nfi = new NumberFormatInfo();\r
+                               nfi.NumberDecimalDigits = 2;\r
+                               nfi.NumberDecimalSeparator = ".";\r
+                               nfi.NumberGroupSeparator = ",";\r
+\r
+                               for ( int i = 0; i < lineasXml.ChildNodes.Count; i++ )\r
+                               {\r
+                                       node = lineasXml.ChildNodes[i];\r
+                                       cod = int.Parse( node.Attributes["codigoAutorizacion"].InnerText );\r
+                                       tipoAut = node["tipoAutorizacion"].InnerText;\r
+                                       codAfiliado = int.Parse( node["codigoAfiliado"].InnerText );\r
+                                       codPrestacion = node["codigoPrestacion"].InnerText;\r
+                                       fechaRealizacion = DateTime.Parse( node["fechaRealizacion"].InnerText );\r
+                                       \r
+                                       porcentajeCobertura = float.Parse( node["porcentajeCobertura"].InnerText.Trim(), nfi );\r
+                                       \r
+                                       this._lineas[i] = new LineaInfoPrestacionesReport( cod, tipoAut, codAfiliado, codPrestacion,\r
+                                               fechaRealizacion, porcentajeCobertura );\r
+                               }\r
+                       }\r
+               }\r
+\r
+               #endregion Métodos privados\r
        }\r
 }\r
        }\r
 }\r