Ejemplo n.º 1
0
        public PaginationResult <Venda> GetPagined(VendaPaginationQuery filter)
        {
            var result = this.VendaDAO.GetPagined(filter);

            foreach (var venda in result.Result)
            {
                venda.Produtos = VendaProdutoDAO.GetInVenda(venda.GetId());
            }

            return(result);
        }
        private string BuildAdvancedFilter(VendaPaginationQuery filter)
        {
            var sql = "";

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

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

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

            if (filter.ClienteId != null)
            {
                sql += " AND vendas.ClienteId = @clienteId";
            }

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

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

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

            return(sql);
        }
        public IActionResult List(VendaPaginationQuery filter)
        {
            var result = this.VendaService.GetPagined(filter);

            return(Ok(result));
        }
        private string BuildGenericsFilter(VendaPaginationQuery 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(SituacaoVendaType.ATIVAS))
                {
                    sql = AddCondition("vendas.datacancelamento is NULL");
                }

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

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

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

                sql = $" AND ({sql}) ";
            }
            else
            {
                sql = $" AND (vendas.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(vendas.dataemissao, 'DD/MM/YYYY') = '{data.ToString("dd/MM/yyyy")}' OR to_char(vendas.datachegada, 'DD/MM/YYYY') = '{data.ToString("dd/MM/yyyy")}')");
                }

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

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

            return(sql);
        }