public async Task validarMediaAlunos(IEnumerable <long> idsAtividadesAvaliativas, IEnumerable <string> alunosId, Usuario usuario, string disciplinaId)
        {
            var dataAtual             = DateTime.Now;
            var notasConceitos        = repositorioNotasConceitos.ObterNotasPorAlunosAtividadesAvaliativas(idsAtividadesAvaliativas, alunosId, disciplinaId);
            var atividadesAvaliativas = repositorioAtividadeAvaliativa.ListarPorIds(idsAtividadesAvaliativas);

            var notasPorAvaliacoes            = notasConceitos.GroupBy(x => x.AtividadeAvaliativaID);
            var percentualAlunosInsuficientes = double.Parse(await mediator.Send(new ObterValorParametroSistemaTipoEAnoQuery(TipoParametroSistema.PercentualAlunosInsuficientes, DateTime.Today.Year)));

            foreach (var notasPorAvaliacao in notasPorAvaliacoes)
            {
                var atividadeAvaliativa = atividadesAvaliativas.FirstOrDefault(x => x.Id == notasPorAvaliacao.Key);
                var valoresConceito     = await repositorioConceito.ObterPorData(atividadeAvaliativa.DataAvaliacao);

                var tipoNota = await TipoNotaPorAvaliacao(atividadeAvaliativa, dataAtual.Year != atividadeAvaliativa.DataAvaliacao.Year);

                var ehTipoNota    = tipoNota.TipoNota == TipoNota.Nota;
                var notaParametro = await repositorioNotaParametro.ObterPorDataAvaliacao(atividadeAvaliativa.DataAvaliacao);

                var quantidadeAlunos            = notasPorAvaliacao.Count();
                var quantidadeAlunosSuficientes = 0;
                var turma = await repositorioTurma.ObterTurmaComUeEDrePorCodigo(atividadeAvaliativa.TurmaId);

                var periodosEscolares = await BuscarPeriodosEscolaresDaAtividade(atividadeAvaliativa);

                var periodoAtividade = periodosEscolares.FirstOrDefault(x => x.PeriodoInicio.Date <= atividadeAvaliativa.DataAvaliacao.Date && x.PeriodoFim.Date >= atividadeAvaliativa.DataAvaliacao.Date);

                foreach (var nota in notasPorAvaliacao)
                {
                    var valorConceito = ehTipoNota ? valoresConceito.FirstOrDefault(a => a.Id == nota.ConceitoId):null;
                    quantidadeAlunosSuficientes += ehTipoNota ?
                                                   nota.Nota >= notaParametro.Media ? 1 : 0 :
                                                   valorConceito != null && valorConceito.Aprovado ? 1 : 0;
                }
                string mensagemNotasConceitos = $"<p>Os resultados da atividade avaliativa '{atividadeAvaliativa.NomeAvaliacao}' da turma {turma.Nome} da {turma.Ue.Nome} (DRE {turma.Ue.Dre.Nome}) no bimestre {periodoAtividade.Bimestre} de {turma.AnoLetivo} foram alterados " +
                                                $"pelo Professor {usuario.Nome} ({usuario.CodigoRf}) em {dataAtual.ToString("dd/MM/yyyy")} às {dataAtual.ToString("HH:mm")} estão abaixo da média.</p>" +
                                                $"<a href='{hostAplicacao}diario-classe/notas/{disciplinaId}/{periodoAtividade.Bimestre}'>Clique aqui para visualizar os detalhes.</a>";

                // Avalia se a quantidade de alunos com nota/conceito suficientes esta abaixo do percentual parametrizado para notificação
                if (quantidadeAlunosSuficientes < (quantidadeAlunos * percentualAlunosInsuficientes / 100))
                {
                    // Notifica todos os CPs da UE
                    foreach (var usuarioCP in usuariosCPs)
                    {
                        servicoNotificacao.Salvar(new Notificacao()
                        {
                            Ano       = atividadeAvaliativa.CriadoEm.Year,
                            Categoria = NotificacaoCategoria.Alerta,
                            DreId     = atividadeAvaliativa.DreId,
                            Mensagem  = mensagemNotasConceitos,
                            UsuarioId = usuarioCP.Id,
                            Tipo      = NotificacaoTipo.Notas,
                            Titulo    = $"Resultados de Atividade Avaliativa - Turma {turma.Nome}",
                            TurmaId   = atividadeAvaliativa.TurmaId,
                            UeId      = atividadeAvaliativa.UeId,
                        });
                    }
                }
            }
        }
