Exemplo n.º 1
0
        private PeriodoFechamento MapearParaDominio(FechamentoDto fechamentoDto)
        {
            var(dre, ue) = ObterDreEUe(fechamentoDto.DreId, fechamentoDto.UeId);
            var fechamento = repositorioFechamento.ObterPorTipoCalendarioDreEUE(fechamentoDto.TipoCalendarioId.Value, dre?.Id, ue?.Id);

            if (fechamento == null)
            {
                fechamento = new PeriodoFechamento(dre, ue);
            }

            var tipoCalendario = repositorioTipoCalendario.ObterPorId(fechamentoDto.TipoCalendarioId.Value);

            if (tipoCalendario == null)
            {
                throw new NegocioException("Tipo calendário não encontrado.");
            }

            if (fechamentoDto.FechamentosBimestres != null && fechamentoDto.FechamentosBimestres.Any())
            {
                foreach (var bimestre in fechamentoDto.FechamentosBimestres)
                {
                    var periodoEscolar = repositorioPeriodoEscolar.ObterPorId(bimestre.PeriodoEscolarId);
                    PeriodoFechamentoBimestre fechamentoBimestreExistente = fechamento.ObterFechamentoBimestre(bimestre.PeriodoEscolarId);
                    if (fechamentoBimestreExistente != null)
                    {
                        fechamentoBimestreExistente.AtualizarDatas(bimestre.InicioDoFechamento, bimestre.FinalDoFechamento);
                    }
                    else
                    {
                        fechamento.AdicionarFechamentoBimestre(new PeriodoFechamentoBimestre(fechamento.Id, periodoEscolar, bimestre.InicioDoFechamento, bimestre.FinalDoFechamento));
                    }
                }
            }
            return(fechamento);
        }
Exemplo n.º 2
0
        private void CriarEventoFechamento(PeriodoFechamento fechamento)
        {
            if (fechamento.UeId > 0)
            {
                var tipoEvento = repositorioTipoEvento.ObterTipoEventoPorTipo(TipoEvento.FechamentoBimestre);
                if (tipoEvento == null)
                {
                    throw new NegocioException("Tipo de evento de fechamento de bimestre não encontrado na base de dados.");
                }

                foreach (var bimestre in fechamento.FechamentosBimestre)
                {
                    EventoFechamento fechamentoExistente = repositorioEventoFechamento.ObterPorIdFechamento(bimestre.Id);

                    if (fechamentoExistente != null)
                    {
                        AtualizaEventoDeFechamento(bimestre, fechamentoExistente);
                    }
                    else
                    {
                        CriaEventoDeFechamento(fechamento, tipoEvento, bimestre);
                    }
                }
            }
        }
Exemplo n.º 3
0
        public void AlterarPeriodosComHierarquiaInferior(PeriodoFechamento fechamento)
        {
            var somenteUe = fechamento.DreId != null && fechamento.DreId > 0;

            unitOfWork.IniciarTransacao();

            AlterarBimestresPeriodosComHierarquiaInferior(fechamento, somenteUe).Wait();

            unitOfWork.PersistirTransacao();
        }
Exemplo n.º 4
0
 private void EnviarNotificacaoDeAlteracaoDePeriodo(PeriodoFechamento fechamento, IEnumerable <PeriodoFechamentoBimestre> fechamentosBimestre, bool paraUe)
 {
     if (paraUe)
     {
         EnviaNotificacaoParaUe(fechamentosBimestre, fechamento.DreId.Value);
     }
     else
     {
         EnviaNotificacaoParaDre(fechamentosBimestre);
     }
 }
Exemplo n.º 5
0
        public async Task AlterarPeriodosComHierarquiaInferior(PeriodoFechamento fechamento)
        {
            var ehParaUe = fechamento.DreId != null && fechamento.DreId > 0;

            unitOfWork.IniciarTransacao();
            foreach (var fechamentoBimestre in fechamento.FechamentosBimestre)
            {
                repositorioFechamento.AlterarPeriodosComHierarquiaInferior(fechamentoBimestre.InicioDoFechamento, fechamentoBimestre.FinalDoFechamento, fechamentoBimestre.PeriodoEscolarId, fechamento.DreId);
            }
            EnviarNotificacaoDeAlteracaoDePeriodo(fechamento, fechamento.FechamentosBimestre, ehParaUe);
            unitOfWork.PersistirTransacao();
        }
