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); }
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]); } } }