예제 #1
0
        //
        // GET: /Registro/EliminarSede

        public ActionResult EliminarSede(int clave)
        {
            SedeOnline so = SedeOnline.obtenerSedeConClave(clave);
            Persona    p  = getUsuario();
            Olimpiada  o  = null;

            if (so != null)
            {
                o = Olimpiada.obtenerOlimpiadaConClave(so.omi, so.tipoOlimpiada);
            }

            if (so == null || !tienePermisos(o.registroActivo || o.registroSedes, so.estado) ||
                (!p.esSuperUsuario() && !o.registroSedes))
            {
                return(RedirectTo(Pagina.HOME));
            }

            List <MiembroDelegacion> miembros = MiembroDelegacion.obtenerMiembrosEnSede(clave);

            if (miembros.Count > 0)
            {
                return(RedirectTo(Pagina.HOME));
            }

            so.borrar();

            // Se registra la telemetria
            Log.add(Log.TipoLog.REGISTRO, "Usuario " + getUsuario().nombreCompleto + " elimino la sede " +
                    so.nombre + " del estado " + so.estado);

            return(RedirectTo(Pagina.REGISTRO, new { omi = so.omi, estado = so.estado }));
        }
예제 #2
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));
        }
예제 #3
0
        public ActionResult Edit(Album album)
        {
            if (!esAdmin() || album == null)
            {
                return(RedirectTo(Pagina.HOME));
            }

            Olimpiada o = Olimpiada.obtenerOlimpiadaConClave(album.olimpiada, album.tipoOlimpiada);

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

            if (!ModelState.IsValid)
            {
                return(View(album));
            }

            album.guardarDatos();

            Log.add(Log.TipoLog.FACEBOOK, "Álbum " + album.id + " actualizado por admin " + getUsuario().nombreCompleto);

            return(RedirectTo(Pagina.FOTOS, album.olimpiada));
        }
예제 #4
0
        //
        // GET: /Olimpiada/Attendees/

        public ActionResult Attendees(string clave, TipoOlimpiada tipo = TipoOlimpiada.OMI)
        {
            if (!estaLoggeado())
            {
                guardarParams(Pagina.LOGIN, Pagina.ATTENDEES_OMI, clave);
                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));
            }

            ViewBag.asistentes = o.obtenerTablaAsistentes();
            limpiarErroresViewBag();

            return(View(o));
        }
예제 #5
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));
        }
예제 #6
0
        public ActionResult Attendees(string tabla, string clave, TipoOlimpiada tipo = TipoOlimpiada.OMI)
        {
            if (!esAdmin() || tabla == null || clave == null)
            {
                return(RedirectTo(Pagina.HOME));
            }

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

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

            limpiarErroresViewBag();
            ViewBag.omi = clave;

            string errores = o.guardarTablaAsistentes(tabla);

            if (errores.Length > 0)
            {
                ViewBag.errorOMI   = true;
                ViewBag.asistentes = errores;
            }
            else
            {
                ViewBag.guardado = true;
                Log.add(Log.TipoLog.ADMIN, "Participantes de " + o.tipoOlimpiada + " " + o.año + " actualizados por admin " + getUsuario().nombre);
            }

            return(View(o));
        }
예제 #7
0
        //
        // GET: /Problema/Edit/

        public ActionResult Edit(string omi, int dia, int numero, TipoOlimpiada tipo = TipoOlimpiada.OMI)
        {
            if (!estaLoggeado())
            {
                guardarParams(Pagina.LOGIN, Pagina.PROBLEMA, omi + ":" + dia + ":" + numero);
                return(RedirectTo(Pagina.LOGIN));
            }

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

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

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

            if (dia < 0 || dia > 2)
            {
                return(RedirectTo(Pagina.ERROR, 401));
            }

            if (numero < 0 || numero > 4)
            {
                return(RedirectTo(Pagina.ERROR, 401));
            }

            Problema p = Problema.obtenerProblema(omi, tipo, dia, numero);

            return(View(p));
        }
예제 #8
0
        //
        // GET: /Olimpiada/ResultsTable/

        public ActionResult ResultsTable(string clave, TipoOlimpiada tipo = TipoOlimpiada.OMI)
        {
            if (!estaLoggeado())
            {
                guardarParams(Pagina.LOGIN, Pagina.RESULTS_TABLE, clave);
                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));
            }

            ViewBag.dia1       = o.problemasDia1;
            ViewBag.dia2       = o.problemasDia2;
            ViewBag.resultados = o.obtenerResultadosAdmin();
            limpiarErroresViewBag();

            return(View(o));
        }
