/// <summary> /// Atualizar Situação Produtos para Compra /// </summary> /// <returns></returns> public void AtualizarSituacaoEstoqueProdutos() { const int NUMERO_MESES_ANALISAR = 3; AtualizarSituacaoProdutosComprados(NUMERO_MESES_ANALISAR); List <ProdutoVendido> listaProdutosVendidos = ObterProdutosVendidosUltimosMeses(NUMERO_MESES_ANALISAR); List <ProdutoLoja> listaProdutoLoja = GerenciadorProdutoLoja.GetInstance(null).ObterTodos(); var query = from produto in saceContext.ProdutoSet where produto.codSituacaoProduto != SituacaoProduto.NAO_COMPRAR select produto; foreach (ProdutoE produtoE in query) { ProdutoVendido produtoVendido = listaProdutosVendidos.Where(pv => pv.CodProduto == produtoE.codProduto).FirstOrDefault(); decimal estoqueAtual = listaProdutoLoja.Where(pl => pl.CodProduto == produtoE.codProduto).Sum(p => p.QtdEstoque + p.QtdEstoqueAux); // necessário deixar os itens como disponível antes da análise por conta das mudanças no estoque if (produtoE.codSituacaoProduto != SituacaoProduto.COMPRADO) { produtoE.codSituacaoProduto = SituacaoProduto.DISPONIVEL; } if (produtoVendido != null) { if (estoqueAtual <= produtoVendido.QuantidadeVendida) { if ((produtoE.codSituacaoProduto != SituacaoProduto.NAO_COMPRAR) && (produtoE.codSituacaoProduto != SituacaoProduto.COMPRADO)) { if (estoqueAtual <= (produtoVendido.QuantidadeVendida / 2)) { produtoE.codSituacaoProduto = SituacaoProduto.COMPRA_URGENTE; } else { produtoE.codSituacaoProduto = SituacaoProduto.COMPRA_NECESSARIA; } produtoE.dataSolicitacaoCompra = DateTime.Now; } } } else { if (estoqueAtual <= 0) { if ((produtoE.codSituacaoProduto != SituacaoProduto.NAO_COMPRAR) && (produtoE.codSituacaoProduto != SituacaoProduto.COMPRADO)) { produtoE.codSituacaoProduto = SituacaoProduto.COMPRA_URGENTE; produtoE.dataSolicitacaoCompra = DateTime.Now; } } } } saceContext.SaveChanges(); }
public static GerenciadorProdutoLoja GetInstance(SaceEntities context) { if (gProdutoLoja == null) { gProdutoLoja = new GerenciadorProdutoLoja(); } if (context == null) { repProdutoLoja = new RepositorioGenerico <ProdutoLojaE>(); } else { repProdutoLoja = new RepositorioGenerico <ProdutoLojaE>(context); } saceContext = (SaceEntities)repProdutoLoja.ObterContexto(); return(gProdutoLoja); }
/// <summary> /// REmove um produto de uma entrada /// </summary> /// <param name="codEntradaProduto"></param> public void Remover(EntradaProduto entradaProduto, int codTipoEntrada) { try { repEntradaProduto.Remover(ep => ep.codEntradaProduto == entradaProduto.CodEntradaProduto); repEntradaProduto.SaveChanges(); // Decrementa o estoque na loja principal GerenciadorProdutoLoja.GetInstance(saceContext).AdicionaQuantidade((entradaProduto.Quantidade * entradaProduto.QuantidadeEmbalagem * (-1)), 0, Global.LOJA_PADRAO, entradaProduto.CodProduto); } catch (Exception e) { throw new DadosException("EntradaProduto", e.Message, e); } finally { saceContext.Connection.Close(); } }
/// <summary> /// Insere um novo produto na base de dados /// </summary> /// <param name="produto"></param> /// <returns></returns> public Int64 Inserir(Produto produto) { try { if (produto.Nome.Trim().Equals("")) { throw new NegocioException("O nome do produto não pode ficar em branco."); } else if (produto.QuantidadeEmbalagem <= 0) { throw new NegocioException("A quantidade de produtos na embalagem deve ser maior que zero."); } else if (!produto.CodigoBarra.Trim().Equals("") && !produto.CodigoBarra.Trim().Equals("SEM GTIN")) { if (ObterPorCodigoBarraExato(produto.CodigoBarra).Count() > 0) { throw new NegocioException("Já existe um produto cadastrado com esse código de barra. Favor verificar a possibilidade de ser o mesmo produto."); } } ProdutoE _produtoE = new ProdutoE(); Atribuir(produto, _produtoE); var repProduto = new RepositorioGenerico <ProdutoE>(); repProduto.Inserir(_produtoE); repProduto.SaveChanges(); ProdutoLoja produtoLoja = new ProdutoLoja(); produtoLoja.CodProduto = _produtoE.codProduto; produtoLoja.CodLoja = Global.LOJA_PADRAO; produtoLoja.QtdEstoque = 0; produtoLoja.QtdEstoqueAux = 0; GerenciadorProdutoLoja.GetInstance(null).Inserir(produtoLoja); return(_produtoE.codProduto); } catch (Exception e) { throw new DadosException("Produto", e.Message, e); } }
/// <summary> /// Insere uma novo produto na entrada public Int64 Inserir(EntradaProduto entradaProduto, int codTipoEntrada) { if (entradaProduto.Quantidade == 0) { throw new NegocioException("A quantidade do produto não pode ser igual a zero."); } else if (entradaProduto.PrecoVendaVarejo <= 0) { throw new NegocioException("O preço de venda deve ser maior que zero."); } else if (entradaProduto.QuantidadeEmbalagem <= 0) { throw new NegocioException("A quantidade de produtos em cada embalagem deve ser maior que zero."); } Produto produto = GerenciadorProduto.GetInstance().Obter(new ProdutoPesquisa() { CodProduto = entradaProduto.CodProduto }); Cst cstEntrada = new Cst() { CodCST = entradaProduto.CodCST }; bool ehTributacaoIntegral = cstEntrada.EhTributacaoIntegral; if (!produto.EhTributacaoIntegral && ehTributacaoIntegral) { throw new NegocioException("Esse produto não pode voltar a ser tributação Normal. Favor colocar CST com Substituição Tributária e CUIDADO no cálculo do preço. Verifique se o o DAE de encerramento de fase da nota já chegou."); } if (ehTributacaoIntegral && (entradaProduto.Icms <= 0)) { throw new NegocioException("O campo % CRED ICMS não pode ser menor ou igual a zero quando o produto possui tributação normal."); } else if ((ehTributacaoIntegral == false) && (entradaProduto.IcmsSubstituto <= 0) && (!entradaProduto.CodCST.Substring(1).Equals(Cst.ST_SUBSTITUICAO_ICMS_COBRADO)) && !cstEntrada.EhTributacaoSimples) { throw new NegocioException("O campo % ICMS ST não pode ser menor ou igual a zero quando o produto possui substituição tributária."); } //if (entradaProduto.CodCST.Length > 3) //{ // entradaProduto.CodCST = entradaProduto.CodCST.Substring(1); //} try { EntradaProdutoE _entradaProdutoE = new EntradaProdutoE(); Atribuir(entradaProduto, _entradaProdutoE); saceContext.AddToEntradaProdutoSet(_entradaProdutoE); saceContext.SaveChanges(); if ((codTipoEntrada == Entrada.TIPO_ENTRADA) || (codTipoEntrada == Entrada.TIPO_ENTRADA_AUX)) { // Incrementa o estoque na loja principal GerenciadorProdutoLoja.GetInstance(saceContext).AdicionaQuantidade((entradaProduto.Quantidade * entradaProduto.QuantidadeEmbalagem), 0, Global.LOJA_PADRAO, entradaProduto.CodProduto); Atribuir(entradaProduto, produto); produto.CodSituacaoProduto = SituacaoProduto.DISPONIVEL; produto.ExibeNaListagem = true; // Atualiza os dados do produto se não foi na entrada padrão if (entradaProduto.CodEntrada != Global.ENTRADA_PADRAO) { GerenciadorProduto.GetInstance().Atualizar(produto); } } return(_entradaProdutoE.codEntrada); } catch (Exception e) { throw new DadosException("EntradaProduto", e.Message, e); } }