public ActionResult Crear([Bind(Include = "nombre,fechaInicio,fechaFin")] PlanDeMejora plan, List <String> ProfeSeleccionado = null, List <String> FormularioSeleccionado = null, List <Objetivo> Objetivo = null, Dictionary <String, String> SeccionConObjetivo = null, Dictionary <String, String> PreguntaConAccion = null)
        {
            if (!permissionManager.IsAuthorized(Permission.CREAR_PLANES_MEJORA))
            {
                TempData["alertmessage"] = "No tiene permisos para acceder a esta página.";
                return(RedirectToAction("../Home/Index"));
            }
            // Objeto de ayuda business intelligence planes de mejora
            PlanDeMejoraBI planesHelper = new PlanDeMejoraBI();

            // Asignacion del codigo al nuevo plan de mejora
            planesHelper.setCodigoAPlanDeMejora(this.db, plan);

            //Agregando los objetivos al plan
            plan.Objetivo = Objetivo;

            //Agregando las secciones a los objetivos
            planesHelper.insertSeccionesEnObjetivos(plan.Objetivo, SeccionConObjetivo, db);

            //Agregando las preguntas a las acciones
            planesHelper.insertPreguntasEnAcciones(plan.Objetivo, PreguntaConAccion, db);

            //Agrgando los formularios al plan de mejora
            planesHelper.insertFormularios(plan, FormularioSeleccionado, db);

            //Agregando los profesores seleccionados al plan de mejora
            planesHelper.insertProfesores(plan, ProfeSeleccionado, db);

            // Almacenamiento del plan por medio de un procedimiento almacenado
            planesHelper.savePlan(plan);
            db.SaveChanges();

            PlanDeMejora planTemporal = db.PlanDeMejora.Find(plan.codigo);

            if (planTemporal != null && ProfeSeleccionado != null)
            {
                if (ProfeSeleccionado.Count > 0)
                {
                    this.EnviarCorreoSobreCreacionPlan(planTemporal, ProfeSeleccionado);
                }
            }

            return(Json(new { success = true, responseText = "Your message successfuly sent!" }, JsonRequestBehavior.AllowGet));
        }
        public void insertSeccionesInObjetivosEmpty()
        {
            int tamanno = 4;

            Boolean resultado = true;
            // Creacion de los objetivos
            var objetivos = new List <Objetivo>
            {
                new Objetivo()
                {
                    codPlan = 32, nombre = "00000000"
                },
                new Objetivo()
                {
                    codPlan = 32, nombre = "00000001"
                },
                new Objetivo()
                {
                    codPlan = 32, nombre = "00000002"
                },
                new Objetivo()
                {
                    codPlan = 32, nombre = "00000003"
                },
            }.AsQueryable();

            var mockObjetivosDBSet = new Mock <DbSet <Objetivo> >();

            mockObjetivosDBSet.As <IQueryable <Objetivo> >().Setup(m => m.Provider).Returns(objetivos.Provider);
            mockObjetivosDBSet.As <IQueryable <Objetivo> >().Setup(m => m.Expression).Returns(objetivos.Expression);
            mockObjetivosDBSet.As <IQueryable <Objetivo> >().Setup(m => m.ElementType).Returns(objetivos.ElementType);
            mockObjetivosDBSet.As <IQueryable <Objetivo> >().Setup(m => m.GetEnumerator()).Returns(objetivos.GetEnumerator());

            // Ahora creando las tablas de las secciones
            var secciones = new List <Seccion>
            {
                new Seccion()
                {
                    Codigo = "00000000"
                },
                new Seccion()
                {
                    Codigo = "00000001"
                },
                new Seccion()
                {
                    Codigo = "00000002"
                },
                new Seccion()
                {
                    Codigo = "00000003"
                }
            }.AsQueryable();

            var mockSeccionesDBSet = new Mock <DbSet <Seccion> >();

            mockSeccionesDBSet.As <IQueryable <Seccion> >().Setup(m => m.Provider).Returns(secciones.Provider);
            mockSeccionesDBSet.As <IQueryable <Seccion> >().Setup(m => m.Expression).Returns(secciones.Expression);
            mockSeccionesDBSet.As <IQueryable <Seccion> >().Setup(m => m.ElementType).Returns(secciones.ElementType);
            mockSeccionesDBSet.As <IQueryable <Seccion> >().Setup(m => m.GetEnumerator()).Returns(secciones.GetEnumerator());

            var mockDb = new Mock <DataIntegradorEntities>();

            //Seteo de las tablas
            mockDb.Setup(m => m.Objetivo).Returns(mockObjetivosDBSet.Object);
            mockDb.Setup(m => m.Seccion).Returns(mockSeccionesDBSet.Object);

            PlanDeMejoraBI controller = new PlanDeMejoraBI();

            //Haciendo el diccionario que crea la relacion entre los objetivos y las secciones
            Dictionary <String, String> dic = new Dictionary <string, string>();

            //Agregando una unica seccion por objetivo
            for (int i = 0; i < tamanno; i++)
            {
                var value = "0000000" + i;
                dic.Add(value, value);
            }

            controller.insertSeccionesEnObjetivos(objetivos.ToList(), dic, mockDb.Object);

            var seccionesTemp = mockDb.Object.Seccion.ToList();
            var objetivosTemp = mockDb.Object.Objetivo.ToList();

            //Ahora ya con los objetivos modificados hacemos las asociaciones
            for (int i = 0; i < 4; ++i)
            {
                string identificadorObjetivo = objetivosTemp[i].nombre;
                var    identificadorSeccion  = objetivosTemp[i].Seccion;

                if (identificadorObjetivo == null)
                {
                    resultado = false;
                }
            }

            //Ahora vemos si pasa la prueba
            Assert.IsTrue(resultado);
        }