示例#1
0
        public void llenarDatos(DataRow datos)
        {
            tipoOlimpiada = DataRowParser.ToTipoOlimpiada(datos["clase"]);
            tipoMedallero = DataRowParser.ToTipoMedallero(datos["tipo"]);
            clave         = DataRowParser.ToString(datos["clave"]);
            oros          = DataRowParser.ToInt(datos["oro"]);
            platas        = DataRowParser.ToInt(datos["plata"]);
            bronces       = DataRowParser.ToInt(datos["bronce"]);
            otros         = DataRowParser.ToInt(datos["otros"]);
            puntos        = DataRowParser.ToFloat(datos["puntos"]);
            promedio      = DataRowParser.ToFloat(datos["promedio"]);
            lugar         = DataRowParser.ToInt(datos["lugar"]);

            omi = DataRowParser.ToString(datos["omi"]);
        }
示例#2
0
 private void llenarDatos(DataRow datos)
 {
     olimpiada     = DataRowParser.ToString(datos["olimpiada"]);
     tipoOlimpiada = DataRowParser.ToTipoOlimpiada(datos["clase"]);
     dia           = DataRowParser.ToInt(datos["dia"]);
     numero        = DataRowParser.ToInt(datos["numero"]);
     nombre        = DataRowParser.ToString(datos["nombre"]);
     url           = DataRowParser.ToString(datos["url"]);
     media         = DataRowParser.ToStrictFloat(datos["media"]);
     perfectos     = DataRowParser.ToInt(datos["perfectos"]);
     ceros         = DataRowParser.ToInt(datos["ceros"]);
     mediana       = DataRowParser.ToStrictFloat(datos["mediana"]);
     casos         = DataRowParser.ToString(datos["casos"]);
     codigo        = DataRowParser.ToString(datos["codigo"]);
     solucion      = DataRowParser.ToString(datos["solucion"]);
 }
示例#3
0
 public void llenarDatos(DataRow r)
 {
     clave         = DataRowParser.ToInt(r["clave"]);
     nombre        = DataRowParser.ToString(r["nombre"]);
     omi           = DataRowParser.ToString(r["olimpiada"]);
     tipoOlimpiada = DataRowParser.ToTipoOlimpiada(r["clase"]);
     estado        = DataRowParser.ToString(r["estado"]);
     supervisor    = DataRowParser.ToString(r["supervisor"]);
     telefono      = DataRowParser.ToString(r["telefono"]);
     correo        = DataRowParser.ToString(r["correo"]);
     supervisor2   = DataRowParser.ToString(r["supervisor2"]);
     telefono2     = DataRowParser.ToString(r["telefono2"]);
     correo2       = DataRowParser.ToString(r["correo2"]);
     supervisor3   = DataRowParser.ToString(r["supervisor3"]);
     telefono3     = DataRowParser.ToString(r["telefono3"]);
     correo3       = DataRowParser.ToString(r["correo3"]);
 }
示例#4
0
文件: Fotos.cs 项目: darknut/OMIstats
        private void llenarDatos(DataRow r)
        {
            id          = DataRowParser.ToString(r["id"]);
            lastUpdated = DataRowParser.ToDateTime(r["lastUpdated"]);
            orden       = DataRowParser.ToInt(r["orden"]);

            // Los datos generales no guardan nada mas
            if (id == ALBUM_GRAL)
            {
                return;
            }

            olimpiada     = DataRowParser.ToString(r["olimpiada"]);
            tipoOlimpiada = DataRowParser.ToTipoOlimpiada(r["clase"]);
            fotos         = DataRowParser.ToInt(r["fotos"]);
            nombre        = DataRowParser.ToString(r["nombre"]);
            portada       = DataRowParser.ToString(r["portada"]);
            newsletter    = DataRowParser.ToBool(r["newsletter"]);
        }
示例#5
0
 private void llenarDatos(DataRow r)
 {
     clave           = DataRowParser.ToInt(r["clave"]);
     instruccion     = DataRowParser.ToInstruccion(r["tipo"]);
     olimpiada       = DataRowParser.ToString(r["olimpiada"]);
     tipoOlimpiada   = DataRowParser.ToTipoOlimpiada(r["clase"]);
     dia             = DataRowParser.ToShort(r["dia"]);
     ping            = DataRowParser.ToInt(r["ping"]);
     concurso        = DataRowParser.ToString(r["concurso"]);
     token           = DataRowParser.ToString(r["token"]);
     prefijo         = DataRowParser.ToString(r["prefijo"]);
     status          = DataRowParser.ToStatus(r["status"]);
     secondsToFinish = DataRowParser.ToInt(r["secondsToFinish"]);
     try
     {
         timestamp = new DateTime(DataRowParser.ToLong(r["timestamp"]));
     }
     catch (Exception)
     {
     }
 }
