Exemple #1
0
        public MisFormulariosModel GenerarModelo()
        {
            MisFormulariosModel modelo = new MisFormulariosModel();

            List <Periodo_activa_por> periodosSemestre = ObtenerFormulariosSemestre();
            List <Periodo_activa_por> periodosPasados  = ObtenerFormulariosDisponibles(ObtenerFechaInicioSemestre(), null);

            foreach (var periodo in periodosSemestre)
            {
                FormularioAsignado formulario = new FormularioAsignado(periodo, HttpContext.User.Identity.Name);
                modelo.FormulariosSemestre.Add(formulario);
            }

            foreach (var periodo in periodosPasados)
            {
                FormularioAsignado formulario = new FormularioAsignado(periodo, HttpContext.User.Identity.Name);
                modelo.InsertarPasado(formulario);
            }

            return(modelo);
        }
        public JsonResult Asignar(string codigoFormulario, string codigoUASeleccionada, string codigoCarreraEnfasisSeleccionada, string grupoSeleccionado, string correoProfesorSeleccionado, string fechaInicioSeleccionado, string fechaFinSeleccionado, bool extenderPeriodo, bool enviarCorreos)
        {
            if (!permissionManager.IsAuthorized(Permission.CREAR_FORMULARIO))
            {
                TempData["alertmessage"] = "No tiene permisos para acceder a esta página.";
                return(Json(new { error = false, tipoError = 5 }));
            }
            // Parámetros que se enviaran al procedimiento almacenado
            string              codigoCarrera   = null;
            string              codigoEnfasis   = null;
            string              siglaCursoGrupo = null;
            Nullable <byte>     numeroGrupo     = null;
            Nullable <byte>     semestreGrupo   = null;
            Nullable <int>      anno            = null;
            Nullable <DateTime> fechaInicio     = null;
            Nullable <DateTime> fechaFin        = null;

            // Sino se seleccionan datos, existe un error
            if (codigoUASeleccionada == "null" && codigoCarreraEnfasisSeleccionada == "null" && grupoSeleccionado == "null" && correoProfesorSeleccionado == "null" || (String.IsNullOrEmpty(fechaInicioSeleccionado) && String.IsNullOrEmpty(fechaFinSeleccionado)))
            {
                return(Json(new { error = false, tipoError = 1 }));
            }

            if (fechaInicioSeleccionado.Length > 0 && fechaFinSeleccionado.Length > 0)
            {
                fechaInicio = DateTime.ParseExact(fechaInicioSeleccionado, "yyyy-mm-dd", CultureInfo.InvariantCulture);
                fechaFin    = DateTime.ParseExact(fechaFinSeleccionado, "yyyy-mm-dd", CultureInfo.InvariantCulture);
            }
            else
            {
                return(Json(new { error = false, tipoError = 2 }));
            }

            if (DateTime.Compare((DateTime)fechaInicio, (DateTime)fechaFin) > 0)
            {
                return(Json(new { error = false, tipoError = 3 }));
            }

            // Parsea los strings
            DividirCarreraEnfasis(ref codigoCarreraEnfasisSeleccionada, ref codigoCarrera, ref codigoEnfasis);
            DividirGrupo(ref grupoSeleccionado, ref siglaCursoGrupo, ref numeroGrupo, ref semestreGrupo, ref anno);
            // Conviertes las cadenas "null" en nul
            convertNullStringToNull(ref correoProfesorSeleccionado);
            convertNullStringToNull(ref codigoUASeleccionada);

            // Hace el llamado al procedimiento almacenado que devuelve una tabla con todos los grupos necesarios
            var grupos = db.ObtenerGruposAsociados(codigoUASeleccionada, codigoCarrera, codigoEnfasis, siglaCursoGrupo, numeroGrupo, semestreGrupo, anno, correoProfesorSeleccionado);
            List <ObtenerGruposAsociados_Result> gruposAsociadosLista = null;

            // Se convierte la tabla a lista
            try
            {
                gruposAsociadosLista = grupos.ToList();
                // Si no existen grupos asociados, pues no se pudo asignar
                if (gruposAsociadosLista.Count <= 0)
                {
                    return(Json(new { error = false, tipoError = 4 }));
                }
            }
            catch
            {
                return(Json(new { error = false, tipoError = 4 }));
            }

            List <FechasSolapadasInfo> fechasJson = new List <FechasSolapadasInfo>();
            bool haySolapamiento = false;

            foreach (var grupo in grupos)
            {
                FechasSolapadasInfo fechas = VerificarFechasSolapadas(codigoFormulario,
                                                                      grupo.Anno,
                                                                      grupo.Semestre,
                                                                      grupo.NumGrupo,
                                                                      (DateTime)fechaInicio,
                                                                      (DateTime)fechaFin);

                // Si no se solapa, el metodo devuelve null
                if (fechas != null)
                {
                    fechas.PeriodoOriginal.FCodigo   = codigoFormulario;
                    fechas.PeriodoOriginal.CSigla    = grupo.SiglaCurso;
                    fechas.PeriodoOriginal.GAnno     = grupo.Anno;
                    fechas.PeriodoOriginal.GSemestre = grupo.Semestre;
                    fechas.PeriodoOriginal.GNumero   = grupo.NumGrupo;

                    // Si las fechas son diferentes, es porque alguna se solapa.
                    if (fechas.FechaInicioNueva != null || fechas.FechaFinNueva != null)
                    {
                        fechasJson.Add(fechas);
                        haySolapamiento = true;
                    }
                }
            }

            string originalInicio = FormularioAsignado.FormatearFecha((DateTime)fechaInicio);
            string originalFin    = FormularioAsignado.FormatearFecha((DateTime)fechaFin);

            if (haySolapamiento && !extenderPeriodo)
            {
                originalInicio = FormularioAsignado.FormatearFecha(fechasJson.FirstOrDefault().PeriodoOriginal.FechaInicio);
                originalFin    = FormularioAsignado.FormatearFecha(fechasJson.FirstOrDefault().PeriodoOriginal.FechaFin);

                return(Json(new { error = false, tipoError = 6, inicio = originalInicio, fin = originalFin }));
            }

            // Itera por los grupos obtenidos, asignandoles el formulario
            for (int index = 0; index < gruposAsociadosLista.Count; ++index)
            {
                var grupoActual = gruposAsociadosLista[index];
                // Procedimiento que almacena en las relaciones Activa_Por, Activa_Por_Periodo
                db.AsignarFormulario(codigoFormulario, grupoActual.SiglaCurso, grupoActual.NumGrupo, grupoActual.Anno, grupoActual.Semestre, fechaInicio, fechaFin);
            }

            if (haySolapamiento)
            {
                FechasSolapadasInfo fecha = fechasJson.FirstOrDefault();
                if (fecha.FechaInicioNueva != null)
                {
                    originalInicio = FormularioAsignado.FormatearFecha((DateTime)fechaInicio);
                }
                else
                {
                    originalInicio = FormularioAsignado.FormatearFecha(fecha.PeriodoOriginal.FechaInicio);
                }

                if (fecha.FechaFinNueva != null)
                {
                    originalFin = FormularioAsignado.FormatearFecha((DateTime)fechaFin);
                }
                else
                {
                    originalFin = FormularioAsignado.FormatearFecha(fecha.PeriodoOriginal.FechaFin);
                }
            }

            if (enviarCorreos)
            {
                var estudiantes = db.ObtenerEstudiantesAsociados(codigoUASeleccionada, codigoCarrera, codigoEnfasis, siglaCursoGrupo, numeroGrupo, semestreGrupo, anno, correoProfesorSeleccionado);
                List <ObtenerEstudiantesAsociados_Result> estudiantesAsociadosLista = null;
                // Se convierte la tabla a lista
                try
                {
                    estudiantesAsociadosLista = estudiantes.ToList();
                    // Si no existen grupos asociados, pues no se pudo asignar
                    if (estudiantesAsociadosLista.Count <= 0)
                    {
                        return(Json(new { error = false, tipoError = 4 }));
                    }
                }
                catch
                {
                    return(Json(new { error = false, tipoError = 4 }));
                }

                EnviarCorreoSobreAsignaciónCuestionario(estudiantesAsociadosLista, db.Formulario.Find(codigoFormulario));
            }

            return(Json(new { error = true, inicio = originalInicio, fin = originalFin }));
        }