Beispiel #1
0
 public static GerenciadorEntradaProduto GetInstance(SaceEntities context)
 {
     if (gEntradaProduto == null)
     {
         gEntradaProduto = new GerenciadorEntradaProduto();
     }
     if (context == null)
     {
         repEntradaProduto = new RepositorioGenerico <EntradaProdutoE>();
     }
     else
     {
         repEntradaProduto = new RepositorioGenerico <EntradaProdutoE>(context);
     }
     saceContext = (SaceEntities)repEntradaProduto.ObterContexto();
     return(gEntradaProduto);
 }
Beispiel #2
0
        private void AtualizarEstoqueEntradasProduto(long codProduto)
        {
            IEnumerable <ProdutoLoja> listaProdutosLoja = ObterPorProduto(codProduto);


            decimal quantidadeEstoquePrincipalLojas = listaProdutosLoja.Sum(pl => pl.QtdEstoque);
            decimal quantidadeEstoqueAuxLojas       = listaProdutosLoja.Sum(pl => pl.QtdEstoqueAux);

            List <EntradaProduto> entradasProdutoPrincipal = (List <EntradaProduto>)GerenciadorEntradaProduto.GetInstance(saceContext).ObterPorProdutoTipoEntrada(codProduto, Entrada.TIPO_ENTRADA);
            List <EntradaProduto> entradasProdutoAuxiliar  = (List <EntradaProduto>)GerenciadorEntradaProduto.GetInstance(saceContext).ObterPorProdutoTipoEntrada(codProduto, Entrada.TIPO_ENTRADA_AUX);

            decimal quantidadeEstoquePrincipalEntradaProduto = entradasProdutoPrincipal.Sum(ep => ep.QuantidadeDisponivel);
            decimal quantidadeEstoqueAuxEntradaProduto       = entradasProdutoAuxiliar.Sum(ep => ep.QuantidadeDisponivel);

            // Atualiza as entradas principais com os valores do estoque totais dos produto / loja
            if (quantidadeEstoquePrincipalLojas != quantidadeEstoquePrincipalEntradaProduto)
            {
                for (int i = 0; (entradasProdutoPrincipal != null) && (i < entradasProdutoPrincipal.Count); i++)
                {
                    // Vai decremetar o contador até organizar a quantidade disponível dos lotes de entrada
                    if (quantidadeEstoquePrincipalLojas > 0)
                    {
                        if (entradasProdutoPrincipal[i].Quantidade < quantidadeEstoquePrincipalLojas)
                        {
                            entradasProdutoPrincipal[i].QuantidadeDisponivel = entradasProdutoPrincipal[i].Quantidade;
                            quantidadeEstoquePrincipalLojas -= entradasProdutoPrincipal[i].Quantidade;
                        }
                        else
                        {
                            entradasProdutoPrincipal[i].QuantidadeDisponivel = quantidadeEstoquePrincipalLojas;
                            quantidadeEstoquePrincipalLojas = 0;
                        }
                    }
                    else
                    {
                        entradasProdutoPrincipal[i].QuantidadeDisponivel = 0;
                    }
                    GerenciadorEntradaProduto.GetInstance(saceContext).Atualizar(entradasProdutoPrincipal[i]);
                }
            }


            // Atualiza as entradas auxiliares com os valores do estoque totais dos produto / loja
            if (quantidadeEstoqueAuxLojas != quantidadeEstoqueAuxEntradaProduto)
            {
                for (int i = 0; (entradasProdutoAuxiliar != null) && (i < entradasProdutoAuxiliar.Count); i++)
                {
                    // Vai decremetar o contador até organizar a quantidade disponível dos lotes de entrada
                    if (quantidadeEstoqueAuxLojas > 0)
                    {
                        if (entradasProdutoAuxiliar[i].Quantidade < quantidadeEstoqueAuxLojas)
                        {
                            entradasProdutoAuxiliar[i].QuantidadeDisponivel = entradasProdutoAuxiliar[i].Quantidade;
                            quantidadeEstoqueAuxLojas -= entradasProdutoAuxiliar[i].Quantidade;
                        }
                        else
                        {
                            entradasProdutoAuxiliar[i].QuantidadeDisponivel = quantidadeEstoqueAuxLojas;
                            quantidadeEstoqueAuxLojas = 0;
                        }
                    }
                    else
                    {
                        entradasProdutoAuxiliar[i].QuantidadeDisponivel = 0;
                    }
                    GerenciadorEntradaProduto.GetInstance(saceContext).Atualizar(entradasProdutoAuxiliar[i]);
                }
            }
        }
        public void AtualizarEstoqueEntradasProduto(long codProduto)
        {
            IEnumerable <ProdutoLoja> listaProdutosLoja = ObterPorProduto(codProduto);


            decimal quantidadeEstoquePrincipalLojas = listaProdutosLoja.Sum(pl => pl.QtdEstoque);
            decimal quantidadeEstoqueAuxLojas       = listaProdutosLoja.Sum(pl => pl.QtdEstoqueAux);

            List <EntradaProduto> entradasProdutoPrincipal = (List <EntradaProduto>)GerenciadorEntradaProduto.GetInstance(saceContext).ObterPorProdutoTipoEntrada(codProduto, Entrada.TIPO_ENTRADA);
            List <EntradaProduto> entradasProdutoAuxiliar  = (List <EntradaProduto>)GerenciadorEntradaProduto.GetInstance(saceContext).ObterPorProdutoTipoEntrada(codProduto, Entrada.TIPO_ENTRADA_AUX);

            decimal quantidadeEstoquePrincipalEntradaProduto = entradasProdutoPrincipal.Sum(ep => ep.QuantidadeDisponivel);
            decimal quantidadeEstoqueAuxEntradaProduto       = entradasProdutoAuxiliar.Sum(ep => ep.QuantidadeDisponivel);

            // Atualiza as entradas principais com os valores do estoque totais dos produto / loja
            if ((quantidadeEstoquePrincipalLojas > 0) && (quantidadeEstoquePrincipalLojas != quantidadeEstoquePrincipalEntradaProduto))
            {
                var repEntradaProduto = new RepositorioGenerico <EntradaProdutoE>();
                var saceEntities      = (SaceEntities)repEntradaProduto.ObterContexto();
                var query             = from entradaProdutoE in saceEntities.EntradaProdutoSet
                                        where entradaProdutoE.tb_entrada.codTipoEntrada == Entrada.TIPO_ENTRADA && entradaProdutoE.codProduto == codProduto
                                        orderby entradaProdutoE.codEntradaProduto
                                        select entradaProdutoE;

                List <EntradaProdutoE> entradasProdutoPrincipalE = query.ToList();
                int cont = entradasProdutoPrincipalE.Count;

                while (cont > 0)
                {
                    cont--;
                    if (entradasProdutoPrincipalE[cont].codProduto == 11002)
                    {
                        Console.Write("");
                    }

                    decimal quantidadeEntrada = (decimal)(entradasProdutoPrincipalE[cont].quantidade * entradasProdutoPrincipalE[cont].quantidadeEmbalagem);
                    if (quantidadeEntrada > quantidadeEstoquePrincipalLojas)
                    {
                        entradasProdutoPrincipalE[cont].quantidade_disponivel = quantidadeEstoquePrincipalLojas;
                        quantidadeEstoquePrincipalLojas = 0;
                    }
                    else
                    {
                        entradasProdutoPrincipalE[cont].quantidade_disponivel = quantidadeEntrada;
                        quantidadeEstoquePrincipalLojas -= quantidadeEntrada;
                    }
                }
                saceEntities.SaveChanges();
            }

            // Atualiza as entradas auxiliares com os valores do estoque totais dos produto / loja
            if (quantidadeEstoqueAuxLojas != quantidadeEstoqueAuxEntradaProduto)
            {
                entradasProdutoAuxiliar.OrderByDescending(ep => ep.DataEntrada);
                int cont = entradasProdutoAuxiliar.Count;
                while (cont > 0)
                {
                    cont--;
                    if (entradasProdutoAuxiliar[cont].Quantidade > quantidadeEstoqueAuxLojas)
                    {
                        entradasProdutoAuxiliar[cont].QuantidadeDisponivel = quantidadeEstoqueAuxLojas;
                        quantidadeEstoqueAuxLojas = 0;
                    }
                    else
                    {
                        entradasProdutoAuxiliar[cont].QuantidadeDisponivel = entradasProdutoAuxiliar[cont].Quantidade;
                        quantidadeEstoqueAuxLojas -= entradasProdutoAuxiliar[cont].Quantidade;
                    }
                    GerenciadorEntradaProduto.GetInstance(saceContext).Atualizar(entradasProdutoAuxiliar[cont]);
                }
            }
        }