LevelOS-Core/DAL/DALItens.cs

1746 lines
46 KiB
C#

using DALL;
using Microsoft.Data.SqlClient;
using MLL;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace DAL
{
public class DALItens
{
private readonly string connectionString;
public DALItens(string conexao)
{
connectionString = conexao;
}//Contrutor da classe DALItens
#region CRUD - Create, Read, Update, Delete
public bool Inserir(ModeloItens modelo)
{
using SqlConnection conn = new(connectionString);
string sql = @"
INSERT INTO Itens
(
NUMERO,
NOME,
GRUPO,
SUBGRUPO,
TIPO,
UNIDADE,
NUMERO_FAB,
ESTOQUE_MIN,
ESTOQUE_IDEAL,
ESTOQUE_DISP,
CUSTO,
LUCRO,
VENDA,
FORNECEDOR,
LOCAL,
GAVETA,
FABRICANTE,
NOMECURTO,
P_FOTO,
NC_MERCOSUL,
C_CST,
C_ICMS,
C_IPI,
ULTIMA_VENDA,
ULTIMA_COMPRA,
PRECO_1,
PRECO_2,
GTIN,
VALIDADE
)
VALUES
(
@NUMERO,
@NOME,
@GRUPO,
@SUBGRUPO,
@TIPO,
@UNIDADE,
@NUMERO_FAB,
@ESTOQUE_MIN,
@ESTOQUE_IDEAL,
@ESTOQUE_DISP,
@CUSTO,
@LUCRO,
@VENDA,
@FORNECEDOR,
@LOCAL,
@GAVETA,
@FABRICANTE,
@NOMECURTO,
@P_FOTO,
@NC_MERCOSUL,
@C_CST,
@C_ICMS,
@C_IPI,
@ULTIMA_VENDA,
@ULTIMA_COMPRA,
@PRECO_1,
@PRECO_2,
@GTIN,
@VALIDADE
)";
using SqlCommand cmd = new(sql, conn);
PreencherParametros(cmd, modelo);
conn.Open();
return cmd.ExecuteNonQuery() > 0;
}//Inserir
public bool Alterar(ModeloItens modelo)
{
using SqlConnection conn = new(connectionString);
string sql = @"
UPDATE Itens SET
NUMERO=@NUMERO,
NOME=@NOME,
GRUPO=@GRUPO,
SUBGRUPO=@SUBGRUPO,
TIPO=@TIPO,
UNIDADE=@UNIDADE,
NUMERO_FAB=@NUMERO_FAB,
ESTOQUE_MIN=@ESTOQUE_MIN,
ESTOQUE_IDEAL=@ESTOQUE_IDEAL,
ESTOQUE_DISP=@ESTOQUE_DISP,
CUSTO=@CUSTO,
LUCRO=@LUCRO,
VENDA=@VENDA,
FORNECEDOR=@FORNECEDOR,
LOCAL=@LOCAL,
GAVETA=@GAVETA,
FABRICANTE=@FABRICANTE,
NOMECURTO=@NOMECURTO,
P_FOTO=@P_FOTO,
NC_MERCOSUL=@NC_MERCOSUL,
C_CST=@C_CST,
C_ICMS=@C_ICMS,
C_IPI=@C_IPI,
ULTIMA_VENDA=@ULTIMA_VENDA,
ULTIMA_COMPRA=@ULTIMA_COMPRA,
PRECO_1=@PRECO_1,
PRECO_2=@PRECO_2,
GTIN=@GTIN,
VALIDADE=@VALIDADE
WHERE ID_ITENS=@ID_ITENS";
using SqlCommand cmd = new(sql, conn);
PreencherParametros(cmd, modelo);
cmd.Parameters.AddWithValue("@ID_ITENS", modelo.ID_ITENS);
conn.Open();
return cmd.ExecuteNonQuery() > 0;
}//Alterar
public bool Excluir(int id)
{
using SqlConnection conn = new(connectionString);
string sql =
@"DELETE FROM Itens
WHERE ID_ITENS=@ID";
using SqlCommand cmd = new(sql, conn);
cmd.Parameters.AddWithValue("@ID", id);
conn.Open();
return cmd.ExecuteNonQuery() > 0;
}//Excluir
public ModeloItens? Carregar(int id)
{
using SqlConnection conn = new(connectionString);
string sql =
@"SELECT *
FROM Itens
WHERE ID_ITENS=@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;
}//Carregar
#endregion
#region CarregarLista - Load List
public ModeloItens? CarregarPorCodigo(string codigo)
{
using SqlConnection conn = new(connectionString);
string sql = @"
SELECT *
FROM Itens
WHERE CODIGO=@CODIGO";
using SqlCommand cmd = new(sql, conn);
cmd.Parameters.AddWithValue("@CODIGO", codigo);
conn.Open();
using SqlDataReader dr = cmd.ExecuteReader();
if (dr.Read())
return PreencherModelo(dr);
return null;
}//CarregarPorCodigo
public ModeloItens? CarregarPorNumero(string numero)
{
using SqlConnection conn = new(connectionString);
string sql = @"
SELECT *
FROM Itens
WHERE NUMERO=@NUMERO";
using SqlCommand cmd = new(sql, conn);
cmd.Parameters.AddWithValue("@NUMERO", numero);
conn.Open();
using SqlDataReader dr = cmd.ExecuteReader();
if (dr.Read())
return PreencherModelo(dr);
return null;
}//CarregarPorNumero
public bool ExisteCodigo(string codigo)
{
using SqlConnection conn = new(connectionString);
string sql = @"
SELECT COUNT(*)
FROM Itens
WHERE CODIGO=@CODIGO";
using SqlCommand cmd = new(sql, conn);
cmd.Parameters.AddWithValue("@CODIGO", codigo);
conn.Open();
return Convert.ToInt32(cmd.ExecuteScalar()) > 0;
}//ExisteCodigo
public bool ExisteNumero(string numero)
{
using SqlConnection conn = new(connectionString);
string sql = @"
SELECT COUNT(*)
FROM Itens
WHERE NUMERO=@NUMERO";
using SqlCommand cmd = new(sql, conn);
cmd.Parameters.AddWithValue("@NUMERO", numero);
conn.Open();
return Convert.ToInt32(cmd.ExecuteScalar()) > 0;
}//ExisteNumero
#endregion
#region Preencher Parametros - Fill Parameters
private ModeloItens PreencherModelo(SqlDataReader dr)
{
return new ModeloItens
{
ID_ITENS = Convert.ToInt32(dr["ID_ITENS"]),
CODIGO = Convert.ToString(dr["CODIGO"]) ?? "",
NUMERO = Convert.ToString(dr["NUMERO"]) ?? "",
NOME = Convert.ToString(dr["NOME"]) ?? "",
GRUPO = Convert.ToString(dr["GRUPO"]) ?? "",
SUBGRUPO = Convert.ToString(dr["SUBGRUPO"]) ?? "",
TIPO = Convert.ToString(dr["TIPO"]) ?? "",
UNIDADE = Convert.ToString(dr["UNIDADE"]) ?? "",
NUMERO_FAB = Convert.ToString(dr["NUMERO_FAB"]) ?? "",
ESTOQUE_MIN = Convert.ToString(dr["ESTOQUE_MIN"]) ?? "",
ESTOQUE_IDEAL = Convert.ToString(dr["ESTOQUE_IDEAL"]) ?? "",
ESTOQUE_DISP = Convert.ToString(dr["ESTOQUE_DISP"]) ?? "",
CUSTO = Convert.ToString(dr["CUSTO"]) ?? "",
LUCRO = Convert.ToString(dr["LUCRO"]) ?? "",
VENDA = Convert.ToString(dr["VENDA"]) ?? "",
FORNECEDOR = Convert.ToString(dr["FORNECEDOR"]) ?? "",
LOCAL = Convert.ToString(dr["LOCAL"]) ?? "",
GAVETA = Convert.ToString(dr["GAVETA"]) ?? "",
FABRICANTE = Convert.ToString(dr["FABRICANTE"]) ?? "",
NOMECURTO = Convert.ToString(dr["NOMECURTO"]) ?? "",
P_FOTO = Convert.ToString(dr["P_FOTO"]) ?? "",
NC_MERCOSUL = Convert.ToString(dr["NC_MERCOSUL"]) ?? "",
C_CST = Convert.ToString(dr["C_CST"]) ?? "",
C_ICMS = Convert.ToString(dr["C_ICMS"]) ?? "",
C_IPI = Convert.ToString(dr["C_IPI"]) ?? "",
ULTIMA_VENDA = Convert.ToString(dr["ULTIMA_VENDA"]) ?? "",
ULTIMA_COMPRA = Convert.ToString(dr["ULTIMA_COMPRA"]) ?? "",
PRECO_1 = Convert.ToString(dr["PRECO_1"]) ?? "",
PRECO_2 = Convert.ToString(dr["PRECO_2"]) ?? "",
GTIN = Convert.ToString(dr["GTIN"]) ?? "",
VALIDADE = Convert.ToString(dr["VALIDADE"]) ?? "",
OBSERVACOES = ""
};
}//PreencherModelo
private void PreencherParametros(SqlCommand cmd,ModeloItens modelo)
{
cmd.Parameters.AddWithValue("@NUMERO", modelo.NUMERO);
cmd.Parameters.AddWithValue("@NOME", modelo.NOME);
cmd.Parameters.AddWithValue("@GRUPO", modelo.GRUPO);
cmd.Parameters.AddWithValue("@SUBGRUPO", modelo.SUBGRUPO);
cmd.Parameters.AddWithValue("@TIPO", modelo.TIPO);
cmd.Parameters.AddWithValue("@UNIDADE", modelo.UNIDADE);
cmd.Parameters.AddWithValue("@NUMERO_FAB", modelo.NUMERO_FAB);
cmd.Parameters.AddWithValue("@ESTOQUE_MIN", modelo.ESTOQUE_MIN);
cmd.Parameters.AddWithValue("@ESTOQUE_IDEAL", modelo.ESTOQUE_IDEAL);
cmd.Parameters.AddWithValue("@ESTOQUE_DISP", modelo.ESTOQUE_DISP);
cmd.Parameters.AddWithValue("@CUSTO", modelo.CUSTO);
cmd.Parameters.AddWithValue("@LUCRO", modelo.LUCRO);
cmd.Parameters.AddWithValue("@VENDA", modelo.VENDA);
cmd.Parameters.AddWithValue("@FORNECEDOR", modelo.FORNECEDOR);
cmd.Parameters.AddWithValue("@LOCAL", modelo.LOCAL);
cmd.Parameters.AddWithValue("@GAVETA", modelo.GAVETA);
cmd.Parameters.AddWithValue("@FABRICANTE", modelo.FABRICANTE);
cmd.Parameters.AddWithValue("@NOMECURTO", modelo.NOMECURTO);
cmd.Parameters.AddWithValue("@P_FOTO", modelo.P_FOTO);
cmd.Parameters.AddWithValue("@NC_MERCOSUL", modelo.NC_MERCOSUL);
cmd.Parameters.AddWithValue("@C_CST", modelo.C_CST);
cmd.Parameters.AddWithValue("@C_ICMS", modelo.C_ICMS);
cmd.Parameters.AddWithValue("@C_IPI", modelo.C_IPI);
cmd.Parameters.AddWithValue("@ULTIMA_VENDA", modelo.ULTIMA_VENDA);
cmd.Parameters.AddWithValue("@ULTIMA_COMPRA", modelo.ULTIMA_COMPRA);
cmd.Parameters.AddWithValue("@PRECO_1", modelo.PRECO_1);
cmd.Parameters.AddWithValue("@PRECO_2", modelo.PRECO_2);
cmd.Parameters.AddWithValue("@GTIN", modelo.GTIN);
cmd.Parameters.AddWithValue("@VALIDADE", modelo.VALIDADE);
}//PreencherParametros
#endregion
#region Listagem - Listing
public List<ModeloItens> Listar(string? codigo = null,string? numero = null,string? nome = null,string? grupo = null,string? subGrupo = null,string? tipo = null,string? fornecedor = null,
string? fabricante = null,string? local = null,string? gaveta = null,string? gtin = null,string? ncm = null)
{
List<ModeloItens> lista = [];
using SqlConnection conn = new(connectionString);
string sql = @"
SELECT *
FROM Itens
WHERE 1=1";
using SqlCommand cmd = new();
if (!string.IsNullOrWhiteSpace(codigo))
{
sql += " AND CODIGO LIKE @CODIGO";
cmd.Parameters.AddWithValue("@CODIGO", "%" + codigo + "%");
}
if (!string.IsNullOrWhiteSpace(numero))
{
sql += " AND NUMERO LIKE @NUMERO";
cmd.Parameters.AddWithValue("@NUMERO", "%" + numero + "%");
}
if (!string.IsNullOrWhiteSpace(nome))
{
sql += " AND NOME LIKE @NOME";
cmd.Parameters.AddWithValue("@NOME", "%" + nome + "%");
}
if (!string.IsNullOrWhiteSpace(grupo))
{
sql += " AND GRUPO=@GRUPO";
cmd.Parameters.AddWithValue("@GRUPO", grupo);
}
if (!string.IsNullOrWhiteSpace(subGrupo))
{
sql += " AND SUBGRUPO=@SUBGRUPO";
cmd.Parameters.AddWithValue("@SUBGRUPO", subGrupo);
}
if (!string.IsNullOrWhiteSpace(tipo))
{
sql += " AND TIPO=@TIPO";
cmd.Parameters.AddWithValue("@TIPO", tipo);
}
if (!string.IsNullOrWhiteSpace(fornecedor))
{
sql += " AND FORNECEDOR=@FORNECEDOR";
cmd.Parameters.AddWithValue("@FORNECEDOR", fornecedor);
}
if (!string.IsNullOrWhiteSpace(fabricante))
{
sql += " AND FABRICANTE=@FABRICANTE";
cmd.Parameters.AddWithValue("@FABRICANTE", fabricante);
}
if (!string.IsNullOrWhiteSpace(local))
{
sql += " AND LOCAL=@LOCAL";
cmd.Parameters.AddWithValue("@LOCAL", local);
}
if (!string.IsNullOrWhiteSpace(gaveta))
{
sql += " AND GAVETA=@GAVETA";
cmd.Parameters.AddWithValue("@GAVETA", gaveta);
}
if (!string.IsNullOrWhiteSpace(gtin))
{
sql += " AND GTIN=@GTIN";
cmd.Parameters.AddWithValue("@GTIN", gtin);
}
if (!string.IsNullOrWhiteSpace(ncm))
{
sql += " AND NC_MERCOSUL=@NCM";
cmd.Parameters.AddWithValue("@NCM", ncm);
}
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;
}//Listar
public List<ModeloItens> ListarPorGrupo(string grupo)
{
return Listar(grupo: grupo);
}//ListarPorGrupo
public List<ModeloItens> ListarPorSubGrupo(string subGrupo)
{
return Listar(subGrupo: subGrupo);
}//ListarPorSubGrupo
public List<ModeloItens> ListarPorFornecedor(string fornecedor)
{
return Listar(fornecedor: fornecedor);
}//ListarPorFornecedor
public List<ModeloItens> ListarPorFabricante(string fabricante)
{
return Listar(fabricante: fabricante);
}//ListarPorFabricante
public List<ModeloItens> ListarPorLocal(string local)
{
return Listar(local: local);
}//ListarPorLocal
public List<ModeloItens> ListarPorGaveta(string gaveta)
{
return Listar(gaveta: gaveta);
}//ListarPorGaveta
public List<ModeloItens> ListarPorGTIN(string gtin)
{
return Listar(gtin: gtin);
}//ListarPorGTIN
public List<ModeloItens> ListarPorNCM(string ncm)
{
return Listar(ncm: ncm);
}//ListarPorNCM
#endregion
#region Controle de estoque - Stock Control
public List<ModeloItens> ProdutosSemEstoque()
{
List<ModeloItens> lista = [];
using SqlConnection conn = new(connectionString);
string sql = @"
SELECT *
FROM Itens
WHERE TRY_CONVERT(decimal(18,2),ESTOQUE_DISP)=0
ORDER BY NOME";
using SqlCommand cmd = new(sql, conn);
conn.Open();
using SqlDataReader dr = cmd.ExecuteReader();
while (dr.Read())
{
lista.Add(PreencherModelo(dr));
}
return lista;
}//ProdutosSemEstoque
public List<ModeloItens> ProdutosComEstoque()
{
List<ModeloItens> lista = [];
using SqlConnection conn = new(connectionString);
string sql = @"
SELECT *
FROM Itens
WHERE TRY_CONVERT(decimal(18,2),ESTOQUE_DISP)>0
ORDER BY NOME";
using SqlCommand cmd = new(sql, conn);
conn.Open();
using SqlDataReader dr = cmd.ExecuteReader();
while (dr.Read())
{
lista.Add(PreencherModelo(dr));
}
return lista;
}//ProdutosComEstoque
public List<ModeloItens> ProdutosAbaixoMinimo()
{
List<ModeloItens> lista = [];
using SqlConnection conn = new(connectionString);
string sql = @"
SELECT *
FROM Itens
WHERE
TRY_CONVERT(decimal(18,2),ESTOQUE_DISP)
<=
TRY_CONVERT(decimal(18,2),ESTOQUE_MIN)
ORDER BY NOME";
using SqlCommand cmd = new(sql, conn);
conn.Open();
using SqlDataReader dr = cmd.ExecuteReader();
while (dr.Read())
{
lista.Add(PreencherModelo(dr));
}
return lista;
}//ProdutosAbaixoMinimo
public List<ModeloItens> ProdutosAbaixoIdeal()
{
List<ModeloItens> lista = [];
using SqlConnection conn = new(connectionString);
string sql = @"
SELECT *
FROM Itens
WHERE
TRY_CONVERT(decimal(18,2),ESTOQUE_DISP)
<
TRY_CONVERT(decimal(18,2),ESTOQUE_IDEAL)
ORDER BY NOME";
using SqlCommand cmd = new(sql, conn);
conn.Open();
using SqlDataReader dr = cmd.ExecuteReader();
while (dr.Read())
{
lista.Add(PreencherModelo(dr));
}
return lista;
}//ProdutosAbaixoIdeal
public bool AtualizarEstoque(int idItem,decimal quantidade)
{
using SqlConnection conn = new(connectionString);
string sql = @"
UPDATE Itens
SET ESTOQUE_DISP=@ESTOQUE
WHERE ID_ITENS=@ID";
using SqlCommand cmd = new(sql, conn);
cmd.Parameters.AddWithValue("@ESTOQUE",
quantidade.ToString());
cmd.Parameters.AddWithValue("@ID",
idItem);
conn.Open();
return cmd.ExecuteNonQuery() > 0;
}//AtualizarEstoque
public bool SomarEstoque(int idItem,decimal quantidade)
{
ModeloItens? item = Carregar(idItem);
if (item == null)
return false;
decimal estoqueAtual =
Convert.ToDecimal(item.ESTOQUE_DISP);
estoqueAtual += quantidade;
return AtualizarEstoque(
idItem,
estoqueAtual);
}//SomarEstoque
public bool BaixarEstoque(int idItem, decimal quantidade)
{
ModeloItens? item = Carregar(idItem);
if (item == null)
return false;
decimal estoqueAtual =
Convert.ToDecimal(item.ESTOQUE_DISP);
estoqueAtual -= quantidade;
if (estoqueAtual < 0)
estoqueAtual = 0;
return AtualizarEstoque(
idItem,
estoqueAtual);
}//BaixarEstoque
public bool TransferirEstoque(int origem,int destino,decimal quantidade)
{
if (!BaixarEstoque(origem, quantidade))
return false;
if (!SomarEstoque(destino, quantidade))
return false;
return true;
}//TransferirEstoque
public decimal QuantidadeEmEstoque(int idItem)
{
ModeloItens? item = Carregar(idItem);
if (item == null)
return 0;
return Convert.ToDecimal(item.ESTOQUE_DISP);
}//QuantidadeEmEstoque
public decimal ValorTotalEstoque()
{
using SqlConnection conn = new(connectionString);
string sql = @"
SELECT
SUM(
TRY_CONVERT(decimal(18,2),ESTOQUE_DISP)
*
TRY_CONVERT(decimal(18,2),CUSTO)
)
FROM Itens";
using SqlCommand cmd = new(sql, conn);
conn.Open();
object valor = cmd.ExecuteScalar();
return valor == DBNull.Value
? 0
: Convert.ToDecimal(valor);
}//ValorTotalEstoque
#endregion
#region Margens e Lucros - Margins and Profits
public bool AtualizarCusto(int idItem,decimal custo)
{
using SqlConnection conn = new(connectionString);
string sql = @"
UPDATE Itens
SET CUSTO=@CUSTO
WHERE ID_ITENS=@ID";
using SqlCommand cmd = new(sql, conn);
cmd.Parameters.AddWithValue("@CUSTO", custo.ToString());
cmd.Parameters.AddWithValue("@ID", idItem);
conn.Open();
return cmd.ExecuteNonQuery() > 0;
}//AtualizarCusto
public bool AtualizarPrecoVenda(int idItem,decimal preco)
{
using SqlConnection conn = new(connectionString);
string sql = @"
UPDATE Itens
SET VENDA=@VENDA
WHERE ID_ITENS=@ID";
using SqlCommand cmd = new(sql, conn);
cmd.Parameters.AddWithValue("@VENDA", preco.ToString());
cmd.Parameters.AddWithValue("@ID", idItem);
conn.Open();
return cmd.ExecuteNonQuery() > 0;
}//AtualizarPrecoVenda
public bool AtualizarPreco1(int idItem, decimal preco)
{
using SqlConnection conn = new(connectionString);
string sql =
@"UPDATE Itens
SET PRECO_1=@PRECO
WHERE ID_ITENS=@ID";
using SqlCommand cmd = new(sql, conn);
cmd.Parameters.AddWithValue("@PRECO", preco.ToString());
cmd.Parameters.AddWithValue("@ID", idItem);
conn.Open();
return cmd.ExecuteNonQuery() > 0;
}//AtualizarPreco1
public bool AtualizarPreco2(int idItem,decimal preco)
{
using SqlConnection conn = new(connectionString);
string sql =
@"UPDATE Itens
SET PRECO_2=@PRECO
WHERE ID_ITENS=@ID";
using SqlCommand cmd = new(sql, conn);
cmd.Parameters.AddWithValue("@PRECO", preco.ToString());
cmd.Parameters.AddWithValue("@ID", idItem);
conn.Open();
return cmd.ExecuteNonQuery() > 0;
}//AtualizarPreco2
public bool AtualizarLucro(int idItem,decimal lucro)
{
using SqlConnection conn = new(connectionString);
string sql =
@"UPDATE Itens
SET LUCRO=@LUCRO
WHERE ID_ITENS=@ID";
using SqlCommand cmd = new(sql, conn);
cmd.Parameters.AddWithValue("@LUCRO", lucro.ToString());
cmd.Parameters.AddWithValue("@ID", idItem);
conn.Open();
return cmd.ExecuteNonQuery() > 0;
}//AtualizarLucro
public bool RecalcularPrecoVenda(int idItem)
{
ModeloItens? item = Carregar(idItem);
if (item == null)
return false;
decimal custo = Convert.ToDecimal(item.CUSTO);
decimal lucro = Convert.ToDecimal(item.LUCRO);
decimal venda =
custo +
(custo * lucro / 100);
return AtualizarPrecoVenda(
idItem,
venda);
}//RecalcularPrecoVenda
public bool RecalcularMargemLucro(int idItem)
{
ModeloItens? item = Carregar(idItem);
if (item == null)
return false;
decimal custo = Convert.ToDecimal(item.CUSTO);
decimal venda = Convert.ToDecimal(item.VENDA);
if (custo == 0)
return false;
decimal margem =
((venda - custo) / custo) * 100;
return AtualizarLucro(
idItem,
margem);
}//RecalcularMargemLucro
public List<ModeloItens> ProdutosSemLucro()
{
List<ModeloItens> lista = [];
using SqlConnection conn = new(connectionString);
string sql = @"
SELECT *
FROM Itens
WHERE TRY_CONVERT(decimal(18,2),LUCRO)<=0";
using SqlCommand cmd = new(sql, conn);
conn.Open();
using SqlDataReader dr = cmd.ExecuteReader();
while (dr.Read())
{
lista.Add(
PreencherModelo(dr));
}
return lista;
}//ProdutosSemLucro
public List<ModeloItens> ProdutosComPrecoZerado()
{
List<ModeloItens> lista = [];
using SqlConnection conn = new(connectionString);
string sql = @"
SELECT *
FROM Itens
WHERE TRY_CONVERT(decimal(18,2),VENDA)=0";
using SqlCommand cmd = new(sql, conn);
conn.Open();
using SqlDataReader dr = cmd.ExecuteReader();
while (dr.Read())
{
lista.Add(
PreencherModelo(dr));
}
return lista;
}//ProdutosComPrecoZerado
public List<ModeloItens> ProdutosComCustoMaiorQueVenda()
{
List<ModeloItens> lista = [];
using SqlConnection conn = new(connectionString);
string sql = @"
SELECT *
FROM Itens
WHERE
TRY_CONVERT(decimal(18,2),CUSTO)
>
TRY_CONVERT(decimal(18,2),VENDA)";
using SqlCommand cmd = new(sql, conn);
conn.Open();
using SqlDataReader dr = cmd.ExecuteReader();
while (dr.Read())
{
lista.Add(
PreencherModelo(dr));
}
return lista;
}//ProdutoComCustoMaiorQueVenda
public decimal ValorTotalVenda()
{
using SqlConnection conn = new(connectionString);
string sql = @"
SELECT
SUM(
TRY_CONVERT(decimal(18,2),VENDA)
*
TRY_CONVERT(decimal(18,2),ESTOQUE_DISP)
)
FROM Itens";
using SqlCommand cmd = new(sql, conn);
conn.Open();
object valor = cmd.ExecuteScalar();
return valor == DBNull.Value
? 0
: Convert.ToDecimal(valor);
}//ValorTotalVenda
public decimal ValorTotalLucro()
{
return ValorTotalVenda()
- ValorTotalEstoque();
}//ValorTotalLucro
public decimal MaiorPrecoVenda()
{
using SqlConnection conn = new(connectionString);
string sql = @"
SELECT
MAX(
TRY_CONVERT(decimal(18,2),VENDA)
)
FROM Itens";
using SqlCommand cmd = new(sql, conn);
conn.Open();
return Convert.ToDecimal(cmd.ExecuteScalar());
}//MaiorPrecoVenda
public decimal MenorPrecoVenda()
{
using SqlConnection conn = new(connectionString);
string sql = @"
SELECT
MIN(
TRY_CONVERT(decimal(18,2),VENDA)
)
FROM Itens";
using SqlCommand cmd = new(sql, conn);
conn.Open();
return Convert.ToDecimal(cmd.ExecuteScalar());
}//MenorPrecoVenda
#endregion
#region Fiscal - Tax
public List<ModeloItens> ListarPorCST(string cst)
{
List<ModeloItens> lista = [];
using SqlConnection conn = new(connectionString);
string sql = @"
SELECT *
FROM Itens
WHERE C_CST=@CST
ORDER BY NOME";
using SqlCommand cmd = new(sql, conn);
cmd.Parameters.AddWithValue("@CST", cst);
conn.Open();
using SqlDataReader dr = cmd.ExecuteReader();
while (dr.Read())
{
lista.Add(PreencherModelo(dr));
}
return lista;
}//ListarPorCST
public List<ModeloItens> ListarPorICMS(string icms)
{
List<ModeloItens> lista = [];
using SqlConnection conn = new(connectionString);
string sql = @"
SELECT *
FROM Itens
WHERE C_ICMS=@ICMS
ORDER BY NOME";
using SqlCommand cmd = new(sql, conn);
cmd.Parameters.AddWithValue("@ICMS", icms);
conn.Open();
using SqlDataReader dr = cmd.ExecuteReader();
while (dr.Read())
{
lista.Add(PreencherModelo(dr));
}
return lista;
}//ListarPorICMS
public List<ModeloItens> ListarPorIPI(string ipi)
{
List<ModeloItens> lista = [];
using SqlConnection conn = new(connectionString);
string sql = @"
SELECT *
FROM Itens
WHERE C_IPI=@IPI
ORDER BY NOME";
using SqlCommand cmd = new(sql, conn);
cmd.Parameters.AddWithValue("@IPI", ipi);
conn.Open();
using SqlDataReader dr = cmd.ExecuteReader();
while (dr.Read())
{
lista.Add(PreencherModelo(dr));
}
return lista;
}//ListarPorIPI
public List<ModeloItens> ListarPorCEST(string cest)
{
List<ModeloItens> lista = [];
using SqlConnection conn = new(connectionString);
string sql = @"
SELECT *
FROM Itens
WHERE CEST=@CEST
ORDER BY NOME";
using SqlCommand cmd = new(sql, conn);
cmd.Parameters.AddWithValue("@CEST", cest);
conn.Open();
using SqlDataReader dr = cmd.ExecuteReader();
while (dr.Read())
{
lista.Add(PreencherModelo(dr));
}
return lista;
}//ListarPorCEST
public ModeloIBPT? CarregarIBPT(int idItem)
{
ModeloItens? item = Carregar(idItem);
if (item == null)
return null;
DALIBPT dalIBPT = new(connectionString);
return dalIBPT.CarregarPorNCM(
item.NC_MERCOSUL);
}//CarregarIBPT
public ModeloIcmsEmp? CarregarICMS(int idItem)
{
ModeloItens? item = Carregar(idItem);
if (item == null)
return null;
DALIcmsEmp dalICMS = new(connectionString);
return dalICMS.CarregarPorCodigo(
item.C_ICMS);
}//CarregarICMS
public ModeloIcmsUf? CarregarICMSUF(int idItem,string uf)
{
ModeloItens? item = Carregar(idItem);
if (item == null)
return null;
DALIcmsUf dalUF = new(connectionString);
List<ModeloIcmsUf> lista =
dalUF.Listar(
codItem: item.CODIGO,
uf: uf);
if (lista.Count == 0)
return null;
return lista[0];
}//CarregarICMSUF
public decimal ObterAliquotaICMSDestino(int idItem,string uf)
{
ModeloIcmsUf? icmsUf =
CarregarICMSUF(
idItem,
uf);
if (icmsUf != null)
{
decimal.TryParse(
icmsUf.ICMS,
out decimal aliquota);
return aliquota;
}
ModeloIcmsEmp? icmsPadrao =
CarregarICMS(idItem);
if (icmsPadrao == null)
return 0;
decimal.TryParse(
icmsPadrao.ICMS,
out decimal icms);
return icms;
}//ObterAliquotaICMSDestino
public decimal ObterPercentualIBPT(int idItem)
{
ModeloIBPT? ibpt =
CarregarIBPT(idItem);
if (ibpt == null)
return 0;
decimal.TryParse(
ibpt.NacionalFederal,
out decimal valor);
return valor;
}//ObterPercentualIBPT
public decimal ValorTributacaoIBPT(int idItem)
{
ModeloItens? item = Carregar(idItem);
if (item == null)
return 0;
decimal.TryParse(
item.VENDA,
out decimal venda);
decimal percentual =
ObterPercentualIBPT(idItem);
return venda * percentual / 100;
}//ValorTributacaoIBPT
public List<ModeloItens> ProdutosSemNCM()
{
return Listar(ncm: "");
}//ProdutosSemNCM
public List<ModeloItens> ProdutosSemGTIN()
{
List<ModeloItens> lista = [];
using SqlConnection conn = new(connectionString);
string sql = @"
SELECT *
FROM Itens
WHERE GTIN IS NULL
OR GTIN=''";
using SqlCommand cmd = new(sql, conn);
conn.Open();
using SqlDataReader dr = cmd.ExecuteReader();
while (dr.Read())
{
lista.Add(PreencherModelo(dr));
}
return lista;
}//ProdutosSemGTIN
public List<ModeloItens> ProdutosSemCEST()
{
List<ModeloItens> lista = [];
using SqlConnection conn = new(connectionString);
string sql = @"
SELECT *
FROM Itens
WHERE CEST IS NULL
OR CEST=''";
using SqlCommand cmd = new(sql, conn);
conn.Open();
using SqlDataReader dr = cmd.ExecuteReader();
while (dr.Read())
{
lista.Add(PreencherModelo(dr));
}
return lista;
}//ProdutosSemCEST
#endregion
#region Dashboard e Estatísticas - Dashboard and Statistics
public int QuantidadeTotal()
{
using SqlConnection conn = new(connectionString);
string sql =
@"SELECT COUNT(*)
FROM Itens";
using SqlCommand cmd = new(sql, conn);
conn.Open();
return Convert.ToInt32(
cmd.ExecuteScalar());
}//QuantidadeTotal
public ModeloItens? PrimeiroRegistro()
{
using SqlConnection conn = new(connectionString);
string sql = @"
SELECT TOP 1 *
FROM Itens
ORDER BY ID_ITENS";
using SqlCommand cmd = new(sql, conn);
conn.Open();
using SqlDataReader dr = cmd.ExecuteReader();
if (dr.Read())
return PreencherModelo(dr);
return null;
}//PrimeiroRegistro
public ModeloItens? UltimoRegistro()
{
using SqlConnection conn = new(connectionString);
string sql = @"
SELECT TOP 1 *
FROM Itens
ORDER BY ID_ITENS DESC";
using SqlCommand cmd = new(sql, conn);
conn.Open();
using SqlDataReader dr = cmd.ExecuteReader();
if (dr.Read())
return PreencherModelo(dr);
return null;
}//UltimoRegistro
public int QuantidadeSemEstoque()
{
using SqlConnection conn = new(connectionString);
string sql = @"
SELECT COUNT(*)
FROM Itens
WHERE
TRY_CONVERT(decimal(18,2),ESTOQUE_DISP)=0";
using SqlCommand cmd = new(sql, conn);
conn.Open();
return Convert.ToInt32(
cmd.ExecuteScalar());
}//QuantidadeSemEstoque
public int QuantidadeAbaixoMinimo()
{
using SqlConnection conn = new(connectionString);
string sql = @"
SELECT COUNT(*)
FROM Itens
WHERE
TRY_CONVERT(decimal(18,2),ESTOQUE_DISP)
<=
TRY_CONVERT(decimal(18,2),ESTOQUE_MIN)";
using SqlCommand cmd = new(sql, conn);
conn.Open();
return Convert.ToInt32(
cmd.ExecuteScalar());
}//QuantidadeAbaixoMinimo
public int QuantidadeAbaixoIdeal()
{
using SqlConnection conn = new(connectionString);
string sql = @"
SELECT COUNT(*)
FROM Itens
WHERE
TRY_CONVERT(decimal(18,2),ESTOQUE_DISP)
<
TRY_CONVERT(decimal(18,2),ESTOQUE_IDEAL)";
using SqlCommand cmd = new(sql, conn);
conn.Open();
return Convert.ToInt32(
cmd.ExecuteScalar());
}//QuantidadeAbaixoIdeal
public List<ModeloItens> ProdutosMaisCaros(int quantidade = 10)
{
List<ModeloItens> lista = [];
using SqlConnection conn = new(connectionString);
string sql = $@"
SELECT TOP {quantidade} *
FROM Itens
ORDER BY
TRY_CONVERT(decimal(18,2),VENDA)
DESC";
using SqlCommand cmd = new(sql, conn);
conn.Open();
using SqlDataReader dr = cmd.ExecuteReader();
while (dr.Read())
lista.Add(
PreencherModelo(dr));
return lista;
}//ProdutosMaisCaros
public List<ModeloItens> ProdutosMaisBaratos(int quantidade = 10)
{
List<ModeloItens> lista = [];
using SqlConnection conn = new(connectionString);
string sql = $@"
SELECT TOP {quantidade} *
FROM Itens
ORDER BY
TRY_CONVERT(decimal(18,2),VENDA)";
using SqlCommand cmd = new(sql, conn);
conn.Open();
using SqlDataReader dr = cmd.ExecuteReader();
while (dr.Read())
lista.Add(
PreencherModelo(dr));
return lista;
}//ProdutosMaisBaratos
public List<ModeloItens> ProdutosComMaiorEstoque(int quantidade = 10)
{
List<ModeloItens> lista = [];
using SqlConnection conn = new(connectionString);
string sql = $@"
SELECT TOP {quantidade} *
FROM Itens
ORDER BY
TRY_CONVERT(decimal(18,2),ESTOQUE_DISP)
DESC";
using SqlCommand cmd = new(sql, conn);
conn.Open();
using SqlDataReader dr = cmd.ExecuteReader();
while (dr.Read())
lista.Add(
PreencherModelo(dr));
return lista;
}//ProdutosComMaiorEstoque
public List<ModeloItens> ProdutosComMenorEstoque(int quantidade = 10)
{
List<ModeloItens> lista = [];
using SqlConnection conn = new(connectionString);
string sql = $@"
SELECT TOP {quantidade} *
FROM Itens
ORDER BY
TRY_CONVERT(decimal(18,2),ESTOQUE_DISP)";
using SqlCommand cmd = new(sql, conn);
conn.Open();
using SqlDataReader dr = cmd.ExecuteReader();
while (dr.Read())
lista.Add(
PreencherModelo(dr));
return lista;
}//ProdutosComMenorEstoque
public class DashboardItens
{
public int TotalProdutos { get; set; }
public int SemEstoque { get; set; }
public int AbaixoMinimo { get; set; }
public int AbaixoIdeal { get; set; }
public decimal ValorTotalEstoque { get; set; }
public decimal ValorTotalVenda { get; set; }
public decimal LucroPotencial { get; set; }
}
public DashboardItens Dashboard()
{
return new DashboardItens
{
TotalProdutos = QuantidadeTotal(),
SemEstoque = QuantidadeSemEstoque(),
AbaixoMinimo = QuantidadeAbaixoMinimo(),
AbaixoIdeal = QuantidadeAbaixoIdeal(),
ValorTotalEstoque = ValorTotalEstoque(),
ValorTotalVenda = ValorTotalVenda(),
LucroPotencial =
ValorTotalVenda()
-
ValorTotalEstoque()
};
}
#endregion
#region Mercado Livre - Mercado Livre
public bool AtualizarCategoriaML(int idItem, string categoria)
{
using SqlConnection conn = new(connectionString);
string sql = @"
UPDATE Itens
SET ML_category_id=@CATEGORIA
WHERE ID_ITENS=@ID";
using SqlCommand cmd = new(sql, conn);
cmd.Parameters.AddWithValue("@CATEGORIA", categoria);
cmd.Parameters.AddWithValue("@ID", idItem);
conn.Open();
return cmd.ExecuteNonQuery() > 0;
}//AtualizarCategoriaML
public bool AtualizarVideoML(int idItem, string video)
{
using SqlConnection conn = new(connectionString);
string sql = @"
UPDATE Itens
SET ML_video_id=@VIDEO
WHERE ID_ITENS=@ID";
using SqlCommand cmd = new(sql, conn);
cmd.Parameters.AddWithValue("@VIDEO", video);
cmd.Parameters.AddWithValue("@ID", idItem);
conn.Open();
return cmd.ExecuteNonQuery() > 0;
}//AtualizarVideoML
public bool AtualizarGarantiaML(int idItem, string garantia)
{
using SqlConnection conn = new(connectionString);
string sql = @"
UPDATE Itens
SET ML_warranty=@GARANTIA
WHERE ID_ITENS=@ID";
using SqlCommand cmd = new(sql, conn);
cmd.Parameters.AddWithValue("@GARANTIA", garantia);
cmd.Parameters.AddWithValue("@ID", idItem);
conn.Open();
return cmd.ExecuteNonQuery() > 0;
}//AtualizarGarantiaML
public bool AtualizarDescricaoML(int idItem, string descricao)
{
using SqlConnection conn = new(connectionString);
string sql = @"
UPDATE Itens
SET ML_Description=@DESCRICAO
WHERE ID_ITENS=@ID";
using SqlCommand cmd = new(sql, conn);
cmd.Parameters.AddWithValue("@DESCRICAO", descricao);
cmd.Parameters.AddWithValue("@ID", idItem);
conn.Open();
return cmd.ExecuteNonQuery() > 0;
}//AtualizarDescricaoML
public List<ModeloItens> ListarSemCategoriaML()
{
List<ModeloItens> lista = [];
using SqlConnection conn = new(connectionString);
string sql = @"
SELECT *
FROM Itens
WHERE ML_category_id IS NULL
OR ML_category_id=''
ORDER BY NOME";
using SqlCommand cmd = new(sql, conn);
conn.Open();
using SqlDataReader dr = cmd.ExecuteReader();
while (dr.Read())
lista.Add(PreencherModelo(dr));
return lista;
}//ListarSemCategoriaML
public List<ModeloItens> ListarSemVideoML()
{
List<ModeloItens> lista = [];
using SqlConnection conn = new(connectionString);
string sql = @"
SELECT *
FROM Itens
WHERE ML_video_id IS NULL
OR ML_video_id=''
ORDER BY NOME";
using SqlCommand cmd = new(sql, conn);
conn.Open();
using SqlDataReader dr = cmd.ExecuteReader();
while (dr.Read())
lista.Add(PreencherModelo(dr));
return lista;
}//ListarSemVideoML
public List<ModeloItens> ListarSemDescricaoML()
{
List<ModeloItens> lista = [];
using SqlConnection conn = new(connectionString);
string sql = @"
SELECT *
FROM Itens
WHERE ML_Description IS NULL
OR ML_Description=''
ORDER BY NOME";
using SqlCommand cmd = new(sql, conn);
conn.Open();
using SqlDataReader dr = cmd.ExecuteReader();
while (dr.Read())
lista.Add(PreencherModelo(dr));
return lista;
}//ListarSemDescricaoML
public List<ModeloItens> ListarSemGarantiaML()
{
List<ModeloItens> lista = [];
using SqlConnection conn = new(connectionString);
string sql = @"
SELECT *
FROM Itens
WHERE ML_warranty IS NULL
OR ML_warranty=''
ORDER BY NOME";
using SqlCommand cmd = new(sql, conn);
conn.Open();
using SqlDataReader dr = cmd.ExecuteReader();
while (dr.Read())
lista.Add(PreencherModelo(dr));
return lista;
}//ListarSemGarantiaML
public List<ModeloItens> ProdutosProntosParaPublicacaoML()
{
List<ModeloItens> lista = [];
using SqlConnection conn = new(connectionString);
string sql = @"
SELECT *
FROM Itens
WHERE
ML_category_id IS NOT NULL
AND ML_category_id<>''
AND ML_Description IS NOT NULL
AND ML_Description<>''
AND VENDA<>''
AND GTIN<>''
AND NOME<>''
ORDER BY NOME";
using SqlCommand cmd = new(sql, conn);
conn.Open();
using SqlDataReader dr = cmd.ExecuteReader();
while (dr.Read())
lista.Add(PreencherModelo(dr));
return lista;
}//ProdutosProntosParaPublicacaoML
public List<ModeloItens> ProdutosPendentesPublicacaoML()
{
List<ModeloItens> lista = [];
using SqlConnection conn = new(connectionString);
string sql = @"
SELECT *
FROM Itens
WHERE
ML_category_id IS NULL
OR ML_category_id=''
OR ML_Description IS NULL
OR ML_Description=''
OR GTIN IS NULL
OR GTIN=''
ORDER BY NOME";
using SqlCommand cmd = new(sql, conn);
conn.Open();
using SqlDataReader dr = cmd.ExecuteReader();
while (dr.Read())
lista.Add(PreencherModelo(dr));
return lista;
}//ProdutosPendentesPublicacaoML
public bool VerificarProdutoProntoML(int idItem)
{
ModeloItens? item = Carregar(idItem);
if (item == null)
return false;
return
!string.IsNullOrWhiteSpace(item.NOME) &&
!string.IsNullOrWhiteSpace(item.GTIN) &&
!string.IsNullOrWhiteSpace(item.VENDA);
}//VerificarProdutoProntoML
#endregion
//Concluida 26/06/2026 ás 21:58
}
}