Example #1
0
        public async Task Deve_Retornar_o_Planejamento_Com_Componentes()
        {
            //Arrange
            var mockRetorno = new PlanejamentoAnualPeriodoEscolarDto
            {
                Componentes = new List <PlanejamentoAnualComponenteDto>()
                {
                    new PlanejamentoAnualComponenteDto {
                        ComponenteCurricularId = 2,
                        Descricao = "TESTE",
                        ObjetivosAprendizagemId = new List <long> {
                            1, 2, 3
                        },
                        Auditoria = new AuditoriaDto()
                    }
                },
                PeriodoEscolarId = 1,
                Bimestre         = 1,
            };

            mediator.Setup(a => a.Send(It.IsAny <ObterPlanejamentoAnualPorTurmaComponentePeriodoEscolarQuery>(), It.IsAny <CancellationToken>()))
            .ReturnsAsync(mockRetorno);

            //Act
            var retorno = await useCase.Executar(1, 2, 1);

            //Asert
            mediator.Verify(x => x.Send(It.IsAny <ObterPlanejamentoAnualPorTurmaComponentePeriodoEscolarQuery>(), It.IsAny <CancellationToken>()), Times.Once);

            Assert.NotNull(retorno);
            Assert.NotNull(retorno.Componentes);
        }
Example #2
0
        public async Task Deve_Retornar_o_Planejamento_Sem_Componentes()
        {
            //Arrange
            var mockRetorno = new PlanejamentoAnualPeriodoEscolarDto
            {
                Componentes      = null,
                PeriodoEscolarId = 1,
                Bimestre         = 1,
            };

            mediator.Setup(a => a.Send(It.IsAny <ObterPlanejamentoAnualPorTurmaComponentePeriodoEscolarQuery>(), It.IsAny <CancellationToken>()))
            .ReturnsAsync(mockRetorno);

            //Act
            var retorno = await useCase.Executar(1, 1, 1);

            //Asert
            mediator.Verify(x => x.Send(It.IsAny <ObterPlanejamentoAnualPorTurmaComponentePeriodoEscolarQuery>(), It.IsAny <CancellationToken>()), Times.Once);

            Assert.NotNull(retorno);
            Assert.Null(retorno.Componentes);
        }
