public async Task <IEnumerable <FilterOcorrenciasVm> > FilterOcorrenciasAsync(FilterOcorrenciasQuery query)
        {
            query.PrepareStringsForLikeOperation();
            var sql = new StringBuilder(
                "SELECT DISTINCT o.id, identificador_ocorrencia as IdentificadorOcorrencia, tipo as Tipo, " +
                "delegacia_policia_apuracao as DelegaciaPoliciaApuracao, natureza as Natureza, data_hora_fato as DataHoraFato, " +
                "data_hora_comunicacao as DataHoraComunicacao, endereco_fato as EnderecoFato, praticado_por_menor as PraticadoPorMenor, " +
                "local_periciado as LocalPericiado, tipo_local as TipoLocal, objeto_meio_empregado as ObjetoMeioEmpregado, " +
                "o.created as Created, o.created_by as CreatedBy, " +
                "(SELECT COUNT(*) FROM pessoas_envolvidas p WHERE id_ocorrencia = o.id) 'PessoasEnvolvidas', " +
                "(SELECT COUNT(*) FROM unidades_moveis u WHERE id_ocorrencia = o.id) 'UnidadesMoveis' FROM ocorrencias o " +
                "LEFT JOIN pessoas_envolvidas p ON o.id = p.id_ocorrencia " +
                "LEFT JOIN unidades_moveis u on o.id = u.id_ocorrencia " +
                "WHERE 42 = 42");

            if (!string.IsNullOrWhiteSpace(query.IdentificadorOcorrencia))
            {
                sql.Append(" AND LOWER(identificador_ocorrencia) LIKE @IdentificadorOcorrencia");
            }

            if (query.Natureza.HasValue)
            {
                sql.Append(" AND LOWER(natureza) = @Natureza");
            }

            if (!string.IsNullOrWhiteSpace(query.DelegaciaPoliciaApuracao))
            {
                sql.Append(" AND LOWER(delegacia_policia_apuracao) LIKE @DelegaciaPoliciaApuracao");
            }

            if (query.PraticadoPorMenor.HasValue)
            {
                sql.Append(" AND praticado_por_menor = @PraticadoPorMenor");
            }

            if (query.LocalPericiado.HasValue)
            {
                sql.Append(" AND local_periciado = @LocalPericiado");
            }

            if (!string.IsNullOrWhiteSpace(query.TipoLocal))
            {
                sql.Append(" AND LOWER(tipo_local) LIKE @TipoLocal");
            }

            if (!string.IsNullOrWhiteSpace(query.ObjetoMeioEmpregado))
            {
                sql.Append(" AND LOWER(objeto_meio_empregado) LIKE @ObjetoMeioEmpregado");
            }

            if (query.CriadoDe.HasValue)
            {
                sql.Append(" AND o.created > @CriadoDe");
            }

            if (query.CriadoAte.HasValue)
            {
                sql.Append(" AND o.created < @CriadoAte");
            }

            if (!string.IsNullOrWhiteSpace(query.PessoaEnvolvidaNome))
            {
                sql.Append(" AND LOWER(nome) LIKE @PessoaEnvolvidaNome;");
            }

            if (!string.IsNullOrWhiteSpace(query.PessoaEnvolvidaEnvolvimento))
            {
                sql.Append(" AND LOWER(envolvimento) LIKE @PessoaEnvolvidaEnvolvimento");
            }

            if (!string.IsNullOrWhiteSpace(query.PessoaEnvolvidaCpf))
            {
                sql.Append(" AND LOWER(cpf) LIKE @PessoaEnvolvidaCpf");
            }

            if (!string.IsNullOrWhiteSpace(query.PessoaEnvolvidaProfissao))
            {
                sql.Append(" AND LOWER(profissao) LIKE @PessoaEnvolvidaProfissao");
            }

            if (!string.IsNullOrWhiteSpace(query.PessoaEnvolvidaGravidadeLesoes))
            {
                sql.Append(" AND LOWER(gravidade_lesoes) LIKE @PessoaEnvolvidaGravidadeLesoes");
            }

            if (!string.IsNullOrWhiteSpace(query.PessoaEnvolvidaRacaCor))
            {
                sql.Append(" AND LOWER(raca_cor) LIKE @PessoaEnvolvidaRacaCor");
            }

            if (!string.IsNullOrWhiteSpace(query.UnidadeMovelMatriculaResponsavel))
            {
                sql.Append(" AND LOWER(matricula_responsavel) LIKE @UnidadeMovelMatriculaResponsavel");
            }

            if (!string.IsNullOrWhiteSpace(query.UnidadeMovelUnidadeResponsavel))
            {
                sql.Append(" AND LOWER(unidade_responsavel) LIKE @UnidadeMovelUnidadeResponsavel");
            }

            if (!string.IsNullOrWhiteSpace(query.UnidadeMovelPrefixoVtr))
            {
                sql.Append(" AND LOWER(prefixo_vtr) LIKE @UnidadeMovelPrefixoVtr");
            }

            if (!string.IsNullOrWhiteSpace(query.UnidadeMovelResponsavel))
            {
                sql.Append(" AND LOWER(responsavel) LIKE @UnidadeMovelResponsavel");
            }

            if (query.PessoaEnvolvidaSexo.HasValue)
            {
                sql.Append($" AND LOWER(sexo) = LOWER(@PessoaEnvolvidaSexo)");
            }

            using var connection = await _connectionFactory.CreateConnectionAsync();

            return(await connection.QueryAsync <FilterOcorrenciasVm>(sql.ToString(), query));
        }
Beispiel #2
0
 public async Task <ActionResult> FilterOcorrencias(FilterOcorrenciasQuery query) => Ok(await Mediator.Send(query));