Ejemplo n.º 1
0
        //
        // GET: /Olimpiada/Estados/

        public ActionResult Estados(string clave = null, TipoOlimpiada tipo = TipoOlimpiada.OMI)
        {
            if (tipo != TipoOlimpiada.OMI)
            {
                return(RedirectTo(Pagina.ERROR, 404));
            }

            Olimpiada o;

            if (clave == null)
            {
                o     = Olimpiada.obtenerMasReciente();
                clave = o.numero;
                tipo  = o.tipoOlimpiada;
            }
            else
            {
                o = Olimpiada.obtenerOlimpiadaConClave(clave, tipo);
            }

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

            Medallero medalleroGeneral;
            Persona   p = getUsuario();

            ViewBag.liveResults = o.liveResults;
            if (o.esOnline && OmegaUp.RunnerStarted && p != null && p.esSuperUsuario())
            {
                ViewBag.secretScoreboard = true;
                ViewBag.estados          = Medallero.obtenerTablaEstadosSecreta(clave, o.tipoOlimpiada);
                ViewBag.medalleroGeneral = null;
            }
            else
            {
                ViewBag.secretScoreboard = false;
                ViewBag.estados          = Medallero.obtenerTablaEstados(o.tipoOlimpiada, clave, out medalleroGeneral);
                ViewBag.medalleroGeneral = medalleroGeneral;
            }
            ViewBag.olimpiadas  = Olimpiada.obtenerOlimpiadas(tipo);
            ViewBag.hayPromedio = Medallero.hayPromedio(ViewBag.estados);
            ViewBag.hayPuntos   = Medallero.hayPuntos(ViewBag.estados);

            return(View(o));
        }
Ejemplo n.º 2
0
        //
        // GET: /Escuela/

        public ActionResult Index(string url = null, string clave = null, string omi = null, TipoOlimpiada tipo = TipoOlimpiada.OMI)
        {
            Institucion i = null;

            if (url == null && clave != null)
            {
                List <MiembroDelegacion> md = MiembroDelegacion.obtenerMiembrosConClave(omi, tipo, clave);
                if (md.Count == 0)
                {
                    return(RedirectTo(Pagina.ERROR, 404));
                }
                i   = Institucion.obtenerInstitucionConClave(md[0].claveEscuela);
                url = i.nombreURL;
            }

            if (i == null)
            {
                i = Institucion.obtenerInstitucionConNombreURL(url);
            }
            if (i == null)
            {
                return(RedirectTo(Pagina.ERROR, 404));
            }

            Medalleros m = Medallero.obtenerMedalleros(Medallero.TipoMedallero.INSTITUCION, i.clave.ToString());

            tipo = m.obtenerDefault(tipo);
            Medallero medallero = m.medalleroDeTipo(tipo);

            if (medallero == null)
            {
                medallero = new Medallero(tipo);
            }

            ViewBag.sedes         = i.obtenerOlimpiadasSede();
            ViewBag.participantes = Resultados.obtenerAlumnosDeInstitucion(i.clave, tipo);
            ViewBag.medallas      = medallero;
            ViewBag.medalleros    = m;
            ViewBag.tipo          = tipo;
            limpiarErroresViewBag();

            return(View(i));
        }
Ejemplo n.º 3
0
        //
        // GET: /Estado/

        public ActionResult Index(string clave, TipoOlimpiada tipo = TipoOlimpiada.OMI)
        {
            Estado e = Estado.obtenerEstadoConClave(clave);

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

            Medalleros m = Medallero.obtenerMedalleros(Medallero.TipoMedallero.ESTADO, e.clave);

            tipo = m.obtenerDefault(tipo);

            limpiarErroresViewBag();
            ViewBag.sedes         = e.obtenerOlimpiadasSede();
            ViewBag.participantes = Resultados.obtenerAlumnosDeEstado(clave, tipo);
            ViewBag.medallas      = m.medalleroDeTipo(tipo);
            ViewBag.medalleros    = m;
            ViewBag.tipo          = tipo;
            ViewBag.estados       = Estado.obtenerEstados();

            return(View(e));
        }
