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 })); }