/// <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());
        }
Пример #2
0
        /// <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);
        }