private string BuildAdvancedFilter(CompraPaginationQuery filter)
        {
            var sql = "";

            if (!string.IsNullOrEmpty(filter.Modelo))
            {
                sql += " AND compras.modelo = @Modelo";
            }

            if (!string.IsNullOrEmpty(filter.Serie))
            {
                sql += " AND compras.Serie = @Serie";
            }

            if (!string.IsNullOrEmpty(filter.Numero))
            {
                sql += " AND compras.Numero = @Numero";
            }

            if (filter.FornecedorId != null)
            {
                sql += " AND compras.FornecedorId = @FornecedorId";
            }

            if (filter.DataCompraInicio != null)
            {
                sql += $" AND to_char(compras.dataemissao, 'YYYY/MM/DD') >= '{filter.DataCompraInicio?.ToString("yyyy/MM/dd")}' ";
            }

            if (filter.DataCompraFim != null)
            {
                sql += $" AND to_char(compras.dataemissao, 'YYYY/MM/DD') <= '{filter.DataCompraFim?.ToString("yyyy/MM/dd")}' ";
            }

            if (filter.ProdutosId?.Count > 0)
            {
                sql += $" AND EXISTS(SELECT 1 FROM compraprodutos " +
                       $" WHERE compraprodutos.numero = compras.numero AND compraprodutos.modelo = compras.modelo " +
                       $" AND compraprodutos.serie = compras.serie AND compraprodutos.fornecedorid = compras.fornecedorid " +
                       $" AND compraprodutos.produtoid IN ({filter.ProdutosId.Aggregate("", (e, a) => $"{e} {a},")}{filter.ProdutosId.FirstOrDefault()}) LIMIT 1) ";
            }

            return(sql);
        }
Example #2
0
 public IActionResult GetListPagined(CompraPaginationQuery filter)
 {
     return(Ok(this.CompraService.GetPagined(filter)));
 }
        private string BuildGenericsFilter(CompraPaginationQuery filter)
        {
            var sql = "";

            string AddCondition(string condition)
            {
                if (sql.Length == 0)
                {
                    return(condition);
                }
                return($" {sql} OR {condition} ");
            }

            if (filter.Situacao?.Count > 0)
            {
                if (filter.Situacao.Contains(SituacaoCompraType.ATIVAS))
                {
                    sql = AddCondition("compras.datacancelamento is NULL");
                }

                if (filter.Situacao.Contains(SituacaoCompraType.CANCELADA))
                {
                    sql = AddCondition("compras.datacancelamento is NOT NULL");
                }

                if (filter.Situacao.Contains(SituacaoCompraType.CANCELADA_RECENTEMENTE))
                {
                    sql = AddCondition($"to_char(compras.datacancelamento, 'DD/MM/YYYY') > '{DateTime.Now.AddDays(-8).ToString("dd/MM/yyyy")}'");
                }

                if (filter.Situacao.Contains(SituacaoCompraType.LANCADA_RECENTEMENTE))
                {
                    sql = AddCondition($"to_char(compras.dataemissao" +
                                       $", 'DD/MM/YYYY') > '{DateTime.Now.AddDays(-8).ToString("dd/MM/yyyy")}'");
                }

                sql = $" AND ({sql}) ";
            }
            else
            {
                sql = $" AND (compras.datacancelamento is NULL) ";
            }


            if (!string.IsNullOrEmpty(filter.Filter))
            {
                if (DateTime.TryParse(filter.Filter, new CultureInfo("pt-BR"), DateTimeStyles.None, out var data))
                {
                    return(sql + $"AND (to_char(compras.dataemissao, 'DD/MM/YYYY') = '{data.ToString("dd/MM/yyyy")}' OR to_char(compras.datachegada, 'DD/MM/YYYY') = '{data.ToString("dd/MM/yyyy")}')");
                }

                var sqlFornecedor = "";
                if (int.TryParse(filter.Filter, out var fornecedorId))
                {
                    sqlFornecedor = $" OR compras.fornecedorid = {fornecedorId}";
                }

                return(sql + $"AND (compras.numero = @Filter OR compras.modelo = @Filter OR compras.serie = @Filter {sqlFornecedor}) ");
            }

            return(sql);
        }