Beispiel #1
0
        /// <summary>
        /// Actualiza la última entrada en la tabla para el concursante mandado como parámetro
        /// </summary>
        public static void actualizarUltimo(string omi, TipoOlimpiada tipo, int dia, string clave, List <float?> puntos, float?total)
        {
            StringBuilder query = new StringBuilder();
            Acceso        db    = new Acceso();

            // Primero obtenemos el timestamp mas grande
            query.Append(" select MAX(timestamp) from DetallePuntos where olimpiada = ");
            query.Append(Cadenas.comillas(omi));
            query.Append(" and clase = ");
            query.Append(Cadenas.comillas(tipo.ToString().ToLower()));
            query.Append(" and dia = ");
            query.Append(dia);
            query.Append(" and clave = ");
            query.Append(Cadenas.comillas(clave));

            db.EjecutarQuery(query.ToString());

            DataTable table = db.getTable();

            if (table.Rows.Count == 0)
            {
                return;
            }

            int timestamp = DataRowParser.ToInt(table.Rows[0][0]);

            query.Clear();

            // Ahora actualizamos los puntos
            query.Append("update DetallePuntos set puntosP1 = ");
            query.Append(puntos[0] == null ? "0" : puntos[0].ToString());
            query.Append(", puntosP2 = ");
            query.Append(puntos[1] == null ? "0" : puntos[1].ToString());
            query.Append(", puntosP3 = ");
            query.Append(puntos[2] == null ? "0" : puntos[2].ToString());
            query.Append(", puntosP4 = ");
            query.Append(puntos[3] == null ? "0" : puntos[3].ToString());
            query.Append(", puntosP5 = ");
            query.Append(puntos[4] == null ? "0" : puntos[4].ToString());
            query.Append(", puntosP6 = ");
            query.Append(puntos[5] == null ? "0" : puntos[5].ToString());
            query.Append(", puntosD = ");
            query.Append(total == null ? "0" : total.ToString());
            query.Append(" where olimpiada = ");
            query.Append(Cadenas.comillas(omi));
            query.Append(" and clase = ");
            query.Append(Cadenas.comillas(tipo.ToString().ToLower()));
            query.Append(" and dia = ");
            query.Append(dia);
            query.Append(" and clave = ");
            query.Append(Cadenas.comillas(clave));
            query.Append(" and timestamp = ");
            query.Append(timestamp);

            db.EjecutarQuery(query.ToString());
        }
Beispiel #2
0
        public static void clean(string omi, TipoOlimpiada tipo, int dia)
        {
            StringBuilder query = new StringBuilder();
            Acceso        db    = new Acceso();

            query.Append(" select * from DetalleLugar where olimpiada = ");
            query.Append(Cadenas.comillas(omi));
            query.Append(" and clase = ");
            query.Append(Cadenas.comillas(tipo.ToString().ToLower()));
            query.Append(" and dia = ");
            query.Append(dia);
            query.Append(" order by clave, timestamp asc ");

            db.EjecutarQuery(query.ToString());

            DataTable table = db.getTable();

            bool         first    = false;
            DetalleLugar anterior = new DetalleLugar();
            DetalleLugar actual   = new DetalleLugar();

            foreach (DataRow r in table.Rows)
            {
                actual.lugar     = DataRowParser.ToInt(r["lugar"]);
                actual.timestamp = DataRowParser.ToInt(r["timestamp"]);
                actual.medalla   = DataRowParser.ToTipoMedalla(r["medalla"]);
                actual.clave     = DataRowParser.ToString(r["clave"]);

                if (actual.clave != anterior.clave)
                {
                    first = true;
                }
                else
                {
                    if (actual.medalla == anterior.medalla &&
                        actual.lugar == anterior.lugar)
                    {
                        if (!first)
                        {
                            borrar(omi, tipo.ToString().ToLower(), anterior.clave, anterior.timestamp, dia);
                        }
                        first = false;
                    }
                    else
                    {
                        first = true;
                    }
                }

                anterior.lugar     = actual.lugar;
                anterior.timestamp = actual.timestamp;
                anterior.medalla   = actual.medalla;
                anterior.clave     = actual.clave;
            }
        }
Beispiel #3
0
        /// <summary>
        /// Actualiza la última entrada en la tabla para el concursante mandado como parámetro
        /// </summary>
        public static void actualizarUltimo(string omi, TipoOlimpiada tipo, int dia, string clave, int lugar, Resultados.TipoMedalla medalla)
        {
            StringBuilder query = new StringBuilder();
            Acceso        db    = new Acceso();

            // Primero obtenemos el timestamp mas grande
            query.Append(" select MAX(timestamp) from DetalleLugar where olimpiada = ");
            query.Append(Cadenas.comillas(omi));
            query.Append(" and clase = ");
            query.Append(Cadenas.comillas(tipo.ToString().ToLower()));
            query.Append(" and dia = ");
            query.Append(dia);
            query.Append(" and clave = ");
            query.Append(Cadenas.comillas(clave));

            db.EjecutarQuery(query.ToString());

            DataTable table = db.getTable();

            if (table.Rows.Count == 0)
            {
                return;
            }

            int timestamp = DataRowParser.ToInt(table.Rows[0][0]);

            query.Clear();

            // Ahora actualizamos los puntos
            query.Append("update DetalleLugar set lugar = ");
            query.Append(lugar);
            if (medalla != Resultados.TipoMedalla.DESCALIFICADO)
            {
                query.Append(", medalla = ");
                query.Append((int)medalla);
            }
            query.Append(" where olimpiada = ");
            query.Append(Cadenas.comillas(omi));
            query.Append(" and clase = ");
            query.Append(Cadenas.comillas(tipo.ToString().ToLower()));
            query.Append(" and dia = ");
            query.Append(dia);
            query.Append(" and clave = ");
            query.Append(Cadenas.comillas(clave));
            query.Append(" and timestamp = ");
            query.Append(timestamp);

            db.EjecutarQuery(query.ToString());
        }
