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; }
public EntregaDeTrofeu(Trofeu trofeu, EntregaDeLicao entregaDeLicao, Resposta resposta) { IdTrofeu = trofeu.Id; IdEntregaDeLicao = entregaDeLicao.Id; if (resposta != null) { IdResposta = resposta.Id; } }
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 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))); }
public ResponsavelPelaLicao(EntregaDeLicao entrega, AlunoDoCase alunoDoCase) { IdEntregaDeLicao = entrega.Id; IdAluno = alunoDoCase.Id; }