Exemplo n.º 6
0
 private void LimparCamposNaoUtilizadosRegistroPai(PeriodoFechamento registroFilho)
 {
     if (registroFilho != null && registroFilho.Id > 0)
     {
         registroFilho.Id          = 0;
         registroFilho.CriadoEm    = DateTime.MinValue;
         registroFilho.CriadoPor   = null;
         registroFilho.CriadoRF    = null;
         registroFilho.AlteradoEm  = DateTime.MinValue;
         registroFilho.AlteradoPor = null;
         registroFilho.AlteradoRF  = null;
     }
 }
Exemplo n.º 7
0
 private void ValidarCamposObrigatorios(bool ehSme, bool ehDre, PeriodoFechamento fechamento)
 {
     if (!fechamento.UeId.HasValue)
     {
         if (!ehDre && !ehSme)
         {
             throw new NegocioException("O campo UE é obrigatório.");
         }
     }
     else if (!fechamento.DreId.HasValue && !ehSme)
     {
         throw new NegocioException("O campo DRE é obrigatório.");
     }
 }
Exemplo n.º 8
0
 private void ValidarRegistrosForaDoPeriodo(FechamentoDto fechamentoDto, PeriodoFechamento fechamento, bool ehSme, bool ehDre)
 {
     if ((ehDre || ehSme) && string.IsNullOrWhiteSpace(fechamentoDto.UeId) && fechamento.Id > 0 && !fechamentoDto.ConfirmouAlteracaoHierarquica)
     {
         foreach (var fechamentoBimestre in fechamento.FechamentosBimestre)
         {
             var existeRegistroForaDoPeriodo = repositorioPeriodoFechamento.ValidaRegistrosForaDoPeriodo(fechamentoBimestre.InicioDoFechamento, fechamentoBimestre.FinalDoFechamento, fechamento.Id, fechamentoBimestre.PeriodoEscolarId, fechamento.DreId);
             if (existeRegistroForaDoPeriodo)
             {
                 var textoSme = ehDre ? "" : "DRE's/";
                 throw new NegocioException($"A alteração que você está fazendo afetará datas de fechamento definidas pelas {textoSme}UE's. Deseja Continuar?", 602);
             }
         }
     }
 }
Exemplo n.º 9
0
        private IEnumerable <FechamentoBimestreDto> MapearFechamentoBimestreParaDto(PeriodoFechamento fechamento)
        {
            var listaFechamentoBimestre = new List <FechamentoBimestreDto>();

            foreach (var fechamentoBimestre in fechamento.FechamentosBimestre)
            {
                listaFechamentoBimestre.Add(new FechamentoBimestreDto
                {
                    FinalDoFechamento  = fechamentoBimestre.FinalDoFechamento,
                    InicioDoFechamento = fechamentoBimestre.InicioDoFechamento,
                    Bimestre           = fechamentoBimestre.PeriodoEscolar.Bimestre,
                    Id = fechamentoBimestre.Id,
                    PeriodoEscolarId = fechamentoBimestre.PeriodoEscolarId
                });
            }
            return(listaFechamentoBimestre);
        }
Exemplo n.º 10
0
 private FechamentoDto MapearParaDto(PeriodoFechamento fechamento)
 {
     return(fechamento == null ? null : new FechamentoDto
     {
         Id = fechamento.Id,
         DreId = fechamento.Dre?.CodigoDre,
         TipoCalendarioId = fechamento.FechamentosBimestre.FirstOrDefault().PeriodoEscolar.TipoCalendarioId,
         UeId = fechamento.Ue?.CodigoUe,
         FechamentosBimestres = MapearFechamentoBimestreParaDto(fechamento).OrderBy(c => c.Bimestre),
         AlteradoEm = fechamento.AlteradoEm,
         AlteradoPor = fechamento.AlteradoPor,
         AlteradoRF = fechamento.AlteradoRF,
         CriadoEm = fechamento.CriadoEm,
         CriadoPor = fechamento.CriadoPor,
         CriadoRF = fechamento.CriadoRF,
         Migrado = fechamento.Migrado
     });
 }