Beispiel #4
0
        /// <summary>
        /// Obtiene todos los albumes de la olimpiada
        /// </summary>
        /// <param name="olimpiada">La olimpiada de la que se quieren los albumes</param>
        /// <param name="tipo">El tipo de olipiada</param>
        /// <returns>La lista de álbumes</returns>
        public static List <Album> obtenerAlbumsDeOlimpiada(string olimpiada, TipoOlimpiada tipo)
        {
            List <Album> albums = new List <Album>();

            Acceso        db    = new Acceso();
            StringBuilder query = new StringBuilder();

            query.Append(" select * from album where olimpiada = ");
            query.Append(Cadenas.comillas(olimpiada));
            query.Append(" and clase = ");
            query.Append(Cadenas.comillas(tipo.ToString().ToLower()));
            query.Append(" order by orden ");

            db.EjecutarQuery(query.ToString());
            DataTable table = db.getTable();

            foreach (DataRow row in table.Rows)
            {
                Album al = new Album();
                al.llenarDatos(row);
                albums.Add(al);
            }

            return(albums);
        }
Beispiel #5
0
        /// <summary>
        /// Calcula los estados de los cuales hay participantes para la persona
        /// </summary>
        /// <param name="tipoOlimpiada">El tipo de olimpiada</param>
        public List <string> consultarEstados(TipoOlimpiada tipoOlimpiada = TipoOlimpiada.NULL)
        {
            List <string> estados = new List <string>();
            Acceso        db      = new Acceso();
            StringBuilder query   = new StringBuilder();

            query.Append(" select distinct(estado) from MiembroDelegacion where persona = ");
            query.Append(this.clave);
            if (tipoOlimpiada != TipoOlimpiada.NULL)
            {
                query.Append(" and clase = ");
                query.Append(Cadenas.comillas(tipoOlimpiada.ToString().ToLower()));
            }

            db.EjecutarQuery(query.ToString());
            DataTable table = db.getTable();

            estados = new List <string>();
            foreach (DataRow r in table.Rows)
            {
                string estado = DataRowParser.ToString(r[0]);
                estados.Add(estado);
            }
            return(estados);
        }
Beispiel #6
0
        public static Dictionary <string, DetalleLugar> obtenerLugaresConTimestamp(string clave, TipoOlimpiada tipo, int dia, int timestamp)
        {
            Dictionary <string, DetalleLugar> lugares = new Dictionary <string, DetalleLugar>();
            Acceso        db    = new Acceso();
            StringBuilder query = new StringBuilder();

            query.Append(" select * from detallelugar ");
            query.Append(" where clase = ");
            query.Append(Cadenas.comillas(tipo.ToString().ToLower()));
            query.Append(" and olimpiada = ");
            query.Append(Cadenas.comillas(clave));
            query.Append(" and dia = ");
            query.Append(dia);
            query.Append(" and timestamp = ");
            query.Append(timestamp);

            db.EjecutarQuery(query.ToString());
            DataTable table = db.getTable();

            for (int i = 0; i < table.Rows.Count; i++)
            {
                DetalleLugar dl = new DetalleLugar();
                dl.llenarDatos(table.Rows[i]);
                lugares.Add(dl.clave, dl);
            }

            return(lugares);
        }
Beispiel #7
0
        public static OmegaUp obtenerParaOMI(string olimpiada, TipoOlimpiada tipoOlimpiada)
        {
            Acceso        db    = new Acceso();
            StringBuilder query = new StringBuilder();

            query.Append(" select * from OmegaUp where tipo = ");
            query.Append(Cadenas.comillas(Instruccion.POLL.ToString().ToLower()));
            query.Append(" and olimpiada = ");
            query.Append(Cadenas.comillas(olimpiada));
            query.Append(" and clase = ");
            query.Append(Cadenas.comillas(tipoOlimpiada.ToString().ToLower()));

            db.EjecutarQuery(query.ToString());

            DataTable table = db.getTable();

            if (table.Rows.Count == 0)
            {
                return(null);
            }

            OmegaUp o = new OmegaUp();

            o.llenarDatos(table.Rows[0]);

            return(o);
        }
Beispiel #8
0
        public static void guardaProblemas(string olimpiada, TipoOlimpiada tipoOlimpiada, int problemas, int dia)
        {
            Acceso        db    = new Acceso();
            StringBuilder query = new StringBuilder();

            query.Append(" update olimpiada set datospublicos = 1 ");
            if (dia == 1)
            {
                query.Append(", problemasDia1 = ");
            }
            else
            {
                query.Append(", problemasDia2 = ");
            }
            query.Append(problemas);
            query.Append(", mostrarResultadosPorDia = ");
            query.Append(dia == 1 ? "0" : "1");
            query.Append(", mostrarResultadosPorProblema = 1 ");
            query.Append(", mostrarResultadosTotales = 1 ");
            query.Append(" where numero = ");
            query.Append(Cadenas.comillas(olimpiada));
            query.Append(" and clase = ");
            query.Append(Cadenas.comillas(tipoOlimpiada.ToString().ToLower()));

            db.EjecutarQuery(query.ToString());
        }