Example #3
0
        public async Task <PlanejamentoAnualAuditoriaDto> Handle(SalvarPlanejamentoAnualCommand comando, CancellationToken cancellationToken)
        {
            PlanejamentoAnualAuditoriaDto auditorias = new PlanejamentoAnualAuditoriaDto();

            try
            {
                unitOfWork.IniciarTransacao();

                var planejamentoAnual = await repositorioPlanejamentoAnual.ObterPlanejamentoSimplificadoPorTurmaEComponenteCurricular(comando.TurmaId, comando.ComponenteCurricularId);

                if (planejamentoAnual == null)
                {
                    planejamentoAnual = new PlanejamentoAnual(comando.TurmaId, comando.ComponenteCurricularId);
                    var id = await repositorioPlanejamentoAnual.SalvarAsync(planejamentoAnual);

                    auditorias.Id = id;
                }

                List <string> excessoes = new List <string>();
                var           usuario   = await mediator.Send(new ObterUsuarioLogadoQuery());

                var turma = await mediator.Send(new ObterTurmaComUeEDrePorIdQuery(comando.TurmaId));

                if (turma == null)
                {
                    throw new NegocioException($"Turma de id [{turma.Id}] não localizada!");
                }

                var regenteAtual = await mediator.Send(new ObterUsuarioPossuiPermissaoNaTurmaEDisciplinaQuery(comando.ComponenteCurricularId, turma.CodigoTurma, DateTime.Now.Date, usuario));

                foreach (var periodoEscolar in comando.PeriodosEscolares)
                {
                    var periodo = await mediator.Send(new ObterPeriodoEscolarePorIdQuery(periodoEscolar.PeriodoEscolarId));

                    if (usuario.EhProfessor())
                    {
                        var temAtribuicao = await mediator.Send(new ObterUsuarioPossuiPermissaoNaTurmaEDisciplinaNoPeriodoQuery(comando.ComponenteCurricularId, turma.CodigoTurma, usuario.CodigoRf, periodo.PeriodoInicio.Date, periodo.PeriodoFim.Date));

                        if (!temAtribuicao && !regenteAtual)
                        {
                            excessoes.Add($"Você não possui atribuição na turma {turma.Nome} - {periodo.Bimestre}° Bimestre.");
                        }
                    }

                    var periodoEmAberto = await mediator.Send(new TurmaEmPeriodoAbertoQuery(turma, DateTime.Today, periodo.Bimestre, turma.AnoLetivo == DateTime.Today.Year));

                    if (!periodoEmAberto)
                    {
                        excessoes.Add($"O {periodo.Bimestre}° Bimestre não está aberto.");
                    }
                }

                if (!excessoes.Any())
                {
                    foreach (var periodo in comando.PeriodosEscolares)
                    {
                        var planejamentoAnualPeriodoEscolar = await repositorioPlanejamentoAnualPeriodoEscolar.ObterPorPlanejamentoAnualIdEPeriodoId(planejamentoAnual.Id, periodo.PeriodoEscolarId);

                        if (planejamentoAnualPeriodoEscolar == null)
                        {
                            planejamentoAnualPeriodoEscolar = new PlanejamentoAnualPeriodoEscolar(periodo.PeriodoEscolarId)
                            {
                                PlanejamentoAnualId = planejamentoAnual.Id
                            };

                            await repositorioPlanejamentoAnualPeriodoEscolar.SalvarAsync(planejamentoAnualPeriodoEscolar);
                        }
                        else
                        {
                            foreach (var componente in periodo.Componentes)
                            {
                                await repositorioPlanejamentoAnualObjetivosAprendizagem.RemoverTodosPorPlanejamentoAnualPeriodoEscolarIdEComponenteCurricularId(planejamentoAnualPeriodoEscolar.Id, componente.ComponenteCurricularId);
                            }
                        }

                        var auditoria = new PlanejamentoAnualPeriodoEscolarDto
                        {
                            PeriodoEscolarId = periodo.PeriodoEscolarId,
                        };

                        var componentes = periodo.Componentes.Select(c => new PlanejamentoAnualComponente
                        {
                            ComponenteCurricularId = c.ComponenteCurricularId,
                            Descricao = c.Descricao,
                            PlanejamentoAnualPeriodoEscolarId = planejamentoAnualPeriodoEscolar.Id,
                            ObjetivosAprendizagem             = c.ObjetivosAprendizagemId.Select(o => new PlanejamentoAnualObjetivoAprendizagem
                            {
                                ObjetivoAprendizagemId = o
                            })?.ToList()
                        })?.ToList();

                        if (componentes != null)
                        {
                            foreach (var componente in componentes)
                            {
                                var planejamentoAnualComponente = await repositorioPlanejamentoAnualComponente.ObterPorPlanejamentoAnualPeriodoEscolarId(componente.ComponenteCurricularId, planejamentoAnualPeriodoEscolar.Id);

                                if (planejamentoAnualComponente == null)
                                {
                                    planejamentoAnualComponente = new PlanejamentoAnualComponente
                                    {
                                        ComponenteCurricularId            = componente.ComponenteCurricularId,
                                        PlanejamentoAnualPeriodoEscolarId = planejamentoAnualPeriodoEscolar.Id,
                                    };
                                }

                                planejamentoAnualComponente.Descricao = componente.Descricao;

                                await repositorioPlanejamentoAnualComponente.SalvarAsync(planejamentoAnualComponente);

                                auditoria.Componentes.Add(new PlanejamentoAnualComponenteDto
                                {
                                    Auditoria = (AuditoriaDto)planejamentoAnualComponente,
                                    ComponenteCurricularId = componente.ComponenteCurricularId,
                                });

                                await Task.Run(() => repositorioPlanejamentoAnualObjetivosAprendizagem.SalvarVarios(componente.ObjetivosAprendizagem, planejamentoAnualComponente.Id));
                            }
                        }
                        auditorias.PeriodosEscolares.Add(auditoria);
                    }
                }

                if (excessoes.Any())
                {
                    var str = new StringBuilder();
                    str.AppendLine($"Os seguintes erros foram encontrados: ");
                    foreach (var t in excessoes)
                    {
                        str.AppendLine($"- {t}");
                    }

                    throw new NegocioException(str.ToString());
                }

                unitOfWork.PersistirTransacao();
            }
            catch (Exception ex)
            {
                unitOfWork.Rollback();
                throw;
            }

            return(auditorias);
        }