private async Task EnviarNotificacaoSme(IEnumerable <Ue> ues, PeriodoFechamentoBimestre periodoFechamentoBimestre, ModalidadeTipoCalendario modalidadeTipoCalendario, int ano) { var titulo = $"UEs que não cadastraram o período de fechamento - {modalidadeTipoCalendario.Name()} {ano}"; var mensagem = new StringBuilder($"As UEs abaixo ainda não cadastraram o período de fechamento para o tipo de calendário - <b>{modalidadeTipoCalendario.Name()} {ano}</b>.<br/><br/>"); var grupoDres = ues.GroupBy(a => a.DreId); mensagem.Append("<ul>"); foreach (var grupoDre in grupoDres) { var dre = grupoDre.First().Dre; mensagem.Append($"<li>{dre.Abreviacao}<ul>"); foreach (var ue in grupoDre) { mensagem.Append($"<li>{ue.TipoEscola.ShortName()} {ue.Nome}</li>"); } mensagem.Append("</ul></li>"); } mensagem.Append("</ul>"); var adminsSme = await ObterUsuariosSme(); if (adminsSme != null && adminsSme.Any()) { await mediator.Send(new EnviarNotificacaoUsuariosCommand(titulo, mensagem.ToString(), NotificacaoCategoria.Aviso, NotificacaoTipo.Calendario, adminsSme)); } }
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); }
public async Task <string> Handle(ObterTipoNotaQuery request, CancellationToken cancellationToken) { var bimestreFechamento = request.PeriodoEscolar != null ? request.PeriodoEscolar.Bimestre : (await ObterPeriodoUltimoBimestre(request.Turma)).Bimestre; PeriodoFechamentoBimestre periodoFechamentoBimestre = await periodoFechamentoRepository.ObterPeriodoFechamentoTurmaAsync(request.Turma.Ue.Id, request.Turma.Dre.Id, request.Turma.AnoLetivo, bimestreFechamento, request.PeriodoEscolar?.Id); return(await ObterTipoNota(request.Turma, periodoFechamentoBimestre)); }
public async Task <IDictionary <string, string> > Handle(ObterTiposNotaRelatorioBoletimQuery request, CancellationToken cancellationToken) { var bimestreFechamento = (await ObterPeriodoUltimoBimestre(request.AnoLetivo, ObterModalidadeTipoCalendario(request.Modalidade), request.Semestre)).Bimestre; PeriodoFechamentoBimestre periodoFechamentoBimestre = await periodoFechamentoRepository.ObterPeriodoFechamentoTurmaAsync(request.UeId, request.DreId, request.AnoLetivo, bimestreFechamento, null); return(await ObterTiposNota(request.Turmas, periodoFechamentoBimestre, request.AnoLetivo, request.Modalidade, request.Semestre)); }
private async Task EnviarNotificacaoDre(IEnumerable <Ue> ues, PeriodoFechamentoBimestre periodoFechamentoBimestre, ModalidadeTipoCalendario modalidadeTipoCalendario, int ano) { var grupoDres = ues.GroupBy(a => a.DreId); foreach (var grupoDre in grupoDres) { await NotificarDre(grupoDre, modalidadeTipoCalendario, ano); } }
private void AtualizaEventoDeFechamento(PeriodoFechamentoBimestre bimestre, EventoFechamento fechamentoExistente) { var eventoExistente = fechamentoExistente.Evento ?? repositorioEvento.ObterPorId(fechamentoExistente.EventoId); if (eventoExistente != null) { eventoExistente.DataInicio = bimestre.InicioDoFechamento; eventoExistente.DataFim = bimestre.FinalDoFechamento; repositorioEvento.Salvar(eventoExistente); } }
public async Task <long> SalvarAsync(PeriodoFechamentoBimestre entidade) { if (entidade.Id > 0) { await database.Conexao.UpdateAsync(entidade); } else { entidade.Id = (long)(await database.Conexao.InsertAsync(entidade)); } return(entidade.Id); }
private async Task <string> ObterTipoNota(Turma turma, PeriodoFechamentoBimestre periodoFechamentoBimestre) { var dataReferencia = periodoFechamentoBimestre != null ? periodoFechamentoBimestre.FinalDoFechamento : (await ObterPeriodoUltimoBimestre(turma)).PeriodoFim; var tipoNota = await ObterNotaTipo(turma, dataReferencia); if (tipoNota == null) { throw new NegocioException("Não foi possível identificar o tipo de nota da turma"); } return(tipoNota); }
private async Task <TipoNota> ObterTipoNota(Turma turma, PeriodoFechamentoBimestre periodoFechamentoBimestre, bool consideraHistorico = false) { var dataReferencia = periodoFechamentoBimestre != null ? periodoFechamentoBimestre.FinalDoFechamento : (await ObterPeriodoUltimoBimestre(turma)).PeriodoFim; var tipoNota = await servicoDeNotasConceitos.ObterNotaTipo(turma.CodigoTurma, dataReferencia, consideraHistorico); if (tipoNota == null) { throw new NegocioException("Não foi possível identificar o tipo de nota da turma"); } return(tipoNota.TipoNota); }
private async Task NotificarUe(Ue ue, PeriodoEscolar periodoEscolar, PeriodoFechamentoBimestre periodoFechamentoBimestre) { var descricaoUe = $"{ue.TipoEscola.ShortName()} {ue.Nome} ({ue.Dre.Abreviacao})"; var titulo = $"Início do período de fechamento do {periodoEscolar.Bimestre}º bimestre - {descricaoUe}"; var mensagem = $@"O fechamento do <b>{periodoEscolar.Bimestre}º bimestre</b> na <b>{descricaoUe}</b> irá iniciar no dia <b>{periodoFechamentoBimestre.InicioDoFechamento.Date.ToString("dd/MM/yyyy")}</b>."; var usuarios = await ObterUsuarios(ue); if (usuarios != null && usuarios.Any()) { await mediator.Send(new EnviarNotificacaoUsuariosCommand(titulo, mensagem, NotificacaoCategoria.Aviso, NotificacaoTipo.Calendario, usuarios, ue.Dre.CodigoDre, ue.CodigoUe)); } await mediator.Send(new EnviarNotificacaoCommand(titulo, mensagem.ToString(), NotificacaoCategoria.Aviso, NotificacaoTipo.Calendario, ObterCargosGestaoEscola(), periodoFechamentoBimestre.PeriodoFechamento.Ue.Dre.CodigoDre, periodoFechamentoBimestre.PeriodoFechamento.Ue.CodigoUe)); }
private void AtualizaDatasInicioEFim(PeriodoFechamentoBimestre periodoFechamentoBimestreDre, PeriodoFechamentoBimestre periodoFechamentoBimestreUe) { var inicioFechamentoDre = periodoFechamentoBimestreDre.InicioDoFechamento; var finalFechamentoDre = periodoFechamentoBimestreDre.FinalDoFechamento; var inicioFechamentoUe = periodoFechamentoBimestreUe.InicioDoFechamento; var finalFechamentoUe = periodoFechamentoBimestreUe.FinalDoFechamento; if (inicioFechamentoDre > inicioFechamentoUe || inicioFechamentoUe > finalFechamentoDre) { periodoFechamentoBimestreUe.InicioDoFechamento = periodoFechamentoBimestreDre.InicioDoFechamento; } if (finalFechamentoDre < finalFechamentoUe || finalFechamentoUe < periodoFechamentoBimestreUe.InicioDoFechamento) { periodoFechamentoBimestreUe.FinalDoFechamento = periodoFechamentoBimestreDre.FinalDoFechamento; } }
private async Task EnviarNotificacaoProfessores(IEnumerable <Turma> turmas, PeriodoEscolar periodoEscolar, PeriodoFechamentoBimestre periodoFechamentoBimestre, Ue ue) { var descricaoUe = $"{ue.TipoEscola.ShortName()} {ue.Nome} ({ue.Dre.Abreviacao})"; var titulo = $"Término do período de fechamento do {periodoEscolar.Bimestre}º bimestre - {descricaoUe}"; var mensagem = $@"O fechamento do <b>{periodoEscolar.Bimestre}º bimestre</b> na <b>{descricaoUe}</b> irá encerrar no dia <b>{periodoFechamentoBimestre.FinalDoFechamento.Date:dd/MM/yyyy}</b>. <br/><br/>Após esta data o sistema será bloqueado para edições neste bimestre."; var professores = await ObterProfessores(turmas); if (professores != null && professores.Any()) { await mediator.Send(new EnviarNotificacaoUsuariosCommand(titulo, mensagem, NotificacaoCategoria.Aviso, NotificacaoTipo.Calendario, professores, ue.Dre.CodigoDre, ue.CodigoUe)); } await mediator.Send(new EnviarNotificacaoCommand(titulo, mensagem.ToString(), NotificacaoCategoria.Aviso, NotificacaoTipo.Calendario, ObterCargosGestaoEscola(), periodoFechamentoBimestre.PeriodoFechamento.Ue.Dre.CodigoDre, periodoFechamentoBimestre.PeriodoFechamento.Ue.CodigoUe)); }
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 NotificarUe(ModalidadeTipoCalendario modalidade, PeriodoFechamentoBimestre periodoIniciando) { await mediator.Send(new NotificarPeriodoFechamentoUeCommand(modalidade, periodoIniciando)); }
public async Task <ConselhoClasseAlunoResumoDto> ObterConselhoClasseTurma(string turmaCodigo, string alunoCodigo, int bimestre = 0, bool ehFinal = false, bool consideraHistorico = false) { var turma = await ObterTurma(turmaCodigo); var ehAnoAnterior = turma.AnoLetivo != DateTime.Today.Year; if (bimestre == 0 && !ehFinal) { bimestre = await ObterBimestreAtual(turma); } var fechamentoTurma = await consultasFechamentoTurma.ObterPorTurmaCodigoBimestreAsync(turmaCodigo, bimestre); if (fechamentoTurma == null && !ehAnoAnterior) { throw new NegocioException("Fechamento da turma não localizado " + (!ehFinal && bimestre > 0 ? $"para o bimestre {bimestre}" : "")); } var conselhoClasse = fechamentoTurma != null ? await repositorioConselhoClasse.ObterPorFechamentoId(fechamentoTurma.Id): null; var periodoEscolarId = fechamentoTurma?.PeriodoEscolarId; if (periodoEscolarId == null) { var tipoCalendario = await repositorioTipoCalendario.BuscarPorAnoLetivoEModalidade(turma.AnoLetivo, turma.ModalidadeTipoCalendario, turma.Semestre); if (tipoCalendario == null) { throw new NegocioException("Tipo de calendário não encontrado"); } var periodoEscolar = await repositorioPeriodoEscolar.ObterPorTipoCalendarioEBimestreAsync(tipoCalendario.Id, bimestre); periodoEscolarId = periodoEscolar?.Id; } var bimestreFechamento = !ehFinal ? bimestre : (await ObterPeriodoUltimoBimestre(turma)).Bimestre; PeriodoFechamentoBimestre periodoFechamentoBimestre = await consultasPeriodoFechamento .ObterPeriodoFechamentoTurmaAsync(turma, bimestreFechamento, periodoEscolarId); var tipoNota = await ObterTipoNota(turma, periodoFechamentoBimestre, consideraHistorico); var mediaAprovacao = double.Parse(await repositorioParametrosSistema .ObterValorPorTipoEAno(TipoParametroSistema.MediaBimestre)); var conselhoClasseAluno = conselhoClasse != null ? await repositorioConselhoClasseAluno.ObterPorConselhoClasseAlunoCodigoAsync(conselhoClasse.Id, alunoCodigo) : null; return(new ConselhoClasseAlunoResumoDto() { FechamentoTurmaId = fechamentoTurma?.Id, ConselhoClasseId = conselhoClasse?.Id, ConselhoClasseAlunoId = conselhoClasseAluno?.Id, Bimestre = bimestre, PeriodoFechamentoInicio = periodoFechamentoBimestre?.InicioDoFechamento, PeriodoFechamentoFim = periodoFechamentoBimestre?.FinalDoFechamento, TipoNota = tipoNota, Media = mediaAprovacao, AnoLetivo = turma.AnoLetivo }); }
private async Task <IDictionary <string, string> > ObterTiposNota(IEnumerable <Turma> turmas, PeriodoFechamentoBimestre periodoFechamentoBimestre, int anoLetivo, Modalidade modalidade, int semestre) { var dataReferencia = periodoFechamentoBimestre != null ? periodoFechamentoBimestre.FinalDoFechamento : (await ObterPeriodoUltimoBimestre(anoLetivo, ObterModalidadeTipoCalendario(modalidade), semestre)).PeriodoFim; var tiposNota = await ObterNotasTipo(turmas, modalidade, dataReferencia); if (tiposNota == null) { throw new NegocioException("Não foi possível identificar o tipo de nota da turma"); } return(tiposNota); }
private async Task EnviarNotificacoes(List <NotificarResultadoInsatisfatorioDto> listaNotificacoes, PeriodoFechamentoBimestre periodoFechamentoBimestre) { var titulo = $"Turmas com resultados insatisfatórios no {periodoFechamentoBimestre.PeriodoEscolar.Bimestre}º bimestre"; var mensagem = new StringBuilder($"As turmas e componentes curriculares abaixo da <b>{periodoFechamentoBimestre.PeriodoFechamento.Ue.TipoEscola.ShortName()} {periodoFechamentoBimestre.PeriodoFechamento.Ue.Nome} ({periodoFechamentoBimestre.PeriodoFechamento.Ue.Dre.Abreviacao})</b> tiveram mais de 50% dos estudantes com resultado insatisfatório no <b>{periodoFechamentoBimestre.PeriodoEscolar.Bimestre}º bimestre</b>:"); mensagem.Append("<table style='margin-left: auto; margin-right: auto; margin-top: 10px' border='2' cellpadding='5'>"); foreach (var turmasPorModalidade in listaNotificacoes.GroupBy(c => c.TurmaModalidade)) { mensagem.Append(ObterHeaderModalidade(turmasPorModalidade.Key)); foreach (var turma in turmasPorModalidade) { mensagem.Append(MontarLinhaDaTurma(turma)); } } mensagem.Append("</table>"); await mediator.Send(new EnviarNotificacaoCommand(titulo, mensagem.ToString(), NotificacaoCategoria.Aviso, NotificacaoTipo.Fechamento, ObterCargosGestaoEscola(), periodoFechamentoBimestre.PeriodoFechamento.Ue.Dre.CodigoDre, periodoFechamentoBimestre.PeriodoFechamento.Ue.CodigoUe)); }
public NotificarPeriodoFechamentoDreCommand(ModalidadeTipoCalendario modalidadeTipoCalendario, PeriodoFechamentoBimestre periodoFechamentoBimestre) { PeriodoFechamentoBimestre = periodoFechamentoBimestre; ModalidadeTipoCalendario = modalidadeTipoCalendario; }
public ExecutaNotificacaoPeriodoFechamentoEncerrandoCommand(PeriodoFechamentoBimestre periodoFechamentoBimestre, ModalidadeTipoCalendario modalidadeTipoCalendario) { PeriodoFechamentoBimestre = periodoFechamentoBimestre; ModalidadeTipoCalendario = modalidadeTipoCalendario; }
private async Task <bool> ExistePeriodoFechamentoCadastrado(Ue ue, PeriodoFechamentoBimestre periodoFechamentoBimestre) => await mediator.Send(new ExistePeriodoFechmantoPorUePeriodoEscolarQuery(ue.Id, periodoFechamentoBimestre.PeriodoEscolarId));