/// <summary> /// Realiza o cadastro direto de um produto sem verificar se é um novo produto ou uma alteração de um existente /// </summary> /// <param name="p"></param> /// <returns></returns> public static bool Cadastrar(Produto p) { ctx.Produtos.Add(p); ctx.SaveChanges(); //Atualizando CapacidadeAtual LocalArmazenamento LocalArmazenamentoDao.AtualizarCapacidadeAtual(p.IdLocalArmazenamento, p.QuantEstoque, "Cadastrar"); return(true); }
/// <summary> /// Realiza a exclusão de um produto pelo id /// </summary> /// <param name="id"></param> /// <returns></returns> public static bool ExcluirPeloId(int id) { int idLocalReservado = 0; var ret = false; var existing = ctx.Produtos.Include("LocalArmazenamento").FirstOrDefault(x => x.Id == id); if (existing != null) { ctx.Entry(existing).State = EntityState.Detached; } try { existing = ctx.Produtos.Include("LocalArmazenamento").FirstOrDefault(x => x.Id == id); if (existing != null) { ctx.Entry(existing).State = EntityState.Detached; existing.LocalArmazenamento = ctx.LocaisArmazenamentos.Find(existing.IdLocalArmazenamento); existing.MarcaProduto = ctx.MarcasProdutos.Find(existing.IdMarca); existing.Fornecedor = ctx.Fornecedores.Find(existing.IdFornecedor); existing.GrupoProduto = ctx.GruposProdutos.Find(existing.IdGrupo); existing.UnidadeMedida = ctx.UnidadesMedida.Find(existing.IdUnidadeMedida); } idLocalReservado = existing.IdLocalArmazenamento; ctx.Produtos.Attach(existing); ctx.Entry(existing).State = EntityState.Deleted; ctx.SaveChanges(); ret = true; } catch (DbUpdateException) { ret = false; } catch (InvalidOperationException) { ret = false; } if (ret) { LocalArmazenamentoDao.AtualizarCapacidadeAtual(idLocalReservado, existing.QuantEstoque, "Remover"); } //Limpando qualquer Exception que tenha ficado gravado no Object do Entity //Se não limpar, caso ocorra uma excessão na exclusão, ele sempre vai ficar persistindo //o erro, mesmo que o proximo objeto esteja sem nenhum problema. ctx.DetachAllEntities(); return(ret); }
public static string SalvarPedido(DateTime data, Dictionary <int, int> produtos, string nomeTabela, bool entrada) { var ret = ""; int idLocalArmazenamento = 0; try { var numPedido = ""; var numPedidoCalculo = 0; if (nomeTabela.Equals("entrada_produto")) { EntradaProduto resultadoConsulta = null; var quantidadeEntradas = ctx.EntradasProdutos.Count(); if (quantidadeEntradas > 0) { resultadoConsulta = ctx.EntradasProdutos.OrderByDescending(x => x.Id).Take(1).Single(); numPedidoCalculo = (Convert.ToInt32(resultadoConsulta.Numero) + 1); numPedido = numPedidoCalculo.ToString(); } else { numPedido = Convert.ToString(1); } } else if (nomeTabela.Equals("saida_produto")) { SaidaProduto resultadoConsulta = null; var quantidadeSaidas = ctx.SaidasProdutos.Count(); if (quantidadeSaidas > 0) { resultadoConsulta = ctx.SaidasProdutos.OrderByDescending(x => x.Id).Take(1).Single(); numPedidoCalculo = (Convert.ToInt32(resultadoConsulta.Numero) + 1); numPedido = numPedidoCalculo.ToString(); } else { numPedido = Convert.ToString(1); } } using (var transacao = ctx.Database.BeginTransaction()) { foreach (var produto in produtos) { if (nomeTabela.Equals("entrada_produto")) { EntradaProduto ep = new EntradaProduto(); ep.Numero = numPedido; ep.Data = data; ep.IdProduto = produto.Key; ep.Quantidade = produto.Value; ctx.EntradasProdutos.Add(ep); Produto recuperado = ctx.Produtos.Find(produto.Key); var existingProduto = ctx.Produtos.Include("LocalArmazenamento").FirstOrDefault(x => x.Id == produto.Key); if (existingProduto != null) { ctx.Entry(existingProduto).State = EntityState.Detached; } idLocalArmazenamento = existingProduto.IdLocalArmazenamento; try { ctx.Produtos.Attach(recuperado); recuperado.QuantEstoque = recuperado.QuantEstoque + produto.Value; ctx.Entry(recuperado).State = EntityState.Modified; ctx.SaveChanges(); LocalArmazenamentoDao.AtualizarCapacidadeAtual(idLocalArmazenamento, produto.Value, "Cadastrar"); } catch (System.Exception ex) { throw; } } else if (nomeTabela.Equals("saida_produto")) { SaidaProduto ep = new SaidaProduto(); ep.Numero = numPedido; ep.Data = data; ep.IdProduto = produto.Key; ep.Quantidade = produto.Value; ctx.SaidasProdutos.Add(ep); Produto recuperado = ctx.Produtos.Find(produto.Key); var existingProduto = ctx.Produtos.Include("LocalArmazenamento").FirstOrDefault(x => x.Id == produto.Key); if (existingProduto != null) { ctx.Entry(existingProduto).State = EntityState.Detached; } idLocalArmazenamento = existingProduto.IdLocalArmazenamento; try { ctx.Produtos.Attach(recuperado); if ((recuperado.QuantEstoque - produto.Value) < 0) { recuperado.QuantEstoque = 0; } else { recuperado.QuantEstoque = recuperado.QuantEstoque - produto.Value; } ctx.Entry(recuperado).State = EntityState.Modified; ctx.SaveChanges(); LocalArmazenamentoDao.AtualizarCapacidadeAtual(idLocalArmazenamento, produto.Value, "Remover"); } catch (System.Exception ex) { throw; } } } transacao.Commit(); ret = numPedido; } } catch (Exception ex) { } return(ret); }