Esempio n. 1
0
        /// <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();
        }
Esempio n. 2
0
 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);
 }
Esempio n. 3
0
        /// <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);
            }
        }
Esempio n. 5
0
        /// <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);
            }
        }