/* -------------------------------------------------- Classe: DALItensNota Tabela: Itens_nota Modelo: ModeloItensNota Responsável por: - CRUD dos itens da NF-e - Controle tributário - Totais da nota - Estatísticas - Relatórios - Integração com estoque - Integração com Itens - Inteligência fiscal Partes: 1 - CRUD 2 - Pesquisas 3 - Nota Fiscal 4 - Impostos 5 - Totais 6 - Dashboard 7 - Estatísticas 8 - Relatórios 9 - Integração 10 - Inteligência -------------------------------------------------- */ 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 DALItensNota { private readonly string connectionString; public DALItensNota(string connectionString) { this.connectionString = connectionString; }//DALItensNota #region CRUD - Create, Read, Update, Delete public bool Inserir(ModeloItensNota modelo) { using SqlConnection conn = new(connectionString); string sql = @" INSERT INTO Itens_nota ( COD_NOTA, TIPO, COD_VENDEDOR, COD_ITEM, DESCRICAO, UNIDADE, QTD, PRECO, ICMS, IPI, ISS, DESCONTO, TOTAL, CFOP, CST, GTIN, INF_ADIC ) VALUES ( @COD_NOTA, @TIPO, @COD_VENDEDOR, @COD_ITEM, @DESCRICAO, @UNIDADE, @QTD, @PRECO, @ICMS, @IPI, @ISS, @DESCONTO, @TOTAL, @CFOP, @CST, @GTIN, @INF_ADIC )"; SqlCommand cmd = new(sql, conn); PreencherParametros(cmd, modelo); conn.Open(); return cmd.ExecuteNonQuery() > 0; }//Inserir public bool Alterar(ModeloItensNota modelo) { using SqlConnection conn = new(connectionString); string sql = @" UPDATE Itens_nota SET COD_NOTA=@COD_NOTA, TIPO=@TIPO, COD_VENDEDOR=@COD_VENDEDOR, COD_ITEM=@COD_ITEM, DESCRICAO=@DESCRICAO, UNIDADE=@UNIDADE, QTD=@QTD, PRECO=@PRECO, ICMS=@ICMS, IPI=@IPI, ISS=@ISS, DESCONTO=@DESCONTO, TOTAL=@TOTAL, CFOP=@CFOP, CST=@CST, GTIN=@GTIN, INF_ADIC=@INF_ADIC WHERE ID_ITENS_NOTA=@ID"; SqlCommand cmd = new(sql, conn); PreencherParametros(cmd, modelo); cmd.Parameters.AddWithValue( "@ID", modelo.ID_ITENS_NOTA); conn.Open(); return cmd.ExecuteNonQuery() > 0; }//Alterar public bool Excluir(int id) { using SqlConnection conn = new(connectionString); SqlCommand cmd = new( @"DELETE FROM Itens_nota WHERE ID_ITENS_NOTA=@ID", conn); cmd.Parameters.AddWithValue("@ID", id); conn.Open(); return cmd.ExecuteNonQuery() > 0; }//Excluir public ModeloItensNota CarregarModelo(int id) { using SqlConnection conn = new(connectionString); SqlCommand cmd = new( @"SELECT * FROM Itens_nota WHERE ID_ITENS_NOTA=@ID", conn); cmd.Parameters.AddWithValue("@ID", id); conn.Open(); using SqlDataReader dr = cmd.ExecuteReader(); if (dr.Read()) return PreencherModelo(dr); return new ModeloItensNota(); }//CarregarModelo public ModeloItensNota CarregarModeloPorCodigoString(string codigo) { using SqlConnection conn = new(connectionString); SqlCommand cmd = new( @"SELECT * FROM Itens_nota WHERE CODIGO=@CODIGO", conn); cmd.Parameters.AddWithValue( "@CODIGO", codigo); conn.Open(); using SqlDataReader dr = cmd.ExecuteReader(); if (dr.Read()) return PreencherModelo(dr); return new ModeloItensNota(); }//CarregarModeloPorCodigoString public bool ExisteItenNota(int id) { using SqlConnection conn = new(connectionString); SqlCommand cmd = new( @"SELECT COUNT(*) FROM Itens_nota WHERE ID_ITENS_NOTA=@ID", conn); cmd.Parameters.AddWithValue("@ID", id); conn.Open(); return Convert.ToInt32( cmd.ExecuteScalar()) > 0; }//ExisteItenNota public bool ExisteCodigoItenNota(string codigo) { using SqlConnection conn = new(connectionString); SqlCommand cmd = new( @"SELECT COUNT(*) FROM Itens_nota WHERE CODIGO=@CODIGO", conn); cmd.Parameters.AddWithValue( "@CODIGO", codigo); conn.Open(); return Convert.ToInt32( cmd.ExecuteScalar()) > 0; }//ExisteCodigoItenNota public string ObterUltimoCodigo() { using SqlConnection conn = new(connectionString); SqlCommand cmd = new( @"SELECT TOP 1 CODIGO FROM Itens_nota ORDER BY ID_ITENS_NOTA DESC", conn); conn.Open(); return Convert.ToString( cmd.ExecuteScalar()) ?? string.Empty; }//ObterUltimoCodigo private void PreencherParametros(SqlCommand cmd,ModeloItensNota modelo) { cmd.Parameters.AddWithValue( "@COD_NOTA", modelo.COD_NOTA); cmd.Parameters.AddWithValue( "@TIPO", modelo.TIPO); cmd.Parameters.AddWithValue( "@COD_VENDEDOR", modelo.COD_VENDEDOR); cmd.Parameters.AddWithValue( "@COD_ITEM", modelo.COD_ITEM); cmd.Parameters.AddWithValue( "@DESCRICAO", modelo.DESCRICAO); cmd.Parameters.AddWithValue( "@UNIDADE", modelo.UNIDADE); cmd.Parameters.AddWithValue( "@QTD", modelo.QTD); cmd.Parameters.AddWithValue( "@PRECO", modelo.PRECO); cmd.Parameters.AddWithValue( "@ICMS", modelo.ICMS); cmd.Parameters.AddWithValue( "@IPI", modelo.IPI); cmd.Parameters.AddWithValue( "@ISS", modelo.ISS); cmd.Parameters.AddWithValue( "@DESCONTO", modelo.DESCONTO); cmd.Parameters.AddWithValue( "@TOTAL", modelo.TOTAL); cmd.Parameters.AddWithValue( "@CFOP", modelo.CFOP); cmd.Parameters.AddWithValue( "@CST", modelo.CST); cmd.Parameters.AddWithValue( "@GTIN", modelo.GTIN); cmd.Parameters.AddWithValue( "@INF_ADIC", modelo.INF_ADIC); }//PreencherParametros private ModeloItensNota PreencherModelo(SqlDataReader dr) { return new ModeloItensNota { ID_ITENS_NOTA = Convert.ToInt32( dr["ID_ITENS_NOTA"]), CODIGO = Convert.ToString( dr["CODIGO"]) ?? "", COD_NOTA = Convert.ToString( dr["COD_NOTA"]) ?? "", TIPO = Convert.ToString( dr["TIPO"]) ?? "", COD_VENDEDOR = Convert.ToString( dr["COD_VENDEDOR"]) ?? "", COD_ITEM = Convert.ToString( dr["COD_ITEM"]) ?? "", DESCRICAO = Convert.ToString( dr["DESCRICAO"]) ?? "", UNIDADE = Convert.ToString( dr["UNIDADE"]) ?? "", QTD = Convert.ToString( dr["QTD"]) ?? "", PRECO = Convert.ToString( dr["PRECO"]) ?? "", ICMS = Convert.ToString( dr["ICMS"]) ?? "", IPI = Convert.ToString( dr["IPI"]) ?? "", ISS = Convert.ToString( dr["ISS"]) ?? "", DESCONTO = Convert.ToString( dr["DESCONTO"]) ?? "", TOTAL = Convert.ToString( dr["TOTAL"]) ?? "", CFOP = Convert.ToString( dr["CFOP"]) ?? "", CST = Convert.ToString( dr["CST"]) ?? "", GTIN = Convert.ToString( dr["GTIN"]) ?? "", INF_ADIC = Convert.ToString( dr["INF_ADIC"]) ?? "" }; }//PreencherModelo #endregion #region Pesquisas - Searches public List Listar() { List lista = []; using SqlConnection conn = new(connectionString); SqlCommand cmd = new( @"SELECT * FROM Itens_nota ORDER BY ID_ITENS_NOTA DESC", conn); conn.Open(); using SqlDataReader dr = cmd.ExecuteReader(); while (dr.Read()) lista.Add( PreencherModelo(dr)); return lista; }//Listar public List ListarPorNota(string codigoNota) { List lista = []; using SqlConnection conn = new(connectionString); SqlCommand cmd = new( @"SELECT * FROM Itens_nota WHERE COD_NOTA=@COD_NOTA", conn); cmd.Parameters.AddWithValue( "@COD_NOTA", codigoNota); conn.Open(); using SqlDataReader dr = cmd.ExecuteReader(); while (dr.Read()) lista.Add( PreencherModelo(dr)); return lista; }//ListarPorNota public ListListarPorItem(string codigoItem) { List lista = []; using SqlConnection conn = new(connectionString); SqlCommand cmd = new( @"SELECT * FROM Itens_nota WHERE COD_ITEM=@COD_ITEM", conn); cmd.Parameters.AddWithValue( "@COD_ITEM", codigoItem); conn.Open(); using SqlDataReader dr = cmd.ExecuteReader(); while (dr.Read()) lista.Add( PreencherModelo(dr)); return lista; }//ListarPorItem public ListListarPorVendedor(string vendedor) { List lista = []; using SqlConnection conn = new(connectionString); SqlCommand cmd = new( @"SELECT * FROM Itens_nota WHERE COD_VENDEDOR=@VENDEDOR", conn); cmd.Parameters.AddWithValue( "@VENDEDOR", vendedor); conn.Open(); using SqlDataReader dr = cmd.ExecuteReader(); while (dr.Read()) lista.Add( PreencherModelo(dr)); return lista; }//ListarPorVendedor public ListListarPorTipo(string tipo) { List lista = []; using SqlConnection conn = new(connectionString); SqlCommand cmd = new( @"SELECT * FROM Itens_nota WHERE TIPO=@TIPO", conn); cmd.Parameters.AddWithValue( "@TIPO", tipo); conn.Open(); using SqlDataReader dr = cmd.ExecuteReader(); while (dr.Read()) lista.Add( PreencherModelo(dr)); return lista; }//ListarPorTipo public ListListarPorCFOP(string cfop) { List lista = []; using SqlConnection conn = new(connectionString); SqlCommand cmd = new( @"SELECT * FROM Itens_nota WHERE CFOP=@CFOP", conn); cmd.Parameters.AddWithValue( "@CFOP", cfop); conn.Open(); using SqlDataReader dr = cmd.ExecuteReader(); while (dr.Read()) lista.Add( PreencherModelo(dr)); return lista; }//ListarPorCFOP public ListListarPorCST(string cst) { List lista = []; using SqlConnection conn = new(connectionString); SqlCommand cmd = new( @"SELECT * FROM Itens_nota WHERE CST=@CST", conn); cmd.Parameters.AddWithValue( "@CST", cst); conn.Open(); using SqlDataReader dr = cmd.ExecuteReader(); while (dr.Read()) lista.Add( PreencherModelo(dr)); return lista; }//ListarPorCST public ListListarPorGTIN(string gtin) { List lista = []; using SqlConnection conn = new(connectionString); SqlCommand cmd = new( @"SELECT * FROM Itens_nota WHERE GTIN=@GTIN", conn); cmd.Parameters.AddWithValue( "@GTIN", gtin); conn.Open(); using SqlDataReader dr = cmd.ExecuteReader(); while (dr.Read()) lista.Add( PreencherModelo(dr)); return lista; }//ListarPorGTIN public ListListarPorDescricao(string descricao) { List lista = []; using SqlConnection conn = new(connectionString); SqlCommand cmd = new( @"SELECT * FROM Itens_nota WHERE DESCRICAO LIKE @DESC", conn); cmd.Parameters.AddWithValue( "@DESC", "%" + descricao + "%"); conn.Open(); using SqlDataReader dr = cmd.ExecuteReader(); while (dr.Read()) lista.Add( PreencherModelo(dr)); return lista; }//ListarPorDescricao public ListListarPorPeriodo( string notaInicial,string notaFinal) { List lista = []; using SqlConnection conn = new(connectionString); SqlCommand cmd = new( @"SELECT * FROM Itens_nota WHERE COD_NOTA BETWEEN @INI AND @FIM", conn); cmd.Parameters.AddWithValue( "@INI", notaInicial); cmd.Parameters.AddWithValue( "@FIM", notaFinal); conn.Open(); using SqlDataReader dr = cmd.ExecuteReader(); while (dr.Read()) lista.Add( PreencherModelo(dr)); return lista; }//ListarPorPeriodo public ListListarPorQuantidade(string quantidade) { List lista = []; using SqlConnection conn = new(connectionString); SqlCommand cmd = new( @"SELECT * FROM Itens_nota WHERE QTD=@QTD", conn); cmd.Parameters.AddWithValue( "@QTD", quantidade); conn.Open(); using SqlDataReader dr = cmd.ExecuteReader(); while (dr.Read()) lista.Add( PreencherModelo(dr)); return lista; }//ListarPorQuantidade #endregion #region Operações da NF-e - Nota Fiscal Eletrônica public int QuantidadeItensNota(string codNota) { using SqlConnection conn = new(connectionString); SqlCommand cmd = new( @"SELECT COUNT(*) FROM Itens_nota WHERE COD_NOTA=@COD_NOTA", conn); cmd.Parameters.AddWithValue( "@COD_NOTA", codNota); conn.Open(); return Convert.ToInt32( cmd.ExecuteScalar()); }//QuantidadeItensNota public bool PossuiItens(string codNota) { return QuantidadeItensNota( codNota) > 0; }//PossuiItens public ModeloItensNota PrimeiroItem(string codNota) { using SqlConnection conn = new(connectionString); SqlCommand cmd = new( @"SELECT TOP 1 * FROM Itens_nota WHERE COD_NOTA=@COD_NOTA ORDER BY ID_ITENS_NOTA", conn); cmd.Parameters.AddWithValue( "@COD_NOTA", codNota); conn.Open(); using SqlDataReader dr = cmd.ExecuteReader(); if (dr.Read()) return PreencherModelo(dr); return new ModeloItensNota(); }//PrimeiroItem public ModeloItensNota UltimoItem(string codNota) { using SqlConnection conn = new(connectionString); SqlCommand cmd = new( @"SELECT TOP 1 * FROM Itens_nota WHERE COD_NOTA=@COD_NOTA ORDER BY ID_ITENS_NOTA DESC", conn); cmd.Parameters.AddWithValue( "@COD_NOTA", codNota); conn.Open(); using SqlDataReader dr = cmd.ExecuteReader(); if (dr.Read()) return PreencherModelo(dr); return new ModeloItensNota(); }//UltimoItem public decimal ValorTotalItens(string codNota) { using SqlConnection conn = new(connectionString); SqlCommand cmd = new( @"SELECT ISNULL( SUM( TRY_CONVERT( decimal(18,2), TOTAL ) ),0) FROM Itens_nota WHERE COD_NOTA=@COD_NOTA", conn); cmd.Parameters.AddWithValue( "@COD_NOTA", codNota); conn.Open(); return Convert.ToDecimal( cmd.ExecuteScalar()); }//ValorTotalItens public decimal QuantidadeTotalItens(string codNota) { using SqlConnection conn = new(connectionString); SqlCommand cmd = new( @"SELECT ISNULL( SUM( TRY_CONVERT( decimal(18,4), QTD ) ),0) FROM Itens_nota WHERE COD_NOTA=@COD_NOTA", conn); cmd.Parameters.AddWithValue( "@COD_NOTA", codNota); conn.Open(); return Convert.ToDecimal( cmd.ExecuteScalar()); }//QuantidadeTotalItens public ListObterItensNota(string codNota) { return ListarPorNota( codNota); }//ObterItensNota public bool ExcluirItensNota(string codNota) { using SqlConnection conn = new(connectionString); SqlCommand cmd = new( @"DELETE FROM Itens_nota WHERE COD_NOTA=@COD_NOTA", conn); cmd.Parameters.AddWithValue( "@COD_NOTA", codNota); conn.Open(); return cmd.ExecuteNonQuery() > 0; }//ExcluirItensNota public int DuplicarItens(string notaOrigem,string notaDestino) { using SqlConnection conn = new(connectionString); SqlCommand cmd = new( @" INSERT INTO Itens_nota ( COD_NOTA, TIPO, COD_VENDEDOR, COD_ITEM, DESCRICAO, UNIDADE, QTD, PRECO, ICMS, IPI, ISS, DESCONTO, TOTAL, CFOP, CST, GTIN, INF_ADIC ) SELECT @DESTINO, TIPO, COD_VENDEDOR, COD_ITEM, DESCRICAO, UNIDADE, QTD, PRECO, ICMS, IPI, ISS, DESCONTO, TOTAL, CFOP, CST, GTIN, INF_ADIC FROM Itens_nota WHERE COD_NOTA=@ORIGEM", conn); cmd.Parameters.AddWithValue( "@ORIGEM", notaOrigem); cmd.Parameters.AddWithValue( "@DESTINO", notaDestino); conn.Open(); return cmd.ExecuteNonQuery(); }//DuplicarItens #endregion #region Impostos - Taxes public decimal TotalICMS(string codNota) { using SqlConnection conn = new(connectionString); SqlCommand cmd = new( @"SELECT ISNULL( SUM( TRY_CONVERT(decimal(18,2),V_ICMS) ),0) FROM Itens_nota WHERE COD_NOTA=@CODIGO", conn); cmd.Parameters.AddWithValue( "@CODIGO", codNota); conn.Open(); return Convert.ToDecimal( cmd.ExecuteScalar()); }//TotalICMS public decimal TotalICMSST(string codNota) { using SqlConnection conn = new(connectionString); SqlCommand cmd = new( @"SELECT ISNULL( SUM( TRY_CONVERT(decimal(18,2),VICMSST) ),0) FROM Itens_nota WHERE COD_NOTA=@CODIGO", conn); cmd.Parameters.AddWithValue( "@CODIGO", codNota); conn.Open(); return Convert.ToDecimal( cmd.ExecuteScalar()); }//TotalICMSST public decimal TotalICMSUFDest(string codNota) { using SqlConnection conn = new(connectionString); SqlCommand cmd = new( @"SELECT ISNULL( SUM( TRY_CONVERT(decimal(18,2), vICMSUFDest) ),0) FROM Itens_nota WHERE COD_NOTA=@CODIGO", conn); cmd.Parameters.AddWithValue( "@CODIGO", codNota); conn.Open(); return Convert.ToDecimal( cmd.ExecuteScalar()); }//TotalICMSUFDest public decimal TotalICMSUFRemet(string codNota) { using SqlConnection conn = new(connectionString); SqlCommand cmd = new( @"SELECT ISNULL( SUM( TRY_CONVERT(decimal(18,2), vICMSUFRemet) ),0) FROM Itens_nota WHERE COD_NOTA=@CODIGO", conn); cmd.Parameters.AddWithValue( "@CODIGO", codNota); conn.Open(); return Convert.ToDecimal( cmd.ExecuteScalar()); }//TotalICMSUFRemet public decimal AliquotaMediaICMS(string codNota) { using SqlConnection conn = new(connectionString); SqlCommand cmd = new( @"SELECT ISNULL( AVG( TRY_CONVERT(decimal(18,2), ALIQ_ICMS) ),0) FROM Itens_nota WHERE COD_NOTA=@CODIGO", conn); cmd.Parameters.AddWithValue( "@CODIGO", codNota); conn.Open(); return Convert.ToDecimal( cmd.ExecuteScalar()); }//AliquotaMediaICMS public decimal TotalIPI(string codNota) { using SqlConnection conn = new(connectionString); SqlCommand cmd = new( @"SELECT ISNULL( SUM( TRY_CONVERT(decimal(18,2), V_IPI) ),0) FROM Itens_nota WHERE COD_NOTA=@CODIGO", conn); cmd.Parameters.AddWithValue( "@CODIGO", codNota); conn.Open(); return Convert.ToDecimal( cmd.ExecuteScalar()); }//TotalIPI public decimal AliquotaMediaIPI( string codNota) { using SqlConnection conn = new(connectionString); SqlCommand cmd = new( @"SELECT ISNULL( AVG( TRY_CONVERT(decimal(18,2), IPI) ),0) FROM Itens_nota WHERE COD_NOTA=@CODIGO", conn); cmd.Parameters.AddWithValue( "@CODIGO", codNota); conn.Open(); return Convert.ToDecimal( cmd.ExecuteScalar()); }//AliquotaMediaIPI public decimal TotalISS(string codNota) { using SqlConnection conn = new(connectionString); SqlCommand cmd = new( @"SELECT ISNULL( SUM( TRY_CONVERT(decimal(18,2), ISS) ),0) FROM Itens_nota WHERE COD_NOTA=@CODIGO", conn); cmd.Parameters.AddWithValue( "@CODIGO", codNota); conn.Open(); return Convert.ToDecimal( cmd.ExecuteScalar()); }//TotalISS public decimal AliquotaMediaISS(string codNota) { using SqlConnection conn = new(connectionString); SqlCommand cmd = new( @"SELECT ISNULL( AVG( TRY_CONVERT(decimal(18,2), ISS) ),0) FROM Itens_nota WHERE COD_NOTA=@CODIGO", conn); cmd.Parameters.AddWithValue( "@CODIGO", codNota); conn.Open(); return Convert.ToDecimal( cmd.ExecuteScalar()); }//AliquotaMediaISS #endregion //-------------------------------------------------- // Status de desenvolvimento das partes da classe DALItensNota //Parte 1 -> CRUD -> Concluída //Parte 2 -> Pesquisas -> Concluída //Parte 3 -> Nota Fiscal -> Concluida //Parte 4 -> Impostos -> Concluída //Parte 5 -> Totais -> Pendente //Parte 6 -> Dashboard -> Pendente //Parte 7 -> Estatísticas -> Pendente //Parte 8 -> Relatórios -> Pendente //Parte 9 -> Integração -> Pendente //Parte 10 -> Inteligência -> Pendente } }