public void AtribuirPontosParaResposta(AtribuirNotaRequest request, Usuario usuarioLogado)
        {
            Resposta resposta = _respostaRepository.GetById(request.IdResposta);

            if (resposta == null)
            {
                throw new Exception("Resposta não encontrada.");
            }

            int idCase = (from r in _respostaRepository.Queryable()
                          join e in _entregaDeLicaoRepository.Queryable() on r.IdEntregaDeLicao equals e.Id
                          join l in _licaoRepository.Queryable() on e.IdLicao equals l.Id
                          where r.Id == request.IdResposta
                          select l.IdCase).FirstOrDefault();

            CaseDeNegocio caseDeNegocio = _caseDeNegocioService.ObterPorId(idCase);

            if (!_caseDeNegocioService.UsuarioEstaAssociadoAoCaseDeNegocioComoProfessor(usuarioLogado, caseDeNegocio))
            {
                throw new Exception("Usuário não possui permissão para atribuir notas.");
            }

            resposta.PontosGanhos = request.Pontos;

            _respostaRepository.Update(resposta);
        }
示例#2
0
        public int Adicionar(TrofeuDTO trofeuDTO, Usuario usuarioLogado)
        {
            if (trofeuDTO == null || trofeuDTO.Id > 0)
            {
                throw new Exception("Solicitação inválida.");
            }

            CaseDeNegocio caseDeNegocio = _caseDeNegocioService.ObterPorId(trofeuDTO.IdCase);

            if (caseDeNegocio == null)
            {
                throw new Exception("Case de negócio não encontrado.");
            }

            if (!_caseDeNegocioService.UsuarioEstaAssociadoAoCaseDeNegocioComoProfessor(usuarioLogado, caseDeNegocio))
            {
                throw new Exception("Usuário não possui permissão.");
            }

            Trofeu trofeu = new Trofeu();

            trofeu.IdCase        = caseDeNegocio.Id;
            trofeu.CaseDeNegocio = caseDeNegocio;

            trofeuDTO.PreencherEntidade(trofeu);

            Adicionar(trofeu);

            return(trofeu.Id);
        }
示例#3
0
 public void PreencherEntidade(CaseDeNegocio caseDeNegocio)
 {
     caseDeNegocio.Nome = Nome;
     caseDeNegocio.TextoDeApresentacao    = TextoDeApresentacao;
     caseDeNegocio.PermiteMontarGrupos    = PermiteMontarGrupos;
     caseDeNegocio.MinimoDeAlunosPorGrupo = MinimoAlunosGrupo;
     caseDeNegocio.MaximoDeAlunosPorGrupo = MaximoAlunosGrupo;
 }
示例#4
0
        public MontarGrupoDTO ObterDadosParaMontagemDeGrupos(Usuario usuarioLogado, int?idCase = null, int?idGrupo = null)
        {
            if (!idCase.HasValue && !idGrupo.HasValue)
            {
                throw new Exception("Solicitação invélida.");
            }

            var response = new MontarGrupoDTO();

            CaseDeNegocio caseDeNegocio = null;

            if (idGrupo.HasValue)
            {
                Grupo grupo = ObterPorId(idGrupo.Value);

                if (grupo == null)
                {
                    throw new Exception("Grupo inexistente.");
                }

                caseDeNegocio = grupo.CaseDeNegocio;

                response.IdGrupo               = idGrupo.Value;
                response.NomeGrupo             = grupo.Nome;
                response.GritoDeGuerra         = grupo.GritoDeGuerra;
                response.PermiteAlterarMembros = GrupoJaTeveLicaoEntregue(idGrupo.Value);
                response.Membros               = ListarMembros(idGrupo.Value);
            }
            else
            {
                caseDeNegocio = _caseDeNegocioRepository.GetById(idCase.Value);

                if (caseDeNegocio == null)
                {
                    throw new Exception("Case de negócio não encontrado.");
                }

                var alunoDoCase = _alunoRepository.Obter(usuarioLogado.Id, caseDeNegocio.Id);
                if (alunoDoCase != null)
                {
                    response.Membros.Add(new MembroDoGrupoDTO(usuarioLogado, alunoDoCase));
                }

                response.PermiteAlterarMembros = true;
            }

            if (!caseDeNegocio.PermiteMontarGrupos)
            {
                throw new Exception("Case de negócio não permite grupos.");
            }

            response.IdCase = caseDeNegocio.Id;
            response.MinimoPermitidoDeAlunos = caseDeNegocio.MinimoDeAlunosPorGrupo;
            response.MaximoPermitidoDeAlunos = caseDeNegocio.MaximoDeAlunosPorGrupo;

            return(response);
        }
