Exemplo n.º 1
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));
        }
Exemplo n.º 2
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 }));
        }
Exemplo n.º 3
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));
        }
Exemplo n.º 4
0
        //
        // GET: /Profile/Diploma/

        public ActionResult Diploma(string omi, string clave, TipoOlimpiada clase = TipoOlimpiada.NULL, bool todos = false)
        {
            if (!estaLoggeado())
            {
                return(RedirectTo(Pagina.ERROR, 401));
            }

            Olimpiada o = Olimpiada.obtenerOlimpiadaConClave(omi, TipoOlimpiada.OMI);

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

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

            if (md.claveUsuario != p.clave)
            {
                return(RedirectTo(Pagina.ERROR, 401));
            }

            if (todos && (md.tipo != MiembroDelegacion.TipoAsistente.LIDER &&
                          md.tipo != MiembroDelegacion.TipoAsistente.DELEGADO &&
                          md.tipo != MiembroDelegacion.TipoAsistente.SUBLIDER &&
                          md.tipo != MiembroDelegacion.TipoAsistente.DELELIDER))
            {
                return(RedirectTo(Pagina.ERROR, 401));
            }

            if (md.tipo == MiembroDelegacion.TipoAsistente.COMPETIDOR)
            {
                if (clase == TipoOlimpiada.OMIP)
                {
                    clave = "P-" + clave;
                }
                if (clase == TipoOlimpiada.OMIS)
                {
                    clave = "S-" + clave;
                }
            }

            if (!todos)
            {
                int numeroDeDiplomas = Archivos.cuantosExisten
                                           (Archivos.Folder.DIPLOMAS, omi + "\\" + md.estado, clave);

                if (numeroDeDiplomas == 0)
                {
                    return(RedirectTo(Pagina.ERROR, 404));
                }

                if (numeroDeDiplomas == 1)
                {
                    string contentFile = "application/pdf";
                    string url         = "~/private/diplomas/" + omi + "/" + md.estado + "/" + clave + ".pdf";
                    string file        = Server.MapPath(url);

                    if (!System.IO.File.Exists(file))
                    {
                        return(RedirectTo(Pagina.ERROR, 404));
                    }

                    return(File(file, contentFile, "Diploma.pdf"));
                }
            }

            return(File(Archivos.comprimeArchivos(
                            Archivos.Folder.DIPLOMAS, omi + "\\" + md.estado, todos ? null : clave),
                        "application/zip", "Diplomas.zip"));
        }
Exemplo n.º 5
0
        public void actualiza(string clave, decimal?[] resultados)
        {
            Resultados res;

            if (!this.resultados.TryGetValue(clave, out res))
            {
                List <MiembroDelegacion> miembros = MiembroDelegacion.obtenerMiembrosConClave(this.olimpiada, this.tipoOlimpiada, clave);
                if (miembros.Count != 1)
                {
                    this.resultados.Add(clave, null);
                    return;
                }

                res = new Resultados();
                res.tipoOlimpiada = this.tipoOlimpiada;
                res.omi           = this.olimpiada;
                res.usuario       = miembros[0].claveUsuario;
                res.clave         = clave;
                res.publico       = true;
                res.estado        = miembros[0].estado;
                concursantes++;
                this.resultados.Add(clave, res);
            }

            if (res == null)
            {
                return;
            }

            List <float?> arreglo;

            if (dia == 1)
            {
                arreglo = res.dia1;
            }
            else
            {
                arreglo = res.dia2;
            }

            float?total = 0;

            for (int i = 0; i < this.problemas; i++)
            {
                arreglo[i] = (float?)resultados[i];

                if (arreglo[i] != null)
                {
                    total += arreglo[i];
                }
            }

            if (dia == 1)
            {
                res.totalDia1 = total;
            }
            else
            {
                res.totalDia2 = total;
            }

            res.total = res.totalDia1 + res.totalDia2;
        }