예제 #9
0
        public ActionResult ResultsTable(string tabla, string clave, TipoOlimpiada tipo = TipoOlimpiada.OMI, bool run = false)
        {
            if (!esAdmin() || tabla == null || clave == null)
            {
                return(RedirectTo(Pagina.HOME));
            }

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

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

            limpiarErroresViewBag();
            ViewBag.omi  = clave;
            ViewBag.dia1 = o.problemasDia1;
            ViewBag.dia2 = o.problemasDia2;
            string errores = o.guardarTablaResultados(tabla, run);

            if (errores.Length > 0)
            {
                ViewBag.errorOMI   = true;
                ViewBag.resultados = errores;
            }
            else
            {
                ViewBag.guardado = true;
                Log.add(Log.TipoLog.ADMIN, "Resultados de " + o.tipoOlimpiada + " " + o.año + " actualizados por admin " + getUsuario().nombreCompleto);
            }

            return(View(o));
        }
예제 #10
0
        //
        // GET: /Admin/Trim/

        public ActionResult Trim(TipoOlimpiada tipo, int tiempo, int dia, string omi = "")
        {
            if (!esAdmin())
            {
                return(RedirectTo(Pagina.ERROR, 401));
            }

            Olimpiada o;

            if (String.IsNullOrEmpty(omi))
            {
                o = Olimpiada.obtenerMasReciente();
            }
            else
            {
                o = Olimpiada.obtenerOlimpiadaConClave(omi, TipoOlimpiada.OMI);
            }

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

            DetalleLugar.clean(o.numero, tipo, dia);
            DetalleLugar.trim(o.numero, tipo, tiempo, dia);

            DetallePuntos.clean(o.numero, tipo, dia);
            DetallePuntos.trim(o.numero, tipo, tiempo, dia);

            return(RedirectTo(Pagina.ADMIN_SCOREBOARD));
        }
예제 #11
0
        //
        // GET: /Registro/Sede

        public ActionResult Sede(string omi, string estado, TipoOlimpiada tipo, int clave = 0)
        {
            failSafeViewBag();
            Persona   p = getUsuario();
            Olimpiada o = Olimpiada.obtenerOlimpiadaConClave(omi, tipo);

            ViewBag.omi = o == null ? new Olimpiada() : o;

            if (o == null || !tienePermisos(o.registroActivo || o.registroSedes, estado) ||
                (!p.esSuperUsuario() && !o.registroSedes))
            {
                ViewBag.errorInfo = "permisos";
                return(View(new SedeOnline()));
            }

            SedeOnline so = null;

            if (clave > 0)
            {
                so = SedeOnline.obtenerSedeConClave(clave);
                if (so == null || so.estado != estado && !p.esSuperUsuario())
                {
                    ViewBag.errorInfo = "permisos";
                    return(View(new SedeOnline()));
                }
            }

            ViewBag.estado = Estado.obtenerEstadoConClave(estado);
            if (so == null)
            {
                so = new SedeOnline();
            }

            return(View(so));
        }
