public ActionResult Edit(AlunoVM alunoRecebido, string codTurma)
        {
            var query = ObterListaTurmas().Where(t => t.Codigo.Equals(codTurma)).ToList();

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

            Turma turmaRecebida = query.First();
            Aluno novoAluno     = alunoRecebido.ToAluno(turmaRecebida);

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

            bool matriculaExistente = ObterListaAlunos()
                                      .FirstOrDefault(a => a.Matricula.Equals(novoAluno.Matricula, StringComparison.InvariantCultureIgnoreCase) && !a.Id.Equals(novoAluno.Id)) != null;

            if (matriculaExistente)
            {
                ModelState.AddModelError("Matricula", "Já existe um aluno com essa matricula");
            }
            novoAluno.AnoApresentacao = alunoRecebido.AnoApresentacao;
            ModelState["AnoApresentacao"].Errors.Clear();

            novoAluno.MesApresentacao = alunoRecebido.MesApresentacao;
            ModelState["MesApresentacao"].Errors.Clear();

            Aluno alunoSalvo = ObterListaAlunos()
                               .Where(a => a.Id == novoAluno.Id)
                               .FirstOrDefault();

            if (ObterPrevisaoInicialApresentacao(alunoSalvo)[0] > alunoRecebido.AnoApresentacao)
            {
                ModelState.AddModelError("MesApresentacao", "Restauramos a combinação Ano/Semestre pois a inserida não representava uma data posterior a data de previsão padrao");
            }
            else if (ObterPrevisaoInicialApresentacao(alunoSalvo)[0] == alunoRecebido.AnoApresentacao && ObterPrevisaoInicialApresentacao(alunoSalvo)[1] > alunoRecebido.MesApresentacao)
            {
                ModelState.AddModelError("MesApresentacao", "Restauramos a combinação Ano/Semestre pois a inserida não representava uma data posterior a data de previsão padrao");
            }

            if (ModelState.IsValid)
            {
                bool podeEditar = ObterListaAlunos().Where(a => a.Id == alunoSalvo.Id).FirstOrDefault() != null;
                if (!podeEditar)
                {
                    return(RedirectToAction("Unauthorized", "Erro"));
                }

                _alunoRepository.Update(alunoSalvo, novoAluno, query.First());
                return(RedirectToAction("Index"));
            }
            ViewBag.DataAntiga = new int[] { alunoSalvo.AnoApresentacao, alunoSalvo.MesApresentacao };
            ViewBag.turmas     = ObterListaTurmas()
                                 .ToTurmaVM();

            novoAluno.AnoApresentacao = alunoSalvo.AnoApresentacao;
            novoAluno.MesApresentacao = novoAluno.MesApresentacao;

            return(View(novoAluno.ToAlunoVM()));
        }
        public ActionResult Add(AlunoVM alunoRecebido, string codTurma)
        {
            var query = ObterListaTurmas().Where(t => t.Codigo.Equals(codTurma)).ToList();

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

            Turma turmaRecebida = query.First();
            Aluno novoAluno     = alunoRecebido.ToAluno(turmaRecebida);

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

            bool matriculaExistente = ObterListaAlunos()
                                      .FirstOrDefault(a => a.Matricula.Equals(novoAluno.Matricula, StringComparison.InvariantCultureIgnoreCase) && !a.Id.Equals(novoAluno.Id)) != null;

            if (matriculaExistente)
            {
                ModelState.AddModelError("Matricula", "Já existe um aluno com essa matricula");
            }

            ModelState["AnoApresentacao"].Errors.Clear();
            novoAluno.AnoApresentacao = ObterPrevisaoInicialApresentacao(novoAluno)[0];

            ModelState["MesApresentacao"].Errors.Clear();
            novoAluno.MesApresentacao = ObterPrevisaoInicialApresentacao(novoAluno)[1];

            if (ModelState.IsValid)
            {
                _alunoRepository.Persist(novoAluno);
                return(RedirectToAction("Index"));
            }
            ViewBag.turmas = ObterListaTurmas()
                             .ToTurmaVM();
            return(View(novoAluno.ToAlunoVM()));
        }