using System; using System.Collections; using System.Configuration; using System.Xml; using Dominio.Autorizaciones; using Dominio.Afiliados; using com.db4o; using System.IO; namespace Reportes { /// /// Summary description for ConsumoAfiliadosReport. /// public class ConsumoAfiliadosReport { #region Constructores public ConsumoAfiliadosReport() { XmlDeclaration xmlDeclaration = xmlDoc.CreateXmlDeclaration("1.0", "UTF-8", null); xmlDoc.AppendChild(xmlDeclaration); XmlElement root = this.xmlDoc.CreateElement( "reporteConsumo" ); root.SetAttribute( "fechaGeneracion", DateTime.Now.ToString( "yyyy-MM-dd" ) ); root.AppendChild( xmlDoc.CreateElement( "lineas" ) ); xmlDoc.AppendChild( root ); } #endregion Constructores private XmlDocument xmlDoc = new XmlDocument(); private ArrayList _listaCodigosAfiliado = new ArrayList(); #region Metodos Publicos public void AgregarInfo( Prestador p, LineaInfoPrestacionesReport lineaIp ) { XmlElement lineas = xmlDoc.DocumentElement["lineas"]; XmlElement elemLinea = null; #region Datos propios de Afiliado if ( this._listaCodigosAfiliado.Contains(lineaIp.CodigoAfiliado) ) { //Ya está el afiliado en el xml elemLinea = lineas.SelectSingleNode( @"//linea[@codigoAfiliado='" + lineaIp.CodigoAfiliado.ToString().Trim() + "']" ) as XmlElement; } else { Afiliado a = this.getAfiliado( lineaIp.CodigoAfiliado ); //El nodo afiliado todavía no está en el xml elemLinea = this.xmlDoc.CreateElement("linea"); elemLinea.SetAttribute( "codigoAfiliado", lineaIp.CodigoAfiliado.ToString().Trim() ); lineas.AppendChild( elemLinea ); //nombreAfiliado XmlElement elemNombreAfiliado = this.xmlDoc.CreateElement("nombreAfiliado"); elemNombreAfiliado.InnerText = ( (a.Nombre == null)? string.Empty : a.Nombre.Trim() ); elemLinea.AppendChild( elemNombreAfiliado ); //apellidoAfiliado XmlElement elemApellidoAfiliado = this.xmlDoc.CreateElement("apellidoAfiliado"); elemApellidoAfiliado.InnerText = ( (a.Apellido == null)? string.Empty : a.Apellido.Trim() ); elemLinea.AppendChild( elemApellidoAfiliado ); //codigoPlanAfiliado XmlElement elemCodigoPlanAfiliado = this.xmlDoc.CreateElement("codigoPlanAfiliado"); elemCodigoPlanAfiliado.InnerText = ( (a.PlanActual == null)? string.Empty : a.PlanActual.Codigo.ToString().Trim() ); elemLinea.AppendChild( elemCodigoPlanAfiliado ); this._listaCodigosAfiliado.Add(lineaIp.CodigoAfiliado); } #endregion Datos propios de Afiliado #region Autorizacion Realizada //autorizacionRealizada XmlElement elemAutorizacion = this.xmlDoc.CreateElement( "autorizacionRealizada" ); elemAutorizacion.SetAttribute( "codigo", lineaIp.CodigoAutorizacion.ToString().Trim() ); //prestador XmlElement elemPrestador = this.xmlDoc.CreateElement( "prestador" ); XmlElement elemCuit = this.xmlDoc.CreateElement( "CUIT" ); elemCuit.InnerText = p.Cuit.ToString().Trim(); elemPrestador.AppendChild( elemCuit ); XmlElement elemNombrePrestador = this.xmlDoc.CreateElement( "nombre" ); elemNombrePrestador.InnerText = ((p.Nombre == null)? string.Empty : p.Nombre.ToString().Trim()); elemPrestador.AppendChild( elemNombrePrestador ); elemAutorizacion.AppendChild( elemPrestador ); //codigoPrestacion XmlElement elemCodPrestacion = this.xmlDoc.CreateElement( "codigoPrestacion" ); elemCodPrestacion.InnerText = lineaIp.CodigoPrestacion.Trim(); elemAutorizacion.AppendChild( elemCodPrestacion ); //nombrePrestacion Prestacion prestacion = this.getPrestacion( lineaIp.CodigoPrestacion ); XmlElement elemNombrePrestacion = this.xmlDoc.CreateElement( "nombrePrestacion" ); elemNombrePrestacion.InnerText = ( (prestacion.Nombre == null)? string.Empty : prestacion.Nombre.Trim() ); elemAutorizacion.AppendChild( elemNombrePrestacion ); //fechaRealizacion XmlElement elemFechaRealizacion = this.xmlDoc.CreateElement( "fechaRealizacion" ); elemFechaRealizacion.InnerText = lineaIp.FechaRealizacion.ToString( "yyyy-MM-dd" ); elemAutorizacion.AppendChild( elemFechaRealizacion ); //porcentajeCobertura XmlElement elemPorcentaje = this.xmlDoc.CreateElement( "porcentajeCobertura" ); elemPorcentaje.InnerText = lineaIp.PorcentajeCobertura.ToString().Trim(); elemAutorizacion.AppendChild( elemPorcentaje ); elemLinea.AppendChild( elemAutorizacion ); #endregion Autorizacion Realizada } public override string ToString() { return xmlDoc.OuterXml; } public void Serializar() { string currentDir = Directory.GetCurrentDirectory(); string dirPagos = Path.Combine( currentDir, ConfigurationSettings.AppSettings["DirectorioPagos"] ); if ( ! Directory.Exists(dirPagos) ) { Directory.CreateDirectory( dirPagos ); } int secuencia = 0; string baseFileName = "rc_" + DateTime.Now.ToString("yyyy-MM-dd") + "_"; string pathName = Path.Combine( dirPagos, baseFileName + secuencia.ToString("00") + ".xml" ); while ( File.Exists(pathName) ) { secuencia += 1; pathName = Path.Combine( dirPagos, baseFileName + secuencia.ToString("00") + ".xml"); } XmlTextWriter writer = new XmlTextWriter( pathName, null ); writer.Formatting = Formatting.Indented; this.xmlDoc.Save(writer); } #endregion Metodos Publicos #region Métodos Privados private Afiliado getAfiliado( int codigo ) { this.db = com.db4o.Db4o.openFile("os.yap"); ArrayList al = this.ObjectSetToArrayList( db.get( new Afiliado( codigo ) ) ); Afiliado a = ( (al.Count == 0)? null : al[0] ) as Afiliado; this.db.close(); this.db = null; return a; } private Prestacion getPrestacion( string codigo ) { this.db = com.db4o.Db4o.openFile("os.yap"); ArrayList al = this.ObjectSetToArrayList( db.get( new Prestacion( codigo ) ) ); Prestacion p = ( (al.Count == 0)? null : al[0] ) as Prestacion; this.db.close(); this.db = null; return p; } private Autorizacion getAutorizacion( int codigo ) { this.db = com.db4o.Db4o.openFile("os.yap"); ArrayList al = new ArrayList(); al = this.ObjectSetToArrayList( db.get( new AutorizacionManual(codigo) ) ); Autorizacion a = ( (al.Count == 0)? null : al[0] ) as AutorizacionManual; if ( a == null ) { al = this.ObjectSetToArrayList( db.get( new AutorizacionAutomatica(codigo) ) ); a = ( (al.Count == 0)? null : al[0] ) as AutorizacionAutomatica; } this.db.close(); this.db = null; return a; } #endregion Métodos Privados #region DB private com.db4o.ObjectContainer db = null; private ArrayList ObjectSetToArrayList (ObjectSet result) { ArrayList lst = new ArrayList (); Object s; if (result == null) return lst; while ((s = result.next ()) != null) { lst.Add (s); } return lst; } #endregion DB } }