/// <summary> /// Función que obtiene los talonarios de un usuario /// </summary> /// <param name="usuario"></param> /// <returns></returns> public static Talonario[] ObtienePorUsuario(string usuario) { List <string> folios = new List <string>(); List <Talonario> talonarios = new List <Talonario>(); /* Traemos los datos del usuario del cual se quiere obtener los talonarios */ Colaborador persona = ColaboradorService.Obtiene(usuario); /* Traemos los datos del sorteo activo */ Sorteo sorteo_activo = SorteoService.ObtenerActivo(); /* Si la persona existe y tenemos un sorteo activo, abrimos la conexión a la base de datos para obtener sus talonarios*/ if (persona != null && sorteo_activo != null) { database db = new database(); /* Traemos los folios de los talonarios digitales asignados a un colaborador en el sorteo activo */ ResultSet dbTalonarios = db.getTable(String.Format(@" SELECT tal.FOLIO FROM TALONARIOS tal INNER JOIN SORTEOS_COLABORADORES_TALONARIOS ctal ON tal.PK1 = ctal.PK_TALONARIO WHERE tal.DIGITAL = 1 AND ctal.PK_SORTEO = {0} AND ctal.PK_COLABORADOR = {1} ORDER BY tal.FOLIO", sorteo_activo.clave, persona.clave)); /* Por cada talonario, agregamos el folio a la lista*/ while (dbTalonarios.Next()) { folios.Add(dbTalonarios.Get("FOLIO")); } db.Close(); /* Por cada folio obtenido, traemos los datos del talonario*/ foreach (string folio in folios) { /* Traemos los datos del talonario */ talonarios.Add(Obtiene(folio, persona.clave)); } ; } return(talonarios.ToArray()); }
/// <summary> /// Función que permite enviar un boleto por correo /// </summary> /// <param name="clave">Clave del boleto al que se le va enviar el correo</param> /// <param name="clave_persona">Clave de la persona dueña del talonario</param> public static void EnviarBoleto(long clave, long clave_persona) { /* Traemos los datos del sorteo activo */ Sorteo sorteo_activo = SorteoService.ObtenerActivo(); Boleto boleto = ObtieneBoleto(clave, clave_persona); Colaborador colaborador = ColaboradorService.ObtienePorClave(clave_persona); /* Si el talonario existe, traemos sus datos */ if (boleto != null && boleto.comprador != null) { string urlBoleto = string.Format("{0}/boleto/{1}", ConfigurationManager.AppSettings["App.Url.Base"], boleto.token); MemoryStream qrImage = GenerateQRCode(urlBoleto); String nombreArchivo = String.Format("boleto-{0}", boleto.folio); System.Net.Mail.Attachment qrAttachment = new System.Net.Mail.Attachment(qrImage, nombreArchivo, System.Net.Mime.MediaTypeNames.Image.Jpeg) { ContentId = String.Format("{0}@anahuac.mx", nombreArchivo), ContentType = new System.Net.Mime.ContentType(System.Net.Mime.MediaTypeNames.Image.Jpeg), Name = String.Format("{0}.jpg", nombreArchivo) }; qrAttachment.ContentDisposition.Inline = true; System.Drawing.Image frenteBoleto = Bitmap.FromFile(System.Web.Hosting.HostingEnvironment.MapPath("~/Content/Imagenes/Boleto_final_Sorteo_2017.png")); Graphics g = Graphics.FromImage(frenteBoleto); g.DrawString(boleto.folio, System.Drawing.SystemFonts.DefaultFont, System.Drawing.Brushes.Black, new RectangleF(832, 13, 85, 29)); MemoryStream frenteImage = new MemoryStream(); frenteBoleto.Save(frenteImage, System.Drawing.Imaging.ImageFormat.Jpeg); frenteImage.Position = 0; System.Net.Mail.Attachment boletoAttach = new System.Net.Mail.Attachment(frenteImage, String.Format("Boleto_final_Sorteo_2017_{0}.jpg", boleto.folio), System.Net.Mime.MediaTypeNames.Image.Jpeg) { ContentId = "*****@*****.**" }; boletoAttach.ContentDisposition.Inline = true; System.Net.Mail.Attachment reversoAttach = new System.Net.Mail.Attachment(System.Web.Hosting.HostingEnvironment.MapPath("~/Content/Imagenes/Boleto_final_Sorteo.png")) { ContentId = "*****@*****.**" }; reversoAttach.ContentDisposition.Inline = true; System.Net.Mail.Attachment logoAttach = new System.Net.Mail.Attachment(System.Web.Hosting.HostingEnvironment.MapPath("~/Content/Imagenes/AHC_Logo-Correo.png")) { ContentId = "*****@*****.**" }; logoAttach.ContentDisposition.Inline = true; Code.CorreoUtil.Enviar( new string[] { boleto.comprador.correo }, String.Format("Sorteo Anáhuac: Boleto {0}", boleto.folio), String.Format(@"<html> <head> </head> <body> <style type=""text/css""> #boleto-logo img {{ width: 120px; }} #contenido-correo {{ font-family: Tahoma, Verdana, Arial, sans-serif; text-align: center; }} #contenido-correo h3 {{ color: #ea7200; font-style: italic; font-size: 1.1em; }} #contenido-correo p.boleto-descripcion {{ color: #666; }} .boletos-conteo {{ color: #ea7200; }} #boleto-detalle-contenido {{ margin-top: 1em; text-align: center; }} .boleto-contacto, .boleto-url {{ color: #666; font-size: 0.8em; }} .boleto-contacto span {{ color: #000; font-size: 1.3em; font-weight: bold; }} #qrURL-boleto, #reverso-boleto {{ margin-bottom: 1.2em; }} #frente-boleto img, #reverso-boleto img {{ width: 75%; }} </style> <div id=""contenido-correo""> <p> <div id=""boleto-logo""><img src=""cid:{16}"" /></div> </p> <h2 class=""talonario-boletos-header con-flecha-llamada"">Boleto <span class=""boletos-conteo"">{0}</span></h2> <h3>¡Felicidades!</h3> <p class=""boleto-descripcion"">Has comprado el <b>boleto {0}</b> del Sorteo Anáhuac.<br/>A continuación te presentamos los datos de tu compra:</p> <div id=""boleto-detalle-contenido""> <p class=""boleto-contacto""> Dueño<br/> <span>{1} {2}</span> </p> <p class=""boleto-contacto""> Domicilio:<br/> <span>{6}</span> <span>{7}</span><br/> <span>{8}</span>, <span>{9}</span> </p> <p class=""boleto-contacto""> Teléfono fijo:<br/> <span>{5}</span> </p> <p class=""boleto-contacto""> Teléfono móvil:<br/> <span>{4}</span> </p> <p class=""boleto-contacto""> Correo electrónico:<br/> <span>{3}</span> </p> <p class=""boleto-contacto""> Cuenta bancaria:<br/> <span>{12}</span> </p> <p class=""boleto-contacto""> Referencia bancaria:<br/> <span>{13}</span> </p> <p> <div id=""qrURL-boleto""><img src=""cid:{11}"" /></div> </p> <p class=""boleto-contacto""> {17} </p> <p> <div id=""frente-boleto""><img src=""cid:{14}"" /></div> <div id=""reverso-boleto""><img src=""cid:{15}"" /></div> </p> <p class=""boleto-contacto""> Para más información, puedes revisar nuestro sitio web en<br/><a href=""http://www.sorteoanahuac.mx/"" target=""_blank"">http://www.sorteoanahuac.mx/</a>. </p> </div> </div> </body> <html>", boleto.folio, boleto.comprador.nombre, boleto.comprador.apellidos, boleto.comprador.correo, boleto.comprador.celular, boleto.comprador.direccion.telefono, boleto.comprador.direccion.calle, boleto.comprador.direccion.numero, boleto.comprador.direccion.municipio, boleto.comprador.direccion.estado, boleto.token, qrAttachment.ContentId, sorteo_activo.cuenta_bancaria, colaborador.referencia_bancaria, boletoAttach.ContentId, reversoAttach.ContentId, logoAttach.ContentId, urlBoleto), new System.Net.Mail.Attachment[] { qrAttachment, boletoAttach, reversoAttach, logoAttach }); return; } }
/// <summary> /// Función que permite obtener los datos de un boleto /// </summary> /// <param name="clave">Clave del boleto que se desea consutar</param> /// <param name="clave_persona">Clave de la persona dueña del talonario</param> public static Boleto ObtieneBoleto(long clave, long clave_persona) { Boleto boleto = null; /* Traemos los datos del sorteo activo */ Sorteo sorteo_activo = SorteoService.ObtenerActivo(); /* Abrimos la conexión de base de datos */ database db = new database(); /* Buscamos el boleto por su clave */ ResultSet dbBoleto = db.getTable(String.Format(@" SELECT TOP 1 bol.PK1, bol.FOLIO, CAST(bol.FOLIODIGITAL as NVARCHAR(16)) FOLIODIGITAL, tal.FOLIO AS TAL_FOLIO, scb.PK_COLABORADOR, tal.PK_SORTEO, ISNULL(comp.PK1,-1) tiene_comprador, com.NOMBRE, com.APELLIDOS, com.TELEFONO_M, com.CORREO, com.CALLE, com.NUMERO, com.COLONIA, com.ESTADO, com.MUNDEL, com.TELEFONO_F FROM boletos bol INNER JOIN TALONARIOS tal ON tal.PK1 = bol.PK_TALONARIO LEFT JOIN COLABORADORES_BOLETOS scb ON scb.PK_BOLETO = bol.PK1 LEFT JOIN COMPRADORES_BOLETOS comp ON comp.PK_BOLETO = bol.PK1 LEFT JOIN COMPRADORES com ON com.PK1 = comp.PK_COMPRADOR WHERE bol.PK1 = {0}", clave)); /* Si el boleto existe, procedemos a extraer sus datos */ if (dbBoleto.Next()) { boleto = new Boleto() { clave = dbBoleto.GetLong("PK1"), folio = dbBoleto.Get("FOLIO"), folio_digital = dbBoleto.Get("FOLIODIGITAL"), vendido = true, folio_talonario = dbBoleto.Get("TAL_FOLIO"), clave_colaborador = dbBoleto.GetLong("PK_COLABORADOR"), clave_sorteo = dbBoleto.GetLong("PK_SORTEO") }; /* Si el folio digital es un string vacío, significa que debe ser NULL y no ha sido vendido */ if (string.IsNullOrEmpty(boleto.folio_digital)) { boleto.folio_digital = null; boleto.vendido = false; } /* Revisamos si tiene un comprador */ if (dbBoleto.GetInt("tiene_comprador") > -1) { /* Si tiene comprador agregamos los datos al objeto de salida */ boleto.comprador = new Comprador() { nombre = dbBoleto.Get("NOMBRE"), apellidos = dbBoleto.Get("APELLIDOS"), celular = dbBoleto.Get("TELEFONO_M"), correo = dbBoleto.Get("CORREO"), direccion = new Direccion() { calle = dbBoleto.Get("CALLE"), numero = dbBoleto.Get("NUMERO"), colonia = dbBoleto.Get("COLONIA"), estado = dbBoleto.Get("ESTADO"), municipio = dbBoleto.Get("MUNDEL"), telefono = dbBoleto.Get("TELEFONO_F") } }; } } /* Cerramos la conexión a base de datos */ db.Close(); return(boleto); }
/// <summary> /// Función que obitene un talonaro en base a su folio /// </summary> /// <param name="folio">Folio del talonario</param> /// <param name="clave_persona">PK de la persona dueña del talonario</param> /// <returns>Talonario con sus boletos</returns> public static Talonario Obtiene(string folio, long clave_persona) { Talonario talonario = null; /* Traemos los datos del sorteo activo */ Sorteo sorteo_activo = SorteoService.ObtenerActivo(); /* Abrimos conexión a la base de datos */ database db = new database(); /* Traemos los folios de los talonarios digitales asignados a un colaborador en el sorteo activo */ ResultSet dbTalonario = db.getTable(String.Format(@" SELECT TOP 1 tal.PK1 FROM TALONARIOS tal INNER JOIN SORTEOS_COLABORADORES_TALONARIOS ctal ON tal.PK1 = ctal.PK_TALONARIO WHERE tal.DIGITAL = 1 AND ctal.PK_SORTEO = {0} AND ctal.PK_COLABORADOR = {1} AND tal.FOLIO = '{2}' ORDER BY tal.FOLIO", sorteo_activo.clave, clave_persona, folio)); /* Si el talonario existe, traemos sus datos */ if (dbTalonario.Next()) { /* Traemos los datos del talonario */ talonario = new Talonario() { clave = dbTalonario.GetLong("PK1"), folio = folio }; } /* Si el talonario existe, traemos sus boletos */ if (talonario != null) { ResultSet dbBoleto = db.getTable(String.Format(@" SELECT boletos.PK1, boletos.FOLIO, boletos.FOLIODIGITAL FROM SORTEOS_COLABORADORES_BOLETOS rel_boletos INNER JOIN boletos ON boletos.PK1 = rel_boletos.PK_BOLETO WHERE rel_boletos.PK_SORTEO = {0} AND rel_boletos.PK_COLABORADOR = {1} AND rel_boletos.PK_TALONARIO = {2}", sorteo_activo.clave, clave_persona, talonario.clave)); List <Boleto> boletos = new List <Boleto>(); while (dbBoleto.Next()) { Boleto boleto = new Boleto(false) { clave = dbBoleto.GetLong("PK1"), folio = dbBoleto.Get("FOLIO"), folio_digital = dbBoleto.Get("FOLIODIGITAL") }; if (boleto.folio_digital == "0") { boleto.folio_digital = null; } boleto.vendido = !String.IsNullOrEmpty(boleto.folio_digital); boletos.Add(boleto); } talonario.boletos = boletos.ToArray(); } db.Close(); return(talonario); }