public void ValidarPreRequisitosDaMatricula(MatriculaOferta pMatriculaOferta, int idTurma = 0) { if (pMatriculaOferta.Oferta == null) { throw new AcademicoException("A matrícula não está vinculada adequadamente a uma Oferta. Tente novamente."); } ; if (pMatriculaOferta.Oferta.SolucaoEducacional == null) { pMatriculaOferta.Oferta.SolucaoEducacional = ObterPorId(new BMOferta().ObterPorId(pMatriculaOferta.Oferta.ID).SolucaoEducacional.ID); } ValidarVagasPorUf(pMatriculaOferta); if (idTurma > 0) { //Quantidade Máxima de Inscrições var turma = new BMTurma().ObterPorID(idTurma); var maxInscricoesOferta = new BMOferta().ObterPorId(pMatriculaOferta.Oferta.ID).QuantidadeMaximaInscricoes; if (turma.QuantidadeMaximaInscricoes > maxInscricoesOferta) { throw new AcademicoException("A quantidade de inscrições da turma, excede o máximo permitido para a oferta."); } } if (!pMatriculaOferta.Oferta.SolucaoEducacional.ListaPreRequisito.Any()) { return; } var aprovados = new List <enumStatusMatricula> { enumStatusMatricula.Aprovado, enumStatusMatricula.Concluido }; var oferta = pMatriculaOferta.Oferta; foreach (var item in pMatriculaOferta.Oferta.SolucaoEducacional.ListaPreRequisito) { var matriculaOferta = new BMMatriculaOferta().ObterPorUsuarioESolucaoEducacional(pMatriculaOferta.Usuario.ID, item.PreRequisito.ID).ToList(); if (matriculaOferta != null && matriculaOferta.Any()) { var lastOrDefault = matriculaOferta.LastOrDefault(); if (lastOrDefault != null && (oferta.SolucaoEducacional.ID == item.SolucaoEducacional.ID && !aprovados.Contains(lastOrDefault.StatusMatricula))) { throw new AcademicoException("Erro: Existem soluções como pré-requisito que não estão cursadas"); } } } }
public void GerarSequencias() { foreach (var solucao in repositorio.session.Query <SolucaoEducacional>().Where(s => s.Sequencia == null && s.CategoriaConteudo != null)) { solucao.Sequencia = ObterProximoCodigoSequencial(solucao.CategoriaConteudo); repositorio.Salvar(solucao); } var bmOferta = new BMOferta(); foreach (var oferta in repositorio.session.Query <Oferta>().Where(o => o.Sequencia == null && o.SolucaoEducacional != null && o.SolucaoEducacional.CategoriaConteudo != null)) { oferta.Sequencia = bmOferta.ObterProximoCodigoSequencial(oferta.SolucaoEducacional); bmOferta.Salvar(oferta); } var bmTurma = new BMTurma(); foreach (var turma in repositorio.session.Query <Turma>().Where(t => t.Sequencia == null && t.Oferta != null && t.Oferta.SolucaoEducacional != null && t.Oferta.SolucaoEducacional.CategoriaConteudo != null)) { turma.Sequencia = bmTurma.ObterProximoCodigoSequencial(turma.Oferta); bmTurma.Salvar(turma); } }