Beispiel #9
0
        private static Dictionary <string, Olimpiada> cargarOlimpiadas(TipoOlimpiada tipoOlimpiada)
        {
            Dictionary <string, Olimpiada> lista = new Dictionary <string, Olimpiada>();
            Acceso        db    = new Acceso();
            StringBuilder query = new StringBuilder();

            TipoOlimpiada tipoQuery = tipoOlimpiada;

            query.Append(" select * from olimpiada ");
            query.Append(" where clase = ");
            query.Append(Cadenas.comillas(tipoQuery.ToString().ToLower()));
            query.Append(" order by año desc,");
            query.Append(" numero desc");

            db.EjecutarQuery(query.ToString());

            DataTable table = db.getTable();

            foreach (DataRow r in table.Rows)
            {
                Olimpiada o = new Olimpiada();
                o.llenarDatos(r);

                lista.Add(o.numero, o);
            }

            return(lista);
        }
Beispiel #10
0
        /// <summary>
        /// Regresa una lista con tres elementos y el metadata de los dias de la omi
        /// </summary>
        /// <param name="omi">La omi de los problemas</param>
        /// <param name="tipoOlimpiada">El tipo olimpiada del que se requieren los datos</param>
        /// <returns>La lista de problemas</returns>
        public static List <Problema> obetnerMetaDatadeOMI(string omi, TipoOlimpiada tipoOlimpiada)
        {
            List <Problema> problemas = new List <Problema>();
            Acceso          db        = new Acceso();
            StringBuilder   query     = new StringBuilder();

            query.Append(" select * from problema where olimpiada = ");
            query.Append(Cadenas.comillas(omi));
            query.Append(" and clase = ");
            query.Append(Cadenas.comillas(tipoOlimpiada.ToString().ToLower()));
            query.Append(" and numero = 0 order by dia asc ");

            if (db.EjecutarQuery(query.ToString()).error)
            {
                return(null);
            }

            DataTable table = db.getTable();

            foreach (DataRow r in table.Rows)
            {
                Problema p = new Problema();
                p.llenarDatos(r);

                problemas.Add(p);
            }

            return(problemas);
        }
Beispiel #11
0
        //
        // GET: /Olimpiada/Edit/

        public ActionResult Edit(string clave, TipoOlimpiada tipo = TipoOlimpiada.OMI)
        {
            if (!estaLoggeado())
            {
                guardarParams(Pagina.LOGIN, Pagina.EDIT_OLIMPIADA, clave + ":" + tipo.ToString());
                return(RedirectTo(Pagina.LOGIN));
            }

            if (!esAdmin())
            {
                return(RedirectTo(Pagina.ERROR, 401));
            }

            Olimpiada o = Olimpiada.obtenerOlimpiadaConClave(clave, tipo);

            if (o == null)
            {
                return(RedirectTo(Pagina.ERROR, 404));
            }

            limpiarErroresViewBag();
            ViewBag.clave  = clave;
            ViewBag.poster = o.poster;

            return(View(o));
        }
Beispiel #12
0
        public static OverlayLugares cargarResultados(string omi, TipoOlimpiada tipoOlimpiada, int dia, string clave)
        {
            OverlayLugares lugares = new OverlayLugares();

            Acceso        db    = new Acceso();
            StringBuilder query = new StringBuilder();

            query.Append(" select * from detallelugar ");
            query.Append(" where clase = ");
            query.Append(Cadenas.comillas(tipoOlimpiada.ToString().ToLower()));
            query.Append(" and olimpiada = ");
            query.Append(Cadenas.comillas(omi));
            query.Append(" and clave = ");
            query.Append(Cadenas.comillas(clave));
            query.Append(" and dia = ");
            query.Append(dia);
            query.Append(" order by timestamp asc ");

            db.EjecutarQuery(query.ToString());
            DataTable table = db.getTable();

            foreach (DataRow r in table.Rows)
            {
                llenarDatos(r, lugares);
            }

            if (lugares.timestamp[0] != 0 && dia == 1)
            {
                lugares.timestamp.Insert(0, 0);
                lugares.lugar.Insert(0, 0);
                lugares.medalla.Insert(0, 7);
            }

            return(lugares);
        }
Beispiel #13
0
        public static List <SedeOnline> obtenerSedes(string omi, string estado, TipoOlimpiada tipoOlimpiada)
        {
            Acceso            db    = new Acceso();
            StringBuilder     query = new StringBuilder();
            List <SedeOnline> list  = new List <SedeOnline>();

            tipoOlimpiada = obtenerTipo(tipoOlimpiada);

            query.Append(" select * from SedeOnline where olimpiada = ");
            query.Append(Cadenas.comillas(omi));
            query.Append(" and clase = ");
            query.Append(Cadenas.comillas(tipoOlimpiada.ToString()));
            if (!String.IsNullOrEmpty(estado))
            {
                query.Append(" and estado = ");
                query.Append(Cadenas.comillas(estado));
            }
            query.Append(" order by estado asc ");

            db.EjecutarQuery(query.ToString());
            DataTable table = db.getTable();

            foreach (DataRow r in table.Rows)
            {
                SedeOnline so = new SedeOnline();
                so.llenarDatos(r);
                list.Add(so);
            }

            return(list);
        }