示例#5
0
 public CaseDetalhesDTO(CaseDeNegocio caseDeNegocio)
 {
     Id   = caseDeNegocio.Id;
     Nome = caseDeNegocio.Nome;
     TextoDeApresentacao = caseDeNegocio.TextoDeApresentacao;
     PermiteMontarGrupos = caseDeNegocio.PermiteMontarGrupos;
     MinimoAlunosGrupo   = caseDeNegocio.MinimoDeAlunosPorGrupo;
     MaximoAlunosGrupo   = caseDeNegocio.MaximoDeAlunosPorGrupo;
     IdProfessor         = caseDeNegocio.IdProfessor;
     NomeProfessor       = caseDeNegocio.Professor.NomeCompleto;
     ChaveDeBusca        = caseDeNegocio.ChaveDeBusca;
 }
示例#6
0
        public void Atribuir(AtribuirTrofeuRequest request, Usuario usuario)
        {
            Trofeu trofeu = _trofeuRepository.GetById(request.IdTrofeu);

            if (trofeu == null)
            {
                throw new Exception("Troféu não localizado.");
            }

            CaseDeNegocio caseDeNegocio = _caseDeNegocioService.ObterPorId(trofeu.IdCase);

            if (!_caseDeNegocioService.UsuarioEstaAssociadoAoCaseDeNegocioComoProfessor(usuario, caseDeNegocio))
            {
                throw new Exception("Usuário não possui permissão para esta solicitação.");
            }

            EntregaDeLicao entregaDeLicao = _entregaDeLicaoRepository.GetById(request.IdEntregaDeLicao);

            if (entregaDeLicao == null)
            {
                throw new Exception("Lição não localizada.");
            }
            else if (entregaDeLicao.Licao.IdCase != caseDeNegocio.Id)
            {
                throw new Exception("Lição não pode ser associada à este troféu.");
            }

            Resposta resposta = null;

            if (request.IdResposta != null && request.IdResposta > 0)
            {
                resposta = _respostaRepository.GetById(request.IdResposta.Value);
                if (resposta == null)
                {
                    throw new Exception("Questão não localizada.");
                }
                else if (resposta.IdEntregaDeLicao != entregaDeLicao.Id)
                {
                    throw new Exception("Resposta não associada à lição.");
                }
            }

            EntregaDeTrofeu entregaDeTrofeu = new EntregaDeTrofeu(trofeu, entregaDeLicao, resposta);

            Adicionar(entregaDeTrofeu);
        }
        public IEnumerable <LicaoDTO> Listar(int idCaseDeNegocio, Usuario usuarioLogado)
        {
            List <LicaoDTO> response = new List <LicaoDTO>();

            CaseDeNegocio caseDeNegocio = _caseDeNegocioService.ObterPorId(idCaseDeNegocio);

            bool permiteEditar   = _caseDeNegocioService.PermiteUsuarioEditarCaseDeNegocio(usuarioLogado, caseDeNegocio);
            bool ehAlunoInscrito = _caseDeNegocioService.UsuarioEstaInscritoNoCaseDeNegocio(usuarioLogado, caseDeNegocio);
            var  licoesIniciadas = _consultaEntregaDeLicaoService.ListarEntregasIniciadasPeloUsuarioNoCaseDeNegocio(caseDeNegocio.Id, usuarioLogado.Id);

            // TODO:erro ao obter lições mapeadas no case de negócio. Necessário verificar mapeamento do EF Core. Pode ser algo com o proxy.
            var licoes = _licaoRepository.ListarPorCaseDeNegocio(caseDeNegocio.Id);

            foreach (var licao in licoes)
            {
                LicaoDTO licaoDTO = new LicaoDTO(licao);
                PreencherDadosDePermissaoEEntrega(licaoDTO, permiteEditar, ehAlunoInscrito, licoesIniciadas);
                response.Add(licaoDTO);
            }

            return(response);
        }
        public int Adicionar(LicaoDTO licaoDTO, Usuario usuarioLogado)
        {
            if (licaoDTO == null || licaoDTO.Id.HasValue)
            {
                throw new Exception("Solicitação inválida.");
            }

            if (licaoDTO.Questoes == null || !licaoDTO.Questoes.Any())
            {
                throw new Exception("É necessário ter pelo menos 1 questão.");
            }

            CaseDeNegocio caseDeNegocio = _caseDeNegocioService.ObterPorId(licaoDTO.IdCase);

            if (caseDeNegocio == null)
            {
                throw new Exception("Case de negócio não encontrado.");
            }

            if (!_caseDeNegocioService.PermiteUsuarioEditarCaseDeNegocio(usuarioLogado, caseDeNegocio))
            {
                throw new Exception("Usuário não possui permissão para esta solicitação.");
            }

            Licao licao = new Licao();

            licao.IdCase        = caseDeNegocio.Id;
            licao.CaseDeNegocio = caseDeNegocio;

            licaoDTO.PreencherEntidade(licao);
            AtualizarListaDeQuestoes(licao, licaoDTO.Questoes);

            Adicionar(licao);

            return(licao.Id);
        }
