public ActionResult Create(Pregunta_con_opciones_de_seleccion pregunta, List <Opciones_de_seleccion> Opciones)
        {
            if (ModelState.IsValid && pregunta.Codigo.Length > 0 && pregunta.Pregunta_con_opciones.Pregunta.Enunciado.Length > 0)
            {
                bool validOptions = Opciones != null;
                if (validOptions)
                {
                    validOptions = false;
                    foreach (Opciones_de_seleccion opcion in Opciones)
                    {
                        if (opcion.Texto != null && opcion.Texto.Length > 0)
                        {
                            validOptions = true;
                        }
                    }
                }

                if (!validOptions)
                {
                    ModelState.AddModelError("", "Una pregunta de selección única necesita al menos una opción");
                    return(View(pregunta));
                }
                try
                {
                    if (db.AgregarPreguntaConOpcion(pregunta.Codigo, "U", pregunta.Pregunta_con_opciones.Pregunta.Enunciado, pregunta.Pregunta_con_opciones.TituloCampoObservacion, null) == 0)
                    {
                        ModelState.AddModelError("Codigo", "Código ya en uso.");
                        return(View(pregunta));
                    }
                }
                catch (System.Data.SqlClient.SqlException)
                {
                    ModelState.AddModelError("Codigo", "Código ya en uso.");
                    return(View(pregunta));
                }

                foreach (Opciones_de_seleccion opcion in Opciones)
                {
                    db.AgregarOpcion(pregunta.Codigo, (byte)opcion.Orden, opcion.Texto);
                }

                ViewBag.Message = "Exitoso";
                return(View());
            }

            return(View());
        }
        public ActionResult GuardarPregunta(Pregunta pregunta, string Justificacion, List <string> TextoOpciones, int min = 0, int max = 0)
        {
            // Se fija que la pregunta no sea nula y que tenga opciones, a menos que sea escalar o libre, que no requieren opciones
            if (pregunta == null || (TextoOpciones == null && pregunta.Tipo == "U" && pregunta.Tipo == "M"))
            {
                ModelState.AddModelError("", "Datos incompletos");
                return(Json(new { guardadoExitoso = false, DatosIncompletos = true, CodigoEnUso = false, FaltaOpciones = false, MinMax = false }));
            }

            if (Justificacion == "")
            {
                Justificacion = null;
            }

            List <Opciones_de_seleccion> Opciones = new List <Opciones_de_seleccion>();

            if (TextoOpciones != null)
            {
                for (int count = 0; count < TextoOpciones.Count; ++count)
                {
                    Opciones_de_seleccion opcion = new Opciones_de_seleccion();
                    opcion.Codigo = pregunta.Codigo;
                    opcion.Orden  = count;
                    opcion.Texto  = TextoOpciones[count];
                    Opciones.Add(opcion);
                }
            }

            if (ModelState.IsValid && pregunta.Codigo.Length > 0 && pregunta.Enunciado.Length > 0)
            {
                // GuardarPreguntaSiNo las preguntas dependiendo del tipo
                // ToDo: realizar un método para cada tipo de pregunta
                switch (pregunta.Tipo)
                {
                case "U":
                    pregunta.Pregunta_con_opciones = new Pregunta_con_opciones();
                    break;

                case "M":
                    pregunta.Pregunta_con_opciones = new Pregunta_con_opciones();
                    break;

                case "L": return(GuardarRespuestaLibre(pregunta));

                case "S":
                    pregunta.Pregunta_con_opciones = new Pregunta_con_opciones();
                    return(GuardarPreguntaSiNo(pregunta));

                case "E":
                    pregunta.Pregunta_con_opciones = new Pregunta_con_opciones();
                    return(GuardarPreguntaEscalar(pregunta, min, max));
                }

                pregunta.Pregunta_con_opciones.TituloCampoObservacion = Justificacion;

                bool validOptions = Opciones != null;
                if (validOptions)
                {
                    validOptions = false;
                    foreach (Opciones_de_seleccion opcion in Opciones)
                    {
                        if (opcion.Texto != null && opcion.Texto.Length > 0)
                        {
                            validOptions = true;
                        }
                    }
                }

                if (!validOptions)
                {
                    ModelState.AddModelError("", "Una pregunta de selección única necesita al menos una opción");
                    return(Json(new { guardadoExitoso = false, DatosIncompletos = false, CodigoEnUso = false, FaltaOpciones = true, MinMax = false }));
                }
                try
                {
                    ObjectParameter returnValue = new ObjectParameter("NumeroError", typeof(int));
                    if (db.AgregarPreguntaConOpcion(pregunta.Codigo, pregunta.Tipo, pregunta.Enunciado, pregunta.Pregunta_con_opciones.TituloCampoObservacion, returnValue) == 0)
                    {
                        ModelState.AddModelError("Codigo", "Código ya en uso.");
                        return(Json(new { guardadoExitoso = false, DatosIncompletos = false, CodigoEnUso = true, FaltaOpciones = false, MinMax = false }));
                    }
                }
                catch (System.Data.SqlClient.SqlException)
                {
                    ModelState.AddModelError("Codigo", "Código ya en uso.");
                    return(Json(new { guardadoExitoso = false, DatosIncompletos = false, CodigoEnUso = true, FaltaOpciones = false, MinMax = false }));
                }

                foreach (Opciones_de_seleccion opcion in Opciones)
                {
                    db.AgregarOpcion(pregunta.Codigo, (byte)opcion.Orden, opcion.Texto);
                }

                ModelState.Clear();
                ViewBag.Message = "Exitoso";
                return(Json(new { guardadoExitoso = true, DatosIncompletos = false, CodigoEnUso = false, FaltaOpciones = false, MinMax = false }));
            }
            else
            {
                ModelState.AddModelError("", "Datos incompletos");
                return(Json(new { guardadoExitoso = false, DatosIncompletos = true, CodigoEnUso = false, FaltaOpciones = false, MinMax = false }));
            }
        }