예제 #1
0
        private PlanoCiclo MapearParaDominio(PlanoCicloDto planoCicloDto)
        {
            if (planoCicloDto == null)
            {
                throw new ArgumentNullException(nameof(planoCicloDto));
            }
            if (planoCicloDto.Id == 0 && repositorioPlanoCiclo.ObterPlanoCicloPorAnoCicloEEscola(planoCicloDto.Ano, planoCicloDto.CicloId, planoCicloDto.EscolaId))
            {
                throw new NegocioException("Já existe um plano ciclo referente a este Ano/Ciclo/Escola.");
            }

            var planoCiclo = repositorioPlanoCiclo.ObterPorId(planoCicloDto.Id);

            if (planoCiclo == null)
            {
                planoCiclo = new PlanoCiclo();
            }
            if (!planoCiclo.Migrado)
            {
                if (planoCicloDto.IdsMatrizesSaber == null || !planoCicloDto.IdsMatrizesSaber.Any())
                {
                    throw new NegocioException("A matriz de saberes deve conter ao menos 1 elemento.");
                }
                if (planoCicloDto.IdsObjetivosDesenvolvimento == null || !planoCicloDto.IdsObjetivosDesenvolvimento.Any())
                {
                    throw new NegocioException("Os objetivos de desenvolvimento sustentável devem conter ao menos 1 elemento.");
                }
            }
            planoCiclo.Descricao = planoCicloDto.Descricao;
            planoCiclo.CicloId   = planoCicloDto.CicloId;
            planoCiclo.Ano       = planoCicloDto.Ano;
            planoCiclo.EscolaId  = planoCicloDto.EscolaId;
            return(planoCiclo);
        }
예제 #2
0
        private void AjustarObjetivos(PlanoCiclo planoCiclo, PlanoCicloDto planoCicloDto)
        {
            var objetivosPlanoCiclo = repositorioObjetivoDesenvolvimentoPlano.ObterObjetivosDesenvolvimentoPorIdPlano(planoCiclo.Id);
            var idsObjetivos        = objetivosPlanoCiclo?.Select(c => c.ObjetivoDesenvolvimentoId)?.ToList();

            InserirObjetivos(planoCicloDto, idsObjetivos);
            RemoverObjetivos(planoCicloDto, objetivosPlanoCiclo);
        }
예제 #3
0
        private void AjustarMatrizes(PlanoCiclo planoCiclo, PlanoCicloDto planoCicloDto)
        {
            var matrizesPlanoCiclo = repositorioMatrizSaberPlano.ObterMatrizesPorIdPlano(planoCiclo.Id);

            var idsMatrizes = matrizesPlanoCiclo?.Select(c => c.MatrizSaberId)?.ToList();

            RemoverMatrizes(planoCicloDto, matrizesPlanoCiclo);
            InserirMatrizes(planoCiclo, planoCicloDto, idsMatrizes);
        }
예제 #4
0
 private void RemoverMatrizes(PlanoCicloDto planoCicloDto, IEnumerable <MatrizSaberPlano> matrizesPlanoCiclo)
 {
     if (matrizesPlanoCiclo != null)
     {
         var matrizesRemover = matrizesPlanoCiclo.Where(c => !planoCicloDto.IdsMatrizesSaber.Contains(c.MatrizSaberId));
         foreach (var matriz in matrizesRemover)
         {
             repositorioMatrizSaberPlano.Remover(matriz.Id);
         }
     }
 }
예제 #5
0
        public void Salvar(PlanoCicloDto planoCicloDto)
        {
            var planoCiclo = MapearParaDominio(planoCicloDto);

            using (var transacao = unitOfWork.IniciarTransacao())
            {
                planoCicloDto.Id = repositorioPlanoCiclo.Salvar(planoCiclo);
                AjustarMatrizes(planoCiclo, planoCicloDto);
                AjustarObjetivos(planoCiclo, planoCicloDto);
                unitOfWork.PersistirTransacao();
            }
        }
