/// <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 obtiene los datos del sorteo activo /// </summary> /// <returns>Estructura con los datos del Sorteo Activo</returns> public static Sorteo ObtenerActivo() { Sorteo sorteo = null; /* Abrimos conexión a base de datos */ database db = new database(); /* Buscamos el sorteo */ ResultSet dbSorteo = db.getTable(String.Format(@" SELECT TOP 1 sorteo.PK1, sorteo.CLAVE, sorteo.SORTEO, sorteo.DESCRIPCION, sorteo.CUENTA, sorteo.FECHA_I, sorteo.FECHA_T, sorteo.URL_1, sorteo.URL_2, sorteo.URL_3, sorteo.URL_4, sorteo.URL_5, sorteo.URL_6, n.LIMITE_VENTA, n.LIMITE_DEPOSITO FROM SORTEOS sorteo LEFT JOIN SECTORES sc ON sc.PK_SORTEO = sorteo.PK1 LEFT JOIN NICHOS n ON n.PK_SECTOR = sc.PK1 WHERE sorteo.ACTIVO = 1 ORDER BY n.LIMITE_VENTA DESC"));//db.SORTEOS.Where(s => s.PK1 == clave).FirstOrDefault(); /* En caso de existir ese sorteo, procedemos a traer sus datos */ if (dbSorteo.Next()) { /* Llenamos los datos que estan en la tabla de SORTEOS */ sorteo = new Sorteo() { clave = dbSorteo.GetLong("PK1"), identificador = dbSorteo.Get("CLAVE"), nombre = dbSorteo.Get("SORTEO"), descripcion = dbSorteo.Get("DESCRIPCION"), cuenta_bancaria = dbSorteo.Get("CUENTA"), fecha_inico = dbSorteo.GetDateTime("FECHA_I"), fecha_fin = dbSorteo.GetDateTime("FECHA_T"), url_politicas = dbSorteo.Get("URL_1"), url_condiciones = dbSorteo.Get("URL_2"), url_reglamento = dbSorteo.Get("URL_3"), url_aceptacion = dbSorteo.Get("URL_4"), url_conoce = dbSorteo.Get("URL_5"), url_lista_ganadores = dbSorteo.Get("URL_6") }; sorteo.limite_venta = dbSorteo.GetDateTime("LIMITE_VENTA"); sorteo.limite_abono = dbSorteo.GetDateTime("LIMITE_DEPOSITO"); } // Si encontramos un sorteo válido, obtenemos su listado de ganadores // if (sorteo != null) // { // List<Ganador> ganadores = new List<Ganador>(); // /* Traemos a los ganadores */ // ResultSet dbGanadores = db.getTable(String.Format(@" //SELECT boletos.FOLIO, premios.NUM_PREMIO //FROM GANADORES gana //INNER JOIN PREMIOS //ON gana.PK_PREMIO = PREMIOS.PK1 //INNER JOIN COMPRADORES compra //ON compra.PK1 = gana.PK_COMPRADOR //INNER JOIN BOLETOS //ON boletos.PK1 = compra.PK_BOLETO //WHERE gana.PK_SORTEO = {0} //AND premios.CLAVE_BENEFICIARIO = 1 //ORDER BY PREMIOS.CLASIFICACION, PREMIOS.NUM_PREMIO", sorteo.clave)); // while (dbGanadores.Next()) // { // ganadores.Add(new Ganador() // { // folio = dbGanadores.Get("FOLIO"), // lugar = dbGanadores.GetInt("NUM_PREMIO") // }); // }; // sorteo.ganadores = ganadores.ToArray(); // } db.Close(); return(sorteo); }
/// <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); }