public void ObtenerSeccionesConPreguntas(LlenarFormulario formulario, ObjectResult <ObtenerSeccionesDeFormulario_Result> seccionesDeFormulario, Respuestas_a_formulario respuestas, bool editar) { if (formulario != null && seccionesDeFormulario != null) { foreach (var seccion in seccionesDeFormulario.ToList()) { List <ObtenerPreguntasDeSeccion_Result> preguntas = db.ObtenerPreguntasDeSeccion(seccion.Codigo).ToList(); SeccionConPreguntas nuevaSeccion = new SeccionConPreguntas { CodigoSeccion = seccion.Codigo, Nombre = seccion.Nombre, Preguntas = new List <PreguntaConNumeroSeccion>(), Orden = seccion.Orden }; PreguntasController preguntasController = new PreguntasController(this.db); foreach (var pregunta in preguntas) { nuevaSeccion.Preguntas.Add(new PreguntaConNumeroSeccion { Pregunta = new Pregunta { Codigo = pregunta.Codigo, Enunciado = pregunta.Enunciado, Tipo = pregunta.Tipo }, OrdenSeccion = nuevaSeccion.Orden, CodigoSeccion = nuevaSeccion.CodigoSeccion, OrdenPregunta = pregunta.Orden, Edit = editar }); preguntasController.ObtenerInformacionDePreguntas(nuevaSeccion.Preguntas, nuevaSeccion.CodigoSeccion, respuestas); } formulario.Secciones.Add(nuevaSeccion); } } }
public ActionResult GuardarRespuestas(Respuestas_a_formulario respuestas, List <SeccionConPreguntas> secciones) { if (respuestas == null || secciones == null) { return(RedirectToAction("MisFormularios")); } respuestas.Fecha = DateTime.Today; respuestas.Correo = HttpContext.User.Identity.Name; db.EliminarRespuestasDeFormulario(respuestas.FCodigo, respuestas.Correo, respuestas.CSigla, respuestas.GNumero, respuestas.GAnno, respuestas.GSemestre); // Llamar a procedimiento que agrega Respuestas_a_formulario db.GuardarRespuestaAFormulario(respuestas.FCodigo, respuestas.Correo, respuestas.CSigla, respuestas.GNumero, respuestas.GAnno, respuestas.GSemestre, respuestas.Fecha, respuestas.Finalizado); // Luego, por cada sección guarde las respuestas de cada una de sus preguntas foreach (SeccionConPreguntas seccion in secciones) { if (seccion.Preguntas != null) { foreach (PreguntaConNumeroSeccion pregunta in seccion.Preguntas) { GuardarRespuestaAPregunta(pregunta, seccion.CodigoSeccion, respuestas); } } } return(RedirectToAction("MisFormularios")); }
public LlenarFormulario CrearFormulario(string id, Formulario formularioDB, Grupo grupo) { LlenarFormulario formulario = new LlenarFormulario { Formulario = formularioDB, Secciones = new List <SeccionConPreguntas>() }; ObjectResult <ObtenerSeccionesDeFormulario_Result> seccionesDeFormulario = db.ObtenerSeccionesDeFormulario(id); ObjectResult <ObtenerRespuestasAFormulario_Result> respuestasObtenidas = null; if (grupo != null) { respuestasObtenidas = db.ObtenerRespuestasAFormulario(formularioDB.Codigo, HttpContext.User.Identity.Name, "CI0128", 1, 2019, 2); } Respuestas_a_formulario respuestas = new Respuestas_a_formulario(); if (respuestasObtenidas != null) { var respuestasList = respuestasObtenidas.FirstOrDefault(); if (respuestasList != null) { respuestas.FCodigo = respuestasList.FCodigo; respuestas.Correo = respuestasList.Correo; respuestas.CSigla = respuestasList.CSigla; respuestas.Fecha = respuestasList.Fecha; respuestas.Finalizado = respuestas.Finalizado; respuestas.GAnno = respuestasList.GAnno; respuestas.GNumero = respuestasList.GNumero; respuestas.GSemestre = respuestasList.GSemestre; } } SeccionController seccionController = new SeccionController(this.db); seccionController.ObtenerSeccionesConPreguntas(formulario, seccionesDeFormulario, respuestas, false); return(formulario); }
public void ObtenerInformacionDePreguntas(IEnumerable <PreguntaConNumeroSeccion> preguntas, string codSeccion, Respuestas_a_formulario respuestas) { if (preguntas != null) { foreach (PreguntaConNumeroSeccion pregunta in preguntas) { if (pregunta.Pregunta.Tipo == "U" || pregunta.Pregunta.Tipo == "M" || pregunta.Pregunta.Tipo == "E" || pregunta.Pregunta.Tipo == "S") { pregunta.Pregunta.Pregunta_con_opciones = db.Pregunta_con_opciones.Find(pregunta.Pregunta.Codigo); if (respuestas != null) { var resultadoRespuestaGuardada = db.ObtenerRespuestasAPreguntaConOpciones(respuestas.FCodigo, respuestas.Correo, respuestas.CSigla, respuestas.GNumero, respuestas.GSemestre, respuestas.GAnno, codSeccion, pregunta.Pregunta.Codigo); if (resultadoRespuestaGuardada != null) { var respuestaGuardada = resultadoRespuestaGuardada.ToList(); if (respuestaGuardada.Any()) { pregunta.RespuestaLibreOJustificacion = respuestaGuardada.FirstOrDefault().Justificacion; var opcionesGuardadas = db.ObtenerOpcionesSeleccionadas(respuestas.FCodigo, respuestas.Correo, respuestas.CSigla, respuestas.GNumero, respuestas.GSemestre, respuestas.GAnno, codSeccion, pregunta.Pregunta.Codigo); pregunta.Opciones = new List <int>(); if (opcionesGuardadas != null) { foreach (var opcion in opcionesGuardadas.ToList()) { pregunta.Opciones.Add(opcion.OpcionSeleccionada); } } } } } } else if (pregunta.Pregunta.Tipo == "L" && respuestas != null) { var respuestaGuardada = db.ObtenerRespuestaLibreGuardada(respuestas.FCodigo, respuestas.Correo, respuestas.CSigla, respuestas.GNumero, respuestas.GAnno, respuestas.GSemestre, pregunta.Pregunta.Codigo, codSeccion).ToList(); if (respuestaGuardada.Any()) { pregunta.RespuestaLibreOJustificacion = respuestaGuardada.FirstOrDefault().Observacion; } } } } }
public void TestGuardarRespuestas() { TestSetup testSetup = new TestSetup(); var mockDb = new Mock <DataIntegradorEntities>(); string codFormulario = "TESTPSU"; string codSeccion1 = "SECCPSU"; string codSeccion2 = "DSIFSDAF"; string codPregunta = "PREGSU"; string codPregunta2 = "Pregun2"; // Se crea el formulario de prueba Formulario formulario = new Formulario() { Codigo = codFormulario, Nombre = "Formulario de prueba con preguntas de seleccion única" }; mockDb.Setup(m => m.Formulario.Find(codFormulario)).Returns(formulario); Seccion seccion = new Seccion() { Codigo = codSeccion1, Nombre = "Sección de prueba" }; Seccion seccion2 = new Seccion() { Codigo = codSeccion2, Nombre = "Sección de prueba 2" }; Pregunta pregunta = new Pregunta() { Codigo = codPregunta, Enunciado = "¿Qué piensa de Brexit?", Tipo = "L" }; Pregunta pregunta2 = new Pregunta() { Codigo = codPregunta, Enunciado = "¿Qué piensa de Brexit?", Tipo = "U" }; Seccion_tiene_pregunta seccion_con_pregunta_1 = new Seccion_tiene_pregunta() { PCodigo = codPregunta, SCodigo = codSeccion1 }; Seccion_tiene_pregunta seccion_con_pregunta_2 = new Seccion_tiene_pregunta() { PCodigo = codPregunta2, SCodigo = codSeccion2 }; Pregunta_con_opciones pregunta_Con_Opciones = new Pregunta_con_opciones { Codigo = codPregunta, Pregunta_con_opciones_de_seleccion = new Pregunta_con_opciones_de_seleccion() }; mockDb.Setup(x => x.Pregunta_con_opciones.Find(codPregunta)).Returns(pregunta_Con_Opciones); List <int> opcionesDePregunta = new List <int>(); opcionesDePregunta.Append(0); Respuestas_a_formulario respuestas = new Respuestas_a_formulario() { FCodigo = codFormulario, Correo = "*****@*****.**", CSigla = "CI0128", GNumero = 2, GAnno = 2019, GSemestre = 2, Fecha = DateTime.Today, Finalizado = false }; PreguntaConNumeroSeccion preguntaConSeccion1 = new PreguntaConNumeroSeccion() { OrdenSeccion = 0, OrdenPregunta = 0, Pregunta = pregunta, RespuestaLibreOJustificacion = "Libre" }; PreguntaConNumeroSeccion preguntaConSeccion2 = new PreguntaConNumeroSeccion() { OrdenSeccion = 1, OrdenPregunta = 0, Pregunta = pregunta2, RespuestaLibreOJustificacion = "Unica" }; List <PreguntaConNumeroSeccion> preguntas = new List <PreguntaConNumeroSeccion>(); preguntas.Append(preguntaConSeccion1); preguntas.Append(preguntaConSeccion2); SeccionConPreguntas seccionP = new SeccionConPreguntas() { CodigoSeccion = codSeccion1, Nombre = "nsdlkfj;a", Preguntas = preguntas, Orden = 0, Edicion = true }; SeccionConPreguntas seccionP2 = new SeccionConPreguntas() { CodigoSeccion = codSeccion2, Nombre = "seccion2nsdlkfj;a", Preguntas = preguntas, Orden = 0, Edicion = true }; List <SeccionConPreguntas> secciones = new List <SeccionConPreguntas>() { seccionP, seccionP2 }; LlenarFormularioController controller = new LlenarFormularioController(mockDb.Object); testSetup.SetupHttpContext(controller); // Si no se cae en esta linea, significa que el guardar funciona correctamente controller.GuardarRespuestas(respuestas, secciones); }
public void TestGuardarRespuestasAPreguntaLibre() { TestSetup testSetup = new TestSetup(); var mockDb = new Mock <DataIntegradorEntities>(); string codFormulario = "TESTPSU"; string codSeccion = "SECCPSU"; string codPregunta = "PREGSU"; // Se crea el formulario de prueba Formulario formulario = new Formulario() { Codigo = codFormulario, Nombre = "Formulario de prueba con preguntas de seleccion única" }; mockDb.Setup(m => m.Formulario.Find(codFormulario)).Returns(formulario); ObtenerSeccionesDeFormulario_Result seccion = new ObtenerSeccionesDeFormulario_Result { Codigo = codSeccion, Nombre = "Sección de prueba", Orden = 0 }; var mockedObtenerSecciones = testSetup.SetupMockProcedure <ObtenerSeccionesDeFormulario_Result> (new List <ObtenerSeccionesDeFormulario_Result> { seccion }); mockDb.Setup(x => x.ObtenerSeccionesDeFormulario(codFormulario)).Returns(mockedObtenerSecciones.Object); Pregunta pregunta = new Pregunta() { Codigo = codPregunta, Enunciado = "¿Qué piensa de Brexit?", Tipo = "L" }; Respuestas_a_formulario respuestas = new Respuestas_a_formulario() { FCodigo = codFormulario, Correo = "*****@*****.**", CSigla = "CI0128", GNumero = 2, GAnno = 2019, GSemestre = 2, Fecha = DateTime.Today, Finalizado = false }; PreguntaConNumeroSeccion preguntaConSeccion = new PreguntaConNumeroSeccion() { OrdenSeccion = 0, OrdenPregunta = 0, Pregunta = pregunta, RespuestaLibreOJustificacion = "Para que cubra más del coverage" }; LlenarFormularioController controller = new LlenarFormularioController(mockDb.Object); testSetup.SetupHttpContext(controller); // Si no se cae en esta linea, significa que el guardar funciona correctamente controller.GuardarRespuestaAPregunta(preguntaConSeccion, codSeccion, respuestas); }
public void GuardarRespuestaAPregunta(PreguntaConNumeroSeccion pregunta, string CodigoSeccion, Respuestas_a_formulario respuestas) { if (pregunta != null && !string.IsNullOrEmpty(CodigoSeccion) && respuestas != null) { if (pregunta.Pregunta.Tipo == "L" && pregunta.RespuestaLibreOJustificacion != null) { db.GuardarRespuestaAPreguntaLibre(respuestas.FCodigo, respuestas.Correo, respuestas.CSigla, respuestas.GNumero, respuestas.GAnno, respuestas.GSemestre, respuestas.Fecha, pregunta.Pregunta.Codigo, CodigoSeccion, pregunta.RespuestaLibreOJustificacion); } else { // Se crea la tupla que indica que el formulario fue llenado. Es el intento de llenado de un formulario, se ocupa antes de agregar las opciones seleccionadas db.GuardarRespuestaAPreguntaConOpciones(respuestas.FCodigo, respuestas.Correo, respuestas.CSigla, respuestas.GNumero, respuestas.GAnno, respuestas.GSemestre, respuestas.Fecha, pregunta.Pregunta.Codigo, CodigoSeccion, pregunta.RespuestaLibreOJustificacion); // Se recorren cada una de las opciones que fueron seleccionadas para la pregunta. En el caso de selección múltiple, serán varias. // En todos los demás casos solo se ejecuta una vez. if (pregunta.Opciones != null && pregunta.Opciones.Any()) { foreach (var opcion in pregunta.Opciones) { db.GuardarOpcionesSeleccionadas(respuestas.FCodigo, respuestas.Correo, respuestas.CSigla, respuestas.GNumero, respuestas.GAnno, respuestas.GSemestre, respuestas.Fecha, pregunta.Pregunta.Codigo, CodigoSeccion, (byte)opcion); } } } } }