Exemplo n.º 11
0
        private void ValidarHierarquiaPeriodos(bool ehSme, bool ehDre, PeriodoFechamento fechamento)
        {
            PeriodoFechamento fechamentoParaValidacao = null;

            if (ehDre)
            {
                fechamentoParaValidacao = repositorioPeriodoFechamento.ObterPorFiltros(fechamento.FechamentosBimestre.FirstOrDefault().PeriodoEscolar.TipoCalendarioId, null, null, null);
            }
            else
            {
                if (!ehSme)
                {
                    fechamentoParaValidacao = repositorioPeriodoFechamento.ObterPorFiltros(fechamento.FechamentosBimestre.FirstOrDefault().PeriodoEscolar.TipoCalendarioId, fechamento.DreId, null, null);
                }
            }
            if (fechamentoParaValidacao != null)
            {
                fechamento.ValidarIntervaloDatasDreEUe(fechamentoParaValidacao.FechamentosBimestre.ToList());
            }
        }
Exemplo n.º 12
0
        private void CriaEventoDeFechamento(PeriodoFechamento fechamento, EventoTipo tipoEvento, PeriodoFechamentoBimestre bimestre)
        {
            var evento = new Evento()
            {
                DataInicio       = bimestre.InicioDoFechamento,
                DataFim          = bimestre.FinalDoFechamento,
                DreId            = fechamento.Dre?.CodigoDre,
                UeId             = fechamento.Ue?.CodigoUe,
                Nome             = $"Fechamento do {bimestre.PeriodoEscolar?.Bimestre}º bimestre",
                TipoEventoId     = tipoEvento.Id,
                TipoCalendarioId = bimestre.PeriodoEscolar.TipoCalendarioId
            };
            var eventoId = repositorioEvento.Salvar(evento);

            repositorioEventoFechamento.Salvar(new EventoFechamento()
            {
                FechamentoId = bimestre.Id,
                EventoId     = eventoId
            });
        }
Exemplo n.º 13
0
        private async Task AlterarBimestresPeriodosComHierarquiaInferior(PeriodoFechamento fechamento, bool somenteUe)
        {
            var listaPeriodosAlteracao = new List <PeriodoFechamentoBimestre>();

            // Carrega lista de Periodos a alterar
            foreach (var fechamentoBimestre in fechamento.FechamentosBimestre)
            {
                // Obter Lista de PeriodoFechamentoBimestre por Dre e PeriodoEscolar
                var periodosFechamentoBimestre =
                    await repositorioPeriodoFechamentoBimestre.ObterBimestreParaAlteracaoHierarquicaAsync(
                        fechamentoBimestre.PeriodoEscolarId,
                        fechamento.DreId,
                        fechamentoBimestre.InicioDoFechamento,
                        fechamentoBimestre.FinalDoFechamento);

                if (periodosFechamentoBimestre != null && periodosFechamentoBimestre.Any())
                {
                    listaPeriodosAlteracao.AddRange(periodosFechamentoBimestre);
                }
            }

            // Agrupa a lista em PeriodoEscolar (por UE)
            foreach (var periodosFechamentoBimestreUE in listaPeriodosAlteracao.GroupBy(a => a.PeriodoFechamentoId))
            {
                var periodoFechamento = listaPeriodosAlteracao.Select(a => a.PeriodoFechamento).FirstOrDefault(c => c.Id == periodosFechamentoBimestreUE.Key);

                // Atualiza os periodos bimestre alterados
                foreach (var periodoFechamentoBimestreUe in periodosFechamentoBimestreUE)
                {
                    try
                    {
                        var periodoFechamentoBimestreDre = fechamento.FechamentosBimestre.FirstOrDefault(c => c.PeriodoEscolarId == periodoFechamentoBimestreUe.PeriodoEscolarId);
                        if (periodoFechamentoBimestreDre != null)
                        {
                            AtualizaDatasInicioEFim(periodoFechamentoBimestreDre, periodoFechamentoBimestreUe);
                            await repositorioPeriodoFechamentoBimestre.SalvarAsync(periodoFechamentoBimestreUe);

                            EventoFechamento fechamentoExistente = repositorioEventoFechamento.ObterPorIdFechamento(periodoFechamentoBimestreUe.Id);
                            if (fechamentoExistente != null)
                            {
                                AtualizaEventoDeFechamento(periodoFechamentoBimestreUe, fechamentoExistente);
                            }
                        }
                    }
                    catch (Exception)
                    {
                        throw;
                    }
                }

                // Notifica Alteração dos Periodos
                if (periodoFechamento.UeId.HasValue)
                {
                    EnviaNotificacaoParaUe(periodosFechamentoBimestreUE, periodoFechamento.UeId.Value);
                }
                else
                {
                    EnviaNotificacaoParaDre(periodoFechamento.DreId.Value, periodosFechamentoBimestreUE);
                }
            }
        }
