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 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 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 ListarPorGrupo(string grupo) { return Listar(grupo: grupo); }//ListarPorGrupo public List ListarPorSubGrupo(string subGrupo) { return Listar(subGrupo: subGrupo); }//ListarPorSubGrupo public List ListarPorFornecedor(string fornecedor) { return Listar(fornecedor: fornecedor); }//ListarPorFornecedor public List ListarPorFabricante(string fabricante) { return Listar(fabricante: fabricante); }//ListarPorFabricante public List ListarPorLocal(string local) { return Listar(local: local); }//ListarPorLocal public List ListarPorGaveta(string gaveta) { return Listar(gaveta: gaveta); }//ListarPorGaveta public List ListarPorGTIN(string gtin) { return Listar(gtin: gtin); }//ListarPorGTIN public List ListarPorNCM(string ncm) { return Listar(ncm: ncm); }//ListarPorNCM #endregion #region Controle de estoque - Stock Control public List ProdutosSemEstoque() { List 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 ProdutosComEstoque() { List 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 ProdutosAbaixoMinimo() { List 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 ProdutosAbaixoIdeal() { List 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 ProdutosSemLucro() { List 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 ProdutosComPrecoZerado() { List 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 ProdutosComCustoMaiorQueVenda() { List 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 ListarPorCST(string cst) { List 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 ListarPorICMS(string icms) { List 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 ListarPorIPI(string ipi) { List 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 ListarPorCEST(string cest) { List 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 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 ProdutosSemNCM() { return Listar(ncm: ""); }//ProdutosSemNCM public List ProdutosSemGTIN() { List 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 ProdutosSemCEST() { List 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 ProdutosMaisCaros(int quantidade = 10) { List 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 ProdutosMaisBaratos(int quantidade = 10) { List 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 ProdutosComMaiorEstoque(int quantidade = 10) { List 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 ProdutosComMenorEstoque(int quantidade = 10) { List 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 ListarSemCategoriaML() { List 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 ListarSemVideoML() { List 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 ListarSemDescricaoML() { List 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 ListarSemGarantiaML() { List 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 ProdutosProntosParaPublicacaoML() { List 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 ProdutosPendentesPublicacaoML() { List 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 } }