예제 #12
0
        //
        // GET: /Registro/Delegacion

        public ActionResult Delegacion(string omi = null, string estado = null, TipoOlimpiada tipo = TipoOlimpiada.OMI)
        {
            if (omi == null)
            {
                omi = Olimpiada.obtenerMasReciente(yaEmpezada: false).numero;
            }

            failSafeViewBag();
            Olimpiada o = Olimpiada.obtenerOlimpiadaConClave(omi, tipo);

            ViewBag.omi = o == null ? new Olimpiada() : o;
            if (o == null || !tienePermisos(o.registroActivo || o.registroSedes, estado))
            {
                ViewBag.permisos = true;
                return(View(new List <MiembroDelegacion>()));
            }

            Persona p = getUsuario();

            ViewBag.invitaciones = false;

            if (!p.esSuperUsuario())
            {
                if (estado == null)
                {
                    return(RedirectTo(Pagina.HOME));
                }
                Estado e = Estado.obtenerEstadoConClave(estado);
                ViewBag.estado       = e;
                ViewBag.invitaciones =
                    Archivos.existeArchivo(Archivos.Folder.INVITACIONES, omi + "\\" + estado + "\\" + e.ISO + "-1.pdf") ||
                    Archivos.existeArchivo(Archivos.Folder.INVITACIONES, omi + "\\" + estado + "\\S-" + e.ISO + "-1.pdf") ||
                    Archivos.existeArchivo(Archivos.Folder.INVITACIONES, omi + "\\" + estado + "\\P-" + e.ISO + "-1.pdf");
            }

            List <MiembroDelegacion> registrados = MiembroDelegacion.obtenerMiembrosDelegacion(omi, p.esSuperUsuario() ? null : estado, o.tipoOlimpiada);

            ViewBag.hayResultados = Resultados.hayResultadosParaOMI(o.numero);
            if (o.esOnline)
            {
                List <SedeOnline> sedes = SedeOnline.obtenerSedes(omi, p.esSuperUsuario() ? null : estado, tipo);
                Dictionary <int, List <MiembroDelegacion> > miembrosPorSede = new Dictionary <int, List <MiembroDelegacion> >();
                foreach (SedeOnline sede in sedes)
                {
                    List <MiembroDelegacion> miembrosEnSede = MiembroDelegacion.obtenerMiembrosEnSede(sede.clave);
                    miembrosPorSede.Add(sede.clave, miembrosEnSede);
                }
                ViewBag.miembrosPorSede = miembrosPorSede;
                ViewBag.sedes           = sedes;
            }

            return(View(registrados));
        }
예제 #13
0
        public JsonResult ResultadosAjax(string clave, TipoOlimpiada tipo, long ticks, bool retry)
        {
            Olimpiada o = Olimpiada.obtenerOlimpiadaConClave(clave, tipo);

            if (o == null)
            {
                return(Json(ERROR));
            }

            OmegaUp        ou   = o.calculateCachedResults();
            ScoreboardAjax ajax = new ScoreboardAjax();

            if (ou == null || !OmegaUp.RunnerStarted)
            {
                ajax.status = ScoreboardAjax.Status.ERROR.ToString();
                return(Json(ajax));
            }

            ajax.timeToFinish = ou.getRemainingContestTime();

            if (ajax.timeToFinish == 0)
            {
                ajax.resultados = o.cachedResults;
                ajax.status     = ScoreboardAjax.Status.FINISHED.ToString();

                return(Json(ajax));
            }

            // Retry es verdadero cuando le mandamos 0 problemas al cliente
            // en ese caso, es probable que necesitemos recagar los objetos
            // olimpiada de la base de datos
            if (retry)
            {
                ajax.retry  = o.shouldReload(ou.dia);
                ajax.status = ScoreboardAjax.Status.NOT_CHANGED.ToString();

                return(Json(ajax));
            }

            if (ou.timestamp.Ticks == ticks)
            {
                ajax.status = ScoreboardAjax.Status.NOT_CHANGED.ToString();
            }
            else
            {
                ajax.ticks              = ou.timestamp.Ticks.ToString();
                ajax.status             = ScoreboardAjax.Status.UPDATED.ToString();
                ajax.resultados         = o.cachedResults;
                ajax.secondsSinceUpdate = (int)Math.Round((decimal)(DateTime.UtcNow.Ticks - ou.timestamp.Ticks) / TimeSpan.TicksPerSecond);
            }

            return(Json(ajax));
        }
예제 #14
0
        public JsonResult Buscar(string omi, TipoOlimpiada tipo, string query, string estado)
        {
            Olimpiada o = Olimpiada.obtenerOlimpiadaConClave(omi, tipo);

            if (o == null || !tienePermisos(o.registroActivo, estado))
            {
                Json("error");
            }

            Persona p = getUsuario();

            return(Json(MiembroDelegacion.buscarParaRegistro(omi, tipo, estado, query, p.esSuperUsuario())));
        }
예제 #15
0
        //
        // GET: /Registro/Invitaciones

        public ActionResult Invitaciones(string omi, string estado)
        {
            Olimpiada o = Olimpiada.obtenerOlimpiadaConClave(omi, TipoOlimpiada.OMI);

            if (o == null || !tienePermisos(o.registroActivo || o.registroSedes, estado))
            {
                return(RedirectTo(Pagina.HOME));
            }

            return(File(Archivos.comprimeArchivos(
                            Archivos.Folder.INVITACIONES, omi + "\\" + estado),
                        "application/zip", "Invitaciones.zip"));
        }