Exemplo n.º 14
0
 private static void ExecutaAlterarPeriodosComHierarquiaInferior(FechamentoDto fechamentoDto, PeriodoFechamento fechamento, bool ehSme)
 {
     if ((ehSme && !fechamento.DreId.HasValue) || (fechamento.DreId.HasValue && !fechamento.UeId.HasValue) && fechamentoDto.ConfirmouAlteracaoHierarquica)
     {
         Cliente.Executar <IServicoPeriodoFechamento>(c => c.AlterarPeriodosComHierarquiaInferior(fechamento));
     }
 }
Exemplo n.º 15
0
        public async Task <FechamentoDto> ObterPorTipoCalendarioDreEUe(long tipoCalendarioId, Dre dre, Ue ue)
        {
            var usuarioLogado = await servicoUsuario.ObterUsuarioLogado();

            var dreIdFiltro = !(dre == null) || usuarioLogado.EhPerfilUE() ? dre?.Id : null;

            var fechamentoSME = repositorioPeriodoFechamento.ObterPorFiltros(tipoCalendarioId, null, null, null);

            var fechamentoSMEDre = repositorioPeriodoFechamento.ObterPorFiltros(tipoCalendarioId, dreIdFiltro, null, null);

            if (fechamentoSMEDre == null)
            {
                LimparCamposNaoUtilizadosRegistroPai(fechamentoSME);
                fechamentoSMEDre = fechamentoSME;

                if (fechamentoSMEDre == null)
                {
                    fechamentoSMEDre = new PeriodoFechamento(null, null);

                    var tipoCalendario = await repositorioTipoCalendario.ObterPorIdAsync(tipoCalendarioId);

                    if (tipoCalendario == null)
                    {
                        throw new NegocioException("Tipo de calendário não encontrado.");
                    }

                    var periodoEscolar = await repositorioPeriodoEscolar.ObterPorTipoCalendario(tipoCalendarioId);

                    if (periodoEscolar == null || !periodoEscolar.Any())
                    {
                        throw new NegocioException("Período escolar não encontrado.");
                    }

                    foreach (var periodo in periodoEscolar)
                    {
                        periodo.AdicionarTipoCalendario(tipoCalendario);
                        fechamentoSMEDre.AdicionarFechamentoBimestre(new PeriodoFechamentoBimestre(fechamentoSMEDre.Id, periodo, periodo.PeriodoInicio, periodo.PeriodoFim));
                    }
                }
            }

            var fechamentoDreUe = repositorioPeriodoFechamento.ObterPorFiltros(tipoCalendarioId, dre?.Id, ue?.Id, null);

            if (fechamentoDreUe == null)
            {
                LimparCamposNaoUtilizadosRegistroPai(fechamentoSMEDre);
                fechamentoDreUe     = fechamentoSMEDre;
                fechamentoDreUe.Dre = dre;
                fechamentoDreUe.Ue  = ue;
            }

            var fechamentoDto    = MapearParaDto(fechamentoDreUe);
            var fechamentoSMEDto = MapearParaDto(fechamentoSME);

            foreach (var bimestreSME in fechamentoSMEDre.FechamentosBimestre)
            {
                FechamentoBimestreDto bimestreFechamentoSME = null;

                if (fechamentoSMEDto != null)
                {
                    bimestreFechamentoSME = fechamentoSMEDto.FechamentosBimestres.FirstOrDefault(c => c.Bimestre == bimestreSME.PeriodoEscolar.Bimestre);
                }

                var bimestreDreUe = fechamentoDto.FechamentosBimestres.FirstOrDefault(c => c.Bimestre == bimestreSME.PeriodoEscolar.Bimestre);
                if (bimestreDreUe != null)
                {
                    bimestreDreUe.PeriodoEscolar = bimestreSME.PeriodoEscolar;
                    if (fechamentoSMEDre.Id > 0 && !(dre == null) || !(ue == null))
                    {
                        if (bimestreFechamentoSME != null)
                        {
                            bimestreDreUe.InicioMinimo =
                                bimestreFechamentoSME.InicioDoFechamento < bimestreSME.InicioDoFechamento ?
                                bimestreFechamentoSME.InicioDoFechamento.Value : bimestreSME.InicioDoFechamento;

                            bimestreDreUe.FinalMaximo =
                                bimestreFechamentoSME.FinalDoFechamento > bimestreSME.FinalDoFechamento ?
                                bimestreFechamentoSME.FinalDoFechamento.Value : bimestreSME.FinalDoFechamento;
                        }
                        else
                        {
                            bimestreDreUe.InicioMinimo = bimestreSME.InicioDoFechamento;
                            bimestreDreUe.FinalMaximo  = bimestreSME.FinalDoFechamento;
                        }
                    }
                    else
                    {
                        bimestreDreUe.InicioMinimo = new DateTime(bimestreSME.InicioDoFechamento.Year, 01, 01);
                        bimestreDreUe.FinalMaximo  = new DateTime(bimestreSME.InicioDoFechamento.Year, 12, 31);
                    }
                }
            }
            return(fechamentoDto);
        }
