1590 lines
47 KiB
C#
1590 lines
47 KiB
C#
using Microsoft.Data.SqlClient;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Data;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
|
|
namespace DAL
|
|
{
|
|
public class DALItensLotes
|
|
{
|
|
private readonly string connectionString;
|
|
|
|
public DALItensLotes(string conexao)
|
|
{
|
|
connectionString = conexao;
|
|
}//Constructor
|
|
|
|
#region CRUD - Create, Read, Update, Delete
|
|
public bool Inserir(ModeloItensLotes modelo)
|
|
{
|
|
using SqlConnection conn = new(connectionString);
|
|
|
|
string sql = @"
|
|
INSERT INTO Itens_Lotes
|
|
(
|
|
COD_ITEM,
|
|
LOTE,
|
|
QUANTIDADE,
|
|
DATA_FABRICACAO,
|
|
DATA_VALIDADE,
|
|
NUMERO_NF,
|
|
FORNECEDOR,
|
|
OBSERVACAO,
|
|
ATIVO,
|
|
DATA_CADASTRO,
|
|
DATA_ALTERACAO
|
|
)
|
|
VALUES
|
|
(
|
|
@COD_ITEM,
|
|
@LOTE,
|
|
@QUANTIDADE,
|
|
@DATA_FABRICACAO,
|
|
@DATA_VALIDADE,
|
|
@NUMERO_NF,
|
|
@FORNECEDOR,
|
|
@OBSERVACAO,
|
|
@ATIVO,
|
|
@DATA_CADASTRO,
|
|
@DATA_ALTERACAO
|
|
)";
|
|
|
|
using SqlCommand cmd = new(sql, conn);
|
|
|
|
PreencherParametros(cmd, modelo);
|
|
|
|
conn.Open();
|
|
|
|
return cmd.ExecuteNonQuery() > 0;
|
|
}//Inserir
|
|
public bool Alterar(ModeloItensLotes modelo)
|
|
{
|
|
using SqlConnection conn = new(connectionString);
|
|
|
|
string sql = @"
|
|
UPDATE Itens_Lotes
|
|
SET COD_ITEM=@COD_ITEM,
|
|
LOTE=@LOTE,
|
|
QUANTIDADE=@QUANTIDADE,
|
|
DATA_FABRICACAO=@DATA_FABRICACAO,
|
|
DATA_VALIDADE=@DATA_VALIDADE,
|
|
NUMERO_NF=@NUMERO_NF,
|
|
FORNECEDOR=@FORNECEDOR,
|
|
OBSERVACAO=@OBSERVACAO,
|
|
ATIVO=@ATIVO,
|
|
DATA_ALTERACAO=@DATA_ALTERACAO
|
|
WHERE ID_ITEM_LOTE=@ID_ITEM_LOTE";
|
|
|
|
using SqlCommand cmd = new(sql, conn);
|
|
|
|
PreencherParametros(cmd, modelo);
|
|
|
|
cmd.Parameters.AddWithValue("@ID_ITEM_LOTE", modelo.ID_ITEM_LOTE);
|
|
|
|
conn.Open();
|
|
|
|
return cmd.ExecuteNonQuery() > 0;
|
|
}//Alterar
|
|
public bool Excluir(int id)
|
|
{
|
|
using SqlConnection conn = new(connectionString);
|
|
|
|
string sql =
|
|
@"DELETE FROM Itens_Lotes
|
|
WHERE ID_ITEM_LOTE=@ID";
|
|
|
|
using SqlCommand cmd = new(sql, conn);
|
|
|
|
cmd.Parameters.AddWithValue("@ID", id);
|
|
|
|
conn.Open();
|
|
|
|
return cmd.ExecuteNonQuery() > 0;
|
|
}//Excluir
|
|
private static void PreencherParametros(SqlCommand cmd, ModeloItensLotes modelo)
|
|
{
|
|
cmd.Parameters.AddWithValue("@COD_ITEM", modelo.COD_ITEM);
|
|
|
|
cmd.Parameters.AddWithValue("@LOTE", modelo.LOTE);
|
|
|
|
cmd.Parameters.AddWithValue("@QUANTIDADE", modelo.QUANTIDADE);
|
|
|
|
cmd.Parameters.AddWithValue(
|
|
"@DATA_FABRICACAO",
|
|
(object?)modelo.DATA_FABRICACAO ?? DBNull.Value);
|
|
|
|
cmd.Parameters.AddWithValue(
|
|
"@DATA_VALIDADE",
|
|
(object?)modelo.DATA_VALIDADE ?? DBNull.Value);
|
|
|
|
cmd.Parameters.AddWithValue("@NUMERO_NF", modelo.NUMERO_NF);
|
|
|
|
cmd.Parameters.AddWithValue("@FORNECEDOR", modelo.FORNECEDOR);
|
|
|
|
cmd.Parameters.AddWithValue("@OBSERVACAO", modelo.OBSERVACAO);
|
|
|
|
cmd.Parameters.AddWithValue("@ATIVO", modelo.ATIVO);
|
|
|
|
cmd.Parameters.AddWithValue("@DATA_CADASTRO", modelo.DATA_CADASTRO);
|
|
|
|
cmd.Parameters.AddWithValue(
|
|
"@DATA_ALTERACAO",
|
|
(object?)modelo.DATA_ALTERACAO ?? DBNull.Value);
|
|
}//PreencherParametros
|
|
|
|
|
|
#endregion
|
|
#region Carregar - Load
|
|
public ModeloItensLotes? Carregar(int id)
|
|
{
|
|
using SqlConnection conn = new(connectionString);
|
|
|
|
string sql = @"
|
|
SELECT *
|
|
FROM Itens_Lotes
|
|
WHERE ID_ITEM_LOTE=@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;
|
|
}//CarregarModeloPeloID
|
|
public ModeloItensLotes? CarregarPorCodigo(string codigo)
|
|
{
|
|
using SqlConnection conn = new(connectionString);
|
|
|
|
string sql = @"
|
|
SELECT *
|
|
FROM Itens_Lotes
|
|
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;
|
|
}//CarregarModeloPeloCodigo
|
|
public ModeloItensLotes? CarregarPorLote(string lote)
|
|
{
|
|
using SqlConnection conn = new(connectionString);
|
|
|
|
string sql = @"
|
|
SELECT *
|
|
FROM Itens_Lotes
|
|
WHERE LOTE=@LOTE";
|
|
|
|
using SqlCommand cmd = new(sql, conn);
|
|
|
|
cmd.Parameters.AddWithValue("@LOTE", lote);
|
|
|
|
conn.Open();
|
|
|
|
using SqlDataReader dr = cmd.ExecuteReader();
|
|
|
|
if (dr.Read())
|
|
return PreencherModelo(dr);
|
|
|
|
return null;
|
|
}//CarregarModeloPeloLote
|
|
public bool ExisteCodigo(string codigo)
|
|
{
|
|
using SqlConnection conn = new(connectionString);
|
|
|
|
string sql = @"
|
|
SELECT COUNT(*)
|
|
FROM Itens_Lotes
|
|
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 ExisteLote(string lote)
|
|
{
|
|
using SqlConnection conn = new(connectionString);
|
|
|
|
string sql = @"
|
|
SELECT COUNT(*)
|
|
FROM Itens_Lotes
|
|
WHERE LOTE=@LOTE";
|
|
|
|
using SqlCommand cmd = new(sql, conn);
|
|
|
|
cmd.Parameters.AddWithValue("@LOTE", lote);
|
|
|
|
conn.Open();
|
|
|
|
return Convert.ToInt32(cmd.ExecuteScalar()) > 0;
|
|
}//ExisteLote
|
|
private static ModeloItensLotes PreencherModelo(SqlDataReader dr)
|
|
{
|
|
return new ModeloItensLotes
|
|
{
|
|
ID_ITEM_LOTE = Convert.ToInt32(dr["ID_ITEM_LOTE"]),
|
|
CODIGO = dr["CODIGO"]?.ToString() ?? string.Empty,
|
|
COD_ITEM = dr["COD_ITEM"]?.ToString() ?? string.Empty,
|
|
LOTE = dr["LOTE"]?.ToString() ?? string.Empty,
|
|
|
|
QUANTIDADE = dr["QUANTIDADE"] != DBNull.Value
|
|
? Convert.ToDecimal(dr["QUANTIDADE"])
|
|
: 0,
|
|
|
|
DATA_FABRICACAO = dr["DATA_FABRICACAO"] != DBNull.Value
|
|
? Convert.ToDateTime(dr["DATA_FABRICACAO"])
|
|
: null,
|
|
|
|
DATA_VALIDADE = dr["DATA_VALIDADE"] != DBNull.Value
|
|
? Convert.ToDateTime(dr["DATA_VALIDADE"])
|
|
: null,
|
|
|
|
NUMERO_NF = dr["NUMERO_NF"]?.ToString() ?? string.Empty,
|
|
FORNECEDOR = dr["FORNECEDOR"]?.ToString() ?? string.Empty,
|
|
OBSERVACAO = dr["OBSERVACAO"]?.ToString() ?? string.Empty,
|
|
|
|
ATIVO = dr["ATIVO"] != DBNull.Value &&
|
|
Convert.ToBoolean(dr["ATIVO"]),
|
|
|
|
DATA_CADASTRO = dr["DATA_CADASTRO"] != DBNull.Value
|
|
? Convert.ToDateTime(dr["DATA_CADASTRO"])
|
|
: DateTime.MinValue,
|
|
|
|
DATA_ALTERACAO = dr["DATA_ALTERACAO"] != DBNull.Value
|
|
? Convert.ToDateTime(dr["DATA_ALTERACAO"])
|
|
: null
|
|
};
|
|
}//PreencherModelo
|
|
|
|
#endregion
|
|
#region Listar - List
|
|
public List<ModeloItensLotes> Listar(string? codigo = null,string? codItem = null,string? lote = null,string? fornecedor = null, string? numeroNF = null,
|
|
bool? ativo = null,DateTime? fabricacaoInicial = null,DateTime? fabricacaoFinal = null,DateTime? validadeInicial = null,
|
|
DateTime? validadeFinal = null)
|
|
{
|
|
List<ModeloItensLotes> lista = [];
|
|
|
|
using SqlConnection conn = new(connectionString);
|
|
|
|
string sql = @"
|
|
SELECT *
|
|
FROM Itens_Lotes
|
|
WHERE 1=1";
|
|
|
|
using SqlCommand cmd = new();
|
|
|
|
if (!string.IsNullOrWhiteSpace(codigo))
|
|
{
|
|
sql += " AND CODIGO LIKE @CODIGO";
|
|
cmd.Parameters.AddWithValue("@CODIGO", "%" + codigo + "%");
|
|
}
|
|
|
|
if (!string.IsNullOrWhiteSpace(codItem))
|
|
{
|
|
sql += " AND COD_ITEM=@COD_ITEM";
|
|
cmd.Parameters.AddWithValue("@COD_ITEM", codItem);
|
|
}
|
|
|
|
if (!string.IsNullOrWhiteSpace(lote))
|
|
{
|
|
sql += " AND LOTE LIKE @LOTE";
|
|
cmd.Parameters.AddWithValue("@LOTE", "%" + lote + "%");
|
|
}
|
|
|
|
if (!string.IsNullOrWhiteSpace(fornecedor))
|
|
{
|
|
sql += " AND FORNECEDOR LIKE @FORNECEDOR";
|
|
cmd.Parameters.AddWithValue("@FORNECEDOR", "%" + fornecedor + "%");
|
|
}
|
|
|
|
if (!string.IsNullOrWhiteSpace(numeroNF))
|
|
{
|
|
sql += " AND NUMERO_NF LIKE @NUMERO_NF";
|
|
cmd.Parameters.AddWithValue("@NUMERO_NF", "%" + numeroNF + "%");
|
|
}
|
|
|
|
if (ativo.HasValue)
|
|
{
|
|
sql += " AND ATIVO=@ATIVO";
|
|
cmd.Parameters.AddWithValue("@ATIVO", ativo.Value);
|
|
}
|
|
|
|
if (fabricacaoInicial.HasValue)
|
|
{
|
|
sql += " AND DATA_FABRICACAO>=@FAB_INI";
|
|
cmd.Parameters.AddWithValue("@FAB_INI", fabricacaoInicial.Value);
|
|
}
|
|
|
|
if (fabricacaoFinal.HasValue)
|
|
{
|
|
sql += " AND DATA_FABRICACAO<=@FAB_FIM";
|
|
cmd.Parameters.AddWithValue("@FAB_FIM", fabricacaoFinal.Value);
|
|
}
|
|
|
|
if (validadeInicial.HasValue)
|
|
{
|
|
sql += " AND DATA_VALIDADE>=@VAL_INI";
|
|
cmd.Parameters.AddWithValue("@VAL_INI", validadeInicial.Value);
|
|
}
|
|
|
|
if (validadeFinal.HasValue)
|
|
{
|
|
sql += " AND DATA_VALIDADE<=@VAL_FIM";
|
|
cmd.Parameters.AddWithValue("@VAL_FIM", validadeFinal.Value);
|
|
}
|
|
|
|
sql += " ORDER BY DATA_VALIDADE";
|
|
|
|
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<ModeloItensLotes> ListarPorProduto(string codigoProduto)
|
|
{
|
|
return Listar(codItem: codigoProduto);
|
|
}//ListarPorProduto
|
|
public List<ModeloItensLotes> ListarPorFornecedor(string fornecedor)
|
|
{
|
|
return Listar(fornecedor: fornecedor);
|
|
}//ListarPorFornecedor
|
|
public List<ModeloItensLotes> ListarPorNF(string numeroNF)
|
|
{
|
|
return Listar(numeroNF: numeroNF);
|
|
}//ListarPorNF
|
|
public List<ModeloItensLotes> ListarPorLote(string lote)
|
|
{
|
|
return Listar(lote: lote);
|
|
}//ListarPorLote
|
|
public List<ModeloItensLotes> ListarAtivos()
|
|
{
|
|
return Listar(ativo: true);
|
|
}//ListarAtivos
|
|
public List<ModeloItensLotes> ListarInativos()
|
|
{
|
|
return Listar(ativo: false);
|
|
}//ListarInativos
|
|
public List<ModeloItensLotes> ListarVencidos()
|
|
{
|
|
return Listar(
|
|
validadeFinal: DateTime.Today);
|
|
}//ListarVencidos
|
|
public List<ModeloItensLotes> ListarAVencer()
|
|
{
|
|
return Listar(
|
|
validadeInicial: DateTime.Today,
|
|
validadeFinal: DateTime.Today.AddDays(30));
|
|
}//ListarAVencer
|
|
public List<ModeloItensLotes> ListarPorPeriodoValidade(DateTime inicio,DateTime fim)
|
|
{
|
|
return Listar(
|
|
validadeInicial: inicio,
|
|
validadeFinal: fim);
|
|
}//ListarPorPeriodoValidade
|
|
public List<ModeloItensLotes> ListarPorPeriodoFabricacao(DateTime inicio,DateTime fim)
|
|
{
|
|
return Listar(
|
|
fabricacaoInicial: inicio,
|
|
fabricacaoFinal: fim);
|
|
}//ListarPorPeriodoFabricacao
|
|
|
|
#endregion
|
|
#region Controle de estoque - Stock control
|
|
public bool SomarQuantidade(int idLote, decimal quantidade)
|
|
{
|
|
using SqlConnection conn = new(connectionString);
|
|
|
|
string sql = @"
|
|
UPDATE Itens_Lotes
|
|
SET QUANTIDADE = QUANTIDADE + @QUANTIDADE,
|
|
DATA_ALTERACAO = GETDATE()
|
|
WHERE ID_ITEM_LOTE = @ID";
|
|
|
|
using SqlCommand cmd = new(sql, conn);
|
|
|
|
cmd.Parameters.AddWithValue("@QUANTIDADE", quantidade);
|
|
cmd.Parameters.AddWithValue("@ID", idLote);
|
|
|
|
conn.Open();
|
|
|
|
return cmd.ExecuteNonQuery() > 0;
|
|
}//SomarQuantidade
|
|
public bool BaixarQuantidade(int idLote, decimal quantidade)
|
|
{
|
|
using SqlConnection conn = new(connectionString);
|
|
|
|
string sql = @"
|
|
UPDATE Itens_Lotes
|
|
SET QUANTIDADE = QUANTIDADE - @QUANTIDADE,
|
|
DATA_ALTERACAO = GETDATE()
|
|
WHERE ID_ITEM_LOTE = @ID
|
|
AND QUANTIDADE >= @QUANTIDADE";
|
|
|
|
using SqlCommand cmd = new(sql, conn);
|
|
|
|
cmd.Parameters.AddWithValue("@QUANTIDADE", quantidade);
|
|
cmd.Parameters.AddWithValue("@ID", idLote);
|
|
|
|
conn.Open();
|
|
|
|
return cmd.ExecuteNonQuery() > 0;
|
|
}//BaixarQuantidade
|
|
public bool Entrada(int idLote, decimal quantidade)
|
|
{
|
|
return SomarQuantidade(idLote, quantidade);
|
|
}//Entrada
|
|
public bool Saida(int idLote, decimal quantidade)
|
|
{
|
|
return BaixarQuantidade(idLote, quantidade);
|
|
}//Saida
|
|
public bool AjustarQuantidade(int idLote, decimal novaQuantidade)
|
|
{
|
|
using SqlConnection conn = new(connectionString);
|
|
|
|
string sql = @"
|
|
UPDATE Itens_Lotes
|
|
SET QUANTIDADE = @QUANTIDADE,
|
|
DATA_ALTERACAO = GETDATE()
|
|
WHERE ID_ITEM_LOTE = @ID";
|
|
|
|
using SqlCommand cmd = new(sql, conn);
|
|
|
|
cmd.Parameters.AddWithValue("@QUANTIDADE", novaQuantidade);
|
|
cmd.Parameters.AddWithValue("@ID", idLote);
|
|
|
|
conn.Open();
|
|
|
|
return cmd.ExecuteNonQuery() > 0;
|
|
}//AjustarQuantidade
|
|
public bool ZerarLote(int idLote)
|
|
{
|
|
return AjustarQuantidade(idLote, 0);
|
|
}//ZerarLote
|
|
public bool ExisteSaldo(int idLote)
|
|
{
|
|
using SqlConnection conn = new(connectionString);
|
|
|
|
string sql = @"
|
|
SELECT COUNT(*)
|
|
FROM Itens_Lotes
|
|
WHERE ID_ITEM_LOTE = @ID
|
|
AND QUANTIDADE > 0";
|
|
|
|
using SqlCommand cmd = new(sql, conn);
|
|
|
|
cmd.Parameters.AddWithValue("@ID", idLote);
|
|
|
|
conn.Open();
|
|
|
|
return Convert.ToInt32(cmd.ExecuteScalar()) > 0;
|
|
}//ExisteSaldo
|
|
public decimal SaldoLote(int idLote)
|
|
{
|
|
using SqlConnection conn = new(connectionString);
|
|
|
|
string sql = @"
|
|
SELECT ISNULL(QUANTIDADE,0)
|
|
FROM Itens_Lotes
|
|
WHERE ID_ITEM_LOTE = @ID";
|
|
|
|
using SqlCommand cmd = new(sql, conn);
|
|
|
|
cmd.Parameters.AddWithValue("@ID", idLote);
|
|
|
|
conn.Open();
|
|
|
|
object valor = cmd.ExecuteScalar();
|
|
|
|
return valor != DBNull.Value
|
|
? Convert.ToDecimal(valor)
|
|
: 0;
|
|
}//SaldoLote
|
|
public decimal SaldoProduto(string codigoProduto)
|
|
{
|
|
using SqlConnection conn = new(connectionString);
|
|
|
|
string sql = @"
|
|
SELECT ISNULL(SUM(QUANTIDADE),0)
|
|
FROM Itens_Lotes
|
|
WHERE COD_ITEM = @COD_ITEM
|
|
AND ATIVO = 1";
|
|
|
|
using SqlCommand cmd = new(sql, conn);
|
|
|
|
cmd.Parameters.AddWithValue("@COD_ITEM", codigoProduto);
|
|
|
|
conn.Open();
|
|
|
|
object valor = cmd.ExecuteScalar();
|
|
|
|
return valor != DBNull.Value
|
|
? Convert.ToDecimal(valor)
|
|
: 0;
|
|
}//SaldoProduto
|
|
public bool TransferirQuantidade(int loteOrigem, int loteDestino, decimal quantidade)
|
|
{
|
|
using SqlConnection conn = new(connectionString);
|
|
|
|
conn.Open();
|
|
|
|
using SqlTransaction trans = conn.BeginTransaction();
|
|
|
|
try
|
|
{
|
|
SqlCommand cmd = new(@"
|
|
UPDATE Itens_Lotes
|
|
SET QUANTIDADE = QUANTIDADE - @QTD,
|
|
DATA_ALTERACAO = GETDATE()
|
|
WHERE ID_ITEM_LOTE = @ORIGEM
|
|
AND QUANTIDADE >= @QTD", conn, trans);
|
|
|
|
cmd.Parameters.AddWithValue("@QTD", quantidade);
|
|
cmd.Parameters.AddWithValue("@ORIGEM", loteOrigem);
|
|
|
|
if (cmd.ExecuteNonQuery() == 0)
|
|
{
|
|
trans.Rollback();
|
|
return false;
|
|
}
|
|
|
|
cmd = new SqlCommand(@"
|
|
UPDATE Itens_Lotes
|
|
SET QUANTIDADE = QUANTIDADE + @QTD,
|
|
DATA_ALTERACAO = GETDATE()
|
|
WHERE ID_ITEM_LOTE = @DESTINO", conn, trans);
|
|
|
|
cmd.Parameters.AddWithValue("@QTD", quantidade);
|
|
cmd.Parameters.AddWithValue("@DESTINO", loteDestino);
|
|
|
|
if (cmd.ExecuteNonQuery() == 0)
|
|
{
|
|
trans.Rollback();
|
|
return false;
|
|
}
|
|
|
|
trans.Commit();
|
|
return true;
|
|
}
|
|
catch
|
|
{
|
|
trans.Rollback();
|
|
throw;
|
|
}
|
|
}//TransferirQuantidade
|
|
|
|
#endregion
|
|
#region Controle de Validade - Validity Control
|
|
public List<ModeloItensLotes> LotesVencidos()
|
|
{
|
|
return Listar(
|
|
validadeFinal: DateTime.Today,
|
|
ativo: true);
|
|
}//LotesVencidos
|
|
public List<ModeloItensLotes> LotesAVencer(int dias = 30)
|
|
{
|
|
return Listar(
|
|
validadeInicial: DateTime.Today,
|
|
validadeFinal: DateTime.Today.AddDays(dias),
|
|
ativo: true);
|
|
}//LotesAVencer
|
|
public List<ModeloItensLotes> LotesValidos()
|
|
{
|
|
using SqlConnection conn = new(connectionString);
|
|
|
|
List<ModeloItensLotes> lista = [];
|
|
|
|
string sql = @"
|
|
SELECT *
|
|
FROM Itens_Lotes
|
|
WHERE DATA_VALIDADE >= @DATA
|
|
AND ATIVO = 1
|
|
ORDER BY DATA_VALIDADE";
|
|
|
|
using SqlCommand cmd = new(sql, conn);
|
|
|
|
cmd.Parameters.AddWithValue("@DATA", DateTime.Today);
|
|
|
|
conn.Open();
|
|
|
|
using SqlDataReader dr = cmd.ExecuteReader();
|
|
|
|
while (dr.Read())
|
|
lista.Add(PreencherModelo(dr));
|
|
|
|
return lista;
|
|
}//LotesValidos
|
|
public List<ModeloItensLotes> LotesSemValidade()
|
|
{
|
|
using SqlConnection conn = new(connectionString);
|
|
|
|
List<ModeloItensLotes> lista = [];
|
|
|
|
string sql = @"
|
|
SELECT *
|
|
FROM Itens_Lotes
|
|
WHERE DATA_VALIDADE IS NULL
|
|
ORDER BY CODIGO";
|
|
|
|
using SqlCommand cmd = new(sql, conn);
|
|
|
|
conn.Open();
|
|
|
|
using SqlDataReader dr = cmd.ExecuteReader();
|
|
|
|
while (dr.Read())
|
|
lista.Add(PreencherModelo(dr));
|
|
|
|
return lista;
|
|
}//LotesSemValidade
|
|
public int DiasParaVencer(int idLote)
|
|
{
|
|
ModeloItensLotes? lote = Carregar(idLote);
|
|
|
|
if (lote == null)
|
|
return -1;
|
|
|
|
if (!lote.DATA_VALIDADE.HasValue)
|
|
return int.MaxValue;
|
|
|
|
return (lote.DATA_VALIDADE.Value.Date - DateTime.Today).Days;
|
|
}//DiasParaVencer
|
|
public int DiasVencido(int idLote)
|
|
{
|
|
ModeloItensLotes? lote = Carregar(idLote);
|
|
|
|
if (lote == null)
|
|
return 0;
|
|
|
|
if (!lote.DATA_VALIDADE.HasValue)
|
|
return 0;
|
|
|
|
if (lote.DATA_VALIDADE.Value.Date >= DateTime.Today)
|
|
return 0;
|
|
|
|
return (DateTime.Today - lote.DATA_VALIDADE.Value.Date).Days;
|
|
}//DiasVencido
|
|
public DateTime? PrimeiroVencimento(string codigoProduto)
|
|
{
|
|
using SqlConnection conn = new(connectionString);
|
|
|
|
string sql = @"
|
|
SELECT MIN(DATA_VALIDADE)
|
|
FROM Itens_Lotes
|
|
WHERE COD_ITEM=@COD_ITEM
|
|
AND DATA_VALIDADE IS NOT NULL
|
|
AND ATIVO=1";
|
|
|
|
using SqlCommand cmd = new(sql, conn);
|
|
|
|
cmd.Parameters.AddWithValue("@COD_ITEM", codigoProduto);
|
|
|
|
conn.Open();
|
|
|
|
object valor = cmd.ExecuteScalar();
|
|
|
|
if (valor == DBNull.Value || valor == null)
|
|
return null;
|
|
|
|
return Convert.ToDateTime(valor);
|
|
}//PrimeiroVencimento
|
|
public DateTime? UltimoVencimento(string codigoProduto)
|
|
{
|
|
using SqlConnection conn = new(connectionString);
|
|
|
|
string sql = @"
|
|
SELECT MAX(DATA_VALIDADE)
|
|
FROM Itens_Lotes
|
|
WHERE COD_ITEM=@COD_ITEM
|
|
AND DATA_VALIDADE IS NOT NULL
|
|
AND ATIVO=1";
|
|
|
|
using SqlCommand cmd = new(sql, conn);
|
|
|
|
cmd.Parameters.AddWithValue("@COD_ITEM", codigoProduto);
|
|
|
|
conn.Open();
|
|
|
|
object valor = cmd.ExecuteScalar();
|
|
|
|
if (valor == DBNull.Value || valor == null)
|
|
return null;
|
|
|
|
return Convert.ToDateTime(valor);
|
|
}//UltimoVencimento
|
|
public bool ExisteLoteVencido(string codigoProduto)
|
|
{
|
|
using SqlConnection conn = new(connectionString);
|
|
|
|
string sql = @"
|
|
SELECT COUNT(*)
|
|
FROM Itens_Lotes
|
|
WHERE COD_ITEM=@COD_ITEM
|
|
AND DATA_VALIDADE < @HOJE
|
|
AND ATIVO=1";
|
|
|
|
using SqlCommand cmd = new(sql, conn);
|
|
|
|
cmd.Parameters.AddWithValue("@COD_ITEM", codigoProduto);
|
|
cmd.Parameters.AddWithValue("@HOJE", DateTime.Today);
|
|
|
|
conn.Open();
|
|
|
|
return Convert.ToInt32(cmd.ExecuteScalar()) > 0;
|
|
}//ExisteLoteVencido
|
|
public bool ExisteLoteAVencer(string codigoProduto, int dias = 30)
|
|
{
|
|
using SqlConnection conn = new(connectionString);
|
|
|
|
string sql = @"
|
|
SELECT COUNT(*)
|
|
FROM Itens_Lotes
|
|
WHERE COD_ITEM=@COD_ITEM
|
|
AND DATA_VALIDADE BETWEEN @HOJE AND @DATA
|
|
AND ATIVO=1";
|
|
|
|
using SqlCommand cmd = new(sql, conn);
|
|
|
|
cmd.Parameters.AddWithValue("@COD_ITEM", codigoProduto);
|
|
cmd.Parameters.AddWithValue("@HOJE", DateTime.Today);
|
|
cmd.Parameters.AddWithValue("@DATA", DateTime.Today.AddDays(dias));
|
|
|
|
conn.Open();
|
|
|
|
return Convert.ToInt32(cmd.ExecuteScalar()) > 0;
|
|
}//ExisteLoteAVencer
|
|
public decimal QuantidadeVencida(string codigoProduto)
|
|
{
|
|
using SqlConnection conn = new(connectionString);
|
|
|
|
string sql = @"
|
|
SELECT ISNULL(SUM(QUANTIDADE),0)
|
|
FROM Itens_Lotes
|
|
WHERE COD_ITEM=@COD_ITEM
|
|
AND DATA_VALIDADE < @HOJE
|
|
AND ATIVO=1";
|
|
|
|
using SqlCommand cmd = new(sql, conn);
|
|
|
|
cmd.Parameters.AddWithValue("@COD_ITEM", codigoProduto);
|
|
cmd.Parameters.AddWithValue("@HOJE", DateTime.Today);
|
|
|
|
conn.Open();
|
|
|
|
return Convert.ToDecimal(cmd.ExecuteScalar());
|
|
}//QuantidadeVencida
|
|
public decimal QuantidadeAVencer(string codigoProduto, int dias = 30)
|
|
{
|
|
using SqlConnection conn = new(connectionString);
|
|
|
|
string sql = @"
|
|
SELECT ISNULL(SUM(QUANTIDADE),0)
|
|
FROM Itens_Lotes
|
|
WHERE COD_ITEM=@COD_ITEM
|
|
AND DATA_VALIDADE BETWEEN @HOJE AND @DATA
|
|
AND ATIVO=1";
|
|
|
|
using SqlCommand cmd = new(sql, conn);
|
|
|
|
cmd.Parameters.AddWithValue("@COD_ITEM", codigoProduto);
|
|
cmd.Parameters.AddWithValue("@HOJE", DateTime.Today);
|
|
cmd.Parameters.AddWithValue("@DATA", DateTime.Today.AddDays(dias));
|
|
|
|
conn.Open();
|
|
|
|
return Convert.ToDecimal(cmd.ExecuteScalar());
|
|
}//QuantidadeAVencer
|
|
public decimal QuantidadeValida(string codigoProduto)
|
|
{
|
|
using SqlConnection conn = new(connectionString);
|
|
|
|
string sql = @"
|
|
SELECT ISNULL(SUM(QUANTIDADE),0)
|
|
FROM Itens_Lotes
|
|
WHERE COD_ITEM=@COD_ITEM
|
|
AND DATA_VALIDADE >= @HOJE
|
|
AND ATIVO=1";
|
|
|
|
using SqlCommand cmd = new(sql, conn);
|
|
|
|
cmd.Parameters.AddWithValue("@COD_ITEM", codigoProduto);
|
|
cmd.Parameters.AddWithValue("@HOJE", DateTime.Today);
|
|
|
|
conn.Open();
|
|
|
|
return Convert.ToDecimal(cmd.ExecuteScalar());
|
|
}//QuantidadeValida
|
|
|
|
#endregion
|
|
#region FEFO / FIFO - First Expired, First Out / First In, First Out
|
|
public ModeloItensLotes? ObterFEFO(string codigoProduto)
|
|
{
|
|
using SqlConnection conn = new(connectionString);
|
|
|
|
string sql = @"
|
|
SELECT TOP 1 *
|
|
FROM Itens_Lotes
|
|
WHERE COD_ITEM=@COD_ITEM
|
|
AND ATIVO=1
|
|
AND QUANTIDADE_DISPONIVEL>0
|
|
AND DATA_VALIDADE IS NOT NULL
|
|
ORDER BY DATA_VALIDADE ASC";
|
|
|
|
using SqlCommand cmd = new(sql, conn);
|
|
|
|
cmd.Parameters.AddWithValue("@COD_ITEM", codigoProduto);
|
|
|
|
conn.Open();
|
|
|
|
using SqlDataReader dr = cmd.ExecuteReader();
|
|
|
|
if (dr.Read())
|
|
return PreencherModelo(dr);
|
|
|
|
return null;
|
|
}//ObterFEFO
|
|
public ModeloItensLotes? ObterFIFO(string codigoProduto)
|
|
{
|
|
using SqlConnection conn = new(connectionString);
|
|
|
|
string sql = @"
|
|
SELECT TOP 1 *
|
|
FROM Itens_Lotes
|
|
WHERE COD_ITEM=@COD_ITEM
|
|
AND ATIVO=1
|
|
AND QUANTIDADE_DISPONIVEL>0
|
|
AND DATA_FABRICACAO IS NOT NULL
|
|
ORDER BY DATA_FABRICACAO ASC";
|
|
|
|
using SqlCommand cmd = new(sql, conn);
|
|
|
|
cmd.Parameters.AddWithValue("@COD_ITEM", codigoProduto);
|
|
|
|
conn.Open();
|
|
|
|
using SqlDataReader dr = cmd.ExecuteReader();
|
|
|
|
if (dr.Read())
|
|
return PreencherModelo(dr);
|
|
|
|
return null;
|
|
}//ObterFIFO
|
|
public decimal QuantidadeDisponivel(int idLote)
|
|
{
|
|
using SqlConnection conn = new(connectionString);
|
|
|
|
string sql = @"
|
|
SELECT QUANTIDADE_DISPONIVEL
|
|
FROM Itens_Lotes
|
|
WHERE ID_ITEM_LOTE=@ID";
|
|
|
|
using SqlCommand cmd = new(sql, conn);
|
|
|
|
cmd.Parameters.AddWithValue("@ID", idLote);
|
|
|
|
conn.Open();
|
|
|
|
object valor = cmd.ExecuteScalar();
|
|
|
|
return valor != DBNull.Value
|
|
? Convert.ToDecimal(valor)
|
|
: 0;
|
|
}//QuantidadeDisponivel
|
|
public decimal QuantidadeReservada(int idLote)
|
|
{
|
|
using SqlConnection conn = new(connectionString);
|
|
|
|
string sql = @"
|
|
SELECT QUANTIDADE_RESERVADA
|
|
FROM Itens_Lotes
|
|
WHERE ID_ITEM_LOTE=@ID";
|
|
|
|
using SqlCommand cmd = new(sql, conn);
|
|
|
|
cmd.Parameters.AddWithValue("@ID", idLote);
|
|
|
|
conn.Open();
|
|
|
|
object valor = cmd.ExecuteScalar();
|
|
|
|
return valor != DBNull.Value
|
|
? Convert.ToDecimal(valor)
|
|
: 0;
|
|
}//QuantidadeReservada
|
|
public bool ReservarLote(int idLote, decimal quantidade)
|
|
{
|
|
using SqlConnection conn = new(connectionString);
|
|
|
|
string sql = @"
|
|
UPDATE Itens_Lotes
|
|
SET QUANTIDADE_RESERVADA =
|
|
QUANTIDADE_RESERVADA + @QTD,
|
|
DATA_ALTERACAO = GETDATE()
|
|
WHERE ID_ITEM_LOTE=@ID
|
|
AND QUANTIDADE_DISPONIVEL>=@QTD";
|
|
|
|
using SqlCommand cmd = new(sql, conn);
|
|
|
|
cmd.Parameters.AddWithValue("@ID", idLote);
|
|
cmd.Parameters.AddWithValue("@QTD", quantidade);
|
|
|
|
conn.Open();
|
|
|
|
return cmd.ExecuteNonQuery() > 0;
|
|
}//ReservarLote
|
|
public bool LiberarLote(int idLote, decimal quantidade)
|
|
{
|
|
using SqlConnection conn = new(connectionString);
|
|
|
|
string sql = @"
|
|
UPDATE Itens_Lotes
|
|
SET QUANTIDADE_RESERVADA =
|
|
QUANTIDADE_RESERVADA - @QTD,
|
|
DATA_ALTERACAO = GETDATE()
|
|
WHERE ID_ITEM_LOTE=@ID
|
|
AND QUANTIDADE_RESERVADA>=@QTD";
|
|
|
|
using SqlCommand cmd = new(sql, conn);
|
|
|
|
cmd.Parameters.AddWithValue("@ID", idLote);
|
|
cmd.Parameters.AddWithValue("@QTD", quantidade);
|
|
|
|
conn.Open();
|
|
|
|
return cmd.ExecuteNonQuery() > 0;
|
|
}//LiberarLote
|
|
public bool ConsumirReserva(int idLote, decimal quantidade)
|
|
{
|
|
using SqlConnection conn = new(connectionString);
|
|
|
|
string sql = @"
|
|
UPDATE Itens_Lotes
|
|
SET QUANTIDADE = QUANTIDADE - @QTD,
|
|
QUANTIDADE_RESERVADA = QUANTIDADE_RESERVADA - @QTD,
|
|
DATA_ALTERACAO = GETDATE()
|
|
WHERE ID_ITEM_LOTE=@ID
|
|
AND QUANTIDADE_RESERVADA>=@QTD";
|
|
|
|
using SqlCommand cmd = new(sql, conn);
|
|
|
|
cmd.Parameters.AddWithValue("@ID", idLote);
|
|
cmd.Parameters.AddWithValue("@QTD", quantidade);
|
|
|
|
conn.Open();
|
|
|
|
return cmd.ExecuteNonQuery() > 0;
|
|
}//ConsumirReserva
|
|
public bool PodeAtenderVenda(int idLote, decimal quantidade)
|
|
{
|
|
return QuantidadeDisponivel(idLote) >= quantidade;
|
|
}//PodeAtenderVenda
|
|
public ModeloItensLotes? MelhorLote(string codigoProduto)
|
|
{
|
|
return ObterFEFO(codigoProduto);
|
|
}//MelhorLote
|
|
|
|
#endregion
|
|
#region Indicadores - Indicators
|
|
public int QuantidadeLotes()
|
|
{
|
|
using (SqlConnection conexao = new SqlConnection(DadosDaConexao.ObjetoStringConexao))
|
|
{
|
|
conexao.Open();
|
|
|
|
SqlCommand cmd = new SqlCommand(
|
|
"SELECT COUNT(*) FROM Itens_Lotes", conexao);
|
|
|
|
return Convert.ToInt32(cmd.ExecuteScalar());
|
|
}
|
|
}//QuantidadeLotes
|
|
public int QuantidadeProdutos()
|
|
{
|
|
using (SqlConnection conexao = new SqlConnection(DadosDaConexao.ObjetoStringConexao))
|
|
{
|
|
conexao.Open();
|
|
|
|
SqlCommand cmd = new SqlCommand(
|
|
@"SELECT COUNT(DISTINCT COD_ITEM)
|
|
FROM Itens_Lotes", conexao);
|
|
|
|
return Convert.ToInt32(cmd.ExecuteScalar());
|
|
}
|
|
}//QuantidadeProdutos
|
|
public int QuantidadeLotesAtivos()
|
|
{
|
|
using (SqlConnection conexao = new SqlConnection(DadosDaConexao.ObjetoStringConexao))
|
|
{
|
|
conexao.Open();
|
|
|
|
SqlCommand cmd = new SqlCommand(
|
|
@"SELECT COUNT(*)
|
|
FROM Itens_Lotes
|
|
WHERE ATIVO=1", conexao);
|
|
|
|
return Convert.ToInt32(cmd.ExecuteScalar());
|
|
}
|
|
}//QuantidadeLotesAtivos
|
|
public int QuantidadeLotesInativos()
|
|
{
|
|
using (SqlConnection conexao = new SqlConnection(DadosDaConexao.ObjetoStringConexao))
|
|
{
|
|
conexao.Open();
|
|
|
|
SqlCommand cmd = new SqlCommand(
|
|
@"SELECT COUNT(*)
|
|
FROM Itens_Lotes
|
|
WHERE ATIVO=0", conexao);
|
|
|
|
return Convert.ToInt32(cmd.ExecuteScalar());
|
|
}
|
|
}//QuantidadeLotesInativos
|
|
public int QuantidadeVencidos()
|
|
{
|
|
using (SqlConnection conexao = new SqlConnection(DadosDaConexao.ObjetoStringConexao))
|
|
{
|
|
conexao.Open();
|
|
|
|
SqlCommand cmd = new SqlCommand(
|
|
@"SELECT COUNT(*)
|
|
FROM Itens_Lotes
|
|
WHERE DATA_VALIDADE < GETDATE()
|
|
AND ATIVO=1", conexao);
|
|
|
|
return Convert.ToInt32(cmd.ExecuteScalar());
|
|
}
|
|
}//QuantidadeVencidos
|
|
public int QuantidadeAVencer(int dias)
|
|
{
|
|
using (SqlConnection conexao = new SqlConnection(DadosDaConexao.ObjetoStringConexao))
|
|
{
|
|
conexao.Open();
|
|
|
|
SqlCommand cmd = new SqlCommand(
|
|
@"SELECT COUNT(*)
|
|
FROM Itens_Lotes
|
|
WHERE DATA_VALIDADE
|
|
BETWEEN GETDATE() AND DATEADD(DAY,@DIAS,GETDATE())
|
|
AND ATIVO=1", conexao);
|
|
|
|
cmd.Parameters.AddWithValue("@DIAS", dias);
|
|
|
|
return Convert.ToInt32(cmd.ExecuteScalar());
|
|
}
|
|
}//QuantidadeAVencer
|
|
public int QuantidadeSemValidade()
|
|
{
|
|
using (SqlConnection conexao = new SqlConnection(DadosDaConexao.ObjetoStringConexao))
|
|
{
|
|
conexao.Open();
|
|
|
|
SqlCommand cmd = new SqlCommand(
|
|
@"SELECT COUNT(*)
|
|
FROM Itens_Lotes
|
|
WHERE DATA_VALIDADE IS NULL", conexao);
|
|
|
|
return Convert.ToInt32(cmd.ExecuteScalar());
|
|
}
|
|
}//QuantidadeSemValidade
|
|
public decimal QuantidadeTotalEstoque()
|
|
{
|
|
using (SqlConnection conexao = new SqlConnection(DadosDaConexao.ObjetoStringConexao))
|
|
{
|
|
conexao.Open();
|
|
|
|
SqlCommand cmd = new SqlCommand(
|
|
@"SELECT ISNULL(SUM(QUANTIDADE),0)
|
|
FROM Itens_Lotes
|
|
WHERE ATIVO=1", conexao);
|
|
|
|
return Convert.ToDecimal(cmd.ExecuteScalar());
|
|
}
|
|
}//QuantidadeTotalEstoque
|
|
public decimal QuantidadeDisponivelEstoque()
|
|
{
|
|
using (SqlConnection conexao = new SqlConnection(DadosDaConexao.ObjetoStringConexao))
|
|
{
|
|
conexao.Open();
|
|
|
|
SqlCommand cmd = new SqlCommand(
|
|
@"SELECT ISNULL(SUM(QUANTIDADE_DISPONIVEL),0)
|
|
FROM Itens_Lotes
|
|
WHERE ATIVO=1", conexao);
|
|
|
|
return Convert.ToDecimal(cmd.ExecuteScalar());
|
|
}
|
|
}//QuantidadeDisponivelEstoque
|
|
public decimal QuantidadeReservadaEstoque()
|
|
{
|
|
using (SqlConnection conexao = new SqlConnection(DadosDaConexao.ObjetoStringConexao))
|
|
{
|
|
conexao.Open();
|
|
|
|
SqlCommand cmd = new SqlCommand(
|
|
@"SELECT ISNULL(SUM(QUANTIDADE_RESERVADA),0)
|
|
FROM Itens_Lotes
|
|
WHERE ATIVO=1", conexao);
|
|
|
|
return Convert.ToDecimal(cmd.ExecuteScalar());
|
|
}
|
|
}//QuantidadeReservadaEstoque
|
|
public decimal MaiorQuantidade()
|
|
{
|
|
using (SqlConnection conexao = new SqlConnection(DadosDaConexao.ObjetoStringConexao))
|
|
{
|
|
conexao.Open();
|
|
|
|
SqlCommand cmd = new SqlCommand(
|
|
@"SELECT ISNULL(MAX(QUANTIDADE),0)
|
|
FROM Itens_Lotes", conexao);
|
|
|
|
return Convert.ToDecimal(cmd.ExecuteScalar());
|
|
}
|
|
}//MaiorQuantidade
|
|
public decimal MenorQuantidade()
|
|
{
|
|
using (SqlConnection conexao = new SqlConnection(DadosDaConexao.ObjetoStringConexao))
|
|
{
|
|
conexao.Open();
|
|
|
|
SqlCommand cmd = new SqlCommand(
|
|
@"SELECT ISNULL(MIN(QUANTIDADE),0)
|
|
FROM Itens_Lotes
|
|
WHERE QUANTIDADE>0", conexao);
|
|
|
|
return Convert.ToDecimal(cmd.ExecuteScalar());
|
|
}
|
|
}//MenorQuantidade
|
|
|
|
#endregion
|
|
#region Estatísticas - Statisticss
|
|
|
|
public string ProdutoComMaisLotes()
|
|
{
|
|
using (SqlConnection conexao = new SqlConnection(DadosDaConexao.ObjetoStringConexao))
|
|
{
|
|
conexao.Open();
|
|
|
|
SqlCommand cmd = new SqlCommand(@"
|
|
SELECT TOP 1 COD_ITEM
|
|
FROM Itens_Lotes
|
|
GROUP BY COD_ITEM
|
|
ORDER BY COUNT(*) DESC", conexao);
|
|
|
|
object obj = cmd.ExecuteScalar();
|
|
|
|
//return obj == null ? "" : obj.ToString();
|
|
return Convert.ToString(obj) ?? string.Empty;
|
|
}
|
|
}//ProdutoComMaisLotes
|
|
public string ProdutoComMenosLotes()
|
|
{
|
|
using (SqlConnection conexao = new SqlConnection(DadosDaConexao.ObjetoStringConexao))
|
|
{
|
|
conexao.Open();
|
|
|
|
SqlCommand cmd = new SqlCommand(@"
|
|
SELECT TOP 1 COD_ITEM
|
|
FROM Itens_Lotes
|
|
GROUP BY COD_ITEM
|
|
ORDER BY COUNT(*) ASC", conexao);
|
|
|
|
object obj = cmd.ExecuteScalar();
|
|
|
|
return Convert.ToString(obj) ?? string.Empty;
|
|
}
|
|
}//ProdutoComMenosLotes
|
|
public string FornecedorComMaisLotes()
|
|
{
|
|
using (SqlConnection conexao = new SqlConnection(DadosDaConexao.ObjetoStringConexao))
|
|
{
|
|
conexao.Open();
|
|
|
|
SqlCommand cmd = new SqlCommand(@"
|
|
SELECT TOP 1 FORNECEDOR
|
|
FROM Itens_Lotes
|
|
WHERE FORNECEDOR<>''
|
|
GROUP BY FORNECEDOR
|
|
ORDER BY COUNT(*) DESC", conexao);
|
|
|
|
object obj = cmd.ExecuteScalar();
|
|
|
|
return Convert.ToString(obj) ?? string.Empty;
|
|
}
|
|
}//FornecedorComMaisLotes
|
|
public string FornecedorComMenosLotes()
|
|
{
|
|
using (SqlConnection conexao = new SqlConnection(DadosDaConexao.ObjetoStringConexao))
|
|
{
|
|
conexao.Open();
|
|
|
|
SqlCommand cmd = new SqlCommand(@"
|
|
SELECT TOP 1 FORNECEDOR
|
|
FROM Itens_Lotes
|
|
WHERE FORNECEDOR<>''
|
|
GROUP BY FORNECEDOR
|
|
ORDER BY COUNT(*) ASC", conexao);
|
|
|
|
object obj = cmd.ExecuteScalar();
|
|
|
|
return Convert.ToString(obj) ?? string.Empty;
|
|
}
|
|
}//FornecedorComMenosLotes
|
|
public decimal MediaQuantidadeLote()
|
|
{
|
|
using (SqlConnection conexao = new SqlConnection(DadosDaConexao.ObjetoStringConexao))
|
|
{
|
|
conexao.Open();
|
|
|
|
SqlCommand cmd = new SqlCommand(@"
|
|
SELECT ISNULL(AVG(QUANTIDADE),0)
|
|
FROM Itens_Lotes", conexao);
|
|
|
|
return Convert.ToDecimal(cmd.ExecuteScalar());
|
|
}
|
|
}//MediaQuantidadeLote
|
|
public double MediaDiasValidade()
|
|
{
|
|
using (SqlConnection conexao = new SqlConnection(DadosDaConexao.ObjetoStringConexao ))
|
|
{
|
|
conexao.Open();
|
|
|
|
SqlCommand cmd = new SqlCommand(@"
|
|
SELECT ISNULL(AVG(DATEDIFF(DAY,GETDATE(),DATA_VALIDADE)),0)
|
|
FROM Itens_Lotes
|
|
WHERE DATA_VALIDADE IS NOT NULL", conexao);
|
|
|
|
return Convert.ToDouble(cmd.ExecuteScalar());
|
|
}
|
|
}//MediaDiasValidade
|
|
public int ProdutosSemLote()
|
|
{
|
|
using (SqlConnection conexao = new SqlConnection(DadosDaConexao.ObjetoStringConexao))
|
|
{
|
|
conexao.Open();
|
|
|
|
SqlCommand cmd = new SqlCommand(@"
|
|
SELECT COUNT(*)
|
|
FROM Itens
|
|
WHERE CODIGO NOT IN
|
|
(
|
|
SELECT DISTINCT COD_ITEM
|
|
FROM Itens_Lotes
|
|
)", conexao);
|
|
|
|
return Convert.ToInt32(cmd.ExecuteScalar());
|
|
}
|
|
}//ProdutosSemLote
|
|
public int LotesSemMovimento()
|
|
{
|
|
using (SqlConnection conexao = new SqlConnection(DadosDaConexao.ObjetoStringConexao))
|
|
{
|
|
conexao.Open();
|
|
|
|
SqlCommand cmd = new SqlCommand(@"
|
|
SELECT COUNT(*)
|
|
FROM Itens_Lotes
|
|
WHERE DATA_ALTERACAO IS NULL", conexao);
|
|
|
|
return Convert.ToInt32(cmd.ExecuteScalar());
|
|
}
|
|
}//LotesSemMovimento
|
|
public int LotesComEstoqueZero()
|
|
{
|
|
using (SqlConnection conexao = new SqlConnection(DadosDaConexao.ObjetoStringConexao))
|
|
{
|
|
conexao.Open();
|
|
|
|
SqlCommand cmd = new SqlCommand(@"
|
|
SELECT COUNT(*)
|
|
FROM Itens_Lotes
|
|
WHERE QUANTIDADE<=0", conexao);
|
|
|
|
return Convert.ToInt32(cmd.ExecuteScalar());
|
|
}
|
|
}//LotesComEstoqueZero
|
|
public int LotesComEstoquePositivo()
|
|
{
|
|
using (SqlConnection conexao = new SqlConnection(DadosDaConexao.ObjetoStringConexao))
|
|
{
|
|
conexao.Open();
|
|
|
|
SqlCommand cmd = new SqlCommand(@"
|
|
SELECT COUNT(*)
|
|
FROM Itens_Lotes
|
|
WHERE QUANTIDADE>0", conexao);
|
|
|
|
return Convert.ToInt32(cmd.ExecuteScalar());
|
|
}
|
|
}//LotesComEstoquePositivo
|
|
public decimal QuantidadeMediaPorProduto()
|
|
{
|
|
using (SqlConnection conexao = new SqlConnection(DadosDaConexao.ObjetoStringConexao))
|
|
{
|
|
conexao.Open();
|
|
|
|
SqlCommand cmd = new SqlCommand(@"
|
|
SELECT ISNULL(AVG(Total),0)
|
|
FROM
|
|
(
|
|
SELECT SUM(QUANTIDADE) Total
|
|
FROM Itens_Lotes
|
|
GROUP BY COD_ITEM
|
|
) X", conexao);
|
|
|
|
return Convert.ToDecimal(cmd.ExecuteScalar());
|
|
}
|
|
}//QuantidadeMediaPorProduto
|
|
public int QuantidadeProdutosComMaisDeUmLote()
|
|
{
|
|
using (SqlConnection conexao = new SqlConnection(DadosDaConexao.ObjetoStringConexao))
|
|
{
|
|
conexao.Open();
|
|
|
|
SqlCommand cmd = new SqlCommand(@"
|
|
SELECT COUNT(*)
|
|
FROM
|
|
(
|
|
SELECT COD_ITEM
|
|
FROM Itens_Lotes
|
|
GROUP BY COD_ITEM
|
|
HAVING COUNT(*)>1
|
|
) X", conexao);
|
|
|
|
return Convert.ToInt32(cmd.ExecuteScalar());
|
|
}
|
|
}//QuantidadeProdutosComMaisDeUmLote
|
|
|
|
#endregion
|
|
#region Relatórios - Reports
|
|
|
|
public DataTable ListarTodos()
|
|
{
|
|
DataTable tabela = new DataTable();
|
|
|
|
using (SqlConnection conexao = new SqlConnection(DadosDaConexao.ObjetoStringConexao))
|
|
{
|
|
conexao.Open();
|
|
|
|
SqlDataAdapter da = new SqlDataAdapter(@"
|
|
SELECT *
|
|
FROM Itens_Lotes
|
|
ORDER BY COD_ITEM, DATA_VALIDADE", conexao);
|
|
|
|
da.Fill(tabela);
|
|
}
|
|
|
|
return tabela;
|
|
}//ListarTodos
|
|
public DataTable ListarPorProduto(string codItem)
|
|
{
|
|
DataTable tabela = new DataTable();
|
|
|
|
using (SqlConnection conexao = new SqlConnection(connectionString))
|
|
{
|
|
conexao.Open();
|
|
|
|
SqlDataAdapter da = new SqlDataAdapter(@"
|
|
SELECT *
|
|
FROM Itens_Lotes
|
|
WHERE COD_ITEM=@COD_ITEM
|
|
ORDER BY DATA_VALIDADE", conexao);
|
|
|
|
da.SelectCommand.Parameters.AddWithValue("@COD_ITEM", codItem);
|
|
|
|
da.Fill(tabela);
|
|
}
|
|
|
|
return tabela;
|
|
}
|
|
|
|
public DataTable ListarPorFornecedor(string fornecedor)
|
|
{
|
|
DataTable tabela = new DataTable();
|
|
|
|
using (SqlConnection conexao = new SqlConnection(DadosDaConexao.StringDeConexao))
|
|
{
|
|
conexao.Open();
|
|
|
|
SqlDataAdapter da = new SqlDataAdapter(@"
|
|
SELECT *
|
|
FROM Itens_Lotes
|
|
WHERE FORNECEDOR=@FORNECEDOR
|
|
ORDER BY COD_ITEM", conexao);
|
|
|
|
da.SelectCommand.Parameters.AddWithValue("@FORNECEDOR", fornecedor);
|
|
|
|
da.Fill(tabela);
|
|
}
|
|
|
|
return tabela;
|
|
}
|
|
|
|
public DataTable ListarVencidos()
|
|
{
|
|
DataTable tabela = new DataTable();
|
|
|
|
using (SqlConnection conexao = new SqlConnection(DadosDaConexao.StringDeConexao))
|
|
{
|
|
conexao.Open();
|
|
|
|
SqlDataAdapter da = new SqlDataAdapter(@"
|
|
SELECT *
|
|
FROM Itens_Lotes
|
|
WHERE DATA_VALIDADE<GETDATE()
|
|
AND ATIVO=1
|
|
ORDER BY DATA_VALIDADE", conexao);
|
|
|
|
da.Fill(tabela);
|
|
}
|
|
|
|
return tabela;
|
|
}
|
|
|
|
public DataTable ListarAVencer(int dias)
|
|
{
|
|
DataTable tabela = new DataTable();
|
|
|
|
using (SqlConnection conexao = new SqlConnection(DadosDaConexao.StringDeConexao))
|
|
{
|
|
conexao.Open();
|
|
|
|
SqlDataAdapter da = new SqlDataAdapter(@"
|
|
SELECT *
|
|
FROM Itens_Lotes
|
|
WHERE DATA_VALIDADE BETWEEN GETDATE() AND DATEADD(DAY,@DIAS,GETDATE())
|
|
AND ATIVO=1
|
|
ORDER BY DATA_VALIDADE", conexao);
|
|
|
|
da.SelectCommand.Parameters.AddWithValue("@DIAS", dias);
|
|
|
|
da.Fill(tabela);
|
|
}
|
|
|
|
return tabela;
|
|
}
|
|
|
|
public DataTable ListarSemValidade()
|
|
{
|
|
DataTable tabela = new DataTable();
|
|
|
|
using (SqlConnection conexao = new SqlConnection(DadosDaConexao.StringDeConexao))
|
|
{
|
|
conexao.Open();
|
|
|
|
SqlDataAdapter da = new SqlDataAdapter(@"
|
|
SELECT *
|
|
FROM Itens_Lotes
|
|
WHERE DATA_VALIDADE IS NULL", conexao);
|
|
|
|
da.Fill(tabela);
|
|
}
|
|
|
|
return tabela;
|
|
}
|
|
|
|
public DataTable ListarEstoqueZero()
|
|
{
|
|
DataTable tabela = new DataTable();
|
|
|
|
using (SqlConnection conexao = new SqlConnection(DadosDaConexao.StringDeConexao))
|
|
{
|
|
conexao.Open();
|
|
|
|
SqlDataAdapter da = new SqlDataAdapter(@"
|
|
SELECT *
|
|
FROM Itens_Lotes
|
|
WHERE QUANTIDADE<=0
|
|
ORDER BY COD_ITEM", conexao);
|
|
|
|
da.Fill(tabela);
|
|
}
|
|
|
|
return tabela;
|
|
}
|
|
|
|
public DataTable ListarAtivos()
|
|
{
|
|
DataTable tabela = new DataTable();
|
|
|
|
using (SqlConnection conexao = new SqlConnection(DadosDaConexao.StringDeConexao))
|
|
{
|
|
conexao.Open();
|
|
|
|
SqlDataAdapter da = new SqlDataAdapter(@"
|
|
SELECT *
|
|
FROM Itens_Lotes
|
|
WHERE ATIVO=1
|
|
ORDER BY COD_ITEM", conexao);
|
|
|
|
da.Fill(tabela);
|
|
}
|
|
|
|
return tabela;
|
|
}
|
|
|
|
public DataTable ListarInativos()
|
|
{
|
|
DataTable tabela = new DataTable();
|
|
|
|
using (SqlConnection conexao = new SqlConnection(DadosDaConexao.StringDeConexao))
|
|
{
|
|
conexao.Open();
|
|
|
|
SqlDataAdapter da = new SqlDataAdapter(@"
|
|
SELECT *
|
|
FROM Itens_Lotes
|
|
WHERE ATIVO=0
|
|
ORDER BY COD_ITEM", conexao);
|
|
|
|
da.Fill(tabela);
|
|
}
|
|
|
|
return tabela;
|
|
}
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
//Parte 8.1 -> Concluida
|
|
//Parte 8.2 -> Concluida
|
|
//Parte 8.3 -> Concluida
|
|
//Parte 8.4 -> Concluida
|
|
//Parte 8.5 -> Concluida
|
|
//Parte 8.6 -> Concluida
|
|
//Parte 8.7 -> Concluida
|
|
//Parte 8.8
|
|
//Parte 8.9
|
|
//Parte 8.10
|
|
}
|
|
}
|