예제 #16
0
        //
        // GET: /Registro/GeneraInvitaciones

        public ActionResult GeneraInvitaciones(string omi)
        {
            Olimpiada o = Olimpiada.obtenerOlimpiadaConClave(omi, TipoOlimpiada.OMI);

            if (o == null || !esAdmin())
            {
                return(RedirectTo(Pagina.HOME));
            }

            ViewBag.invitaciones = MiembroDelegacion.generarInvitaciones(omi);

            return(View());
        }
예제 #17
0
        public ActionResult Sede(SedeOnline sede)
        {
            Olimpiada o = Olimpiada.obtenerOlimpiadaConClave(sede.omi, sede.tipoOlimpiada);

            if (o == null || !tienePermisos(o.registroActivo || o.registroSedes, sede.estado))
            {
                return(RedirectTo(Pagina.HOME));
            }

            failSafeViewBag();
            ViewBag.omi = o;
            Persona p = getUsuario();

            if (!p.esSuperUsuario() && !o.registroSedes)
            {
                ViewBag.errorInfo = "permisos";
                return(View(new SedeOnline()));
            }
            if (sede.clave > 0)
            {
                SedeOnline so = SedeOnline.obtenerSedeConClave(sede.clave);
                if (so == null || so.estado != sede.estado && !p.esSuperUsuario())
                {
                    ViewBag.errorInfo = "permisos";
                    return(View(new SedeOnline()));
                }
            }

            ViewBag.omi    = o;
            ViewBag.estado = Estado.obtenerEstadoConClave(sede.estado);

            // Validaciones del modelo
            if (!ModelState.IsValid)
            {
                return(View(sede));
            }

            sede.guardar();
            ViewBag.guardado = true;

            if (sede.clave == 0)
            {
                Log.add(Log.TipoLog.REGISTRO, "Usuario " + p.nombreCompleto + " agregó sede " + sede.nombre + " en el estado " + sede.estado);
            }
            else
            {
                Log.add(Log.TipoLog.REGISTRO, "Usuario " + p.nombreCompleto + " actualizó sede " + sede.nombre + " en el estado " + sede.estado);
            }

            return(View(sede));
        }
예제 #18
0
        //
        // GET: /Registro/GetCSV/

        public ActionResult GetCSV(string omi, TipoOlimpiada tipo, bool paraOmegaUp = false)
        {
            Persona   p = getUsuario();
            Olimpiada o = Olimpiada.obtenerOlimpiadaConClave(omi, TipoOlimpiada.OMI);

            if (!p.esSuperUsuario() || o == null)
            {
                return(RedirectTo(Pagina.HOME));
            }

            StringBuilder texto = new StringBuilder();

            if (paraOmegaUp)
            {
                o = Olimpiada.obtenerOlimpiadaConClave(omi, tipo);
                if (o != null)
                {
                    texto.Append(o.obtenerTablaAsistentes(esParaOmegaUp: true));
                }
            }
            else if (TableManager.isOMIPOS(tipo))
            {
                o = Olimpiada.obtenerOlimpiadaConClave(omi, TipoOlimpiada.OMIPO);
                if (o != null)
                {
                    texto.Append(o.obtenerTablaAsistentes(esParaRegistro: true));
                }
                o = Olimpiada.obtenerOlimpiadaConClave(omi, TipoOlimpiada.OMISO);
                if (o != null)
                {
                    texto.Append(o.obtenerTablaAsistentes(esParaRegistro: true));
                }
            }
            else
            {
                texto.Append(o.obtenerTablaAsistentes(esParaRegistro: true, incluirCabeceras: true));
                o = Olimpiada.obtenerOlimpiadaConClave(omi, TipoOlimpiada.OMIP);
                if (o != null)
                {
                    texto.Append(o.obtenerTablaAsistentes(esParaRegistro: true));
                }
                o = Olimpiada.obtenerOlimpiadaConClave(omi, TipoOlimpiada.OMIS);
                if (o != null)
                {
                    texto.Append(o.obtenerTablaAsistentes(esParaRegistro: true));
                }
            }

            return(File(Archivos.creaArchivoTexto(texto.ToString()), "text/csv", "asistentes.csv"));
        }