Beispiel #14
0
        /// <summary>
        /// Guarda los datos del objeto en la base de datos
        /// </summary>
        public void guardar()
        {
            StringBuilder query = new StringBuilder();
            Acceso        db    = new Acceso();

            query.Append("insert into DetallePuntos values(");
            query.Append(Cadenas.comillas(omi));
            query.Append(",");
            query.Append(Cadenas.comillas(tipoOlimpiada.ToString().ToLower()));
            query.Append(",");
            query.Append(Cadenas.comillas(clave));
            query.Append(",");
            query.Append(timestamp);
            query.Append(",");
            query.Append(dia);
            query.Append(",");
            query.Append(this.puntosProblemas[0] == null ? "0" : this.puntosProblemas[0].ToString());
            query.Append(",");
            query.Append(this.puntosProblemas[1] == null ? "0" : this.puntosProblemas[1].ToString());
            query.Append(",");
            query.Append(this.puntosProblemas[2] == null ? "0" : this.puntosProblemas[2].ToString());
            query.Append(",");
            query.Append(this.puntosProblemas[3] == null ? "0" : this.puntosProblemas[3].ToString());
            query.Append(",");
            query.Append(this.puntosProblemas[4] == null ? "0" : this.puntosProblemas[4].ToString());
            query.Append(",");
            query.Append(this.puntosProblemas[5] == null ? "0" : this.puntosProblemas[5].ToString());
            query.Append(",");
            query.Append(this.puntosDia == null ? "0" : this.puntosDia.ToString());
            query.Append(")");

            db.EjecutarQuery(query.ToString());
        }
Beispiel #15
0
        /// <summary>
        /// Regresa la lista de resultados para el problema seleccionado
        /// </summary>
        /// <param name="olimpiada">La olimpiada del problema</param>
        /// <param name="tipo">El tipo de olimpiada</param>
        /// <param name="dia">El dia del problema</param>
        /// <param name="numero">El id del problema</param>
        /// <returns>La lista ordenada de resultados</returns>
        public static List <float> obtenerResultadosParaProblema(string olimpiada, TipoOlimpiada tipo, int dia, int numero)
        {
            List <float>  resultados = new List <float>();
            Acceso        db         = new Acceso();
            StringBuilder query      = new StringBuilder();
            string        puntos     = "puntosD" + dia + "P" + numero;

            query.Append(" select ");
            query.Append(puntos);
            query.Append(" from resultados where olimpiada = ");
            query.Append(Cadenas.comillas(olimpiada));
            query.Append(" and clase = ");
            query.Append(Cadenas.comillas(tipo.ToString().ToLower()));
            query.Append(" order by ");
            query.Append(puntos);
            query.Append(" asc ");

            db.EjecutarQuery(query.ToString());
            DataTable table = db.getTable();

            foreach (DataRow r in table.Rows)
            {
                resultados.Add(DataRowParser.ToStrictFloat(r[0]));
            }

            return(resultados);
        }
Beispiel #16
0
        /// <summary>
        /// Obtiene la tabla de estados generales
        /// Similar a obtenerMedallero de estados, pero incluye todos los estados
        /// </summary>
        /// <param name="tipoOlimpiada">El tipo de olimpiada</param>
        /// <returns>El diccionario de los estados</returns>
        public static Dictionary <string, Medallero> obtenerTablaEstadosGeneral(TipoOlimpiada tipoOlimpiada)
        {
            Dictionary <string, Medallero> estados = new Dictionary <string, Medallero>();

            Acceso        db    = new Acceso();
            StringBuilder query = new StringBuilder();

            query.Append(" select * from Medallero where tipo = ");
            query.Append((int)TipoMedallero.ESTADO);
            query.Append(" and clase = ");
            query.Append(Cadenas.comillas(tipoOlimpiada.ToString().ToLower()));

            db.EjecutarQuery(query.ToString());
            DataTable table = db.getTable();

            foreach (DataRow r in table.Rows)
            {
                // Obtengo los datos de la tabla a un objeto medallero
                Medallero m = new Medallero();
                m.llenarDatos(r);

                // Agrego el medallero con la olimpiada
                estados.Add(m.clave, m);
            }

            return(estados);
        }
Beispiel #17
0
        /// <summary>
        /// Regresa todos los problemas del tipo de olimpiada
        /// </summary>
        /// <param name="tipoOlimpiada">El tipo de olimpiada</param>
        /// <returns>El diccionario de problemas, la llave es la olimpiada</returns>
        public static Dictionary <string, List <Problema> > obtenerProblemas(TipoOlimpiada tipoOlimpiada)
        {
            Dictionary <string, List <Problema> > problemas = new Dictionary <string, List <Problema> >();
            Acceso        db    = new Acceso();
            StringBuilder query = new StringBuilder();

            query.Append(" select * from problema where clase = ");
            query.Append(Cadenas.comillas(tipoOlimpiada.ToString().ToLower()));
            query.Append(" order by olimpiada, dia asc, numero asc ");

            db.EjecutarQuery(query.ToString());
            DataTable table = db.getTable();

            string          ultimaOMI = null;
            List <Problema> lista     = null;

            foreach (DataRow r in table.Rows)
            {
                Problema p = new Problema();
                p.llenarDatos(r);

                if (ultimaOMI == null || ultimaOMI != p.olimpiada)
                {
                    lista = new List <Problema>();
                    problemas.Add(p.olimpiada, lista);
                    ultimaOMI = p.olimpiada;
                }

                lista.Add(p);
            }

            return(problemas);
        }