Exemplo n.º 2
0
        private void EnviaNotificacaoParaDre(long dreId, IEnumerable <PeriodoFechamentoBimestre> fechamentosBimestre)
        {
            var dre = repositorioDre.ObterPorId(dreId);

            if (dre != null)
            {
                try
                {
                    Notificacao notificacao  = MontaNotificacao(dre.Nome, "SME", fechamentosBimestre, null, dre.CodigoDre);
                    var         adminsSgpDre = servicoEol.ObterAdministradoresSGPParaNotificar(dre.CodigoDre).Result;
                    if (adminsSgpDre != null && adminsSgpDre.Any())
                    {
                        foreach (var adminSgpUe in adminsSgpDre)
                        {
                            var usuario = servicoUsuario.ObterUsuarioPorCodigoRfLoginOuAdiciona(adminSgpUe);
                            notificacao.UsuarioId = usuario.Id;

                            servicoNotificacao.Salvar(notificacao);
                        }
                    }
                }
                catch (Exception)
                {
                    throw;
                }
            }
        }
Exemplo n.º 3
0
        private void EnviaNotificacaoParaDre(IEnumerable <PeriodoFechamentoBimestre> fechamentosBimestre)
        {
            var dres = repositorioDre.ObterTodas();

            if (dres != null && dres.Any())
            {
                foreach (var dre in dres)
                {
                    Notificacao notificacao  = MontaNotificacao(dre.Nome, "SME", fechamentosBimestre, null, dre.CodigoDre);
                    var         adminsSgpDre = servicoEol.ObterAdministradoresSGPParaNotificar(dre.CodigoDre).Result;
                    if (adminsSgpDre != null && adminsSgpDre.Any())
                    {
                        foreach (var adminSgpUe in adminsSgpDre)
                        {
                            var rf = "";
                            if (long.TryParse(adminSgpUe, out long rfLong))
                            {
                                rf = adminSgpUe;
                            }
                            var usuario = servicoUsuario.ObterUsuarioPorCodigoRfLoginOuAdiciona(rf, adminSgpUe);
                            notificacao.UsuarioId = usuario.Id;

                            servicoNotificacao.Salvar(notificacao);
                        }
                    }
                }
            }
        }
        private void NotificaRegistroDivergencia(Usuario usuario, RegistroAulaPrevistaDivergenteDto registroAulaPrevistaDivergente)
        {
            var           tituloMensagem  = $"Diferença entre aulas previstas e dadas - Turma {registroAulaPrevistaDivergente.NomeTurma}";
            StringBuilder mensagemUsuario = new StringBuilder();

            mensagemUsuario.Append($"O total de aulas previstas não corresponde ao total de aulas dadas no {registroAulaPrevistaDivergente.Bimestre}º bimestre ");
            mensagemUsuario.Append($"para a turma {registroAulaPrevistaDivergente.NomeTurma} da escola {registroAulaPrevistaDivergente.NomeUe} ({registroAulaPrevistaDivergente.NomeDre})");

            var hostAplicacao = configuration["UrlFrontEnd"];

            mensagemUsuario.Append($"<a href='{hostAplicacao}diario-classe/aula-dada-aula-prevista'>Clique aqui para visualizar os detalhes.</a>");

            var notificacao = new Notificacao()
            {
                Ano       = DateTime.Now.Year,
                Categoria = NotificacaoCategoria.Alerta,
                Tipo      = NotificacaoTipo.Calendario,
                Titulo    = tituloMensagem,
                Mensagem  = mensagemUsuario.ToString(),
                UsuarioId = usuario.Id,
                TurmaId   = registroAulaPrevistaDivergente.CodigoTurma,
                UeId      = registroAulaPrevistaDivergente.CodigoUe,
                DreId     = registroAulaPrevistaDivergente.CodigoDre,
            };

            servicoNotificacao.Salvar(notificacao);

            repositorioNotificacaoAulaPrevista.Salvar(new NotificacaoAulaPrevista()
            {
                Bimestre          = registroAulaPrevistaDivergente.Bimestre,
                NotificacaoCodigo = notificacao.Codigo,
                TurmaId           = registroAulaPrevistaDivergente.CodigoTurma,
                DisciplinaId      = registroAulaPrevistaDivergente.DisciplinaId,
            });
        }