Ejemplo n.º 4
0
        //
        // GET: /Estados/Lugares/

        public ActionResult Lugares()
        {
            bool[]           cabeceras;
            List <Olimpiada> olimpiadas = Olimpiada.obtenerOlimpiadas(TipoOlimpiada.OMI);

            ViewBag.olimpiadas = olimpiadas;
            ViewBag.estados    = Medallero.obtenerTablaEstadosGeneral(TipoOlimpiada.OMI, out cabeceras);
            ViewBag.cabeceras  = cabeceras;

            int ultimoValido = 0;

            for (int i = cabeceras.Length - 1; i >= 0; i--)
            {
                if (cabeceras[i] && olimpiadas[i].estados > 0)
                {
                    ultimoValido = i;
                }
            }

            ViewBag.ultimoValido = ultimoValido;
            ViewBag.admin        = esAdmin();

            return(View(Estado.obtenerEstados()));
        }
Ejemplo n.º 5
0
        //
        // GET: /Profile/view/

        public ActionResult view(string usuario = null, string clave = null, TipoOlimpiada tipo = TipoOlimpiada.OMI, string omi = null)
        {
            Persona p = null;

            limpiarErroresViewBag();

            // QR's de competidor vienen en la forma usuario=null;clave=CMX-3;tipo=OMI;omi='30'
            if (usuario == null && clave != null)
            {
                List <MiembroDelegacion> md = MiembroDelegacion.obtenerMiembrosConClave(omi, tipo, clave, aproximarClave: true);
                if (md.Count == 0)
                {
                    return(RedirectTo(Pagina.ERROR, 404));
                }
                if (md.Count > 1)
                {
                    return(RedirectTo(Pagina.DELEGACION, omi + ":" + md[0].estado));
                }
                p       = Persona.obtenerPersonaConClave(md[0].claveUsuario);
                usuario = p.usuario;
            }

            if (String.IsNullOrEmpty(usuario))
            {
                if (estaLoggeado())
                {
                    p = getUsuario();
                    ViewBag.tienePeticiones = p.tienePeticiones();
                }
                else
                {
                    guardarParams(Pagina.LOGIN, Pagina.VIEW_PROFILE, "");
                    return(RedirectTo(Pagina.LOGIN));
                }
            }
            else
            {
                if (p == null)
                {
                    p = Persona.obtenerPersonaDeUsuario(usuario);
                }
                if (p != null)
                {
                    Persona u = getUsuario();
                    if (p.usuario == u.usuario)
                    {
                        ViewBag.tienePeticiones = p.tienePeticiones();
                    }
                }
                else
                {
                    return(RedirectTo(Pagina.ERROR, 404));
                }
            }

            // Estas variables de sesión tienen algo cuando se inicia sesión por primera vez y
            // se va a hacer el enlace de cuentas
            ViewBag.GUID = "";
            if (Session[GUID_STRING] != null && Session[GUID_USER].ToString() == p.clave.ToString())
            {
                ViewBag.GUID = Session[GUID_STRING];
            }
            Session[GUID_STRING] = null;
            Session[GUID_USER]   = null;

            if (tipo == TipoOlimpiada.OMIS || tipo == TipoOlimpiada.OMIP || TableManager.isOMIPOS(tipo))
            {
                tipo = TipoOlimpiada.OMI;
            }

            Medalleros medalleros = Medallero.obtenerMedalleros(Medallero.TipoMedallero.PERSONA, p.clave.ToString());

            ViewBag.participaciones = Resultados.obtenerParticipacionesComoCompetidorPara(p.clave, tipo);
            ViewBag.asistencias     = MiembroDelegacion.obtenerParticipaciones(p.clave);
            ViewBag.medalleros      = medalleros;
            ViewBag.tipo            = tipo;
            return(View(p));
        }