示例#9
0
        public int Adicionar(ManterGrupoRequest request)
        {
            if (request == null || request.IdGrupo.HasValue)
            {
                throw new Exception("Solicitação inválida.");
            }

            if (request.IdsAlunosMembros == null || request.IdsAlunosMembros.Count < 2)
            {
                throw new Exception("Um grupo deve ser formado por 2 ou mais alunos.");
            }

            CaseDeNegocio caseDeNegocio = _caseDeNegocioRepository.GetById(request.IdCase);

            if (caseDeNegocio == null)
            {
                throw new Exception("Case de negócio não encontrado.");
            }

            if (!caseDeNegocio.PermiteMontarGrupos)
            {
                throw new Exception("Case de negócio não permite criação de grupos.");
            }

            if (request.IdsAlunosMembros.Count < caseDeNegocio.MinimoDeAlunosPorGrupo ||
                request.IdsAlunosMembros.Count > caseDeNegocio.MaximoDeAlunosPorGrupo)
            {
                throw new Exception(string.Format("Este case de negócio requer que o grupo seja formado com {0} a {1} alunos.", caseDeNegocio.MinimoDeAlunosPorGrupo, caseDeNegocio.MaximoDeAlunosPorGrupo));
            }

            var alunos = (from a in _alunoRepository.Queryable()
                          where a.IdCaseDeNegocio == caseDeNegocio.Id &&
                          request.IdsAlunosMembros.Contains(a.Id)
                          select a).ToList();

            if (!request.IdsAlunosMembros.All(id => alunos.Any(a => a.Id == id)))
            {
                throw new Exception("Foi solicitado inclusão de aluno inexistente.");
            }

            bool possuiAlunoQueJaEstaEmAlgumGrupo = (from m in _membroDoGrupoRepository.Queryable()
                                                     join a in _alunoRepository.Queryable() on m.IdAluno equals a.Id
                                                     where request.IdsAlunosMembros.Contains(m.IdAluno) && a.IdCaseDeNegocio == caseDeNegocio.Id
                                                     select m).Any();

            if (possuiAlunoQueJaEstaEmAlgumGrupo)
            {
                throw new Exception("Foi solicitado inclusão de aluno que já possui grupo.");
            }

            Grupo grupo = new Grupo(caseDeNegocio, request.Nome, request.GritoDeGuerra);

            foreach (var aluno in alunos)
            {
                grupo.Membros.Add(new MembroDoGrupo(grupo, aluno));
            }

            Adicionar(grupo);

            return(grupo.Id);
        }
示例#10
0
        public void Atualizar(ManterGrupoRequest request)
        {
            if (request == null || !request.IdGrupo.HasValue)
            {
                throw new Exception("Solicitação inválida.");
            }

            if (request.IdsAlunosMembros == null || request.IdsAlunosMembros.Count < 2)
            {
                throw new Exception("Um grupo deve ser formado por 2 ou mais alunos.");
            }

            Grupo grupo = ObterPorId(request.IdGrupo.Value);

            if (grupo == null)
            {
                throw new Exception("Grupo não encontrado.");
            }

            CaseDeNegocio caseDeNegocio = grupo.CaseDeNegocio;

            if (caseDeNegocio.PermiteMontarGrupos &&
                (request.IdsAlunosMembros.Count < caseDeNegocio.MinimoDeAlunosPorGrupo ||
                 request.IdsAlunosMembros.Count > caseDeNegocio.MaximoDeAlunosPorGrupo))
            {
                throw new Exception(string.Format("Este case de negócio requer que o grupo seja formado com {0} a {1} alunos.", caseDeNegocio.MinimoDeAlunosPorGrupo, caseDeNegocio.MaximoDeAlunosPorGrupo));
            }

            int totalAlunosInscritos = (from a in _alunoRepository.Queryable()
                                        where a.IdCaseDeNegocio == caseDeNegocio.Id &&
                                        request.IdsAlunosMembros.Contains(a.Id)
                                        select a).Count();

            if (totalAlunosInscritos != request.IdsAlunosMembros.Count)
            {
                throw new Exception("Foi solicitado inclusão de aluno inexistente.");
            }

            bool possuiAlunoQueJaEstaEmOutroGrupo = (from m in _membroDoGrupoRepository.Queryable()
                                                     join a in _alunoRepository.Queryable() on m.IdAluno equals a.Id
                                                     where request.IdsAlunosMembros.Contains(m.IdAluno) &&
                                                     a.IdCaseDeNegocio == caseDeNegocio.Id &&
                                                     m.IdGrupo != grupo.Id
                                                     select m).Any();

            if (possuiAlunoQueJaEstaEmOutroGrupo)
            {
                throw new Exception("Foi solicitado inclusão de aluno que já possui grupo.");
            }

            if (GrupoJaTeveLicaoEntregue(grupo.Id))
            {
                throw new Exception("Não é permitido alterações em grupos que já tiveram lições entregues.");
            }

            grupo.Nome          = request.Nome;
            grupo.GritoDeGuerra = request.GritoDeGuerra;

            AtualizarListaDeMembros(grupo, request.IdsAlunosMembros);

            Atualizar(grupo);
        }