LevelOS-Core/DAL/DALFornecedores.cs

555 lines
15 KiB
C#

using System;
using System.Collections.Generic;
using System.Data;
using Microsoft.Data.SqlClient;
using MLL;
namespace DALL
{
public class DALFornecedores
{
private readonly string connectionString;
public DALFornecedores(string conexao)
{
connectionString = conexao;
}
public bool Inserir(ModeloFornecedores modelo)
{
using SqlConnection conn = new(connectionString);
string sql = @"
INSERT INTO Fornecedores
(
EmpresaId,
Nome,
TipoPessoa,
Documento,
Telefone,
Celular,
Whatsapp,
Email,
Cep,
Endereco,
Numero,
Complemento,
Bairro,
Cidade,
UF,
NomeFantasia,
InscricaoEstadual,
Site,
Observacoes,
Ativo
)
VALUES
(
@EmpresaId,
@Nome,
@TipoPessoa,
@Documento,
@Telefone,
@Celular,
@Whatsapp,
@Email,
@Cep,
@Endereco,
@Numero,
@Complemento,
@Bairro,
@Cidade,
@UF,
@NomeFantasia,
@InscricaoEstadual,
@Site,
@Observacoes,
@Ativo
)";
using SqlCommand cmd = new(sql, conn);
PreencherParametros(cmd, modelo);
conn.Open();
return cmd.ExecuteNonQuery() > 0;
}
public bool Alterar(ModeloFornecedores modelo)
{
using SqlConnection conn = new(connectionString);
string sql = @"
UPDATE Fornecedores SET
EmpresaId=@EmpresaId,
Nome=@Nome,
TipoPessoa=@TipoPessoa,
Documento=@Documento,
Telefone=@Telefone,
Celular=@Celular,
Whatsapp=@Whatsapp,
Email=@Email,
Cep=@Cep,
Endereco=@Endereco,
Numero=@Numero,
Complemento=@Complemento,
Bairro=@Bairro,
Cidade=@Cidade,
UF=@UF,
NomeFantasia=@NomeFantasia,
InscricaoEstadual=@InscricaoEstadual,
Site=@Site,
Observacoes=@Observacoes,
Ativo=@Ativo
WHERE Id=@Id";
using SqlCommand cmd = new(sql, conn);
PreencherParametros(cmd, modelo);
cmd.Parameters.AddWithValue("@Id", modelo.Id);
conn.Open();
return cmd.ExecuteNonQuery() > 0;
}
public bool Excluir(int id)
{
using SqlConnection conn = new(connectionString);
string sql = "DELETE FROM Fornecedores WHERE Id=@Id";
using SqlCommand cmd = new(sql, conn);
cmd.Parameters.AddWithValue("@Id", id);
conn.Open();
return cmd.ExecuteNonQuery() > 0;
}
public ModeloFornecedores? Carregar(int id)
{
using SqlConnection conn = new(connectionString);
string sql = "SELECT * FROM Fornecedores WHERE Id=@Id";
using SqlCommand cmd = new(sql, conn);
cmd.Parameters.AddWithValue("@Id", id);
conn.Open();
using SqlDataReader dr = cmd.ExecuteReader();
if (dr.Read())
return PreencherModelo(dr);
return null;
}
public ModeloFornecedores? CarregarPorDocumento(int empresaId, string documento)
{
using SqlConnection conn = new(connectionString);
string sql = @"
SELECT *
FROM Fornecedores
WHERE EmpresaId=@EmpresaId
AND Documento=@Documento";
using SqlCommand cmd = new(sql, conn);
cmd.Parameters.AddWithValue("@EmpresaId", empresaId);
cmd.Parameters.AddWithValue("@Documento", documento);
conn.Open();
using SqlDataReader dr = cmd.ExecuteReader();
if (dr.Read())
return PreencherModelo(dr);
return null;
}
public List<ModeloFornecedores> Listar(int? empresaId = null,string? nome = null,string? documento = null,string? telefone = null,string? celular = null,string? cidade = null,string? uf = null,string? email = null,bool? ativo = null)
{
List<ModeloFornecedores> lista = [];
using SqlConnection conn = new(connectionString);
string sql = @"SELECT * FROM Fornecedores WHERE 1=1";
using SqlCommand cmd = new();
if (empresaId != null)
{
sql += " AND EmpresaId=@EmpresaId";
cmd.Parameters.AddWithValue("@EmpresaId", empresaId);
}
if (!string.IsNullOrWhiteSpace(nome))
{
sql += " AND Nome LIKE @Nome";
cmd.Parameters.AddWithValue("@Nome", "%" + nome + "%");
}
if (!string.IsNullOrWhiteSpace(documento))
{
sql += " AND Documento LIKE @Documento";
cmd.Parameters.AddWithValue("@Documento", "%" + documento + "%");
}
if (!string.IsNullOrWhiteSpace(telefone))
{
sql += " AND Telefone LIKE @Telefone";
cmd.Parameters.AddWithValue("@Telefone", "%" + telefone + "%");
}
if (!string.IsNullOrWhiteSpace(celular))
{
sql += " AND Celular LIKE @Celular";
cmd.Parameters.AddWithValue("@Celular", "%" + celular + "%");
}
if (!string.IsNullOrWhiteSpace(cidade))
{
sql += " AND Cidade LIKE @Cidade";
cmd.Parameters.AddWithValue("@Cidade", "%" + cidade + "%");
}
if (!string.IsNullOrWhiteSpace(uf))
{
sql += " AND UF=@UF";
cmd.Parameters.AddWithValue("@UF", uf);
}
if (!string.IsNullOrWhiteSpace(email))
{
sql += " AND Email LIKE @Email";
cmd.Parameters.AddWithValue("@Email", "%" + email + "%");
}
if (ativo != null)
{
sql += " AND Ativo=@Ativo";
cmd.Parameters.AddWithValue("@Ativo", ativo);
}
sql += " ORDER BY Nome";
cmd.Connection = conn;
cmd.CommandText = sql;
conn.Open();
using SqlDataReader dr = cmd.ExecuteReader();
while (dr.Read())
{
lista.Add(
PreencherModelo(dr));
}
return lista;
}
#region EXISTE EMAIL
public bool ExisteEmail(string email)
{
using SqlConnection conn = new(connectionString);
string sql = @"
SELECT COUNT(*)
FROM Fornecedores
WHERE Email=@Email";
using SqlCommand cmd = new(sql, conn);
cmd.Parameters.AddWithValue("@Email", email);
conn.Open();
return Convert.ToInt32(cmd.ExecuteScalar()) > 0;
}
#endregion
#region CARREGAR POR NOME
public ModeloFornecedores? CarregarPorNome(string nome)
{
using SqlConnection conn = new(connectionString);
string sql = @"
SELECT TOP 1 *
FROM Fornecedores
WHERE Nome=@Nome";
using SqlCommand cmd = new(sql, conn);
cmd.Parameters.AddWithValue("@Nome", nome);
conn.Open();
using SqlDataReader dr = cmd.ExecuteReader();
if (dr.Read())
return PreencherModelo(dr);
return null;
}
#endregion
#region LISTAR ATIVOS
public List<ModeloFornecedores> ListarAtivos()
{
return Listar(ativo: true);
}
#endregion
#region LISTAR INATIVOS
public List<ModeloFornecedores> ListarInativos()
{
return Listar(ativo: false);
}
#endregion
#region LISTAR POR CIDADE
public List<ModeloFornecedores> ListarPorCidade(string cidade)
{
return Listar(cidade: cidade);
}
#endregion
#region LISTAR POR UF
public List<ModeloFornecedores> ListarPorUF(string uf)
{
return Listar(uf: uf);
}
#endregion
#region QUANTIDADE TOTAL
public int QuantidadeTotal()
{
using SqlConnection conn = new(connectionString);
string sql = "SELECT COUNT(*) FROM Fornecedores";
using SqlCommand cmd = new(sql, conn);
conn.Open();
return Convert.ToInt32(cmd.ExecuteScalar());
}
#endregion
#region QUANTIDADE ATIVOS
public int QuantidadeAtivos()
{
using SqlConnection conn = new(connectionString);
string sql = @"
SELECT COUNT(*)
FROM Fornecedores
WHERE Ativo=1";
using SqlCommand cmd = new(sql, conn);
conn.Open();
return Convert.ToInt32(cmd.ExecuteScalar());
}
#endregion
#region QUANTIDADE INATIVOS
public int QuantidadeInativos()
{
using SqlConnection conn = new(connectionString);
string sql = @"
SELECT COUNT(*)
FROM Fornecedores
WHERE Ativo=0";
using SqlCommand cmd = new(sql, conn);
conn.Open();
return Convert.ToInt32(cmd.ExecuteScalar());
}
#endregion
#region PRIMEIRO FORNECEDOR
public ModeloFornecedores? PrimeiroFornecedor()
{
using SqlConnection conn = new(connectionString);
string sql = @"
SELECT TOP 1 *
FROM Fornecedores
ORDER BY Id";
using SqlCommand cmd = new(sql, conn);
conn.Open();
using SqlDataReader dr = cmd.ExecuteReader();
if (dr.Read())
return PreencherModelo(dr);
return null;
}
#endregion
#region ÚLTIMO FORNECEDOR
public ModeloFornecedores? UltimoFornecedor()
{
using SqlConnection conn = new(connectionString);
string sql = @"
SELECT TOP 1 *
FROM Fornecedores
ORDER BY Id DESC";
using SqlCommand cmd = new(sql, conn);
conn.Open();
using SqlDataReader dr = cmd.ExecuteReader();
if (dr.Read())
return PreencherModelo(dr);
return null;
}
#endregion
#region DASHBOARD
public DataTable Dashboard()
{
using SqlConnection conn = new(connectionString);
string sql = @"
SELECT
COUNT(*) TOTAL_FORNECEDORES,
SUM(
CASE
WHEN Ativo = 1
THEN 1
ELSE 0
END
) FORNECEDORES_ATIVOS,
SUM(
CASE
WHEN Ativo = 0
THEN 1
ELSE 0
END
) FORNECEDORES_INATIVOS,
COUNT(DISTINCT Cidade) TOTAL_CIDADES,
COUNT(DISTINCT UF) TOTAL_ESTADOS
FROM Fornecedores";
DataTable dt = new();
using SqlDataAdapter da = new(sql, conn);
da.Fill(dt);
return dt;
}
#endregion
#region PREENCHER PARÂMETROS
private void PreencherParametros(SqlCommand cmd, ModeloFornecedores modelo)
{
cmd.Parameters.AddWithValue("@EmpresaId", modelo.EmpresaId);
cmd.Parameters.AddWithValue("@Nome", modelo.Nome);
cmd.Parameters.AddWithValue("@TipoPessoa", modelo.TipoPessoa);
cmd.Parameters.AddWithValue("@Documento", modelo.Documento);
cmd.Parameters.AddWithValue("@Telefone", modelo.Telefone);
cmd.Parameters.AddWithValue("@Celular", modelo.Celular);
cmd.Parameters.AddWithValue("@Whatsapp", modelo.Whatsapp);
cmd.Parameters.AddWithValue("@Email", modelo.Email);
cmd.Parameters.AddWithValue("@Cep", modelo.Cep);
cmd.Parameters.AddWithValue("@Endereco", modelo.Endereco);
cmd.Parameters.AddWithValue("@Numero", (object?)modelo.Numero ?? DBNull.Value);
cmd.Parameters.AddWithValue("@Complemento", modelo.Complemento);
cmd.Parameters.AddWithValue("@Bairro", modelo.Bairro);
cmd.Parameters.AddWithValue("@Cidade", modelo.Cidade);
cmd.Parameters.AddWithValue("@UF", modelo.UF);
cmd.Parameters.AddWithValue("@NomeFantasia", modelo.NomeFantasia);
cmd.Parameters.AddWithValue("@InscricaoEstadual", modelo.InscricaoEstadual);
cmd.Parameters.AddWithValue("@Site", modelo.Site);
cmd.Parameters.AddWithValue("@Observacoes", modelo.Observacoes);
cmd.Parameters.AddWithValue("@Ativo", modelo.Ativo);
}
#endregion
public bool ExisteDocumento(int empresaId, string documento)
{
using SqlConnection conn = new(connectionString);
string sql = @"
SELECT COUNT(*)
FROM Fornecedores
WHERE EmpresaId=@EmpresaId
AND Documento=@Documento";
using SqlCommand cmd = new(sql, conn);
cmd.Parameters.AddWithValue("@EmpresaId", empresaId);
cmd.Parameters.AddWithValue("@Documento", documento);
conn.Open();
return Convert.ToInt32(cmd.ExecuteScalar()) > 0;
}
private ModeloFornecedores PreencherModelo(SqlDataReader dr)
{
return new ModeloFornecedores
{
Id = Convert.ToInt32(dr["Id"]),
EmpresaId = Convert.ToInt32(dr["EmpresaId"]),
Nome = Convert.ToString(dr["Nome"]) ?? "",
TipoPessoa = Convert.ToString(dr["TipoPessoa"]) ?? "",
Documento = Convert.ToString(dr["Documento"]) ?? "",
Telefone = Convert.ToString(dr["Telefone"]) ?? "",
Celular = Convert.ToString(dr["Celular"]) ?? "",
Whatsapp = Convert.ToString(dr["Whatsapp"]) ?? "",
Email = Convert.ToString(dr["Email"]) ?? "",
Cep = Convert.ToString(dr["Cep"]) ?? "",
Endereco = Convert.ToString(dr["Endereco"]) ?? "",
Numero = dr["Numero"] == DBNull.Value ? null : Convert.ToInt32(dr["Numero"]),
Complemento = Convert.ToString(dr["Complemento"]) ?? "",
Bairro = Convert.ToString(dr["Bairro"]) ?? "",
Cidade = Convert.ToString(dr["Cidade"]) ?? "",
UF = Convert.ToString(dr["UF"]) ?? "",
NomeFantasia = Convert.ToString(dr["NomeFantasia"]) ?? "",
InscricaoEstadual = Convert.ToString(dr["InscricaoEstadual"]) ?? "",
Site = Convert.ToString(dr["Site"]) ?? "",
Observacoes = Convert.ToString(dr["Observacoes"]) ?? "",
Ativo = Convert.ToBoolean(dr["Ativo"]),
CriadoEm = dr["CriadoEm"] == DBNull.Value ? null : Convert.ToDateTime(dr["CriadoEm"]),
AtualizadoEm = dr["AtualizadoEm"] == DBNull.Value ? null : Convert.ToDateTime(dr["AtualizadoEm"])
};
}