예제 #6
0
        private void RemoverObjetivos(PlanoCicloDto planoCicloDto, IEnumerable <RecuperacaoParalelaObjetivoDesenvolvimentoPlano> objetivosPlanoCiclo)
        {
            if (objetivosPlanoCiclo != null)
            {
                var objetivosRemover = objetivosPlanoCiclo.Where(c => !planoCicloDto.IdsObjetivosDesenvolvimento.Contains(c.ObjetivoDesenvolvimentoId));

                foreach (var objetivo in objetivosRemover)
                {
                    repositorioObjetivoDesenvolvimentoPlano.Remover(objetivo.Id);
                }
            }
        }
예제 #7
0
        private void InserirObjetivos(PlanoCicloDto planoCicloDto, List <long> idsObjetivos)
        {
            var objetivosIncluir = planoCicloDto.IdsObjetivosDesenvolvimento.Except(idsObjetivos);

            foreach (var idObjetivo in objetivosIncluir)
            {
                repositorioObjetivoDesenvolvimentoPlano.Salvar(new RecuperacaoParalelaObjetivoDesenvolvimentoPlano()
                {
                    ObjetivoDesenvolvimentoId = idObjetivo,
                    PlanoId = planoCicloDto.Id
                });
            }
        }
예제 #8
0
        private void InserirMatrizes(PlanoCiclo planoCiclo, PlanoCicloDto planoCicloDto, List <long> idsMatrizes)
        {
            var matrizesIncluir = planoCicloDto.IdsMatrizesSaber.Except(idsMatrizes);

            foreach (var idMatrizIncluir in matrizesIncluir)
            {
                repositorioMatrizSaberPlano.Salvar(new MatrizSaberPlano()
                {
                    MatrizSaberId = idMatrizIncluir,
                    PlanoId       = planoCiclo.Id
                });
            }
        }
예제 #9
0
        public void Deve_Incluir_Plano_Ciclo2()
        {
            _fixture._clientApi.DefaultRequestHeaders.Clear();

            _fixture._clientApi.DefaultRequestHeaders.Authorization =
                new AuthenticationHeaderValue("Bearer", _fixture.GerarToken(new Permissao[] { Permissao.PDC_I, Permissao.PDC_C }));

            var planoDeCicloDto = new PlanoCicloDto();

            planoDeCicloDto.Ano              = 2020;
            planoDeCicloDto.CicloId          = 1;
            planoDeCicloDto.Descricao        = "Teste";
            planoDeCicloDto.EscolaId         = "1";
            planoDeCicloDto.IdsMatrizesSaber = new List <long> {
                1
            };
            planoDeCicloDto.IdsObjetivosDesenvolvimento = new List <long> {
                1
            };

            var jsonParaPost = new StringContent(TransformarEmJson(planoDeCicloDto), UnicodeEncoding.UTF8, "application/json");

            var postResult = _fixture._clientApi.PostAsync("api/v1/planos/ciclo/", jsonParaPost).Result;

            if (postResult.IsSuccessStatusCode)
            {
                var planoCicloCompletoResult = _fixture._clientApi.GetAsync("api/v1/planos/ciclo/2020/1/1").Result;
                if (planoCicloCompletoResult.IsSuccessStatusCode)
                {
                    var planoCicloCompletoDto = JsonConvert.DeserializeObject <PlanoCicloCompletoDto>(planoCicloCompletoResult.Content.ReadAsStringAsync().Result);
                    Assert.Equal(planoDeCicloDto.Descricao, planoCicloCompletoDto.Descricao);
                }
                else
                {
                    var erro = postResult.Content.ReadAsStringAsync().Result;
                    Assert.True(false, erro);
                }
            }
            else
            {
                var erro = postResult.Content.ReadAsStringAsync().Result;
                Assert.True(false, erro);
            }
        }
예제 #10
0
 public IActionResult Post(PlanoCicloDto planoCicloDto)
 {
     comandosPlanoCiclo.Salvar(planoCicloDto);
     return(Ok());
 }