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 async Task NotificarDre(IGrouping <long, Ue> grupoDre, ModalidadeTipoCalendario modalidadeTipoCalendario, int ano)
        {
            var dre      = grupoDre.First().Dre;
            var titulo   = $"UEs que não cadastraram o período de fechamento - {modalidadeTipoCalendario.Name()} {ano} ({dre.Abreviacao})";
            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} ({dre.Abreviacao})</b>.<br/>");

            mensagem.Append("<ul>");
            foreach (var ue in grupoDre)
            {
                mensagem.Append($"<li>{ue.TipoEscola.ShortName()} {ue.Nome}</li>");
            }
            mensagem.Append("</ul>");

            var adminsDre = await ObterUsuariosDre(dre.CodigoDre);

            if (adminsDre != null && adminsDre.Any())
            {
                await mediator.Send(new EnviarNotificacaoUsuariosCommand(titulo, mensagem.ToString(), NotificacaoCategoria.Aviso, NotificacaoTipo.Calendario, adminsDre, dre.CodigoDre));
            }
        }
Пример #3
0
        private async Task NotificarUe(Ue ue, ModalidadeTipoCalendario modalidadeTipoCalendario)
        {
            var anoAtual    = DateTime.Now.Year;
            var descricaoUe = $"{ue.TipoEscola.ShortName()} {ue.Nome} ({ue.Dre.Abreviacao})";
            var titulo      = $"Cadastro de período de fechamento pendente {descricaoUe}";
            var mensagem    = $"O período de fechamento da <b>{descricaoUe}</b> ainda não foi cadastrado para o tipo de calendário <b>{modalidadeTipoCalendario.Name()} {anoAtual}</b>.";

            await mediator.Send(new EnviarNotificacaoCommand(titulo, mensagem, NotificacaoCategoria.Aviso, NotificacaoTipo.Calendario, ObterCargosGestaoEscola(), ue.Dre.CodigoDre, ue.CodigoUe));

            var admins = await ObterUsuariosAdms(ue);

            if (admins != null && admins.Any())
            {
                await mediator.Send(new EnviarNotificacaoUsuariosCommand(titulo, mensagem, NotificacaoCategoria.Aviso, NotificacaoTipo.Calendario, admins, ue.Dre.CodigoDre, ue.CodigoUe));
            }
        }
        private async Task NotificarEscolaAlunosFaltososBimestre(string dreCodigo, string dreNome, string dreAbreviacao, TipoEscola tipoEscola, string ueCodigo, string ueNome, double percentualCritico, int bimestre, int ano, IEnumerable <IGrouping <string, AlunoFaltosoBimestreDto> > turmasAgrupadas, ModalidadeTipoCalendario modalidadeTipoCalendario)
        {
            var           titulo   = $"Alunos com baixa frequência da {tipoEscola.ShortName()} {ueNome} - {modalidadeTipoCalendario.Name()}";
            StringBuilder mensagem = new StringBuilder();

            mensagem.AppendLine($"<p>Abaixo segue a lista de turmas com alunos que tiveram frequência geral abaixo de <b>{percentualCritico}%</b> no <b>{bimestre}º bimestre</b> de <b>{ano}</b> da <b>{tipoEscola.ShortName()} {ueNome} (DRE {dreAbreviacao})</b>.</p>");

            foreach (var turmaAgrupada in turmasAgrupadas)
            {
                var alunosDaTurma = await servicoEOL.ObterAlunosPorTurma(turmaAgrupada.Key);

                var alunosFaltososTurma = alunosDaTurma.Where(c => turmaAgrupada.Any(a => a.AlunoCodigo == c.CodigoAluno));

                mensagem.AppendLine($"<p>Turma <b>{turmaAgrupada.First().TurmaModalidade.ShortName()} - {turmaAgrupada.First().TurmaNome}</b></p>");
                mensagem.AppendLine("<table style='margin-left: auto; margin-right: auto;' border='2' cellpadding='5'>");
                mensagem.AppendLine("<tr>");
                mensagem.AppendLine("<td style='padding: 5px;'>Nº</td>");
                mensagem.AppendLine("<td style='padding: 5px;'>Nome do aluno</td>");
                mensagem.AppendLine("<td style='padding: 5px;'>Percentual de Frequência</td>");
                mensagem.AppendLine("</tr>");

                foreach (var aluno in alunosFaltososTurma.OrderBy(a => a.NomeAluno))
                {
                    var percentualFrequenciaAluno = 100 - turmaAgrupada.FirstOrDefault(c => c.AlunoCodigo == aluno.CodigoAluno).PercentualFaltas;

                    mensagem.AppendLine("<tr>");
                    mensagem.Append($"<td style='padding: 5px;'>{aluno.NumeroAlunoChamada}</td>");
                    mensagem.Append($"<td style='padding: 5px;'>{aluno.NomeAluno}</td>");
                    mensagem.Append($"<td style='text-align: center;'>{percentualFrequenciaAluno:0.00} %</td>");
                    mensagem.AppendLine("</tr>");
                }
            }

            var funcionariosEol         = servicoNotificacao.ObterFuncionariosPorNivel(ueCodigo, Cargo.Supervisor);
            var functionariosEolCP      = servicoNotificacao.ObterFuncionariosPorNivel(ueCodigo, Cargo.CP);
            var functionariosEolAD      = servicoNotificacao.ObterFuncionariosPorNivel(ueCodigo, Cargo.AD);
            var functionariosEolDiretor = servicoNotificacao.ObterFuncionariosPorNivel(ueCodigo, Cargo.Diretor);

            NotficarFuncionariosAlunosFaltososBimestre(funcionariosEol, titulo, mensagem.ToString(), ueCodigo, dreCodigo);
            NotficarFuncionariosAlunosFaltososBimestre(functionariosEolCP, titulo, mensagem.ToString(), ueCodigo, dreCodigo);
            NotficarFuncionariosAlunosFaltososBimestre(functionariosEolAD, titulo, mensagem.ToString(), ueCodigo, dreCodigo);
            NotficarFuncionariosAlunosFaltososBimestre(functionariosEolDiretor, titulo, mensagem.ToString(), ueCodigo, dreCodigo);
        }