예제 #19
0
        //
        // GET: /Olimpiada/Delegacion/

        public ActionResult Delegacion(string clave, string estado, TipoOlimpiada tipo = TipoOlimpiada.OMI)
        {
            if (tipo == TipoOlimpiada.OMIS || tipo == TipoOlimpiada.OMIP)
            {
                tipo = TipoOlimpiada.OMI;
            }

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

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

            Estado e = Estado.obtenerEstadoConClave(estado);

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

            Dictionary <TipoOlimpiada, List <MiembroDelegacion> > delegaciones = new Dictionary <TipoOlimpiada, List <MiembroDelegacion> >();

            delegaciones.Add(tipo, MiembroDelegacion.obtenerMiembrosDelegacion(clave, estado, tipo, MiembroDelegacion.TipoAsistente.COMPETIDOR, listarPorAño: o.año));
            if (tipo == TipoOlimpiada.OMI && o.alsoOmips)
            {
                delegaciones.Add(TipoOlimpiada.OMIP, MiembroDelegacion.obtenerMiembrosDelegacion(clave, estado, TipoOlimpiada.OMIP, MiembroDelegacion.TipoAsistente.COMPETIDOR, listarPorAño: o.año));
                delegaciones.Add(TipoOlimpiada.OMIS, MiembroDelegacion.obtenerMiembrosDelegacion(clave, estado, TipoOlimpiada.OMIS, MiembroDelegacion.TipoAsistente.COMPETIDOR, listarPorAño: o.año));
            }

            ViewBag.liveResults          = o.liveResults;
            ViewBag.estado               = e;
            ViewBag.delegaciones         = delegaciones;
            ViewBag.lideres              = MiembroDelegacion.obtenerMiembrosDelegacion(clave, estado, tipo, MiembroDelegacion.TipoAsistente.LIDER);
            ViewBag.otros                = MiembroDelegacion.obtenerMiembrosDelegacion(clave, estado, tipo, MiembroDelegacion.TipoAsistente.INVITADO);
            ViewBag.medallas             = Medallero.obtenerMedallas(tipo, Medallero.TipoMedallero.ESTADO_POR_OMI, estado + "_" + clave);
            ViewBag.olimpiadas           = Olimpiada.obtenerOlimpiadas(tipo);
            ViewBag.olimpiadasParaEstado = Olimpiada.obtenerOlimpiadasParaEstado(estado);
            ViewBag.tipo = tipo;
            ViewBag.estadosEnOlimpiada = MiembroDelegacion.obtenerEstadosEnOlimpiada(o.numero);

            if (delegaciones[tipo].Count == 0)
            {
                ViewBag.vinoAOlimpiada = ViewBag.estado.estadoVinoAOlimpiada(tipo, clave);
            }

            return(View(o));
        }
예제 #20
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));
        }
예제 #21
0
        //
        // GET: /Registro/Select

        public ActionResult Select(string omi = null, TipoOlimpiada tipo = TipoOlimpiada.OMI, string GUID = null)
        {
            if (GUID != null)
            {
                tryLogIn(GUID);
            }

            if (omi == null)
            {
                omi = Olimpiada.obtenerMasReciente(yaEmpezada: false).numero;
            }

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

            if (o == null || !(o.registroActivo || o.registroSedes))
            {
                Olimpiada op = Olimpiada.obtenerOlimpiadaConClave(omi, TipoOlimpiada.OMIPO);
                if (op != null && (op.registroActivo || op.registroSedes))
                {
                    tipo = TipoOlimpiada.OMIPO;
                    o    = op;
                }
            }
            if (o == null || !tienePermisos(o.registroActivo || o.registroSedes))
            {
                return(RedirectTo(Pagina.HOME));
            }

            Persona p = getUsuario();

            if (p.esSuperUsuario())
            {
                return(RedirectTo(Pagina.REGISTRO, new { tipo = tipo }));
            }

            List <Estado> estados = p.obtenerEstadosDeDelegado();

            if (estados.Count == 1)
            {
                return(RedirectTo(Pagina.REGISTRO, new { omi = omi, estado = estados[0].clave, tipo = tipo }));
            }
            ViewBag.estados = estados;
            ViewBag.tipo    = o.tipoOlimpiada;

            return(View());
        }
