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