Exemplo n.º 5
0
        private void NotificaAlteracaoFrequencia(Usuario usuario, RegistroFrequenciaAulaDto registroFrequencia, string usuarioAlteracao)
        {
            // carregar nomes da turma, escola, disciplina e professor para notificacao
            var disciplina = ObterNomeDisciplina(registroFrequencia.CodigoDisciplina);

            var tituloMensagem = $"Título: Alteração extemporânea de frequência  da turma {registroFrequencia.NomeTurma} na disciplina {disciplina}.";

            StringBuilder mensagemUsuario = new StringBuilder();

            mensagemUsuario.Append($"O Professor {usuarioAlteracao} realizou alterações no registro de frequência do dia {registroFrequencia.DataAula} da turma {registroFrequencia.NomeTurma} ({registroFrequencia.NomeUe}) na disciplina {disciplina}.");

            var hostAplicacao = configuration["UrlFrontEnd"];

            mensagemUsuario.Append($"<a href='{hostAplicacao}diario-classe/frequencia-plano-aula'>Clique aqui para acessar esse registro.</a>");

            var notificacao = new Notificacao()
            {
                Ano       = DateTime.Now.Year,
                Categoria = NotificacaoCategoria.Alerta,
                Tipo      = NotificacaoTipo.Frequencia,
                Titulo    = tituloMensagem,
                Mensagem  = mensagemUsuario.ToString(),
                UsuarioId = usuario.Id,
                TurmaId   = registroFrequencia.CodigoTurma,
                UeId      = registroFrequencia.CodigoUe,
                DreId     = registroFrequencia.CodigoDre,
            };

            servicoNotificacao.Salvar(notificacao);
        }
Exemplo n.º 6
0
        public Task <bool> Handle(EnviaNotificacaoCriadorCommand request, CancellationToken cancellationToken)
        {
            var extensaoRelatorio = request.RelatorioCorrelacao.Formato.Name();
            var urlNotificacao    = $"{request.UrlRedirecionamentoBase}api/v1/downloads/sgp/{extensaoRelatorio}/{request.RelatorioCorrelacao.TipoRelatorio.ShortName()}.{extensaoRelatorio}/{request.RelatorioCorrelacao.Codigo}";

            string descricaoDoRelatorio;

            if (string.IsNullOrEmpty(request.MensagemTitulo))
            {
                descricaoDoRelatorio = request.RelatorioCorrelacao.TipoRelatorio.GetAttribute <DisplayAttribute>().Description;
            }
            else
            {
                descricaoDoRelatorio = request.MensagemTitulo;
            }

            var mensagem = FormatarMensagem(descricaoDoRelatorio, urlNotificacao, request.MensagemUsuario);

            var notificacao = new Notificacao()
            {
                Titulo    = descricaoDoRelatorio,
                Ano       = request.RelatorioCorrelacao.CriadoEm.Year,
                Categoria = NotificacaoCategoria.Aviso,
                Mensagem  = mensagem,
                Tipo      = NotificacaoTipo.Relatorio,
                UsuarioId = request.RelatorioCorrelacao.UsuarioSolicitanteId
            };

            servicoNotificacao.Salvar(notificacao);

            return(Task.FromResult(true));
        }