예제 #22
0
        //
        // GET: /Olimpiada/Numeros/

        public ActionResult Numeros(string clave, TipoOlimpiada tipo = TipoOlimpiada.OMI)
        {
            if (!esAdmin() || clave == null)
            {
                return(RedirectTo(Pagina.HOME));
            }

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

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

            o.calcularNumeros();

            return(RedirectTo(Pagina.OLIMPIADA, clave));
        }
예제 #23
0
        //
        // GET: /Registro/Terminar

        public ActionResult Terminar(string omi, string estado, TipoOlimpiada tipo)
        {
            Olimpiada o = Olimpiada.obtenerOlimpiadaConClave(omi, tipo);

            if (o == null || !tienePermisos(o.registroActivo || o.registroSedes, estado))
            {
                return(RedirectTo(Pagina.HOME));
            }


            MiembroDelegacion md = MiembroDelegacion.obtenerMiembrosDelegacion(omi, estado, tipo)[0];

            if (md.cerrado && !getUsuario().esSuperUsuario())
            {
                return(RedirectTo(Pagina.HOME));
            }

            MiembroDelegacion.cerrarOAbrirRegistro(omi, estado, !md.cerrado, tipo);

            return(RedirectTo(Pagina.REGISTRO, new { omi = omi, estado = estado, tipo = tipo }));
        }
예제 #24
0
        public JsonResult OverlayAjax(string omi, TipoOlimpiada tipo, string clave)
        {
            Olimpiada o = Olimpiada.obtenerOlimpiadaConClave(omi, tipo);

            if (o == null)
            {
                return(Json(ERROR));
            }

            OverlayAjax response = new OverlayAjax();

            response.puntosD1  = DetallePuntos.cargarResultados(omi, tipo, clave, 1, o.problemasDia1);
            response.lugaresD1 = DetalleLugar.cargarResultados(omi, tipo, 1, clave);
            if (o.problemasDia2 > 0)
            {
                response.puntosD2  = DetallePuntos.cargarResultados(omi, tipo, clave, 2, o.problemasDia2);
                response.lugaresD2 = DetalleLugar.cargarResultados(omi, tipo, 2, clave);
            }
            response.problemas = Models.Resultados.cargarMejores(omi, tipo, clave, o.problemasDia1, o.problemasDia2);

            return(Json(response));
        }
예제 #25
0
        public ActionResult Edit(Problema p)
        {
            if (!esAdmin())
            {
                return(RedirectTo(Pagina.HOME));
            }

            if (p.tipoOlimpiada == TipoOlimpiada.NULL)
            {
                p.tipoOlimpiada = TipoOlimpiada.OMI;
            }

            Olimpiada o = Olimpiada.obtenerOlimpiadaConClave(p.olimpiada, p.tipoOlimpiada);

            if (o == null || p.olimpiada == Olimpiada.TEMP_CLAVE)
            {
                return(RedirectTo(Pagina.ERROR, 401));
            }

            if (p.dia < 0 || p.dia > 2)
            {
                return(RedirectTo(Pagina.ERROR, 401));
            }

            if (p.numero < 0 || p.numero > 4)
            {
                return(RedirectTo(Pagina.ERROR, 401));
            }

            if (!ModelState.IsValid)
            {
                return(View(p));
            }

            p.guardar();

            return(RedirectTo(Pagina.OLIMPIADA, p.olimpiada));
        }
예제 #26
0
        //
        // GET: /Admin/BorrarScoreboard/

        public ActionResult BorrarScoreboard(int clave = 0)
        {
            if (!esAdmin())
            {
                return(RedirectTo(Pagina.ERROR, 401));
            }

            if (clave == 0)
            {
                OmegaUp.borrarTodo();
                Olimpiada.resetOMIs(TipoOlimpiada.OMI);
                Olimpiada.resetOMIs(TipoOlimpiada.OMIS);
                Olimpiada.resetOMIs(TipoOlimpiada.OMIP);
                OmegaUp.RunnerStarted = false;
            }
            else
            {
                OmegaUp om = OmegaUp.obtenerConClave(clave);
                OmegaUp.borrarConClave(clave);

                if (om.instruccion == OmegaUp.Instruccion.POLL)
                {
                    OmegaUp om2 = OmegaUp.obtenerParaOMI(om.olimpiada, om.tipoOlimpiada);

                    if (om2 == null)
                    {
                        Olimpiada o = Olimpiada.obtenerOlimpiadaConClave(om.olimpiada, om.tipoOlimpiada);
                        o.liveResults = false;
                    }
                }
                else if (om.instruccion == OmegaUp.Instruccion.KILL)
                {
                    OmegaUp.RunnerStarted = false;
                }
            }

            return(RedirectTo(Pagina.ADMIN_SCOREBOARD));
        }