Beispiel #18
0
        /// <summary>
        /// Obtiene el problema de la base de datos.
        /// De no existir, se regresa un objeto nuevo (sin actualizar la base)
        /// </summary>
        /// <param name="omi">La omi del problema</param>
        /// <param name="tipoOlimpiada">El tipo olimpiada del que se requieren los datos</param>
        /// <param name="dia">El día del problema</param>
        /// <param name="numero">El numero del problema</param>
        /// <returns>El objeto problema</returns>
        public static Problema obtenerProblema(string omi, TipoOlimpiada tipoOlimpiada, int dia, int numero)
        {
            Acceso        db    = new Acceso();
            StringBuilder query = new StringBuilder();

            query.Append(" select * from problema where olimpiada = ");
            query.Append(Cadenas.comillas(omi));
            query.Append(" and clase = ");
            query.Append(Cadenas.comillas(tipoOlimpiada.ToString().ToLower()));
            query.Append(" and dia = ");
            query.Append(dia);
            query.Append(" and numero = ");
            query.Append(numero);

            if (db.EjecutarQuery(query.ToString()).error)
            {
                return(null);
            }

            DataTable table = db.getTable();
            Problema  p     = new Problema();

            if (table.Rows.Count == 0)
            {
                p.olimpiada     = omi;
                p.tipoOlimpiada = tipoOlimpiada;
                p.dia           = dia;
                p.numero        = numero;
            }
            else
            {
                p.llenarDatos(table.Rows[0]);
            }
            return(p);
        }
Beispiel #19
0
        /// <summary>
        /// Obtiene los multimedallistas de la olimpiada mandada como parámetro
        /// </summary>
        /// <param name="tipoOlimpiada">El tipo de olimpiada</param>
        /// <param name="cabeceras">El número de cabeceras que tendrá la tabla</param>
        /// <param name="excluirNoOros">true si solamente debemos incluir aquellos
        /// medallistas con al menos 1 oro</param>
        /// <param name="estado">Si debemos filtrar a cierto estado en particular</param>
        /// <returns>La lista de competidores con múltiples medallas</returns>
        public static List <HallOfFamer> obtenerMultimedallistas(out int cabeceras, TipoOlimpiada tipoOlimpiada = TipoOlimpiada.OMI, bool excluirNoOros = true, string estado = null)
        {
            List <HallOfFamer> medallistas = new List <HallOfFamer>();

            Acceso        db    = new Acceso();
            StringBuilder query = new StringBuilder();

            query.Append(" select clave from Medallero where tipo = ");
            query.Append((int)Medallero.TipoMedallero.PERSONA);
            query.Append(" and ");
            if (excluirNoOros)
            {
                query.Append(" oro > 0 and ");
            }
            query.Append(" (oro + plata + bronce) > 1 and clase = ");
            query.Append(Cadenas.comillas(tipoOlimpiada.ToString().ToLower()));
            query.Append(" order by oro desc, plata desc, bronce desc");

            db.EjecutarQuery(query.ToString());
            DataTable   table   = db.getTable();
            HallOfFamer lastHof = null;

            cabeceras = 0;
            int lugar = 0;

            foreach (DataRow r in table.Rows)
            {
                HallOfFamer hof = new HallOfFamer();
                hof.llenarDatos(DataRowParser.ToInt(r["clave"].ToString()));

                if (estado != null)
                {
                    if (!hof.estados.Contains(estado))
                    {
                        continue;
                    }
                }

                lugar++;
                if (lastHof == null || lastHof.oros != hof.oros ||
                    lastHof.platas != hof.platas || lastHof.bronces != hof.bronces)
                {
                    hof.lugar = lugar;
                }
                else
                {
                    hof.lugar = lastHof.lugar;
                }

                if (hof.medallas.Count > cabeceras)
                {
                    cabeceras = hof.medallas.Count;
                }

                lastHof = hof;
                medallistas.Add(hof);
            }

            return(medallistas);
        }
Beispiel #20
0
        //
        // GET: /Olimpiada/

        public ActionResult Index(string clave, TipoOlimpiada tipo = TipoOlimpiada.OMI)
        {
            if (clave == Olimpiada.TEMP_CLAVE)
            {
                return(RedirectTo(Pagina.EDIT_OLIMPIADA, clave + ":" + tipo.ToString()));
            }

            Olimpiada o = Olimpiada.obtenerOlimpiadaConClave(clave, tipo);

            if (o == null)
            {
                return(RedirectTo(Pagina.ERROR, 404));
            }

            limpiarErroresViewBag();
            ViewBag.clave = clave;

            ViewBag.dia1 = Problema.obtenerProblemasDeOMI(clave, tipo, 1);
            ViewBag.dia2 = Problema.obtenerProblemasDeOMI(clave, tipo, 2);

            ViewBag.metadata = Problema.obetnerMetaDatadeOMI(clave, tipo);

            // Mientras las OMIS y OMIPS sean en el mismo evento que la OMI, no tienen su propia vista
            ViewBag.olimpiadas = Olimpiada.obtenerOlimpiadas(TipoOlimpiada.OMI);

            ViewBag.fotos = Album.obtenerAlbumsDeOlimpiada(clave, tipo).Count > 0;

            return(View(o));
        }