Exemplo n.º 6
0
        public ActionResult Asistente(HttpPostedFileBase file, Persona p, string omi, string tipoOriginal,
                                      string estado, string claveSelect, int persona, string claveOriginal,
                                      int selectEscuela = 0, string nombreEscuela = null, int selectAnioEscolar = 0,
                                      Institucion.NivelInstitucion selectNivelEscolar = Institucion.NivelInstitucion.NULL,
                                      TipoOlimpiada tipo = TipoOlimpiada.NULL, bool selectPublica = true,
                                      MiembroDelegacion.TipoAsistente tipoAsistente = MiembroDelegacion.TipoAsistente.NULL, int sede = -1)
        {
            // Se valida que el usuario tenga permiso para realizar esta acción
            Olimpiada o = Olimpiada.obtenerOlimpiadaConClave(omi, tipo == TipoOlimpiada.NULL ? TipoOlimpiada.OMI : tipo);

            if (String.IsNullOrEmpty(estado) ||
                tipo == TipoOlimpiada.NULL ||
                tipoAsistente == MiembroDelegacion.TipoAsistente.NULL ||
                o == null)
            {
                return(RedirectTo(Pagina.HOME));
            }
            failSafeViewBag();
            ViewBag.omi = o;
            if (!tienePermisos(o.registroActivo || o.registroSedes, estado))
            {
                ViewBag.errorInfo = "permisos";
                return(View(new Persona()));
            }

            bool modifyMode = !String.IsNullOrEmpty(claveOriginal);

            // Se valida que haya espacio para registrar otro competidor
            if (!esAdmin() &&
                !modifyMode &&
                tipoAsistente == MiembroDelegacion.TipoAsistente.COMPETIDOR &&
                !puedeRegistrarOtroMas(o, tipo, estado))
            {
                ViewBag.errorInfo = "limite";
                return(View(new Persona()));
            }

            // Se valida que el miembro delegacion que se está modificando (en caso de update), exista
            MiembroDelegacion md    = null;
            TipoOlimpiada     tipoO = TipoOlimpiada.NULL;
            Institucion       i     = null;

            if (modifyMode)
            {
                tipoO = DataRowParser.ToTipoOlimpiada(tipoOriginal);
                var temp = MiembroDelegacion.obtenerMiembrosConClave(omi, tipoO, claveOriginal);
                if (temp.Count == 0)
                {
                    ViewBag.errorInfo = "invalido";
                    return(View(new Persona()));
                }
                if (temp.Count > 1)
                {
                    ViewBag.errorInfo = "duplicado";
                    return(View(new Persona()));
                }
                md = temp[0];
                if (!p.esSuperUsuario() && md.estado != estado)
                {
                    ViewBag.errorInfo = "permisos";
                    return(View(new Persona()));
                }
            }

            // Se valida que la clave que se eligió sea valida para el estado
            Estado e = Estado.obtenerEstadoConClave(estado);

            if (claveSelect != null && tipoAsistente == MiembroDelegacion.TipoAsistente.COMPETIDOR && !claveSelect.StartsWith(e.ISO))
            {
                claveSelect = "";
            }
            if (persona != 0)
            {
                p.clave = persona;
            }

            // Se regresan todos los valores al viewbag en caso de error
            ViewBag.claveDisponible = claveSelect;
            ViewBag.estado          = e;
            ViewBag.md            = md;
            ViewBag.omi           = o;
            ViewBag.tipo          = tipo;
            ViewBag.estados       = Estado.obtenerEstados();
            ViewBag.tipoAsistente = tipoAsistente;
            limpiarErroresViewBag();
            ViewBag.resubmit = true;
            bool hayResultados = Resultados.hayResultadosParaOMI(o.numero);

            ViewBag.hayResultados = hayResultados;
            if (o.esOnline && !p.esSuperUsuario())
            {
                ViewBag.sedes = SedeOnline.obtenerSedes(o.numero, estado, tipo);
            }
            if (tipoAsistente == MiembroDelegacion.TipoAsistente.COMPETIDOR)
            {
                ViewBag.escuelas     = Institucion.obtenerEscuelasDeEstado(tipo, estado);
                ViewBag.claveEscuela = selectEscuela;
                ViewBag.añoEscuela   = selectAnioEscolar;
                ViewBag.nivelEscuela = selectNivelEscolar.ToString();

                if (selectEscuela > 0)
                {
                    i = Institucion.obtenerInstitucionConClave(selectEscuela);
                    if (i == null)
                    {
                        ViewBag.nombreEscuela = "";
                        ViewBag.claveEscuela  = 0;
                    }
                    else
                    {
                        ViewBag.nombreEscuela = i.nombre;
                    }
                }
                else
                {
                    ViewBag.nombreEscuela = nombreEscuela;
                    ViewBag.publica       = selectPublica;
                }
            }

            // Validaciones extra de la foto
            if (file != null)
            {
                var valida = Archivos.esImagenValida(file, Peticion.TamañoFotoMaximo);
                if (valida != Archivos.ResultadoImagen.VALIDA)
                {
                    ViewBag.errorImagen = valida.ToString().ToLower();
                    return(View(p));
                }
            }

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

            bool isOMIPOS = TableManager.isOMIPOS(tipo);

            if ((tipo == TipoOlimpiada.OMIP || tipo == TipoOlimpiada.OMIS || isOMIPOS) &&
                tipoAsistente == MiembroDelegacion.TipoAsistente.COMPETIDOR)
            {
                p.omips = true;
            }

            List <MiembroDelegacion> miembrosExistentes = MiembroDelegacion.obtenerMiembrosDelegacion(omi, estado, tipo);
            bool registroCerrado = false;

            if (miembrosExistentes.Count > 0)
            {
                registroCerrado = miembrosExistentes[0].cerrado;
            }

            // Validaciones terminadas, guardamos persona y miembro delegacion
            // Primero en caso de que sea un nuevo miembro de la delegación
            if (md == null)
            {
                // Si la persona es 0, intentamos hacer match basándonos en el nombre, y solamente en el nombre
                if (persona == 0)
                {
                    Persona pe = Persona.obtenerPersonaConNombre(p.nombreCompleto);
                    if (pe != null)
                    {
                        persona = pe.clave;
                    }
                }

                // Nuevo asistente
                if (persona == 0)
                {
                    // Si no hay clave de persona previa, se agrega una nueva persona
                    p.nuevoUsuario();
                }
                else
                {
                    // Si tengo clave, se intenta conseguir
                    Persona per = Persona.obtenerPersonaConClave(persona);
                    if (per == null)
                    {
                        ViewBag.errorInfo = "persona";
                        return(View(new Persona()));
                    }

                    p.clave  = per.clave;
                    p.oculta = per.oculta;
                    p.omips  = per.omips;
                }

                if (tipoAsistente == MiembroDelegacion.TipoAsistente.COMPETIDOR)
                {
                    if (isOMIPOS)
                    {
                        if (persona == 0)
                        {
                            p.oculta = true;
                        }
                    }
                    else
                    {
                        p.oculta = false;
                    }
                }

                p.foto = guardaFoto(file, p.clave);
                p.guardarDatos(generarPeticiones: false, lugarGuardado: Persona.LugarGuardado.REGISTRO);

                // Se genera un nuevo miembro delegacion
                md               = new MiembroDelegacion();
                md.olimpiada     = o.numero;
                md.tipoOlimpiada = tipo;
                md.estado        = estado;
                md.clave         = claveSelect;
                md.tipo          = tipoAsistente;
                md.claveUsuario  = p.clave;
                md.sede          = sede;
                md.cerrado       = registroCerrado;
                md.nuevo();

                // Se registra la telemetria
                Log.add(Log.TipoLog.REGISTRO, "Usuario " + getUsuario().nombreCompleto + " registró a " +
                        p.nombreCompleto + " en el estado " + md.estado + " con clave " + md.clave +
                        " en la categoría " + md.tipoOlimpiada.ToString());
            }
            else
            {
                // Si ya hay resultados no podemos cambiar la clave, estado, o tipo de OMI
                if (hayResultados)
                {
                    tipo        = md.tipoOlimpiada;
                    claveSelect = md.clave;
                    estado      = md.estado;

                    // Adicionalmente si es competidor, no se piuede cambiar su tipo de asistencia
                    // ni volver a alguien mas competidor
                    if (md.tipo == MiembroDelegacion.TipoAsistente.COMPETIDOR ||
                        tipoAsistente == MiembroDelegacion.TipoAsistente.COMPETIDOR)
                    {
                        tipoAsistente = md.tipo;
                    }
                }

                // Modificando asistente
                // Primero los datos de persona
                Persona per = Persona.obtenerPersonaConClave(md.claveUsuario);
                if (!modifyMode && tipoAsistente == MiembroDelegacion.TipoAsistente.COMPETIDOR && !isOMIPOS)
                {
                    per.oculta = false;
                }
                p.clave  = per.clave;
                p.oculta = per.oculta;
                p.omips  = per.omips;
                p.foto   = guardaFoto(file, p.clave);
                p.guardarDatos(generarPeticiones: false, lugarGuardado: Persona.LugarGuardado.REGISTRO);

                // Luego el miembro delegacion
                md.tipoOlimpiada = tipo;
                md.estado        = estado;
                md.clave         = claveSelect;
                md.tipo          = tipoAsistente;
                md.sede          = sede;
                md.cerrado       = registroCerrado;
                md.guardarDatos(claveOriginal, tipoO);

                // Se registra la telemetria
                Log.add(Log.TipoLog.REGISTRO, "Usuario " + getUsuario().nombreCompleto + " actualizó a " +
                        p.nombreCompleto + " en el estado " + md.estado + " con clave " + md.clave +
                        " en la categoría " + md.tipoOlimpiada.ToString());
            }

            // Ahora se guarda la escuela
            if (tipoAsistente == MiembroDelegacion.TipoAsistente.COMPETIDOR)
            {
                // La escuela ya se consultó en la sección de viewbag, si es null, se llenó la sección de escuela nueva
                if (i == null)
                {
                    if (!String.IsNullOrEmpty(nombreEscuela))
                    {
                        // La escuela aun puede ya existir pero no la vieron y la volvieron a escribir,
                        // aqui tratamos de ver si ya existe
                        i = Institucion.buscarInstitucionConNombre(nombreEscuela);
                        if (i == null)
                        {
                            // Se genera una nueva escuela vacía y se asignan los datos que tenemos
                            i = new Institucion();
                            i.nuevaInstitucion();
                            i.nombre  = nombreEscuela;
                            i.publica = selectPublica;
                        }
                    }
                }

                // Si en este punto tenemos una escuela, actualizamos los datos de la escuela y
                // actualizamos el miembro delegacion
                if (i != null)
                {
                    switch (selectNivelEscolar)
                    {
                    case Institucion.NivelInstitucion.PRIMARIA:
                        i.primaria = true;
                        break;

                    case Institucion.NivelInstitucion.SECUNDARIA:
                        i.secundaria = true;
                        break;

                    case Institucion.NivelInstitucion.PREPARATORIA:
                        i.preparatoria = true;
                        break;
                    }
                    i.guardar(generarPeticiones: false);

                    md.claveEscuela = i.clave;
                    md.nivelEscuela = selectNivelEscolar;
                    md.añoEscuela   = selectAnioEscolar;
                    md.guardarDatosEscuela();
                }
            }

            ViewBag.guardado = true;
            return(View(p));
        }