示例#6
0
        private void llenarDatos(DataRow datos)
        {
            numero                       = DataRowParser.ToString(datos["numero"]);
            tipoOlimpiada                = DataRowParser.ToTipoOlimpiada(datos["clase"]);
            ciudad                       = DataRowParser.ToString(datos["ciudad"]);
            pais                         = DataRowParser.ToString(datos["pais"]);
            año                          = DataRowParser.ToStrictFloat(datos["año"]);
            inicio                       = DataRowParser.ToDateTime(datos["inicio"]);
            fin                          = DataRowParser.ToDateTime(datos["fin"]);
            video                        = DataRowParser.ToString(datos["video"]);
            poster                       = DataRowParser.ToString(datos["poster"]);
            estados                      = DataRowParser.ToInt(datos["estados"]);
            participantes                = DataRowParser.ToInt(datos["participantes"]);
            datosPublicos                = DataRowParser.ToBool(datos["datospublicos"]);
            relacion                     = DataRowParser.ToString(datos["relacion"]);
            reporte                      = DataRowParser.ToString(datos["reporte"]);
            problemasDia1                = DataRowParser.ToInt(datos["problemasDia1"]);
            problemasDia2                = DataRowParser.ToInt(datos["problemasDia2"]);
            mostrarResultadosPorDia      = DataRowParser.ToBool(datos["mostrarResultadosPorDia"]);
            mostrarResultadosPorProblema = DataRowParser.ToBool(datos["mostrarResultadosPorProblema"]);
            mostrarResultadosTotales     = DataRowParser.ToBool(datos["mostrarResultadosTotales"]);
            puntosDesconocidos           = DataRowParser.ToBool(datos["puntosDesconocidos"]);
            alsoOmips                    = DataRowParser.ToBool(datos["alsoOmips"]);
            alsoOmipsOnline              = DataRowParser.ToBool(datos["alsoOmipsOnline"]);
            noMedallistasConocidos       = DataRowParser.ToBool(datos["noMedallistasConocidos"]);
            puntosDetallados             = DataRowParser.ToBool(datos["puntosDetallados"]);
            registroActivo               = DataRowParser.ToBool(datos["registroActivo"]);
            diplomasOnline               = DataRowParser.ToBool(datos["diplomasOnline"]);
            esOnline                     = DataRowParser.ToBool(datos["esOnline"]);
            registroSedes                = DataRowParser.ToBool(datos["registroSedes"]);
            ordenarPorPuntos             = DataRowParser.ToBool(datos["ordenarPorPuntos"]);

            claveEstado = DataRowParser.ToString(datos["estado"]);
            Estado estado = Estado.obtenerEstadoConClave(claveEstado);

            if (estado != null)
            {
                nombreEstado = estado.nombre;
            }

            claveEscuela = DataRowParser.ToInt(datos["escuela"]);
            Institucion institucion = Institucion.obtenerInstitucionConClave(claveEscuela);

            if (institucion != null)
            {
                nombreEscuela         = institucion.nombreCorto;
                escuelaURL            = institucion.nombreURL;
                nombreEscuelaCompleto = institucion.nombre;
            }

            if (inicio.Year > 1990)
            {
                if (inicio.Month == fin.Month)
                {
                    friendlyDate = "Del " + inicio.Day +
                                   " al " + Fechas.friendlyString(fin);
                }
                else
                {
                    friendlyDate = "Del " + Fechas.friendlyString(inicio) +
                                   " al " + Fechas.friendlyString(fin);
                }
            }

            if (Archivos.existeArchivo(Archivos.Folder.OLIMPIADAS,
                                       numero + ".png"))
            {
                logo = numero + ".png";
            }
            else
            {
                logo = Archivos.OMI_LOGO;
            }

            if (numero != TEMP_CLAVE &&
                (tipoOlimpiada == TipoOlimpiada.OMIP ||
                 tipoOlimpiada == TipoOlimpiada.OMIS ||
                 tipoOlimpiada == TipoOlimpiada.OMIPO ||
                 tipoOlimpiada == TipoOlimpiada.OMISO))
            {
                omisActualNumber = (Int32.Parse(numero) - OMIS_SIN_OMIPS).ToString();
            }

            datosGenerales = Problema.obtenerProblema(numero, tipoOlimpiada, 0, 0);
        }
示例#7
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));
        }