Beispiel #21
0
        public JsonResult Escuelas(TipoOlimpiada tipo, string estado)
        {
            List <object> lista = new List <object>();

            lista.Add(tipo.ToString());
            lista.Add(estado);
            lista.Add(Institucion.obtenerEscuelasDeEstado(tipo, estado));
            return(Json(lista));
        }
Beispiel #22
0
        /// <summary>
        /// Obtiene la tabla de estados generales, similar a las que se ve en wikipedia
        /// </summary>
        /// <param name="tipoOlimpiada">El tipo de olimpiada</param>
        /// <param name="cabeceras">Un arreglo donde cada elemento
        /// inidica si la olimpiada tiene resultados para cualquier estado</param>
        /// <returns>El diccionario de los estados</returns>
        public static Dictionary <string, Dictionary <string, Medallero> > obtenerTablaEstadosGeneral(TipoOlimpiada tipoOlimpiada, out bool[] cabeceras)
        {
            Dictionary <string, Dictionary <string, Medallero> > estados = new Dictionary <string, Dictionary <string, Medallero> >();

            Acceso        db    = new Acceso();
            StringBuilder query = new StringBuilder();

            query.Append(" select * from Medallero where tipo = ");
            query.Append((int)TipoMedallero.ESTADO_POR_OMI);
            query.Append(" and clase = ");
            query.Append(Cadenas.comillas(tipoOlimpiada.ToString().ToLower()));

            db.EjecutarQuery(query.ToString());
            DataTable table = db.getTable();

            // Un hashset para poder construir el arreglo de cabeceras
            HashSet <string> olimpiadasConResultados = new HashSet <string>();

            foreach (DataRow r in table.Rows)
            {
                // Obtengo los datos de la tabla a un objeto medallero
                Medallero m = new Medallero();
                m.llenarDatos(r);
                string estado = m.clave.Substring(0, 3);

                // Obtengo el medallero del estado
                Dictionary <string, Medallero> medallero;
                if (!estados.TryGetValue(estado, out medallero))
                {
                    medallero = new Dictionary <string, Medallero>();
                    estados.Add(estado, medallero);
                }

                // Agrego el medallero con la olimpiada
                medallero.Add(m.omi, m);

                // Ponemos que la olimpiada tiene resultados en el hashset
                if (!olimpiadasConResultados.Contains(m.omi))
                {
                    olimpiadasConResultados.Add(m.omi);
                }
            }

            // Construimos el arreglo de cabeceras
            List <Olimpiada> olimpiadas = Olimpiada.obtenerOlimpiadas(tipoOlimpiada);

            cabeceras = new bool[olimpiadas.Count];

            for (int i = 0; i < olimpiadas.Count; i++)
            {
                cabeceras[i] = olimpiadasConResultados.Contains(olimpiadas[i].numero);
            }

            return(estados);
        }
Beispiel #23
0
        private void llenarDatos(int usuario, TipoOlimpiada tipoOlimpiada = TipoOlimpiada.OMI)
        {
            // Primero obtenemos la persona
            this.persona = Persona.obtenerPersonaConClave(usuario);

            Acceso        db    = new Acceso();
            StringBuilder query = new StringBuilder();

            query.Append(" select olimpiada, medalla, estado from Resultados where concursante = ");
            query.Append(usuario);
            query.Append(" and clase = ");
            query.Append(Cadenas.comillas(tipoOlimpiada.ToString().ToLower()));
            query.Append(" order by medalla");

            db.EjecutarQuery(query.ToString());
            DataTable table = db.getTable();

            medallas = new List <KeyValuePair <Olimpiada, Resultados.TipoMedalla> >();
            estados  = new HashSet <string>();
            foreach (DataRow r in table.Rows)
            {
                Resultados.TipoMedalla medalla = DataRowParser.ToTipoMedalla(DataRowParser.ToString(r["medalla"]));

                if (medalla == Resultados.TipoMedalla.NADA)
                {
                    continue;
                }

                Olimpiada o = Olimpiada.obtenerOlimpiadaConClave(DataRowParser.ToString(r["olimpiada"]), tipoOlimpiada);
                medallas.Add(new KeyValuePair <Olimpiada, Resultados.TipoMedalla>(o, medalla));

                string estado = DataRowParser.ToString(r["estado"]);
                if (!estados.Contains(estado))
                {
                    estados.Add(estado);
                }

                if (medalla == Resultados.TipoMedalla.BRONCE)
                {
                    bronces++;
                }
                else if (medalla == Resultados.TipoMedalla.PLATA)
                {
                    platas++;
                }
                else
                {
                    oros++;
                }
            }
        }
