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); }
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); } } } }
public void AlterarPeriodosComHierarquiaInferior(PeriodoFechamento fechamento) { var somenteUe = fechamento.DreId != null && fechamento.DreId > 0; unitOfWork.IniciarTransacao(); AlterarBimestresPeriodosComHierarquiaInferior(fechamento, somenteUe).Wait(); unitOfWork.PersistirTransacao(); }
private void EnviarNotificacaoDeAlteracaoDePeriodo(PeriodoFechamento fechamento, IEnumerable <PeriodoFechamentoBimestre> fechamentosBimestre, bool paraUe) { if (paraUe) { EnviaNotificacaoParaUe(fechamentosBimestre, fechamento.DreId.Value); } else { EnviaNotificacaoParaDre(fechamentosBimestre); } }
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(); }
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; } }
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."); } }
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); } } } }
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); }
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 }); }
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()); } }
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 }); }
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); } } }
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)); } }
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); }
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); }