public ActionResult Edit(TurmaVM turmaRecebida, int idCurso)
        {
            Turma turmaSalva = ObterListaTurmas().Where(t => t.Id == turmaRecebida.Id).FirstOrDefault();

            if (turmaSalva == null)
            {
                return(HttpNotFound());
            }
            Usuario usuarioAutenticado = ObterListaUsuarios().FirstOrDefault(u => u.Login == User.Identity.Name);

            if (usuarioAutenticado == null)
            {
                return(RedirectToAction("Unauthorized", "Erro"));
            }

            var curso = ObterListaCursos().Where(c => c.Id.Equals(idCurso)).FirstOrDefault();

            if (curso == null)
            {
                return(HttpNotFound());
            }
            ModelState["Curso"].Errors.Clear();

            bool codigoExistente = ObterListaTurmas()
                                   .FirstOrDefault(t => t.Codigo.Equals(turmaRecebida.Codigo, StringComparison.InvariantCultureIgnoreCase) && !t.Id.Equals(turmaRecebida.Id)) != null;

            bool podeEditar = ObterListaTurmas().Where(t => t.Id == turmaSalva.Id).FirstOrDefault() != null;

            if (!podeEditar)
            {
                return(RedirectToAction("Unauthorized", "Erro"));
            }

            if (codigoExistente)
            {
                ModelState.AddModelError("Codigo", "Já existe uma turma com esse código");
            }

            if (ModelState.IsValid)
            {
                turmaSalva.Codigo = turmaRecebida.Codigo;
                turmaSalva.Curso  = curso;
                _turmaRepository.Merge(turmaSalva);

                return(Json("true", JsonRequestBehavior.AllowGet));
            }

            return(Json("false", JsonRequestBehavior.AllowGet));
        }
        public async Task <ActionResult> Novo(TurmaVM entity)
        {
            await InicializarViewBagAsync();

            try
            {
                var turmaModel = Mapper.Map <TurmaVM, Turma>(entity);
                await _bussinesTurma.InserirAsync(turmaModel);

                TempData["Mensagem"] = "Turma cadastrada com sucesso";
                return(RedirectToAction(nameof(Index)));
            }catch (CrudTurmaException ex)
            {
                TempData["Mensagem"] = ex.Message;
                return(View(entity));
            }
        }
        public async Task <ActionResult> Editar(TurmaVM turma)
        {
            await InicializarViewBagAsync();

            try
            {
                var turmaModel = Mapper.Map <TurmaVM, Turma>(turma);
                await _bussinesTurma.AlterarAsync(turmaModel);

                TempData["Mensagem"] = "Turma alterada com sucessso";
                return(RedirectToAction(nameof(Index)));
            }catch (CrudTurmaException ex)
            {
                TempData["Mensagem"] = ex.Message;
                return(View(turma));
            }
        }
        public ActionResult Add(TurmaVM turmaRecebida, int idCurso)
        {
            Usuario usuarioAutenticado = ObterListaUsuarios().FirstOrDefault(u => u.Login == User.Identity.Name);

            if (usuarioAutenticado == null)
            {
                return(RedirectToAction("Unauthorized", "Erro"));
            }
            List <Curso> cursosDoUsuario = usuarioAutenticado.Cursos.ToList();

            List <Curso> cursos = cursosDoUsuario.Where(c => c.Id == idCurso).ToList();

            if (cursos.Count <= 0)
            {
                return(HttpNotFound());
            }

            Turma turma = turmaRecebida.ToTurma(cursos.First(), new List <Aluno>());

            ModelState["Curso"].Errors.Clear();

            bool codigoExistente = ObterListaTurmas()
                                   .FirstOrDefault(t => t.Codigo.Equals(turma.Codigo, StringComparison.InvariantCultureIgnoreCase) && !t.Id.Equals(turma.Id)) != null;

            if (codigoExistente)
            {
                ModelState.AddModelError("Codigo", "Já existe uma turma com esse código");
            }

            if (ModelState.IsValid)
            {
                _turmaRepository.Persist(turma);

                return(Json("true", JsonRequestBehavior.AllowGet));
            }

            return(Json("false", JsonRequestBehavior.AllowGet));
        }