// GET: Admin/Bloques/Create
        public ActionResult Create(int id)
        {
            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            var subtema = db.SubTemas.Include(s => s.Tema).SingleOrDefault(s => s.SubTemaId == id);

            if (subtema == null)
            {
                return(HttpNotFound());
            }


            BloquesCreateViewModel viewModel = new BloquesCreateViewModel();

            viewModel.Subtema = subtema;
            viewModel.InicializarDesplegables();
            viewModel.CargarClienteSeleccionado(db);

            return(View(viewModel));
        }
        public ActionResult Create(BloquesCreateViewModel viewModel)
        {
            if (ModelState.IsValid)
            {
                bool isValid = true;
                if (viewModel.Bloque.AreaId == (int)AreasId.Examen)
                {
                    if (viewModel.Bloque.TipoEjercicioId != (int)TiposDeEjerciciosId.Test && viewModel.Bloque.TipoEjercicioId != (int)TiposDeEjerciciosId.FillTheGap)
                    {
                        ModelState.AddModelError("Bloque.TipoEjercicioId", "El examen sólo puede ser Test o Fill the gap");
                        isValid = false;
                    }

                    var examen = db.Bloques.FirstOrDefault(bl => bl.AreaId == (int)AreasId.Examen && bl.SubTemaId == viewModel.Subtema.SubTemaId);
                    if (examen != null)
                    {
                        ModelState.AddModelError("Bloque.AreaId", "Ya existe un examen");
                        isValid = false;
                    }
                }
                if (isValid)
                {
                    viewModel.Bloque.SubTemaId = viewModel.Subtema.SubTemaId;
                    db.Bloques.Add(viewModel.Bloque);
                    db.SaveChanges();

                    AccesoClientesHelper.AnyadirBloqueConHijos(viewModel.Bloque.BloqueId, viewModel.Clientes.Where(cli => cli.Selected)
                                                               .Select(cli => Convert.ToInt32(cli.Value)).ToList());

                    if (viewModel.Bloque.TipoEjercicioId == (int)TiposDeEjerciciosId.Crucigrama)
                    {
                        var crucigrama = new Crucigrama()
                        {
                            AreaId          = viewModel.Bloque.AreaId,
                            BloqueId        = viewModel.Bloque.BloqueId,
                            Descripcion     = "Crucigrama",
                            Enunciado       = "Crucigrama",
                            Horizontales    = "Pistas de palabras horizontales",
                            SubTemaId       = viewModel.Bloque.SubTemaId,
                            TipoEjercicioId = viewModel.Bloque.TipoEjercicioId,
                            Verticales      = "Pistas de palabras verticales"
                        };
                        List <CasillaCrucigrama> icollection = new List <CasillaCrucigrama>();
                        for (int i = 0; i < 12; i++)
                        {
                            for (int j = 0; j < 12; j++)
                            {
                                icollection.Add(new CasillaCrucigrama()
                                {
                                    letra = "",
                                    PosH  = j,
                                    PosV  = i
                                });
                            }
                        }
                        crucigrama.CasillaCrucigramas = icollection;
                        db.Crucigramas.Add(crucigrama);
                        db.SaveChanges();
                    }

                    TipoEjercicio tipoEjercicio = db.TipoEjercicios.Find(viewModel.Bloque.TipoEjercicioId);
                    return(RedirectToAction("Create", tipoEjercicio.Controlador, new { id = viewModel.Bloque.BloqueId }));
                }
            }

            var subtema = db.SubTemas.Include(s => s.Tema).SingleOrDefault(s => s.SubTemaId == viewModel.Subtema.SubTemaId);

            viewModel.Subtema = subtema;
            viewModel.InicializarDesplegables();
            return(View(viewModel));
        }