Beispiel #24
0
        /// <summary>
        /// Calcula las participaciones diferente a competidor que tiene la persona
        /// </summary>
        /// <param name="tipoOlimpiada">El tipo de olimpiada</param>
        public List <string> consultarParticipaciones(TipoOlimpiada tipoOlimpiada = TipoOlimpiada.NULL)
        {
            List <string> tipos = new List <string>();
            Acceso        db    = new Acceso();
            StringBuilder query = new StringBuilder();

            query.Append(" select distinct(tipo) from MiembroDelegacion where persona = ");
            query.Append(this.clave);
            query.Append(" and tipo != ");
            query.Append(Cadenas.comillas(MiembroDelegacion.TipoAsistente.COMPETIDOR.ToString().ToLower()));
            if (tipoOlimpiada != TipoOlimpiada.NULL)
            {
                query.Append(" and clase = ");
                query.Append(Cadenas.comillas(tipoOlimpiada.ToString().ToLower()));
            }
            query.Append(" and clase <> ");
            query.Append(Cadenas.comillas(TipoOlimpiada.OMIPO.ToString().ToLower()));
            query.Append(" and clase <> ");
            query.Append(Cadenas.comillas(TipoOlimpiada.OMISO.ToString().ToLower()));

            db.EjecutarQuery(query.ToString());
            DataTable table = db.getTable();

            tipos = new List <string>();
            foreach (DataRow r in table.Rows)
            {
                MiembroDelegacion.TipoAsistente tipo = DataRowParser.ToTipoAsistente(DataRowParser.ToString(r[0]));
                if (tipo == MiembroDelegacion.TipoAsistente.DELELIDER)
                {
                    if (!tipos.Contains(MiembroDelegacion.TipoAsistente.LIDER.ToString()))
                    {
                        tipos.Add(MiembroDelegacion.TipoAsistente.LIDER.ToString());
                    }
                    if (!tipos.Contains(MiembroDelegacion.TipoAsistente.DELEGADO.ToString()))
                    {
                        tipos.Add(MiembroDelegacion.TipoAsistente.DELEGADO.ToString());
                    }
                }
                else
                {
                    string t = MiembroDelegacion.getTipoAsistenteString(tipo);
                    if (!tipos.Contains(t))
                    {
                        tipos.Add(t);
                    }
                }
            }
            return(tipos);
        }
Beispiel #25
0
        /// <summary>
        /// Crea una nueva OMI en el sitio completamente vacia con clave TMP
        /// </summary>
        /// <param name="tipoOlimpiada">El tipo de olimpiada que se quiere crear</param>
        public static void nuevaOMI(TipoOlimpiada tipoOlimpiada)
        {
            // Borramos la referencia en la aplicacion para que el siguiente query recargue las olimpiadas
            resetOMIs(tipoOlimpiada);

            Acceso        db    = new Acceso();
            StringBuilder query = new StringBuilder();

            query.Append(" insert into olimpiada values (");
            query.Append(Cadenas.comillas(TEMP_CLAVE));
            query.Append(", ");
            query.Append(Cadenas.comillas(tipoOlimpiada.ToString().ToLower()));
            query.Append(",'', 'MEX', 'México' , '0'");
            query.Append(",'', '', '', '', '', 0, 0, 0, 0, '', 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0) ");

            db.EjecutarQuery(query.ToString());
        }
Beispiel #26
0
        /// <summary>
        /// Revisa en la base de datos si el estado estuvo en la olimpiada mandada como parametro
        /// </summary>
        /// <param name="tipoOlimpiada">El tipo de olimpiada</param>
        /// <param name="olimpiada">La clave de la olimpiada</param>
        /// <returns></returns>
        public bool estadoVinoAOlimpiada(TipoOlimpiada tipoOlimpiada, string olimpiada)
        {
            Acceso        db    = new Acceso();
            StringBuilder query = new StringBuilder();

            query.Append(" select COUNT(*) from Resultados where clase = ");
            query.Append(Cadenas.comillas(tipoOlimpiada.ToString().ToLower()));
            query.Append(" and olimpiada = ");
            query.Append(Cadenas.comillas(olimpiada));
            query.Append(" and estado = ");
            query.Append(Cadenas.comillas(this.clave));

            db.EjecutarQuery(query.ToString());

            DataTable table = db.getTable();

            return(((int)table.Rows[0][0]) > 0);
        }