Exemplo n.º 7
0
        private void EnviarNotificacaoRegistroDeRecorrencia(Evento evento, List <DateTime> notificacoesSucesso, List <string> notificacoesFalha, long usuarioId)
        {
            var tipoCalendario = repositorioTipoCalendario.ObterPorId(evento.TipoCalendarioId);

            var mensagemNotificacao = new StringBuilder();

            if (notificacoesSucesso.Any())
            {
                var textoInicial = notificacoesSucesso.Count > 1 ? "Foram" : "Foi";
                mensagemNotificacao.Append($"<br>{textoInicial} cadastrado(s) {notificacoesSucesso.Count} evento(s) de '{evento.TipoEvento.Descricao}' no calendário '{tipoCalendario.Nome}' de {tipoCalendario.AnoLetivo} nas seguintes datas:<br>");
                notificacoesSucesso.ForEach(data => mensagemNotificacao.AppendLine($"<br>{data.ToString("dd/MM/yyyy")}"));
            }
            if (notificacoesFalha.Any())
            {
                mensagemNotificacao.AppendLine($"<br>Não foi possível cadastrar o(s) evento(s) na(s) seguinte(s) data(s)<br>");
                notificacoesFalha.ForEach(mensagem => mensagemNotificacao.AppendLine($"<br>{mensagem}"));
            }
            var notificacao = new Notificacao()
            {
                Titulo    = $"Criação de Eventos Recorrentes - {evento.Nome}",
                Mensagem  = mensagemNotificacao.ToString(),
                UsuarioId = usuarioId,
                Tipo      = NotificacaoTipo.Calendario,
                Categoria = NotificacaoCategoria.Aviso
            };

            servicoNotificacao.Salvar(notificacao);
        }
Exemplo n.º 8
0
        public void GerarNotificacaoAlteracaoLimiteDias(Turma turma, Usuario usuarioLogado, Ue ue, int bimestre, string alunosComNotaAlterada)
        {
            var dataAtual = DateTime.Now;
            var mensagem  = $"<p>A(s) nota(s)/conceito(s) final(is) da turma {turma.Nome} da {ue.Nome} (DRE {ue.Dre.Nome}) no bimestre {bimestre} de {turma.AnoLetivo} foram alterados pelo Professor " +
                            $"{usuarioLogado.Nome} ({usuarioLogado.CodigoRf}) em  {dataAtual.ToString("dd/MM/yyyy")} às {dataAtual.ToString("HH:mm")} para o(s) seguinte(s) aluno(s):</p><br/>{alunosComNotaAlterada} ";
            var listaCPs       = servicoEOL.ObterFuncionariosPorCargoUe(turma.Ue.CodigoUe, (long)Cargo.CP);
            var listaDiretores = servicoEOL.ObterFuncionariosPorCargoUe(turma.Ue.CodigoUe, (long)Cargo.Diretor);

            var listaSupervisores = consultasSupervisor.ObterPorUe(turma.Ue.CodigoUe);

            var usuariosNotificacao = new List <UsuarioEolRetornoDto>();

            if (listaCPs != null)
            {
                usuariosNotificacao.AddRange(listaCPs);
            }
            if (listaDiretores != null)
            {
                usuariosNotificacao.AddRange(listaDiretores);
            }
            if (listaSupervisores != null)
            {
                usuariosNotificacao.Add(new UsuarioEolRetornoDto()
                {
                    CodigoRf = listaSupervisores.SupervisorId, NomeServidor = listaSupervisores.SupervisorNome
                });
            }

            foreach (var usuarioNotificacaoo in usuariosNotificacao)
            {
                var usuario     = servicoUsuario.ObterUsuarioPorCodigoRfLoginOuAdiciona(usuarioNotificacaoo.CodigoRf);
                var notificacao = new Notificacao()
                {
                    Ano       = turma.AnoLetivo,
                    Categoria = NotificacaoCategoria.Alerta,
                    DreId     = ue.Dre.Id.ToString(),
                    Mensagem  = mensagem,
                    UsuarioId = usuario.Id,
                    Tipo      = NotificacaoTipo.Notas,
                    Titulo    = $"Alteração em nota/conceito final - Turma {turma.Nome}",
                    TurmaId   = turma.Id.ToString(),
                    UeId      = turma.UeId.ToString(),
                };
                servicoNotificacao.Salvar(notificacao);
            }
        }
        public void Salvar(NotificacaoDto notificacaoDto)
        {
            var notificacao = MapearParaDominio(notificacaoDto);

            servicoNotificacao.Salvar(notificacao);
        }