Exemplo n.º 7
0
        //
        // GET: /Registro/Asistente

        public ActionResult Asistente(string omi, TipoOlimpiada tipo = TipoOlimpiada.NULL, string estado = null, string clave = null)
        {
            Olimpiada o = Olimpiada.obtenerOlimpiadaConClave(omi, tipo == TipoOlimpiada.NULL ? TipoOlimpiada.OMI : tipo);

            if (o == null)
            {
                return(RedirectTo(Pagina.HOME));
            }
            failSafeViewBag();
            ViewBag.omi = o;
            if (!tienePermisos(o.registroActivo || o.registroSedes, estado))
            {
                ViewBag.errorInfo = "permisos";
                return(View(new Persona()));
            }

            Persona p = getUsuario();

            if (!p.esSuperUsuario())
            {
                if (estado == null ||
                    (String.IsNullOrEmpty(clave) &&
                     tipo != TipoOlimpiada.NULL &&
                     !puedeRegistrarOtroMas(o, tipo, estado)))
                {
                    ViewBag.errorInfo = "limite";
                    return(View(new Persona()));
                }

                ViewBag.estado = Estado.obtenerEstadoConClave(estado);
            }

            MiembroDelegacion md = null;

            if (clave == null)
            {
                if (!p.esSuperUsuario() && tipo != TipoOlimpiada.NULL)
                {
                    ViewBag.claveDisponible = MiembroDelegacion.obtenerPrimerClaveDisponible(omi, tipo, estado);
                }
                ViewBag.tipoAsistente = MiembroDelegacion.TipoAsistente.NULL;
            }
            else
            {
                var temp = MiembroDelegacion.obtenerMiembrosConClave(omi, tipo, clave);
                if (temp.Count == 0)
                {
                    ViewBag.errorInfo = "invalido";
                    return(View(new Persona()));
                }
                if (temp.Count > 1)
                {
                    ViewBag.errorInfo = "duplicado";
                    return(View(new Persona()));
                }
                md = temp[0];
                if (!p.esSuperUsuario() && md.estado != estado)
                {
                    ViewBag.errorInfo = "permisos";
                    return(View(new Persona()));
                }
                ViewBag.claveDisponible = md.clave;
                ViewBag.tipoAsistente   = md.tipo;
                ViewBag.estado          = Estado.obtenerEstadoConClave(md.estado);
                ViewBag.nombreEscuela   = md.nombreEscuela;
                ViewBag.claveEscuela    = md.claveEscuela;
                ViewBag.añoEscuela      = md.añoEscuela;
                ViewBag.nivelEscuela    = md.nivelEscuela.ToString();
            }

            ViewBag.md      = md;
            ViewBag.tipo    = tipo;
            ViewBag.estados = Estado.obtenerEstados();
            limpiarErroresViewBag();
            ViewBag.resubmit      = false;
            ViewBag.guardado      = false;
            ViewBag.hayResultados = Resultados.hayResultadosParaOMI(o.numero);
            if (o.esOnline && !p.esSuperUsuario())
            {
                ViewBag.sedes = SedeOnline.obtenerSedes(o.numero, estado, tipo);
            }
            if (md != null && md.sede > 0)
            {
                ViewBag.nombreSede = SedeOnline.obtenerSedeConClave(md.sede).nombre;
            }

            p = md == null ? new Persona() : Persona.obtenerPersonaConClave(md.claveUsuario, completo: true, incluirDatosPrivados: true);
            p.breakNombre();

            List <Ajax.BuscarEscuelas> escuelas = null;

            if (md != null && md.tipo == MiembroDelegacion.TipoAsistente.COMPETIDOR)
            {
                escuelas = Institucion.obtenerEscuelasDeEstado(md.tipoOlimpiada, md.estado);
            }
            else if (estado != null)
            {
                if (tipo != TipoOlimpiada.NULL)
                {
                    escuelas = Institucion.obtenerEscuelasDeEstado(tipo, estado);
                }
            }
            ViewBag.escuelas = escuelas;

            return(View(p));
        }