예제 #1
0
        public async Task <IEnumerable <ComunicadoParaFiltroDaDashboardDto> > Handle(ObterComunicadosParaFiltroDaDashboardQuery request, CancellationToken cancellationToken)
        {
            try
            {
                var comunicadosComTurmas = new List <ComunicadoParaFiltroDaDashboardDto>();

                var filtro = new FiltroObterComunicadosParaFiltroDaDashboardDto
                {
                    AnoEscolar       = request.AnoEscolar,
                    AnoLetivo        = request.AnoLetivo,
                    CodigoDre        = request.CodigoDre,
                    CodigoTurma      = request.CodigoTurma,
                    CodigoUe         = request.CodigoUe,
                    DataEnvioFinal   = request.DataEnvioFinal,
                    DataEnvioInicial = request.DataEnvioInicial,
                    Titulo           = request.Descricao,
                    GruposIds        = request.GruposIds,
                    Modalidade       = request.Modalidade,
                    Semestre         = request.Semestre
                };

                var comunicadosFiltrados = await repositorioComunicado.ObterComunicadosParaFiltroDaDashboard(filtro);

                comunicadosComTurmas = await ObterTurmasAssociadas(comunicadosFiltrados);

                return(comunicadosComTurmas);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        private string MontarCondicoesDaConsultaObterComunicadosParaFiltroDaDashboard(FiltroObterComunicadosParaFiltroDaDashboardDto filtro, string comunicadoAlias,
                                                                                      string comunicadoTumaAlias, string turmaAlias, string comunicadoGrupoAlias)
        {
            var where = new StringBuilder($" WHERE {comunicadoAlias}.ano_letivo = @anoLetivo ");

            where.Append(!string.IsNullOrWhiteSpace(filtro.CodigoDre) ? $" AND {comunicadoAlias}.codigo_dre = @CodigoDre" : $" AND {comunicadoAlias}.codigo_dre is null");

            where.Append(!string.IsNullOrWhiteSpace(filtro.CodigoUe) ? $" AND {comunicadoAlias}.codigo_ue = @CodigoUe" : $" AND {comunicadoAlias}.codigo_ue is null");

            if (filtro.GruposIds != null)
            {
                where.Append($" AND {comunicadoGrupoAlias}.grupo_comunicado_id = ANY(@GruposIds)");
            }

            if (filtro.Modalidade != null)
            {
                where.Append($" AND {comunicadoAlias}.modalidade = @Modalidade");
            }

            if (filtro.Semestre != null)
            {
                where.Append($" AND {comunicadoAlias}.semestre = @Semestre");
            }

            if (filtro.AnoEscolar != null)
            {
                where.Append($" AND {comunicadoAlias}.series_resumidas = @AnoEscolar");
            }

            if (!string.IsNullOrWhiteSpace(filtro.CodigoTurma))
            {
                where.Append($" AND {comunicadoTumaAlias}.turma_codigo = @CodigoTurma");
            }

            if (filtro.DataEnvioInicial != null)
            {
                where.Append($" AND date({comunicadoAlias}.data_envio) >= @DataEnvioInicial");
            }

            if (filtro.DataEnvioFinal != null)
            {
                where.Append($" AND date({comunicadoAlias}.data_envio) <= @DataEnvioFinal");
            }

            if (!string.IsNullOrWhiteSpace(filtro.Titulo))
            {
                filtro.Titulo = filtro.Titulo.ToUpperInvariant();
                where.Append($" AND lower(f_unaccent(cm.titulo)) LIKE lower(f_unaccent('%" + filtro.Titulo + "%'))");
            }

            where.Append($" and not {comunicadoAlias}.excluido ");

            return(where.ToString());
        }
        public Task <IEnumerable <ComunicadoParaFiltroDaDashboardDto> > ObterComunicadosParaFiltroDaDashboard(FiltroObterComunicadosParaFiltroDaDashboardDto filtro)
        {
            var comunicadoAlias      = "cm";
            var comunicadoTumaAlias  = "cmt";
            var turmaAlias           = "tur";
            var comunicadoGrupoAlias = "cmg";

            var sql = new StringBuilder($@"SELECT
                                            {comunicadoAlias}.id AS Id,
                                            {comunicadoAlias}.titulo AS Titulo,
                                            {comunicadoAlias}.data_envio AS DataEnvio,
                                            {comunicadoAlias}.codigo_dre AS CodigoDre,
                                            {comunicadoAlias}.codigo_ue AS CodigoUe,
                                            {comunicadoAlias}.modalidade AS Modalidade
                                        FROM comunicado {comunicadoAlias} ");

            if (!string.IsNullOrWhiteSpace(filtro.CodigoTurma))
            {
                sql.Append($@" INNER JOIN comunicado_turma {comunicadoTumaAlias} ON {comunicadoAlias}.id = {comunicadoTumaAlias}.comunicado_id ");
                sql.Append($@" INNER JOIN turma {turmaAlias} ON {comunicadoTumaAlias}.turma_codigo = {turmaAlias}.turma_id ");
            }

            if (filtro.GruposIds != null && filtro.GruposIds.Any())
            {
                sql.Append($@" INNER JOIN comunidado_grupo {comunicadoGrupoAlias} ON {comunicadoAlias}.id = {comunicadoGrupoAlias}.comunicado_id ");
            }

            sql.Append(MontarCondicoesDaConsultaObterComunicadosParaFiltroDaDashboard(filtro, comunicadoAlias, comunicadoTumaAlias, turmaAlias, comunicadoGrupoAlias));

            sql.Append($@" ORDER BY {comunicadoAlias}.titulo LIMIT 10");

            var parametros = new
            {
                filtro.AnoEscolar,
                filtro.AnoLetivo,
                filtro.CodigoDre,
                filtro.CodigoTurma,
                filtro.CodigoUe,
                filtro.DataEnvioFinal,
                filtro.DataEnvioInicial,
                filtro.GruposIds,
                filtro.Modalidade,
                filtro.Semestre,
                filtro.Titulo
            };

            return(database.QueryAsync <ComunicadoParaFiltroDaDashboardDto>(sql.ToString(), parametros));
        }