public int Gerar(int idCase, int idLicao, Usuario usuarioLogado)
        {
            AlunoDoCase alunoDoCase = _consultaDeAlunosService.ObterAlunoInscritoNoCase(usuarioLogado.Id, idCase);

            if (alunoDoCase == null)
            {
                throw new Exception("Usuário não está inscrito no case de negócio.");
            }

            Licao licao = _licaoRepository.GetById(idLicao);

            if (licao == null || licao.IdCase != idCase)
            {
                throw new Exception("Solicitação inválida.");
            }

            if (_consultaEntregaService.AlunoJaComecouAFazerALicao(alunoDoCase.Id, licao.Id))
            {
                throw new Exception("O registro de entrega desta lição já foi criado.");
            }

            EntregaDeLicao entrega = new EntregaDeLicao(licao);

            AdicionarResponsaveisPelaLicao(entrega, alunoDoCase);

            _entregaDeLicaoService.Manter(entrega);

            return(entrega.Id);
        }
        private void AdicionarResponsaveisPelaLicao(EntregaDeLicao entrega, AlunoDoCase alunoDoCase)
        {
            entrega.Responsaveis.Add(new ResponsavelPelaLicao(entrega, alunoDoCase));

            if (entrega.Licao.FormaDeEntrega != FormaDeEntregaDaLicaoEnum.SomenteIndividual)
            {
                int?idGrupo = _consultaDeAlunosService.ObterIdGrupoOndeUsuarioEstejaParticipando(alunoDoCase.IdUsuario, alunoDoCase.IdCaseDeNegocio);

                if (idGrupo == null && entrega.Licao.FormaDeEntrega == FormaDeEntregaDaLicaoEnum.SomenteEmGrupo)
                {
                    throw new Exception("Esta lição requer que o aluno esteja participando de um grupo.");
                }

                if (idGrupo.HasValue)
                {
                    entrega.IdGrupo = idGrupo.Value;
                    var outrosMembrosDoGrupo = _consultaDeAlunosService.ListarOutrosAlunosQueSejamMembrosNoGrupo(entrega.IdGrupo.Value, alunoDoCase.Id);

                    foreach (var alunoMembro in outrosMembrosDoGrupo)
                    {
                        entrega.Responsaveis.Add(new ResponsavelPelaLicao(entrega, alunoMembro));
                    }
                }
            }
        }
        private void AlterarStatus(EntregaDeLicao entrega, EntregaDeLicaoStatusEnum novoStatus)
        {
            EntregaDeLicaoStatusEnum statusAnterior = entrega.Status;

            switch (novoStatus)
            {
            case EntregaDeLicaoStatusEnum.NaoEntregue:
                if (statusAnterior == EntregaDeLicaoStatusEnum.Entregue)
                {
                    throw new Exception("Não é possível alterar o status de uma tarefa entregue.");
                }
                break;

            case EntregaDeLicaoStatusEnum.Entregue:
                if (statusAnterior == EntregaDeLicaoStatusEnum.Entregue)
                {
                    throw new Exception("Esta tarefa já foi entregue.");
                }
                break;

            default:
                throw new Exception("Status não implementado.");
            }

            entrega.Status = novoStatus;
        }
Exemplo n.º 4
0
        public EntregaDeTrofeu(Trofeu trofeu, EntregaDeLicao entregaDeLicao, Resposta resposta)
        {
            IdTrofeu         = trofeu.Id;
            IdEntregaDeLicao = entregaDeLicao.Id;

            if (resposta != null)
            {
                IdResposta = resposta.Id;
            }
        }
Exemplo n.º 5
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);
        }
Exemplo n.º 6
0
        public LicaoDTO(EntregaDeLicao entregaDeLicao) : this()
        {
            IdEntregaDeLicao = entregaDeLicao.Id;
            Id                         = entregaDeLicao.Licao.Id;
            IdCase                     = entregaDeLicao.Licao.IdCase;
            NomeCase                   = entregaDeLicao.Licao.CaseDeNegocio.Nome;
            Titulo                     = entregaDeLicao.Licao.Titulo;
            TextoApresentacao          = entregaDeLicao.Licao.TextoApresentacao;
            Descricao                  = entregaDeLicao.Licao.Descricao;
            FormaDeEntrega             = entregaDeLicao.Licao.FormaDeEntrega;
            DataLiberacao              = entregaDeLicao.Licao.DataLiberacao;
            DataEncerramento           = entregaDeLicao.Licao.DataEncerramento;
            PermiteEntregasForaDoPrazo = entregaDeLicao.Licao.PermiteEntregasForaDoPrazo;

            foreach (var questao in entregaDeLicao.Licao.Questoes)
            {
                Resposta resposta = entregaDeLicao.Respostas.FirstOrDefault(r => r.IdQuestao == questao.Id);
                Questoes.Add(new QuestaoDTO(questao, resposta));
            }
        }
 private bool TodasAsQuestoesRespondidasFazemParteDaMesmaLicao(EntregaDeLicao entrega, IList <QuestaoRequest> questoesRequest)
 {
     return(questoesRequest.All(qr => entrega.Licao.Questoes.Any(q => q.Id == qr.Id)));
 }
Exemplo n.º 8
0
 public ResponsavelPelaLicao(EntregaDeLicao entrega, AlunoDoCase alunoDoCase)
 {
     IdEntregaDeLicao = entrega.Id;
     IdAluno          = alunoDoCase.Id;
 }