Exemplo n.º 16
0
        public async Task <FechamentoDto> ObterPorTipoCalendarioDreEUe(long tipoCalendarioId, string dreId, string ueId)
        {
            var tipoCalendario = repositorioTipoCalendario.ObterPorId(tipoCalendarioId);

            if (tipoCalendario == null)
            {
                throw new NegocioException("Tipo de calendário não encontrado.");
            }
            var periodoEscolar = repositorioPeriodoEscolar.ObterPorTipoCalendario(tipoCalendarioId);

            if (periodoEscolar == null || !periodoEscolar.Any())
            {
                throw new NegocioException("Período escolar não encontrado para o tipo de calendário informado.");
            }

            var usuarioLogado = await servicoUsuario.ObterUsuarioLogado();

            var(dre, ue) = ObterDreEUe(dreId, ueId);

            var dreIdFiltro = !string.IsNullOrWhiteSpace(ueId) || usuarioLogado.EhPerfilUE() ? dre?.Id : null;

            var fechamentoSMEDre    = repositorioFechamento.ObterPorTipoCalendarioDreEUE(tipoCalendarioId, dreIdFiltro, null);
            var ehRegistroExistente = (dreId == null && fechamentoSMEDre != null);

            if (fechamentoSMEDre == null)
            {
                fechamentoSMEDre    = repositorioFechamento.ObterPorTipoCalendarioDreEUE(tipoCalendarioId, null, null);
                ehRegistroExistente = fechamentoSMEDre != null;
                if (fechamentoSMEDre == null)
                {
                    if (!usuarioLogado.EhPerfilSME())
                    {
                        throw new NegocioException("Fechamento da SME/Dre não encontrado para este tipo de calendário.");
                    }
                    else
                    {
                        fechamentoSMEDre = new PeriodoFechamento(null, null);

                        foreach (var periodo in periodoEscolar)
                        {
                            periodo.AdicionarTipoCalendario(tipoCalendario);
                            fechamentoSMEDre.AdicionarFechamentoBimestre(new PeriodoFechamentoBimestre(fechamentoSMEDre.Id, periodo, null, null));
                        }
                    }
                }
            }

            var fechamentoDreUe = repositorioFechamento.ObterPorTipoCalendarioDreEUE(tipoCalendarioId, dre?.Id, ue?.Id);

            if (fechamentoDreUe == null)
            {
                ehRegistroExistente = false;
                fechamentoDreUe     = fechamentoSMEDre;
                fechamentoDreUe.Dre = dre;
                fechamentoDreUe.Ue  = ue;
            }
            else
            {
                ehRegistroExistente = true;
            }

            var fechamentoDto = MapearParaDto(fechamentoDreUe);

            fechamentoDto.EhRegistroExistente = ehRegistroExistente;

            foreach (var bimestreSME in fechamentoSMEDre.FechamentosBimestre)
            {
                var bimestreDreUe = fechamentoDto.FechamentosBimestres.FirstOrDefault(c => c.Bimestre == bimestreSME.PeriodoEscolar.Bimestre);
                if (bimestreDreUe != null)
                {
                    if (fechamentoSMEDre.Id > 0 && (!string.IsNullOrWhiteSpace(dreId) || !string.IsNullOrWhiteSpace(ueId)))
                    {
                        bimestreDreUe.InicioMinimo = bimestreSME.InicioDoFechamento;
                        bimestreDreUe.FinalMaximo  = bimestreSME.FinalDoFechamento;
                    }
                    else
                    {
                        bimestreDreUe.InicioMinimo = new DateTime(DateTime.Now.Year, 01, 01);
                        bimestreDreUe.FinalMaximo  = new DateTime(DateTime.Now.Year, 12, 31);
                    }
                }
            }
            return(fechamentoDto);
        }