Ejemplo n.º 6
0
        public void ordena(int timestamp, int dia)
        {
            // Ordenamos los resutlados
            List <Resultados> list = this.resultados.Values.ToList();

            list.Sort(compara);

            // Si no hemos calculado los cortes, o el numero de concursantes cambió,
            // calculamos los cortes
            if (this.cortes == null || this.cortes[3] <= this.concursantes)
            {
                if (this.tipoOlimpiada == TipoOlimpiada.OMI)
                {
                    // Para las OMI se siguen las reglas de los doceavos
                    this.cortes = new int[] {
                        (int)Math.Ceiling(this.concursantes / 12.0),
                        (int)Math.Ceiling(this.concursantes / 4.0),
                        (int)Math.Ceiling(this.concursantes / 2.0),
                        this.concursantes + 1
                    };
                }
                else
                {
                    // Para OMIP y OMIS, se siguen las reglas de los cincos
                    this.cortes = new int[] {
                        5,
                        10,
                        15,
                        this.concursantes + 1
                    };
                }
            }

            int lugar        = 0;
            int lastPoints   = -1;
            int empatados    = 0;
            int premioActual = 0;

            this.reseteaMedalleroEstados();

            // Asignamos lugares y medallas
            for (int counter = 1; counter <= list.Count; counter++)
            {
                Resultados r = list[counter - 1];
                if (r == null)
                {
                    break;
                }

                // Se acordó que para el calculo de medallas, los puntos se iban a redondear
                int currentPoints = (int)Math.Round((decimal)r.total, 0);
                if (currentPoints == lastPoints)
                {
                    empatados++;
                }
                else
                {
                    lugar     = counter;
                    empatados = 0;
                }

                r.lugar    = lugar;
                lastPoints = currentPoints;

                // Si no hay puntos, no hay medallas
                if (currentPoints == 0)
                {
                    r.medalla = Resultados.TipoMedalla.NADA;
                    // Si no hay puntos, tienes el último lugar
                    r.lugar = concursantes;
                }
                else
                {
                    // Se verifica si hay que cambiar de premio
                    while (this.cortes[premioActual] < counter && empatados == 0)
                    {
                        premioActual++;
                    }

                    r.medalla = medallas[premioActual];
                }


                // Para las OMI también calculamos los estados
                if (tipoOlimpiada == TipoOlimpiada.OMI)
                {
                    Medallero m;
                    if (!medalleroEstados.TryGetValue(r.estado, out m))
                    {
                        m = this.agregaEstado(r.estado);
                    }

                    m.count++;

                    if (m.count <= 4)
                    {
                        m.puntos += r.total;
                    }

                    switch (r.medalla)
                    {
                    case Resultados.TipoMedalla.ORO:
                    {
                        m.oros++;
                        break;
                    }

                    case Resultados.TipoMedalla.PLATA:
                    {
                        m.platas++;
                        break;
                    }

                    case Resultados.TipoMedalla.BRONCE:
                    {
                        m.bronces++;
                        break;
                    }
                    }
                }

                // Finalmente guardamos la linea en la base de datos
                r.guardar(detalles: true, timestamp: timestamp, dia: dia, soloDetalles: Program.HIDE);
            }

            // Para OMIPS ya terminamos los cálculos
            if (tipoOlimpiada != TipoOlimpiada.OMI)
            {
                return;
            }

            // Si estamos escondiendo los puntos, no hace falta continuar
            if (Program.HIDE)
            {
                return;
            }

            // Ordenamos también el medallero de los estados
            List <Medallero> sortedEstados = new List <Medallero>(medalleroEstados.Values);

            // Primero calculamos los promedios
            foreach (Medallero estado in sortedEstados)
            {
                // Arreglamos el estado sede
                int competidores = estado.count;
                if (competidores > 4)
                {
                    competidores = 4;
                }
                estado.promedio = (float?)Math.Round((double)(estado.puntos / competidores), 2);
            }

            // Luego ordenamos
            Medallero ultimoEstado = null;

            sortedEstados.Sort();
            lugar = 0;

            // Finalmente, asignamos lugares
            for (int i = 0; i < sortedEstados.Count; i++)
            {
                Medallero estado = sortedEstados[i];
                lugar++;

                // Revisamos si hay empates entre estados
                if (ultimoEstado == null ||
                    ultimoEstado.oros != estado.oros ||
                    ultimoEstado.platas != estado.platas ||
                    ultimoEstado.bronces != estado.bronces ||
                    (int)Math.Round((double)ultimoEstado.puntos) != (int)Math.Round((double)estado.puntos))
                {
                    estado.lugar = lugar;
                }
                else
                {
                    estado.lugar = ultimoEstado.lugar;
                }

                ultimoEstado = estado;

                estado.actualizar();
            }
        }