예제 #27
0
        //
        // GET: /Fotos/Edit/

        public ActionResult Edit(string omi, TipoOlimpiada tipo = TipoOlimpiada.OMI, string id = null)
        {
            if (!esAdmin())
            {
                return(RedirectTo(Pagina.ERROR, 504));
            }

            Album al = Models.Album.obtenerAlbum(id);

            if (omi == null && !String.IsNullOrEmpty(id))
            {
                omi  = al.olimpiada;
                tipo = al.tipoOlimpiada;
            }

            if (String.IsNullOrEmpty(id))
            {
                al.update = true;
            }

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

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

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

            al.olimpiada     = omi;
            al.tipoOlimpiada = tipo;

            return(View(al));
        }
예제 #28
0
        public ActionResult Scoreboard(OmegaUp poll)
        {
            if (!esAdmin())
            {
                return(RedirectTo(Pagina.ERROR, 401));
            }

            poll.instruccion = OmegaUp.Instruccion.POLL;
            poll.guardarNuevo();

            Olimpiada o = Olimpiada.obtenerOlimpiadaConClave(poll.olimpiada, poll.tipoOlimpiada);

            if (o != null)
            {
                o.liveResults = true;

                if (o.esOnline)
                {
                    OmegaUp.nuevaInstruccion(OmegaUp.Instruccion.HIDE, true);
                }
            }

            return(RedirectTo(Pagina.ADMIN_SCOREBOARD));
        }
예제 #29
0
        //
        // GET: /Fotos/

        public ActionResult Index(string clave, TipoOlimpiada tipo = TipoOlimpiada.OMI)
        {
            if (tipo == TipoOlimpiada.OMIP || tipo == TipoOlimpiada.OMIS)
            {
                tipo = TipoOlimpiada.OMI;
            }

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

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

            List <Album> albumes = Models.Album.obtenerAlbumsDeOlimpiada(clave, tipo);

            if (!esAdmin())
            {
                if (albumes == null || albumes.Count == 0)
                {
                    return(RedirectTo(Pagina.ERROR, 404));
                }

                if (albumes.Count == 1)
                {
                    return(RedirectTo(Pagina.ALBUM, albumes[0].id));
                }
            }

            ViewBag.olimpiada          = o;
            ViewBag.admin              = esAdmin();
            ViewBag.olimpiadas         = Olimpiada.obtenerOlimpiadas(tipo);
            ViewBag.olimpiadasConFotos = Models.Album.obtenerOlimpiadasConAlbumes(tipo);

            return(View(albumes));
        }
예제 #30
0
        //
        // GET: /Registro/Eliminar

        public ActionResult Eliminar(string omi, TipoOlimpiada tipo, string estado, string clave)
        {
            Olimpiada o = Olimpiada.obtenerOlimpiadaConClave(omi, tipo);

            if (o == null || !tienePermisos(o.registroActivo, estado) || Resultados.hayResultadosParaOMI(omi))
            {
                return(RedirectTo(Pagina.HOME));
            }

            MiembroDelegacion md = MiembroDelegacion.obtenerMiembrosConClave(omi, tipo, clave)[0];
            Persona           p  = getUsuario();

            if (!p.esSuperUsuario() && md.estado != estado)
            {
                return(RedirectTo(Pagina.HOME));
            }
            md.borrarMiembroDelegacion();

            // Se registra la telemetria
            Log.add(Log.TipoLog.REGISTRO, "Usuario " + getUsuario().nombreCompleto + " elimino al asistente con clave " +
                    md.clave + " del estado " + md.estado + " en la categoría " + md.tipoOlimpiada.ToString());

            return(RedirectTo(Pagina.REGISTRO, new { omi = omi, estado = estado, tipo = tipo }));
        }