Beispiel #27
0
        /// <summary>
        /// Regresa todas las escuelas que han representado a un estado
        /// </summary>
        /// <param name="tipoOlimpiada">El tipo de olimpiada</param>
        /// <param name="estado">El estado que se quiere consultar</param>
        public static List <Ajax.BuscarEscuelas> obtenerEscuelasDeEstado(TipoOlimpiada tipoOlimpiada, string estado)
        {
            Acceso        db    = new Acceso();
            StringBuilder query = new StringBuilder();
            List <Ajax.BuscarEscuelas> escuelas = new List <Ajax.BuscarEscuelas>();

            query.Append(" select * from Institucion where clave in ");
            query.Append(" (select distinct(institucion) from MiembroDelegacion as md ");
            query.Append(" where md.estado =  ");
            query.Append(Cadenas.comillas(estado));
            if (tipoOlimpiada == TipoOlimpiada.OMIP || tipoOlimpiada == TipoOlimpiada.OMIPO)
            {
                query.Append(" and (md.clase =  ");
                query.Append(Cadenas.comillas(TipoOlimpiada.OMIP.ToString().ToLower()));
                query.Append(" or md.clase =  ");
                query.Append(Cadenas.comillas(TipoOlimpiada.OMIPO.ToString().ToLower()));
                query.Append(" ) ");
            }
            else if (tipoOlimpiada == TipoOlimpiada.OMIS || tipoOlimpiada == TipoOlimpiada.OMISO)
            {
                query.Append(" and (md.clase =  ");
                query.Append(Cadenas.comillas(TipoOlimpiada.OMIS.ToString().ToLower()));
                query.Append(" or md.clase =  ");
                query.Append(Cadenas.comillas(TipoOlimpiada.OMISO.ToString().ToLower()));
                query.Append(" ) ");
            }
            else
            {
                query.Append(" and md.clase =  ");
                query.Append(Cadenas.comillas(tipoOlimpiada.ToString().ToLower()));
            }
            query.Append(" ) order by nombre ");

            db.EjecutarQuery(query.ToString());
            DataTable table = db.getTable();

            foreach (DataRow r in table.Rows)
            {
                Ajax.BuscarEscuelas be = new Ajax.BuscarEscuelas();
                be.llenarDatos(r);
                escuelas.Add(be);
            }
            return(escuelas);
        }
Beispiel #28
0
        public static int obtenerTimestampMasReciente(string clave, TipoOlimpiada tipo, int dia)
        {
            Acceso        db    = new Acceso();
            StringBuilder query = new StringBuilder();

            query.Append(" select top 1 timestamp from detallepuntos ");
            query.Append(" where clase = ");
            query.Append(Cadenas.comillas(tipo.ToString().ToLower()));
            query.Append(" and olimpiada = ");
            query.Append(Cadenas.comillas(clave));
            query.Append(" and dia = ");
            query.Append(dia);
            query.Append(" order by timestamp desc ");

            db.EjecutarQuery(query.ToString());
            DataTable table = db.getTable();

            return(DataRowParser.ToInt(table.Rows[0][0]));
        }
Beispiel #29
0
        /// <summary>
        /// Obtiene una lista de todas las olimpiadas con albumes de fotos
        /// </summary>
        /// <param name="tipo">El tipo de olimpiada</param>
        /// <returns>La lista de olimpiadas</returns>
        public static HashSet <string> obtenerOlimpiadasConAlbumes(TipoOlimpiada tipo = TipoOlimpiada.OMI)
        {
            HashSet <string> olimpiadas = new HashSet <string>();
            Acceso           db         = new Acceso();
            StringBuilder    query      = new StringBuilder();

            query.Append(" select distinct(olimpiada) from album where clase = ");
            query.Append(Cadenas.comillas(tipo.ToString().ToLower()));

            db.EjecutarQuery(query.ToString());
            DataTable table = db.getTable();

            foreach (DataRow row in table.Rows)
            {
                olimpiadas.Add(DataRowParser.ToString(row[0]));
            }

            return(olimpiadas);
        }
Beispiel #30
0
        /// <summary>
        /// Regresa el Top 3 de todas las olimpiadas
        /// </summary>
        /// <param name="tipoOlimpiada">El tipo de olimpiada</param>
        /// <returns>La lista de top 3 de todas las olimpiadas</returns>
        public static Dictionary <string, List <KeyValuePair <Persona, Resultados.TipoMedalla> > > obtenerTop3(TipoOlimpiada tipoOlimpiada)
        {
            Dictionary <string, List <KeyValuePair <Persona, Resultados.TipoMedalla> > > top3 = new Dictionary <string, List <KeyValuePair <Persona, Resultados.TipoMedalla> > >();

            Acceso        db    = new Acceso();
            StringBuilder query = new StringBuilder();

            query.Append(" select olimpiada, concursante, medalla from resultados where clase =  ");
            query.Append(Cadenas.comillas(tipoOlimpiada.ToString().ToLower()));
            query.Append(" and (medalla = ");
            query.Append((int)Resultados.TipoMedalla.ORO_1);
            query.Append(" or medalla = ");
            query.Append((int)Resultados.TipoMedalla.ORO_2);
            query.Append(" or medalla = ");
            query.Append((int)Resultados.TipoMedalla.ORO_3);
            query.Append(") order by olimpiada, medalla asc");

            db.EjecutarQuery(query.ToString());
            DataTable table = db.getTable();

            List <KeyValuePair <Persona, Resultados.TipoMedalla> > ganadores = null;
            string lastOMI = null;

            foreach (DataRow r in table.Rows)
            {
                string olimpiada               = DataRowParser.ToString(r["olimpiada"]);
                int    concursante             = DataRowParser.ToInt(r["concursante"]);
                Resultados.TipoMedalla medalla = DataRowParser.ToTipoMedalla(r["medalla"]);

                if (lastOMI == null || lastOMI != olimpiada)
                {
                    ganadores = new List <KeyValuePair <Persona, Resultados.TipoMedalla> >();
                    top3.Add(olimpiada.Trim(), ganadores);
                    lastOMI = olimpiada;
                }

                Persona persona = Persona.obtenerPersonaConClave(concursante);
                ganadores.Add(new KeyValuePair <Persona, Resultados.TipoMedalla>(persona, medalla));
            }

            return(top3);
        }