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); } } } }
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); } } }